- 博客(74)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 foc SVPWM 开发记录
摘要:QT开发的上位机通过USB接口实时监测FOC运行数据,SVPWM。支持马鞍波形两相输出,采用21bit绝对编码器获取原始机械/电角度数据。UV两相电流波形显示,W相电流遵循Iw=-Iu-Iv关系。在电流开环模式下,固定输出Vq=0.1、Vd=0时,IqId波形表现稳定。系统实现了高精度数据采集与实时波形监控功能。
2026-05-18 09:32:01
55
原创 总结foc 无感算法的区别 优缺点
电机无感控制算法比较分析 摘要:常见无感控制算法包括反电动势法、滑模观测器(SMO)、磁链观测器、龙伯格观测器和EKF,均基于电机模型u=RI+L(di/dt)+e。反电动势法简单易实现但低速性能差;SMO抗干扰强但存在抖振;磁链观测器平滑性好但存在积分漂移;龙伯格观测器理论清晰但调试复杂;EKF性能优越但计算量大。高频注入(HFI)可实现零速控制但算法复杂。选择时需权衡计算复杂度、低速性能、平滑性和MCU算力,不同场景适用不同算法。
2026-04-29 10:33:17
419
原创 替换atan2f的算法函数
文章摘要:本文介绍了一个替代arm_math.h中缺失的arm_atan2_f32函数的近似计算方法。作者实现了一个easy_actan2函数,通过多项式近似计算atan2值,并在单位圆上测试其精度。测试结果显示该方法的最大误差在可接受范围内(0.000001f),可作为标准库函数的替代方案。该实现考虑了各种边界情况(如分母为0等),并包含完整的测试代码来验证计算精度。
2026-04-15 10:01:46
755
原创 脉冲变压器的注意事项
频率影响:脉冲变压器的感抗随着频率的增加而增加。在1 kHz和10 kHz时,感抗的变化明显,影响电流的反应特性。感量与电压:变压器的感量在频率变化时通常保持不变,但电压的变化会影响所需的感抗和电流变化率。阻抗特性:在高频下,变压器的有效阻抗可能会减小,因核心损耗和寄生电容的影响。损耗与效率:高频操作可能导致磁滞和涡流损耗增加,因此在设计时需考虑材料选择和结构优化,以提高效率。应用考量:在高频应用中,确保变压器的稳定性和性能至关重要,设计应综合考虑电感、频率和负载特性。
2024-09-27 14:23:57
627
原创 BACnet-NPDU(4)
前面抓取了BACnet 的UDP和RS485数据进行分析,现在做一下总结。BACnet不管是走UDP还是RS485,里面的NPDU和APDU数据结构是一样的,只是BACnet的头不一样,这里做一下总结。
2024-09-27 11:58:07
1192
原创 BACnet MS/TP协议解析(3)
SA:分段消息接受(segmented-message-accepted)BOOLEAN,如果请求者接受分段 BACnet-Complex-ACK-PDU 作为响应,则为 TRUE,否则为 FALSE。不存在于未分段的请求中,只有当SEG=1,才会有这个值。否则为 FALSE。SEG:分段信息(segmented-message),如果这是一条分段消息,则为 TRUE,否则为 FALSE。SEG:分段信息(segmented-message),如果这是一条分段消息,则为 TRUE,否则为 FALSE。
2024-09-26 10:06:40
3654
原创 BACnet协议-(基于ISO 8802-3 UDP)(2)
请求,广播设备的存在以及一些关键信息,如设备的唯一对象标识符、最大支持的 APDU 长度、设备是否支持分段传输,以及设备的供应商信息。这些数据表明设备正在向网络中的其他设备声明其身份和能力,并不要求应答。这种消息通常用于初始发现或服务请求广播的场景。该 APDU 是一个未确认的。一个未确认的 Who。
2024-09-26 10:04:45
1860
原创 BACnet协议(1)
BACnet(Building Automation and Control Networks)是一种用于智能建筑的通信协议,它是由国际标准化组织(ISO)、美国国家标准协会(ANSI)和美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议。:BACnet用于控制和监测暖通空调系统的运行,调节温度、湿度、空气质量等,以优化能源使用和舒适度。:通过BACnet协议,可以远程管理和控制建筑内的照明系统,实现能效优化和自动化管理,例如根据时间或占用情况调节灯光。
2024-09-25 09:41:54
1292
原创 调试esp32-s3 LVGL遇到的坑
当lvgl的界面复杂之后,消耗的lvgl的内存变多了,导致遇到一直死机情况,打印监控发现总共内存才分配了32k,在lv_conf.h改了配置,是没用的。最后发现是在idf.py menuconfig 下发现,勾选了Uncheck this to use custom lv_conf.h。
2024-09-25 09:40:39
2243
原创 stm32 FOC系列 直流无刷6步换向控制原理
直流无刷电机 (Brushless Direct Current Motor,简称 BLDCM) , 其最大的特点就是取消了传统有刷电机中的电刷和换向器等结构。因此线圈绕组不参与旋转,而是作为定子,永磁体作为转子,所以需要通过控制线圈电流方向来改变磁场方向从而使转子持续旋转,同步进电机不同的是,无刷电机绕组通常是 3 组,并且只有 3 个引出接线端子,一般为星形接法,3 组线圈的起始端通过电机内部连接到一起,剩余的一端引出作为电机的引线。由于无刷电。
2024-05-10 17:03:47
2190
原创 华大hc32l170,新建工程遇到的坑
使用官方给的例程没问题。然后我在keil新建一个工程,简单的初始化运行结果,怎么都不进入,重新写的SysTick_IRQHandler函数,仿真查看已经进入中断我把代码拷贝到官方工程里面 运行 一点问题都没有查看map,发现重新写的SysTick_IRQHandler被移除,被编译器优化了,好奇怪然后我强制修改interrupts_hc32l17x.c里面的函数声明 去掉__weak又没被优化了,运行也正常。最后和官方例程对比Option发现少下面的设置。加上就好了。
2024-05-10 17:03:25
920
原创 记录一下函数指针数组,挺有意思的
void *b_handle(uint8_t data8,uint16_t data16)容易理解成指针,其实这是函数,中间的*优先和void结合声明成函数返回值了,要想声明成指针,加一个(),让*和变量先结合,声明成指针,void (*b_handle[])(uint8_t data8,uint16_t data16);函数指针就成了void (*b_handle)(uint8_t data8,uint16_t data16);如果要变成函数指针数组,一般是添加[]表示数组,那就在变量的后面添加[];
2024-04-12 17:56:27
278
1
原创 stm32 ntp时间同步
NTP的四种工作模式,我们主要讲服务器 / 客户模式(server / client) 这种模式只需要在客户端配置,服务器端除了配置NTP 主时钟外,不需要进行其他专门配置。并且,只能是客户端同步到服务器,服务器不会同步到客户端。它属于TCP / IP协议套件的最老部分之一,是基于用户数据报协议(UDP),端口号是123。对于同步过程,NTP依赖于协调世界时(UTC),该时间是从分层系统中的各个客户端和服务器获得的。注意这里时间戳转换,自动转成了北京时间。NTP是计算机系统中的。
2024-04-12 17:56:15
1942
原创 stm32 FOC系列 直流有刷控制原理
控制器方向:如果 Q1和 Q4 三极管导通,那么电机的电流方向是从点 a 到点 b,假设此时电机正转;如果 Q2 和Q3 三极管导通,那么电机的电流方向是从点 b 到点 a,此时电机就反转了。比如上图的PWM控制Q1,Q2 Q3关闭,Q4打开,根据PWM的占空比来控制速度。驱动电路只是大概的原理,实际的驱动电路需要增加电路的保护,比如mcu控制器和mos管之间的光耦隔离,上下管的互斥控制等。则将会发生短路,比如: Q1 和 Q2 同时导通或者 Q3 和 Q4 同时导通,这都是不可取的。
2024-01-20 17:05:56
1548
原创 stm32 FOC 电机介绍
为什么要学习FOC?1.电机控制是自动化控制领域重要一环。2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。需要什么基础?1.C语言,指针,结构体,编程规范。2.STM32外设使用。3.原理图阅读。4.芯片手册阅读。5.数序坐标系知识为什么要出本教程?1.直流无刷电机应用越来越广泛,网上资料比较散落,因此想要出一篇系统性的教程,从头到尾,深入浅出,帮助初学者快速入门直流无刷电机控制。
2024-01-20 15:47:25
2897
原创 ESP32 LVGL Gui-Guider的移植
按照上面的文章,使用Gui-Guider软件生成C代码之后,custom和generated是我们要使用到的文件, 其中custom是用来存放gui工程中我们自定义的一些代码,实际上如果没有自定义代码的话也可以不用,generated则是Gui-Guider工程生成的C代码,我们主要将这部分导入到我们的esp32s3工程中。到esp32的工程main目录下(已经移植好LVGL的工程),创建一个ui文件夹,将custom和generated放入此文件夹内。这块很主要,设置正确才能编译通过。
2023-12-04 09:47:44
2878
原创 stm32 freeRTOS lwip TCP快速发送,内存泄露问题
中断程序中对PCB->unsent 之类的处理出现了问题,tcp_write 不是没有临界保护,导致中断和主程序直接出现了共同操作。tcp_write 和 tcp_output,调用前关闭网口中断,调用结束开启中断。发送缓慢,tcp_write之后要等200多ms才能过发送出去,而且粘包严重。tcp_write之后,立马调用tcp_output ,tcp就会立马发送。持续快速发送和接受TCP数据出现断言。的问题,导致内存泄漏,越运行越慢。而且出现TCP断连,死机情况。其实就是一句话 主程序和。
2023-09-08 15:50:40
4810
原创 centos7 docker 安装mosquitto,并添加账户和密码登录
centos7 docker 安装mosquitto,并添加账户和密码登录
2023-02-09 10:42:26
1871
原创 centos7 通过docker安装redis
docker的安装参考连接https://blog.youkuaiyun.com/u014069688/article/details/100532774https://www.docker.org.cn/dockerppt/106.html通过docker安装redis上图是拉取过后,重新拉取的结果显示。查看镜像获取 Redis 的默认配置模版可以通过官网下载配置例子:设置配置文件运行redis开启两个redis容器例程:配置文件结构:配置文件区别,只是修改这两处地方为对应的端口号启动端口号为8808的redis 的
2023-02-08 11:43:02
674
原创 STM32+ESP-07S+MQTT服务器实现数据上传和接收
STM32+ESP-07S+MQTT服务器实现数据上传和接收。GPIO0 接GND,点击开始,然后给模块上电,等待完成。工具最下面有进度条。esp32下载工具和mqtt固件包。完成之后,模块重新上电进行测试。选择文件,按照下图进行勾选。解压下载工具,打开工具。
2023-02-02 23:20:33
1470
原创 stm32 lwip mqtt 修改发送接收长度和内存优化
stm32 lwip mqtt 修改发送接收长度和内存优化,不单独开辟数组内存,直接通过frertos的内存申请释放,统一管理内存。基于freertos优化lwip的pools。mqtt_opt.h(配置文件)
2023-01-06 11:25:46
1714
原创 go语言的函数、方法、接口
方法和函数长得差不多,区别是方法定义时func关键字后面紧跟的是括号,括号里面是调用者形参及调用者类型,之后才是func_name,再之后是括号,括号里面是入参形参及入参类型(没有入参的情况下括号不可以省略),最后是出参类型,如果有多个出参,则出参类型要用括号括住。· Go中没有类,但是可以为结构体定义方法,方法就是一类带有特殊的接收者参数的函数。3、建议将相同的行为放在同一个接口内,例如下方的Eat接口,通过绑定到不同的对象上实现多态。方法和函数的最大区别是方法有接收者(从属),即方法都是有主人的。
2022-09-15 16:40:45
504
转载 记录一下qt的mqtt通讯
Qt(三) - Windows下MQTT通信 - 简书一、MQTT协议简介 MQTT消息报文的方式包括connect, disconnect, subscribe, unsubscribe, publish等(类似于HTTP请求...https://www.jianshu.com/p/fd70929661d5MQTT消息报文的方式包括connect, disconnect, subscribe, unsubscribe, publish等(类似于HTTP请求行的方法字段)。MQTT的消息模型为publish
2022-07-05 11:46:38
1339
3
原创 window10 Qt 中使用boost库
由于网上的资料比较零散,这里进行汇总一下。boost库版本不建议使用最高版本,建议使用1.67,下载地址如下:Version 1.67.0一、编译boost源码为静态库 1、将你的Qt的工具目录(有g++.exe)设置环境变量。(我的是 F:\Qt592\Tools\mingw530_32\bin,要依据实际情况) 2、下载boost源码并解压(如boost_1_65_1.zip) 3、在cmd命令行进入boost_1_65_1/tools/build/
2022-06-30 18:41:07
2426
原创 stm32 mqtt 发送缓存的大小修改MQTT_OUTPUT_RINGBUF_SIZE
stm32 mqtt 发送缓存的大小修改MQTT_OUTPUT_RINGBUF_SIZE
2022-06-15 19:56:29
2000
原创 ubuntu 交叉编译mosquitto-auth-plug-0.1.3
下载编译源文件mosquitto-auth-plug-0.1.3.tar.gztar解压,进入目录,修改config.mk文件内容如下# Select your backends from this listBACKEND_CDB ?= noBACKEND_MYSQL ?= noBACKEND_SQLITE ?= noBACKEND_REDIS ?= yesBACKEND_POSTGRES ?= noBACKEND_LDAP ?= noBACKEND_HTTP ?= noBAC
2022-05-13 14:40:54
392
原创 ubuntu 交叉编译 mosquitto-1.5.8
下载mosquitto-1.5.8.tar.gz解压tar -xvf mosquitto-1.5.8.tar.gz进入解压目录,修改config.mk在VERSION=1.5.8 后面添加openssl的lib和includ交叉编译openssl见,之前文章CFLAGS += -I/home/forlinx/work/tool/openssl/out/includeLDFLAGS += -L/home/forlinx/work/tool/openssl/out/lib -lss
2022-05-13 14:25:03
398
原创 ubuntu 交叉编译hiredis-1.0.2
下载文件hiredis-1.0.2.tar.gz解压tar -xvf hiredis-1.0.2.tar.gz修改makefile 里面的prefix= //make install 的时候 安装路径或者在 make后面带这个参数进入目录hiredis-1.0.2make MALLOC=libc CC=aarch64-linux-gnu-gcc –cross-compile-prefix=/home/forlinx/work/edgeOS/build/toolchain/
2022-05-13 13:36:25
849
原创 Linux /etc/passwd和etc/shadow 详解
Linux /etc/passwd 内容Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。[root@localhost ~]# vi /etc/passwd#查看一下文件内容root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:..
2022-05-09 11:30:39
6587
原创 Ubuntu18.04安装不同版本的GCC
安装你需要的版本如下:sudo apt-get install gcc-8sudo apt-get install g++-8添加软链接sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++sudo ln -s /usr/bin/cpp-8 /usr/bin/cppsudo ln -s /usr/bin/gcc-8 /usr/bin/gccsudo ln -s /usr/bin/g++-8 /usr/bin/g++查看版本gcc -v
2022-05-07 14:12:36
2392
转载 nodeJs-require函数详解
前言个人理解:我将require分为2类的原则是,该字符串中是否含有路径。如以下示例1、无路径(也称为加载模块):require('find')2、有路径(也称为加载文件):require('./find.js')加载模块例子:require('find')1、node会先查找find模块是否是内置模块(nodejs内置的模块有fs、http等),找不到则进行下一步2、从当前目录向外寻找node_moludes查找是否有find.js文件,找不到进行下一步;3、在node_mol
2022-04-26 15:39:30
9397
原创 nodejs操作redis总结
本文总结常见的使用node操作redis服务,redis的key是唯一的,如果一个key所对应的存储类型是string,则不能再次覆盖式设置key为hash;1、链接Redisnode 链接Redisvar RDS_PORT = 5472;var RDS_HOST = '127.0.0.1';var RDS_PWD = '123456';const opts = { auth_pass: RDS_PWD, }const redis = require('redis'
2022-04-26 11:13:41
609
hal库生成基础代码,然后添BACnet mtsp部分,已经成功和电脑BACnet模拟软件Yabe通讯成功
2024-09-27
最新BACnet源码,版本是1.3.7;为不能科学上网朋友提供下载通道,包含stm32f10x的和stm32f40x的移植例程
2024-08-19
Linux环境下的mqtt代码,修改添加互斥锁,解决掉线问题
2020-11-11
foc驱动器驱动器的死区输出不对
2024-04-15
nodejs var变量放到for循环内和for循环外的区别 知道原因的解释一下
2022-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅