ST电机库v5.4.4源代码分析(8): 旋编怎么对齐

编者:沉尸 (5912129@qq.com)

问题:

              带旋编的电机(不是绝对位置旋编),ST电机库是怎么对齐的呢?也就是说如何确定初始电角度的问题。

我们基于“D:\motorCtr\code\stm32f407IG\FOC\FOC_YHF4_PMSM_Encoder_SpdCtr”项目进行讲解。本项目采用野火的407骄阳控制板+野火的直流无刷驱动板+野火PMSM电机

                                                        图2

上面三个参数定义在文件中的作用位置:

 

                                                        图3

注释里面说的很好:

                                                        图4

我们来推导一下:

Av是放大倍数, Av = 8

Rs = 0.02

ADC的参考电压是3.3v,ADC出来的值左移过4位,最大值为0xFFF0,按照65535算

这里为什么不考虑1.24V ?其实这个1.24V是中间电位,在获取电流时都会把它减去的,所以不影响。

                                                                                    图6

现在继续看对齐相关代码:

                                                                      图7

对齐控制要靠变量“EncAlignCtrlM1”起作用,这里将变量“VirtualSpeedSensorM1”以及另外两个都挂在“EncAlignCtrlM1上:

重点看下面几个状态机:

 

                                                        图9

代码中添加了一个“虚拟速度传感器”

图10

但是,这两个数据结构的“_Super”却都是同样类型:

 

                                          图11

再看针对它的调用:

                                                                      图12

对齐过程中不断调整力矩(力矩是一个逐渐增大的过程)

                                                                       图13

 

                                                        图14

状态机控制的调用函数名为“TSK_MediumFrequencyTaskM1”,这里为500Hz的调用频率,而力矩的精细控制是在“TSK_HighFrequencyTask”中:

                                                        图15

看图中提出的问题:对齐的时候,采用了虚拟速度传感器,这里计算角度却是针对“ENCODER_M1”,为什么呢?

其实我们初始化时将“VirtualSpeedSensorM1. _Super. hElAngle”设置成了固定角度,比如本项目中为90度。

具体代码体现:

                                                                      图16

在上图中代码,函数“EAC_StartAlignment()”中执行“VSS_SetMecAngle()”后,“VirtualSpeedSensorM1. _Super. hElAngle”中的值就是90度了(s16单位)

                                                        图17

图17中代码,用来进行计算的电角度实际上是从“VirtualSpeedSensorM1. _Super. hElAngle”中获取,而图16中已经展示了这个值实际上就是一个固定的值:90度,这个90度也就是图1中,在代码生成器中设定的值。

 

总结:

              控制对齐的策略就是一直用设定的角度进行计算,比如90度,其结果类似于一直针对90度施加力矩,经过规定的时间(比如本项目中为700ms)后,就认为对齐结束了。当然,施加力矩的过程,其大小是一个线性从小变大的过程。

在对齐过程中,在函数 “TSK_HighFrequencyTask()”中调用“ENC_CalcAngle()”基本没啥作用。 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值