鬆翰微控制器--SN8F5702學習筆記(五)PWM
PW1定時器包括一個16位二進位制上升4通道PWM和一個脈衝PWM功能。由計數器達到上限值(PW1Y),清除其計數器並觸發中斷訊號。PWM的佔空比由PW1D暫存器控制。PWM還支援一個脈衝輸出訊號,該訊號可在第一個PWM結束時自行禁用週期。因此,在這種情況下只能產生一個脈衝。 PWM有四個可程式設計通道與GPIO引腳共用,由PW1CH暫存器控制。輸出操作必須是通過使能PW1CH暫存器的每個位/通道。啟用的PWM通道交換GPIO到PWM輸出。當PW1CH暫存器禁用時,PWM通道返回上一狀態GPIO模式。如果中斷使能,則PWM內建空閒模式喚醒功能。當PWM時發生定時器溢位(從PW1Y-1到PW1Y計數),PWM1F將立即發出可以通過韌體讀/寫。 PWM時鐘源為fosc,除以1至128倍由PW1R [2:0]位控制。 PW1中斷功能由EPWM1控制。
普通PWM
PW1定時器內建PWM功能,由PW1EN和PW1CH暫存器控制。 PWM10,PWM11,PWM20,PWM21是輸出引腳(與P0.5,P0.6,P1.4和P1.5共用)。 那些輸出引腳是與PW1CH暫存器控制的GPIO引腳共用。 輸出PWM功能時,必須設定PW1EN = 1。 當PWM輸出訊號同步完成時,PWM通道交換GPIO到PWM輸出。 當PW1EN = 0時,PWM通道返回GPIO模式並返回上一個狀態。
從PW1Y和PW1D比較組合的結果產生PWM訊號。 當PW1C從0x0000開始計數,PWM輸出高電平狀態,即PWM初始狀態。 PW1C是從PW1Y暫存器載入新資料以確定PWM週期和解析度。 PW1C繼續計數,並且系統比較PW1C和PW1D。 當PW1C = PW1D時,PWM輸出狀態交換到低PW1C繼續計數。 當PW1定時器溢位時(PW1Y-1至0x0000),並且PWM訊號的一個週期結束。 PW1C自動從0x0000重新載入,並且PWM
輸出狀態在下一個週期交換為高電平。 PW1D決定高佔空比和PW1Y決定PWM的解析度和週期。 PW1D不能大於PW1Y,否則PWM訊號將是錯誤的。
單脈衝PWM
當PW1PO = 0時,PW1為PWM功能模式。 當PW1PO = 1且PW1EN = 1時,PW1將輸出PW1計數器溢位時,發出單脈衝PWM功能和PWM1F。 PW1EN位清零自動和脈衝輸出引腳返回空閒狀態。 輸出下一個脈衝是設定PW1EN位按程式再次。 由PW1CH暫存器選擇的一個脈衝PWM通道。 當輸出一個脈衝PWM功能時,我們必須設定PW1PO = 1和PW1EN = 1。 當一個脈衝PWM輸出訊號同步完成後,PWM通道從GPIO切換到PWM輸出。 當一個脈衝PWM輸出結束,PW1EN = 0,PWM通道返回GPIO模式和上一個狀態。
反轉和死區
PWM建立反向輸出功能。 當PWNVn = 1時,PWM具有一個反向PWM訊號。當PWNVn = 1時,PW1輸出PWM1的反向PWM訊號。 當PWNVn = 0時,PW1輸出PWM1的非反向PWM訊號。反向PWM輸出波形如下圖。
PWM死區出現在PWM高脈衝寬度,死區週期可程式設計來自PW1A和PW1D-PW1B暫存器。 死區週期在左右終端是對稱的PWM脈衝寬度與否。 如果死區週期長於PWM佔空比,則PWM不輸出。
PWM暫存器
1、PWM輸出引腳控制:PW1CH
暫存器 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
PW1CH | - | - | PWCH21 | PWCH20 | - | - | PWCH11 | PWCH10 |
引腳對應 | - | - | P1.5 | P0.6 | - | - | P1.4 | P0.5 |
解釋 | - | - | 設定為0則為普通引腳,設定為1則作為PWM輸出引腳 | 同左 | - | - | 同左 | 同左 |
2、PWM功能模式配置:PW1M
暫存器 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
PW1M | PW1EN | PW1R2 | PW1R1 | PW1R0 | PWNV2 | PWNV1 | - | PW1PO |
解釋 | PWM使能:1開啟,0關閉 | 時鐘源選擇2位 | 時鐘源選擇1位 | 時鐘源選擇0位 | PWM20/21輸出控制:1可反轉,0不可反轉 | PWM10/11輸出控制:1可反轉,0不可反轉 | - | 單脈衝功能:1開啟,0關閉 |
時鐘源選擇位:
值 | 分頻 |
---|---|
000 | fosc / 128 |
001 | fosc / 64 |
010 | fosc / 32 |
011 | fosc / 16 |
100 | fosc / 8 |
101 | fosc / 4 |
110 | fosc / 2 |
111 | fosc / 1 |
3、PWM週期控制:PW1YH,PW1YL
16位
4、PWM佔空比控制:PW1DH,PW1DL
16位
5、PWM死區控制B點:PW1BH,PW1BL
16位
6、PWM死區控制A點:PW1A
8位
注意:在死區控制配置中,B點必須要大於A點
PW1M |= 0x70; // PW1 rate is Fhosc/1 PWMÊä³öƵÂÊΣ(32/1)/256 = 125KHZ PWMÖÜÆÚΪ8uS
PW1M |= 0x08; // enable PWM20/21 output
PW1M |= 0x04; // enable PWM10/11 output
// PW1M |= 0x01; // enable PW1 pulse output function (PW1PO)
PW1YH = 0x00;
PW1YL = 0xFF; // set PW1 cycle control 256
PW1DH = 0x00;
PW1DL = 0x40; // set PWM duty control 64 佔空比為25%(低電平的佔空比)