疑问1.如上图所示,SpeedScaler的计算原理是什么呢?为什么要这样计算呢?这与Speed_PF函数库中的计算方式并不一样。
疑问2.
如上图所示,调用speed_pr_macro的条件是当前霍尔状态是5,上一时刻霍尔状态是4,即经过了一个完整的霍尔6拍。这样设计是为什么呢?
调试:
我有一台4极电机,即极对数是2,电机运行一周将会给出两个完整的霍尔周期,电机额定转速3000RPM。在调试LEVEL3时,测量到的三相霍尔信号波形如下图所示:
可以看到,霍尔状态的持续时间为21.79mS,即换相间隔为21.79mS,根据电机极对数及该换相间隔,计算得到的转速为:
为此,我用excel做了一个公式表格。于此同时,在CCS变量观测窗口中观测到的转速值如下图所示:
可以看到,根据霍尔信号计算出的转速值与SPEED_PR计算的转速值一致
推导SpeedScaler:
上图为根据SPEED_PR函数说明文档进行的推导过程。电机额定转速3000RPM,公式1中的n是要反推的变量。
公式3计算角速度最大值,公式2计算角速度
公式4反推n,如果SpeedScaler按照代码的公式计算为400,可以反推出n=2。在SPEED_PR中,“n=number of teeth in the sprocket,i.e. the number of pulses per revolution”
这里的推导出的n = 2,与电机极对数2,以及调用SPEED_PR的判断条件“if( ( pwm1.CmtnPointer == 5 ) && ( PreviousState == 4 ) && ( hall1.CmtnTrigHall == 0x7FFF ) )” 这三者间是不是有某种联系