程序使用三电阻取样,放大器各个参数如下图:
可以根据实际电路更改放大器各部分电阻配比,根据软件计算得出ADC偏置电压为1.559V,放大倍数为1.528,ADC读取时减去这个OFFSET在除以放大倍数就是实际电压了。换算后即可得到相电流。
1.首先进行Ia与电机OUT1相电压波形的对比
测试中实际接线如下图,示波器通道1接到了F302的PA4(DAC1)引脚,示波器通道2接到了电机CH1相。
接好后开启示波器,打开调试界面,开启电机,设置转速为18000转(电流最大),同时将DAC通道1设置为Ia,将示波器测得的波形截图记录,然后将DAC通道1设置为Ib,示波器截图并保存。
下图为Ia和电机OUT1相波形:
局部放大:
下图为Ib与电机OUT1相波形:
使用霍尔电流传感器(ACS758)测量电机OUT1相实际电流波形与三相电阻采样Ia波形相对比图如下(CH2开启数字滤波,否则噪声太大),可见经过ADC采集得到的电流基本和实际的相电流变化趋势一致。
任务二:得到FOC控制时的关键变量:Ia, Ib, Ic, Ialpha, Ibeta, Id, Iq, Vd, Vq , 并且截图
Ia,Ib, Ic, Ialpha, Ibeta, Id, Iq, Vd, Vq各个变量之间关系如下图:
最开始我并不了解这些变量在程序中的所对应的变量命名,后来发现Workbench调试界面中的寄存器界面是有这些变量的,如下图:
但是实际使用中,连接板子后,启动电机,将各个变量后边的使能复选框点上后,重新读取寄存器时发现,这些复选框会失去原来的选中状态,对比发现,大部分可读取的变量(如Id、Iq等),在另一个界面是有显示的(也就是说使用到了),但是这些如Ia, Ib等变量。在其他界面未使用到,推测Workbench调试寄存器界面部分功能并没有完善。不过这个给了我一些提示。回到程序中,
找到串口相关函数,
int32_t UI_GetReg(UI_Handle_t *pHandle, MC_Protocol_REG_t bRegID)
获取寄存器值:
这个函数很清楚的告诉我们每个变量所对应的程序中的变量名称,然后根据这些提示可以学习到每个变量的功能。 这次使用STM Studio软件配合Workbench进行观测。电机设置为速度环模式,向STMstudio中添加相应变量,并启动记录。
取其中一瞬间截图:
图片中由上到下依次是Ia,Ib,Ic,Ialpha,Ibeta,Id,Iq,Vd,Vq。可见Ia、Ib、Ic是有数学关系的,Ia+Ib+Ic=0;不过截图时数据可能不同步(不是同一时间点的数据)。下图为整个过程中各变量的变化趋势。
在400时刻启动电机,电机进入开环启动模式(400-1750时刻),之后电机进入闭环。
进阶任务:新旧版本电机驱动库的对比评测
界面对比:
SDK4.3:
SDK5.0.3:
SDK 4.3版本的库是不完全开源的,使用之前需要先生成一个lib库,进入工程文件夹,打开STM32F30x_Workspace工程文件。点击Batch bulid,lib工程部分选择F302单电机模式,UserProject部分选择P-NUCLEO-IHM001_SINGLEDRIVE,然后编译即可使用。使用时应该将整个STM32 PMSM FOC LIB_051文件夹拷贝到自定义的目录下,然后进行编辑,以防修改错误无法还原。
\STM32PMSM FOC LIB_051\Web\SystemDriveParams文件夹中的配置文件如下图。
而5.0版本工程目录如下图,配置文件位于Inc文件夹中,而部分自定义源码在Src文件夹中,FOC库函数则在MCSDK_v5.x.x文件夹中。
4.3版本库提供了一些例子程序,加入到工程中并添加对应的宏定义即可使用。(\STM32 PMSM FOC LIB_051\Web\Project\STM32_SDK_Examples\)
4.3与5.0版本之间程序之间最大的差别就是,4.3版本库为了通用各个版本的控制板,各种函数使用条件编译的形式编写,这样不利于程序的阅读,而5.0版本则改进了这个问题,使用Cube来生成需要的函数,不需要的部分不添加进来,下图为mc_Task.c文件中状态机切换函数对比:
4.3
5.0
下载到板子上就可以调试电机了,调试界面如下:
实际测试中两个版本的程序,运行起来并没有太大的差别,调速的效果基本一致。
相比于SDK 5.0,界面方面没有什么太大的差别,SDK5.0与其最大的差别在于程序开源,导致程序的生成方式不同,4.3是通过Workbench在工程中的SystemDriveParams文件夹下生成.h文件。而5.0则是通过STM32Cube来生成整个工程,他所有的配置文件和可变源码是分别放在SRC与INC文件夹里的,不过这样在研发调试阶段不是很方便,因为不可避免的是需要在设计中加入自定义的IO口(外部中断,ADC,USART等),一旦使用Workbench编译,这些自定义的IO(在CUBE中配置的)都会消失,重新配置很麻烦。所以现在基本上通过Workbench来在线调试,调试好后记下参数,直接在工程中drive_parameters.h文件来直接修改PID等相关参数(可以说是上一版的优点,新版本Workbench在生成文件的时候会改变Cube的ioc文件,导致自定义的IO口消失)。
参与评测者默认领取的任务:您对SDK5.0的建议和反馈
5.0相对于老版本库的优点:首先5.0库完全开源,可以让开发者去学习其中的算法,了解电机控制逻辑。4.3版本程序使用条件编译的方式,所有程序全包含在工程内,导致阅读不方便,现在新版本程序只会将需要的程序加入(依赖Cube),程序更加直观整洁。
建议和反馈:
1.如果可以的话,在SDK5.0 Workbench的主界面增加一个功能,就是只修改.h文件,例如drive_parameters.h,同时用户可以选择要修改的.h配置文件(可以带有复选框),当然这还是要加一些相关的判断,毕竟在SDK5.0下增加一个功能或者修改传感器模式,.C源文件也是要改变的,这样的话如果用户只修改了PID,那么完全没必要重新编译,这样节省时间,可以提高效率。
2.STM32 cube,其实是和上一个问题是一个,是另一种解决思路,如果用户添加了自定义的io或者功能,用户可以设置将其锁定(当然前提是不和FOC库冲突),Workbench不能对其修改(现在5.0 Workbench直接将CUBE的ioc文件替换。。。)。
3.关于FOC内部算法,现在的库是可以使电机正反方向运转,但是很多种情况,我们是不希望电机倒转的(有些情况倒转是很危险的),所以如果可以是否可以增加一个选项(或者改变算法)完全限制电机反转。
4.另外,现在5.0版本似乎还不支持中文目录(4.3是支持中文目录的)。
5.On-the-FLY (顺风启动功能)不支持有感模式。
6.希望将Workbench寄存器界面完善好。
感谢!