当前位置:   article > 正文

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

tsk_mediumfrequencytaskm1

编者:沉尸 (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()”基本没啥作用。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/103136
推荐阅读
相关标签
  

闽ICP备14008679号