PWM的原理,簡而言之就是利用佔空比可調的數字脈衝來控制和驅動類比電路以及外部的器件。
本質上,PWM生成與編碼器測量的最大區別就在於:PWM利用定時器直接計數比較邊沿跳變;編碼器測量卻是利用了定時器的時鐘角色轉換來達到計數目的。
雖然PWM利用的是定時器的計數加比較模式生成的,但定時器不會產生任何中斷,因此使用者只需要對定時器進行簡單配置即可生成PWM波,無需編寫中斷服務子VI(因為使用到定時器,所以還需要建立中斷服務子VI,只不過是不需要編寫程式,即空VI,便於編譯透過)。
本次實驗如何時利用PWM驅動航模上的舵機。
舵機實物:
工作時序圖:
實驗預期目標:程式啟動執行後,按住主VI前面板上的圓形儀表盤指標左右拖動,生成不同軸轉角下的PWM波形,驅動舵機跟隨圓盤指標左右擺動。
開始編寫程式
基於VI實現
一,建立工程:PWM驅動舵機實驗
1,建立主VI:PWM驅動舵機
2,子VI:新建一個定時器中斷服務模板程式Timer_ISR。vi,開啟其程式框圖,將裡面預設的程式全刪掉,變成一個空VI。
二,編寫主VI
程式流程步驟
1,定時器初始化
2,定時器輸出通道對映
3,PWM工作模式設定
4,PWM允許輸出至物理引腳
5,定時器計數模式開啟
6,更新PWM波的頻率和佔空比
編寫程式
使用定時器4
1,定時器初始化
使用者可以根據定時器初始化函式設定的自動重灌值與時鐘計數頻率計算出將要生成的PWM波頻率值。
一般情況下,舵機需要的PWM頻率為50Hz。
PWM頻率=時鐘計數頻率/自動重灌值=1MHz/20000=50Hz=1/20ms
2,定時器輸出通道對映
3,PWM工作模式設定
PWM波形有兩種形狀:PWM1(低電平在前,高電平在後);PWM2(高電平在前,低電平在後)。在mode上的選擇,一般採用PWM2,這個模式下設定的佔空越大,那麼等效的高電平時間就越長。
要注意驅動舵機的電路,由於驅動三極體的存在,可能因三極體而取反,當在實驗中,發現舵機不轉動時,再將模式更換過來。
4,PWM允許輸出至物理引腳
PWM產生後,還可以手動設定是否將PWM波真正關聯到實際的物理引腳上,這樣設計的目的在於使用者可以隨時開啟或者關閉物理引腳上的PWM脈衝訊號。例如,控制電機剎車。
5,定時器計數模式開啟
當定時器計數到佔空比換算後的數值時就會產生邊沿翻轉,計數到自動重灌值時,定時器清零重新開始計數。迴圈反覆,就會產生一個連續的PWM波。
6,更新PWM波的頻率和佔空比
(1)while迴圈
更新正空比函式設定
在前面板新增儀表(在屬性裡面設定成0~180度),來顯示舵機旋轉度數
(4)將度數轉換成佔空比
將儀表轉換為輸入和U8資料:
轉換邏輯:
佔空比=(舵機旋轉度數/20+2)%
依實際情況進行調整
將while迴圈的迴圈條件端子改為新增輸入控制元件,完成整個程式如圖
三,將程式編譯,下載到開發板上,連線好舵機模組
在前面板的儀表控制元件上,調整旋轉度數,舵機就會實時轉動。