- 2025-01-22
-
回复了主题帖:
新年新挑战,任务打卡赢好礼!
3. 4. 5.
-
加入了学习《财哥说钛丝》,观看 财哥说钛丝(1)简介
-
加入了学习《自己动手写嵌入式操作系统》,观看 高级操作系统特性
- 2025-01-20
-
发表了主题帖:
【B-G431B-ESC1-无刷电机板】3-开环VF强拖
本期测评让电机进行开环强拖,电角度使用自增电角度。上期测评我们已经把工程配置的差不多了,这期就直接上代码了。
先上总的控制框图:
而我们本期做的是下面这个部分
开环强拖分为3部分:
反park变换
svpwm
电角度
1. 反park变换
参考公式
void ipark(Motor_State *motor)
{
voltage_int(motor);
motor->v_alpha = motor->vd_int * motor->theta_cos - motor->vq_int * motor->theta_sin;
motor->v_beta = motor->vq_int * motor->theta_cos + motor->vd_int * motor->theta_sin;
}
这里voltage_int函数我们后面再解释。
2.svpwm
void svpwm(Motor_State *motor, uint32_t PWMFullDutyCycle)
{
float ts = 1,k_svpwm;
ipark(motor);
float u1 = motor->v_beta;
float u2 = -0.8660254037844386 * motor->v_alpha - 0.5 * motor->v_beta;
float u3 = 0.8660254037844386 * motor->v_alpha - 0.5 * motor->v_beta;
uint8_t sector = (u1 > 0.0) + ((u2 > 0.0) << 1) + ((u3 > 0.0) << 2);
if (sector == 5)
{
float t4 = u3;
float t6 = u1;
float sum = t4 + t6;
if (sum > ts)
{
k_svpwm = ts / sum;
t4 = k_svpwm * t4;
t6 = k_svpwm * t6;
}
float t7 = (ts - t4 - t6) / 2;
motor->ta = t4 + t6 + t7;
motor->tb = t6 + t7;
motor->tc = t7;
}
else if (sector == 1)
{
float t2 = -u3;
float t6 = -u2;
float sum = t2 + t6;
if (sum > ts)
{
k_svpwm = ts / sum;
t2 = k_svpwm * t2;
t6 = k_svpwm * t6;
}
float t7 = (ts - t2 - t6) / 2;
motor->ta = t6 + t7;
motor->tb = t2 + t6 + t7;
motor->tc = t7;
}
else if (sector == 3)
{
float t2 = u1;
float t3 = u2;
float sum = t2 + t3;
if (sum > ts)
{
k_svpwm = ts / sum;
t2 = k_svpwm * t2;
t3 = k_svpwm * t3;
}
float t7 = (ts - t2 - t3) / 2;
motor->ta = t7;
motor->tb = t2 + t3 + t7;
motor->tc = t3 + t7;
}
else if (sector == 2)
{
float t1 = -u1;
float t3 = -u3;
float sum = t1 + t3;
if (sum > ts)
{
k_svpwm = ts / sum;
t1 = k_svpwm * t1;
t3 = k_svpwm * t3;
}
float t7 = (ts - t1 - t3) / 2;
motor->ta = t7;
motor->tb = t3 + t7;
motor->tc = t1 + t3 + t7;
}
else if (sector == 6)
{
float t1 = u2;
float t5 = u3;
float sum = t1 + t5;
if (sum > ts)
{
k_svpwm = ts / sum;
t1 = k_svpwm * t1;
t5 = k_svpwm * t5;
}
float t7 = (ts - t1 - t5) / 2;
motor->ta = t5 + t7;
motor->tb = t7;
motor->tc = t1 + t5 + t7;
}
else if (sector == 4)
{
float t4 = -u2;
float t5 = -u1;
float sum = t4 + t5;
if (sum > ts)
{
k_svpwm = ts / sum;
t4 = k_svpwm * t4;
t5 = k_svpwm * t5;
}
float t7 = (ts - t4 - t5) / 2;
motor->ta = t4 + t5 + t7;
motor->tb = t7;
motor->tc = t5 + t7;
}
motor->pwma = motor->ta * PWMFullDutyCycle;
motor->pwmb = motor->tb * PWMFullDutyCycle;
motor->pwmc = motor->tc * PWMFullDutyCycle;
}
这里大家可以参考这篇文章:深入浅出FOC控制-CSDN博客
我直接贴出重点
我的代码中,让这个地方的K等于1了,这样可以减少计算,这样前面传入的数据也必须除以K,所以上面代码的voltage_int就是做的这个事情,可以理解成这里将vd和vq标幺化成了1,如下
void voltage_int(Motor_State *motor)
{
motor->vd_int = (motor->vd) / (motor->v_bus) * ONE_BY_SQRT3;
motor->vq_int = (motor->vq) / (motor->v_bus) * ONE_BY_SQRT3;
}
3.电角度自增
这里我人为给一个电角度,用来强拖电机
4.现象
首先给大家看一下svpwm的马鞍波
最后给大家看一下电机转动的情况
[localvideo]821c8e01a115b6e457b833d1e24b3112[/localvideo]
- 2025-01-18
-
发表了主题帖:
【B-G431B-ESC1-无刷电机板】2-工程配置篇
本帖最后由 qiao--- 于 2025-1-22 11:07 编辑
由于本期电机控制的电机部分代码我打算全部手搓或者移植,所以工程配置显的尤为重要。本期着重讲解一下电机工程的配置。
1.定时器配置
定时器作为PWM的输出源头,也是电机驱动重头,下方是我的电机定时器配置。
我打算让我的电流环工作在20k中断里,所以我这里配置的定时器是按照20k来的。
因为配置的是中央对齐模式,所以重复计数器配置的为1,当产生两次溢出事件的时候发生更新事件中断。
其他的配置参考可以参考下面的介绍,参考资料为:STM32CubeIde中互补PWM配置项的详细解读_ch idle state-CSDN博客
接着配置更新事件,用于触发后面的ADC采样。
然后配置死区时间,死去时间是为了防止PWM更新过快,然后上下管导通的情况,用原理图来解释就是防止V+短接到地的情况,这里可以参考文章STM32高级定时器实现:两路互补PWM输出,精准死区时间控制_stm32互补pwm-CSDN博客
然后设置几个pwm输出模式,这里怎么设都可以,我设置的是通道4为pwm_mode2,其他的为pwm_mode1。
通道4的pulse设置为4240,因为ADC中断的时候要保持上管全部导通,这样测出的电流才算是稳定有效的,而上管全部导通的情况就是无限接近中央对齐模式中点的位置,所以我这里设置为4250 - 10
2.ADC和运放配置
ADC在无刷控制中用于采样电流,因为G4是有内部可编程运放的,所以我把内部运放配置成16倍,下方是我的配置:
ADC相关资料可以参考:STM32Cubemx 配置ADC(HAL库)_stm32cubemx adc-CSDN博客,STM32G4 电机驱动配置方法参考(B-G431-B) - 知乎
我这里配置的如下,注意注入通道的触发源配置成我们前面定时器的通道4,与前面对应。
通过观察原理图发现下面这个电路可能是偏置电路,所以我把这三个引脚配置成了ADC采样引脚。
3. Hall配置
原理图上hall引脚为PB6\7\8,如下:
我们把他们配置成输入模式。
如果还需要其他的配置,请自行配置,我这里就配置这么多,后面需要什么再配置什么。
-
回复了主题帖:
【RainbowLink USB 协议转换器】3- 485通信测试
zyb329321151 发表于 2025-1-18 17:01
有USB通信仪内部的框架图吗?
可以参考这个我的第一期测评
-
回复了主题帖:
【RainbowLink USB 协议转换器】3- 485通信测试
zyb329321151 发表于 2025-1-18 15:19
这个是串口之间的通信,没看到USB通信仪之间的信息。
这个USB通信仪的本质就是一个1拖4的串口哦,而485本身是硬件协议,所以在软件上来看现象是和串口一样的。
- 2025-01-17
-
回复了主题帖:
新年新挑战,任务打卡赢好礼!
1. 2. 3. 4. 5.
-
回复了主题帖:
【B-G431B-ESC1-无刷电机板】1-接口评估
tagetage 发表于 2025-1-13 21:23
这个板子的的PCB弄的太小了。。Hall编码器接口的焊盘就预留在板子的中间是个错误的排版。。
不过他们定位是为无人机使用的,这么小也能理解
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
遇到的技术问题包括内存泄漏和调试困难,通过工具和代码审查解决了这些问题。
实现了低功耗优化和完成了一个嵌入式项目,提升了无线通信和数据处理能力。
最想关注的技术是边缘计算和AIoT,推动嵌入式系统的智能化。
需要更多关于无刷电机控制的教程、开源项目和技术交流支持。
新年目标是实现无刷电机控制项目、提升编程技能并平衡工作与生活。
-
回复了主题帖:
EEWorld 2024年度人物:感恩相伴,共赴新程,携手努力!
感谢论坛,2025继续加油!
- 2025-01-13
-
发表了主题帖:
【RainbowLink USB 协议转换器】3- 485通信测试
本期测评来测评一下这款工具的485通信的功能,看一下这款工具在不同的通信速率下是否会丢包。
1. 测试环境
本期的测试环境为一个USB 转485的模块,一个RainbowLink ,还有杜邦线,测试环境如下:
2.测试内容
然后我们分别用两个上位机进行测试,一个SSCOM为串口模块的发送端,一个SSCOM为RainbowLink的接收端。
我们的测试项如下所示
通信波特率
测试结果
115200
921600
2000000
上面的测试结果可以看出以1kHz的通信频率测试分别在不同的通信波特率下的通信状况,数据传输的都准确无误,没有出现丢包的情况。而接受的时候出现连包的情况是因为发的太快,但是虽然连包,数据却是准确的。
从上图可以看出2000000的波特率数据和之前测评的TTL通信一样还是很清晰。而2M的波特率也是我这个上位机的测试的极限了
总结:这款工具的485通信的功能非常强劲,在通信过程中没有出现丢包的情况,目前测到2M的波特率是没有问题的,可以解决大部分的串口通信速率要求。
-
发表了主题帖:
【B-G431B-ESC1-无刷电机板】1-接口评估
本帖最后由 qiao--- 于 2025-1-13 16:16 编辑
年终回炉终于在eeworld上申请到了电机开发板,感谢eeworld和ST。
由于开发板是之前测评的网友退回的,今天就不上开箱的介绍了。本期测评就直接上我对这个开发板接口的评估以及我拿到这块开发板的感受。
拿到这块开发板最直观的感受就是小。整块开发板的面积就只有两块一元硬币拼起来的大小那么大。(最后边有图)
这块开发板的接口如下两张图所示:
虽然板子非常小,但是这些接口都是用焊盘预留出来的,使用起来我感觉还是有点不方便的,比如Hall编码器接口的焊盘就预留在板子的中间,这对焊工不好的网友估计有点难受。
不过我的焊工凑合,于是我把这些接口都用线引了出来,方便以后使用(除了can以外),如下图
我引出来的接口有以下几个:
电机三相线
Hall编码器接口
一路串口
一个用于接受PWM调速输入引脚
电源总线
为了在测评板子的过程中防止板子烧坏或者减少手直接触摸的情况,我对整块板做了隔离,如下图:
这做隔离的这一步是非常有必要的,上图可以看到我简单拿了一下板子就有汗在上面,如果没有做隔离,此时上电就会有风险。
对于这块开发板的编码器接口是Hall,由于本期测评我是打算用有感算法测评这个开发板,所以这里跟大家说一下后面的测评计划。后面的测评全是自己手搓的代码和分享一些电机的小知识,所以如果有不好的地方希望大家指出。测评计划如下:
移植SVPWM算法和反Park变换公式,自己给一个电角度自增,VF强拖启动。
驱动电流采样的ADC,根据采样电阻算出电流。
移植PID算法,和FOC库,调试电流环。自己给一个电角度自增,IF强拖启动。
驱动Hall编码器,估算电角度位置,将电角度位置波形打印出来。实现电流环闭环,电角度用Hall编码器估算出来的电角度。
编写测速算法,根据速度反馈进行速度闭环。
上面几个是我计划内需要完成的,如果上面四个内容做的差不多且还有时间,我将做一些基于Hall的位置闭环。不过Hall编码器做的位置闭环精度有限,它受下面几个因素影响:
电机的极对数,一般来说位置闭环精度为60/N,N为电机的极对数,如果加了减速器的话,精度会提高为60/N/P,P为减速比。
Hall安装的角度,编码器的安装位置如果存在偏差,可能导致检测到的位置与实际位置之间的误差。因此,确保编码器正确安装和对准也非常关键。现在也有很多做Hall安装偏差校准算法相关的。
信号干扰,Hall编码器输出的信号如果受到电磁干扰或噪声的影响,会导致位置检测误差,进而影响闭环控制的精度。(这个有些电机不良商家出的电机会出现这种情况)
最后再次感谢一下eeworld和st提供的这块开发板。
- 2025-01-09
-
回复了主题帖:
【RainbowLink USB 协议转换器】2-USB转TTL测评
Verifone 发表于 2025-1-5 12:55
看起来传输率还是挺快的,不过这种转换器太多了,关键还是要看看性价比合适不合适
是的
- 2025-01-08
-
回复了主题帖:
【测评入围名单(最后1批)】年终回炉:FPGA、AI、高性能MCU、书籍等65个测品邀你来~
个人信息无误, 确认可以完成测评计划
- 2025-01-02
-
发表了主题帖:
【RainbowLink USB 协议转换器】2-USB转TTL测评
本帖最后由 qiao--- 于 2025-1-2 23:22 编辑
本期测评来测评一下这款工具的USB转TTL的功能,看一下这款工具在不同的通信速率下是否会丢包。
1. 测试环境
本期的测试环境为一个USB 转串口的模块,一个RainbowLink ,还有杜邦线,测试环境如下:
2.测试内容
然后我们分别用两个上位机进行测试,一个XCOM为串口模块的发送端,一个XCOM为RainbowLink的接收端。
我们的测试项如下所示
通信波特率
测试结果
115200
921600
2000000
3000000
上面的测试结果可以看出以1kHz的通信频率测试分别在不同的通信波特率下的通信状况,数据传输的都准确无误,没有出现丢包的情况。
从上图可以看出3000000的波特率数据还是很清晰,也就是3M的波特率。而3M的波特率是我这个上位机的极限,不是这款工具的极限,
总结:这款工具的USB转ttl的功能非常强劲,在通信过程中没有出现丢包的情况,目前测到3M的波特率是没有问题的,可以解决大部分的串口通信速率要求。
-
发表了主题帖:
【RainbowLink USB 协议转换器】1-开箱测评
本帖最后由 qiao--- 于 2025-1-2 22:31 编辑
本期测评的是RainbowLink。RainbowLink 是一款专为物联网和工业应用设计的USB协议转换器,它高效地支持多通道串行通信和功率输出。它具有以下几个优点:
拥有四个独立通道包括RS485、RS232以及两个USB转TTL通道。
支持3.3V、5V、12V的常用电源输出功能。
它的四个通道可以独立运行,不相互影响。
颜值不错。
收到工具后立马就开箱了,下面是工具的正视图。
这块工具在兼容颜值的情况下,它的提示功能也做得非常到位,四个通道分别拥有发送和接收的提示灯,3个电源供电也拥有提示灯。
下面是这款工具拆掉了面板的样子。
仔细观察可以看到USB转TTL的芯片使用的是CH344Q.下面这个是我从网上找到的这个芯片资料
大家从这个图可以很清晰的看出来这个工具为什么可以一拖四。
下面是这个工具上电的样子。
接上电脑以后,设备管理器会出现四个端口,分别对应着这个工具的四个通道。
我们可以根据需要使用。
总结:RainbowLink USB协议转换器在满足工业物联网应用需求的同时,表现出了卓越的多功能性和用户友好性。它支持多种串行通信协议的独立操作,并且提供了强大的电源输出和直观的指示功能。对于需要连接多种设备、进行串行通信的应用场景,RainbowLink无疑是一个非常值得推荐的工具。
- 2024-12-24
-
回复了主题帖:
2025年测评中心,DigiKey得捷赞助继续,欢迎跟帖推你期待的上线的测品啦~
期待无刷电机类开发板,之前有类似开发板,但是没有申请到。
-
回复了主题帖:
【测评入围名单】RainbowLink USB 协议转换器(RS485 / RS232 / TTL)
个人信息无误,确认可以完成测评分享计划
- 2024-12-13
-
回复了主题帖:
【极海APM32M3514电机通用评估板】滑膜观测器电角度与霍尔采集到的电角度数据比对
这个滑膜,电机可以反转吗?