sipeed / MaixPy3

Python sdk for Sipeed Maix-II-Dock(v831). Other board please use https://github.com/sipeed/MaixPy
https://wiki.sipeed.com/maixpy3
MIT License
173 stars 43 forks source link

關於v831 pwm輸出頻率 #31

Open akioolin opened 2 years ago

akioolin commented 2 years ago

Hi, Sir:

最近入手sipeed maix ii dock, v831,試著使用板子上的3路pwm驅動遙控車 常使用的servo。該種servo的pwm頻率是50Hz。pwm產生為使用maixpy3的pwm 類別,使用示波器量測信號,最靠近的頻率是61Hz,無法再低。

maix ii dock上燒錄的映像檔版本是maixpy3-0.3.5_MaixII-Dock_20211216.img。

附件圖檔中的程式碼是用來測試pwm頻率的設定方式。 15443815005377

excel檔案是紀錄不同period設定量到的pwm頻率。 v831_pwm.xlsx

波形圖檔如下。使用FNIRSI 1013D示波器量測到的波形。 7

請問maixpy3對v831的pwm類別,要怎麼設定才能產生50Hz的pwm信號? 感謝您。

BR, Akio

junhuanchen commented 2 years ago

最新的文档已经更新啦,来check一下。

https://wiki.sipeed.com/soft/maixpy3/zh/usage/hardware/PWM.html

我这边还没有开始验证和测试具体的波形数据,需要结合数据手册确认一下。

数据手册在这里 https://linux-sunxi.org/images/b/b9/V833%EF%BC%8FV831_Datasheet_V1.0.pdf ,我这几天 2022年01月20日-2022年01月24日 在陆续更新 wiki ,所以暂时没有办法帮你验证。

也许这是个问题,因为我这里单纯测试了一下手边的一个舵机。

akioolin commented 2 years ago

Hi, @junhuanchen :

非常感謝您提供更新版本的訊息。手邊的SD內的maixpy3需要更新。等更 新後,再來更新相關波形資料。

驗證可等您手邊的工作沒那麼緊張再來看看。我手邊看到的是波形頻率最低 只能到61Hz。

根據linux pwm driver source code中config函式中的內容,可參考以下連結。 https://github.com/Tina-V833/linux-4.9/blob/fbf240beb4223925e3ef0b17593ffa88cf37eb8d/drivers/pwm/pwm-sunxi-group.c

當period超過334ns後,pwm的clock似乎就被設定為24MHz。接著是一連串的 神奇操作,關於設定pre-scaler以及cycles數。這些動作需要花點時間了解。

請教pwm相關操作函式是要看single還是dual版本?

BR, Akio

akioolin commented 2 years ago

Hi, @junhuanchen

經過一些嘗試後,終於找到一個很快速的修正輸出pwm頻率的方式。 測試程式碼請參考附件的pwm_demo.txt檔案。 pwm_demo.txt

輸出波形圖請參考附件的圖檔。波形圖檔有點跑掉,請包涵。 pwm

要達到輸出想要的pwm頻率,可以從PCR的16bit counter回推。 假設PWM頻率為100,16bit counter設定為60000,100 * 60000 = 6000000, 6MHz。 亦即從PCCR決定clock source,之後使用PCCR及PCR推敲合適的除頻係數。

從pwm-sunxi-group.c驅動程式來看,似乎PCCR及PCR的設定跟實際輸出有落差。

可以多試幾種組合,看看實際輸出跟預期的差別。

BR, Akio

junhuanchen commented 2 years ago

感谢!