基于STM32303E-EVAL评估板的FOC SDK 5.0电机库总结
本学期做本科毕业设计,为实现两个永磁同步电机的矢量控制,选择了STM32F3系列单片机,刚开始用SDK4.3的电机库进行调试,能驱动电机,后来编写了一些传感器的程序,由于基于标准库,写的比较慢。不久无意间发现新发布的5.0库,于是转战5.0电机库。目前已经看了20多天,发现诸多问题,特此总结,希望给后来人一点点帮助,同时期待各位坛友多多指教,或共同探讨更多问题。
1.编码器设置的BUG
电机库默认的正交编码器是用定时器TIME2和TIME4的输入捕获功能来检测磁极位置的,且应用了四倍频,但没有使用编码器的Z相检测机械零点,我使用的电机为1000线正交编码器,配置界面如下
但是配置之后电机总是转不起来,转子在那里摆动,和老师讨论这个问题后,老师建议查一下编码器自动清零时的值是否正确,开始在encoder_speed_pos_fdbk.c文件中找到转子角度计算的子程序,
在这里设置printf,将定时器的计数值(int32_t)( LL_TIM_GetCounter(pHandle->TIMx))和角度的计算结果打印出来,结果发现,定时器的计数值在1600的时候自动清零,后找到定时器2的初始化程序
这里的计数周期PULSENBR定义为1599,这个值恰好是默认值400的4倍频,于是将其改为自己的参数4×1000-1=3999,电机能够正常转动。 支持支持~~~ 2.关于写入自己代码问题:
由MotorControl Workbench 5.0生成的代码,包含了一个CubeMX的工程文件和程序所需要的全部代码,这一点比起4.3的库好很多,就是5.0生成的代码,不会给你留一大堆选择编译的代码,让你读起来清爽很多。CubeMx工程可以帮助用户方便的加入自己的代码,我在原来的基础上加入了IIC和usart的通讯协议,包括一些数据解析的代码,值得提醒的是,这里添加代码一定要写在要求的位置,一般有user code begin,user code end提示,否则当你再次打开时,你的代码会被清除。主要问题不是出在这里。
当我用修改电机参数,再次生成代码时,我再次打开工程,我自己设置的通信协议全被清除了,建议大家在配置好电机参数后再加入自己的代码。
3.电机硬件过电流保护问题: 我用的电源板是IHM045V1,该电源板设置了硬件过电流保护,也就是通过三个桥臂检测的电流值,输入到一个比较器,当检测到过电流时,给控制器一个过电流信号,关闭PWM 输出以保护电源板。这个可以通过计算得到电流值,在用户说明里有提到,我计算了一下,大概是1.06A.
电路结构在此:
控制器STM32F303 使用了两个高级定时器来产生控制两个电机的各自的三路互补PWM,高级定时器支持刹车信号,即通过一个TIMx_BKIN引脚来关闭PWM的输出,原理图中是这样给的:
很显然,定义的PE15和PB7作为刹车信号,然而今天检查引脚分配时发现,5.0电机库的这两个引脚定义的是错误的,如下:
这个地方如果使用,还请大家注意修改一下。
楼主你好,可不可以把5.0库共享一份?谢谢! z258121131 发表于 2018-4-16 14:53
楼主你好,可不可以把5.0库共享一份?谢谢!
官网可以下申请的,我也可以发给你 已经下载好了,谢谢 这个库适合哪款开发板? wqking1986-1981 发表于 2018-4-18 16:00
这个库适合哪款开发板?
软件上带的例程有这些