知足者常乐 发表于 2018-4-10 16:27:07

基于STM32303E-EVAL评估板的FOC SDK 5.0电机库总结

      本学期做本科毕业设计,为实现两个永磁同步电机的矢量控制,选择了STM32F3系列单片机,刚开始用SDK4.3的电机库进行调试,能驱动电机,后来编写了一些传感器的程序,由于基于标准库,写的比较慢。不久无意间发现新发布的5.0库,于是转战5.0电机库。
      目前已经看了20多天,发现诸多问题,特此总结,希望给后来人一点点帮助,同时期待各位坛友多多指教,或共同探讨更多问题。






知足者常乐 发表于 2018-4-10 16:50:17

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,电机能够正常转动。

Tom-tang 发表于 2018-4-11 10:24:11

支持支持~~~

知足者常乐 发表于 2018-4-11 16:08:13

2.关于写入自己代码问题:
    由MotorControl Workbench 5.0生成的代码,包含了一个CubeMX的工程文件和程序所需要的全部代码,这一点比起4.3的库好很多,就是5.0生成的代码,不会给你留一大堆选择编译的代码,让你读起来清爽很多。CubeMx工程可以帮助用户方便的加入自己的代码,我在原来的基础上加入了IIC和usart的通讯协议,包括一些数据解析的代码,值得提醒的是,这里添加代码一定要写在要求的位置,一般有user code begin,user code end提示,否则当你再次打开时,你的代码会被清除。主要问题不是出在这里。
当我用修改电机参数,再次生成代码时,我再次打开工程,我自己设置的通信协议全被清除了,建议大家在配置好电机参数后再加入自己的代码。

知足者常乐 发表于 2018-4-14 10:35:51

3.电机硬件过电流保护问题:      我用的电源板是IHM045V1,该电源板设置了硬件过电流保护,也就是通过三个桥臂检测的电流值,输入到一个比较器,当检测到过电流时,给控制器一个过电流信号,关闭PWM 输出以保护电源板。这个可以通过计算得到电流值,在用户说明里有提到,我计算了一下,大概是1.06A.
      电路结构在此:

      控制器STM32F303 使用了两个高级定时器来产生控制两个电机的各自的三路互补PWM,高级定时器支持刹车信号,即通过一个TIMx_BKIN引脚来关闭PWM的输出,原理图中是这样给的:


很显然,定义的PE15和PB7作为刹车信号,然而今天检查引脚分配时发现,5.0电机库的这两个引脚定义的是错误的,如下:


这个地方如果使用,还请大家注意修改一下。

z258121131 发表于 2018-4-16 14:53:16

楼主你好,可不可以把5.0库共享一份?谢谢!

知足者常乐 发表于 2018-4-16 18:31:59

z258121131 发表于 2018-4-16 14:53
楼主你好,可不可以把5.0库共享一份?谢谢!

官网可以下申请的,我也可以发给你

z258121131 发表于 2018-4-17 09:37:20

已经下载好了,谢谢

wqking1986-1981 发表于 2018-4-18 16:00:29

这个库适合哪款开发板?

知足者常乐 发表于 2018-4-19 08:52:08

wqking1986-1981 发表于 2018-4-18 16:00
这个库适合哪款开发板?


软件上带的例程有这些
页: [1] 2 3 4 5
查看完整版本: 基于STM32303E-EVAL评估板的FOC SDK 5.0电机库总结