2020年3月10日 星期二

伺服馬達

經過查看 Servo 函式庫的文件後,發現預設 0 度的脈衝寬度是 544 microsecond,也就是 0.544 ms,而預設 180 度的脈衝寬度則是 2400 microsecond,也就是 2.4 ms。而在某些文件中可以看到 SG90 的脈衝寬度為 0.5 ms ~ 2.4 ms,所以使用 1 ms ~ 2 ms 當然就會有很大的偏差。此外,少數資料對 0.5 ms ~ 2.4 ms 的解釋是 SG90 可以擁有更大的旋轉角度,但是很顯然實際上並不是這樣。否則根據這句話來看,SG90 已經可以旋轉接近 360 度了。
同樣在頻率為 50Hz 的情況下,脈衝寬度為 0.5 ms 時的工作週期為 2.5%,而 2.4 ms 的工作週期則為 12%,所以針對 SG90 修改公式如下:
x(%)=2.5+122.5180×x=2.5+1936×x()

一樣是一個一元一次函數。
不過在實際撰寫程式時,因為我們希望頻率是可以由程式加以指定,所以需要重新改寫如下:
PWM_FREQ1PWM_FREQ103PWM_FREQms

0.5ms(%)=0.5103PWM_FREQ×100=0.5×PWM_FREQ103×100=0.5×PWM_FREQ10=0.05×PWM_FREQ

2.4ms(%)=2.4103PWM_FREQ×100=2.4×PWM_FREQ103×100=2.4×PWM_FREQ10=0.24×PWM_FREQ

PWM_FREQx(%)=0.05×PWM_FREQ+0.24×PWM_FREQ0.05×PWM_FREQ180×x=0.05×PWM_FREQ+0.19×PWM_FREQ180×x=0.05×PWM_FREQ+0.19×PWM_FREQ×x180()

此公式即為後面 Python 程式所使用之計算方式。

沒有留言:

張貼留言