网上的电机FOC教程很多使用103或者407,但是商用的国外的接触的是G431,经研究后发现G431暂时有这两个特点优势:
1 ADC采集速度很快,可以达到42M,用DMA或者注入通道传输4个通道,只需要2~3us。普通的103ADC最高到12M好像,405可以到30M左右,无法达到这么高的频率。
2 G431支持CORDIC功能,这个可以使sin,cos等三角函数等耗时变为原来的8分之一,
用G431,主频168M实测结果如下:用标准库计算sin(2.54)耗时20us,而用CORDIC直接把对应的sin,cos一并算出来只需要6us(这个cordic就是用了标幺化原理)。
其他测试记录如下:
sin(float)) 0 耗时1.1us 1.54 18us
sin(double)) 0 耗时1.0us 1.54 18us
看来用float和double带入进去差别不大。
单精度相除 float/57.3 耗时0.7us
单精度相除 float/573 *10 耗时0.3us 先用整型 再乘10,有点效果
另外我发现用cubemx生成工程简直不要太好用,而且还方便移植,就是串口DMA有时候会卡死,给人感觉看不到内部结构在项目中用的话心里总是发毛。
1我的测试内容现在还存在以下几点问题后续接着修补:
1 角度通过SPI采集,考虑后续变成DMA传输,这样省时间
2 由于使用SVPWM,PWM输出频率为10K,所以计算周期得在100us,计算外围的数据。