打印
[活动]

APM32M3514电机通用评估板 反向电动势6步换相驱动

[复制链接]
34|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cchwk|  楼主 | 2025-2-9 13:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

开箱:板子本体如上图所示,整体布局合理。

微信图片_20250209120836.jpg

电路连接如上图所示:本次使用无传感器方式运行电机,仅接了3根象限,使用官方提供的foc驱动固件驱动,改动源代码内容如下所示:

电机参数修改,使用的电机是空心杯无刷直流电机,相电阻为0.100Ω,电感为0.0000160H,Kv值为:3.125,2对极。

微信图片_20250209120854.jpg

1.png

3.png

2.png

经过测试使用官方例子电机转速能够达到的上限大约是15000RPM,功率系数在超过11000后急剧下降,仅能达到0.6左右,应该是计算不过来了。

以上为官方固件测试。

以下为反向电动势六步换向测试,测试代码含有公司保密内容,仅贴出部分内容,部分测试结果。

为方便测试将串口功能使用起来,电路中需要短接这两个电阻,

4.png

注意:由于PF0和PF1两个IO开发板中连接到了外部晶振上,故需要拆除,如下图所示:

5.png

由于外部晶振被拆除,如果使用官方FOC固件需要将外部晶振修改为内部晶振,详细修改方法见官方SDK包中dome中的RCM例子,连接如下https://www.geehy.com/uploads/tool/APM32M35xx_SDK_V1.0.0.zip

6.png

修改反向电动势电路:

7.png

数据流:

三相桥驱动方式为上桥pwm,下桥IO方式,整体框架为:

Pwm触发ADC过采样,将采样结果通过dma传输到内存,然后触发中断,在中断中处理数据,判断过零,计算30度延时等,实现换向;同时在主循环处理通讯和pi调节。

处理分为4个状态,空闲,定位,开环同步,闭环,异常1和异常2,分别处理各个状态,如下:

               switch(g\_stc\_motor\_pos\_info.sta)

               {

                        case e\_motor\_idle:                       

                                 if(0 < set\_spd)

                                 {

                                           g\_stc\_motor\_pos\_info = g\_stc\_motor\_pos\_info\_def\_buf[0];

                                           g\_vf\_v\_buf[0] = MAX\_DUTY\_VALUE/MAX\_V\_LEN;

                                           for(i=1;i<=MAX\_V\_LEN;i++)

                                           {

                                                    g\_vf\_v\_buf[i] = g\_vf\_v\_buf[i-1] + MAX\_DUTY\_VALUE/MAX\_V\_LEN;

                                           }

                                           g\_vf\_f\_buf[0] = MAX\_VF\_D\_VALUE-(MAX\_VF\_D\_VALUE/MAX\_F\_LEN+1);

                                           for(i=1;i<=MAX\_F\_LEN;i++)

                                          {

                                                    g\_vf\_f\_buf[i] = g\_vf\_f\_buf[i-1] - (g\_vf\_f\_buf[i-1]/MAX\_F\_LEN+1);

                                           }


                                           g\_stc\_motor\_pos\_info.sta = e\_motor\_pos;

                                 }

                                 else

                                 {

                                           g\_stc\_motor\_pos\_info.sta = e\_motor\_idle;

                                           //g\_stc\_motor\_pos\_info.dir = 

                                 }

                                 break;

                        case e\_motor\_pos:

                                 fun\_deal\_pos(&g\_stc\_motor\_pos\_info);

                                 break;

                        case e\_motor\_vf:

                                 fun\_deal\_vf(&g\_stc\_motor\_pos\_info);

                                 break;

                        case e\_motor\_cls:

                                 //g\_stc\_motor\_pos\_info.duty = 840\*4;

                                 fun\_deal\_cls(&g\_stc\_motor\_pos\_info);

                                 break;

                        case e\_motor\_err1:

                                 fun\_deal\_pha\_to\_output(0x00, 0x00, g\_stc\_motor\_pos\_info.dir);

                                 if(0 == set\_spd)

                                 {

                                           g\_stc\_motor\_pos\_info.sta = e\_motor\_idle;

                                 }

                                 break;

                        case e\_motor\_err2:

                                 fun\_deal\_pha\_to\_output(0x00, 0x00, g\_stc\_motor\_pos\_info.dir);

                                 if(0 == set\_spd)

                                 {

                                           g\_stc\_motor\_pos\_info.sta = e\_motor\_idle;

                                 }

                                 break;

                        default:

                                 break;

               }

定位和拖动使用了特殊的方式,能够保证大约满负载77%的启动扭矩,带载测试霍尔信号和观测的霍尔信号图像如下所示:

8.png

该方法启动时可能导致60-90的反转,但是启动扭力较大,满足我们设备的使用要求。

稳定后始终保持60度误差,可通过程序校准:

9.png

稳定运行图像。

通过测试本测试板子能够运行这个方案,但是由于是使用的adc采样的方式,受限于芯片的采样时间等的要求,最大运行转速也只能做到大约30000RPM。

最后说一下使用体验:

就芯片APM32M3514来说在兼顾成本和性能方面做的很好,同时省了一个预驱芯片,使pcb的空间得到大大的节省,非常适合各种空间受限,成本约束较严格的设备。

关于提供的foc固件,整体上手难度较低,结合APM32M3514_MOTOR EVAL无感矢量控制方案_V1.0.pdf食用,能够在极短的时间内使电机动起来;有部分问题:希望能够提供反向电动势6步换向方案的程序固件,还有就是固件中文件存在两种编码格式utf8和gb2132,建议同意一下,否则容易出现注释乱码的情况。

最后是板子:整体兼容了foc和bemf两种驱动方式,这点很好,能够验证两种方案,但是由于foc使用的模拟io占用了比较器和放大器的io导致bemf六步换相方式不能使用这部分io,最终导致高速电机不能达到最大速度,建议使用跳帽的方式切换io,释放比较器资源。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝