1. 用51單片機同時實現四路PWM波,(C語言)
定個時間20ms周期的定時器,然後在定時器到達那些點的時候,讓自己設的那些變數依次變化。 再根據自己的變數,付給輸出埠就可以了。 看著像舵機的
看了你追問的,原來是四路每一路都產生變化的波形。那個也好辦。可以通過計算,把這幾個波形統一起來成一個周期,比如開始0.5ms到了,讓定的值取反,再加19.5再取反,再加1.3Ms再取反,再加18.7ms再取反...然後一直這樣把幾個都寫完。
還有種方法,來改變第一個pwm的設定值。比如放數組里一共5個設定值,分別代表你設定的高電平時間,依次替換第一個定時器裡面的中端時間即可。
當然,前兩種都差不多,還有一種方法供你擴展:就是用兩個定時器,然後按照時間去匹配修改。當然,51單片機那精度就不說了,不太確信可以達標,一個定時器進中斷了,另一個就要停一下。。
BTW,個人感覺51的單片機沒有很好的pwm模塊,這樣寫了Pwm程序,別的就幹不了了。建議用用帶epwm模塊的mcu,直接調用epwm和epwm中斷,節省cpu資源,可以多寫很多程序。
2. stc8h單片機如何設置pwm頻率
首先,STC8H不需要外部晶振和外部復位,也可以外接。它的時鍾4M-36M。和其它stc晶元的區別是它的運行速度夠快,8路16位的高級pwm定時器,4路可以輸出互補的脈沖信號,在用這個晶元的時候我發現手冊上有些地方講的不是太清楚,對照了32的手冊才明白了原理,今天著重說一下高級定時器的那部分。
STC8H 系列的單片機內部集成了 8 通道 16 位高級 PWM 定時器,分成兩組周期可不同的 PWM,分別命名為 PWMA 和 PWMB可分別單獨設置。第一組 PWM/PWMA 可配置成 4 組互補/對稱/死區控制的 PWM 或捕捉外部信號,第二組 PWM/PWMB 可配置成 4 路 PWM 輸出或捕捉外部信號。
pwmA可配置成輸出比較,輸入捕獲以及pwm模式,pwm有邊沿對齊以及中間對齊模式,可直接驅動一些小型的電機,在驅動一些小型的電機時一定要將相應的io口配成推挽輸出在,不然驅動不起來,具體的原理就不寫了,主要說一下主要寄存器以及主要模式的配置。
選擇計數器時鍾(內部、外部或者預分頻器(PSCR)),我用的都是內部。
預分頻器看你想要輸出的頻率范圍自己設置
2. 將相應的數據寫入 PWMA_ARR(設頻率) 和 PWMA_CCRi (設占空比)寄存器中。頻率=時鍾/(PSCR+1)/(ARR+1)
3. 如果要產生一個中斷請求,設置 CCiIE 位,在中斷判斷SR1狀態位,PWMA和PWMB不是一個中斷號。
4. 選擇輸出模式步驟:
1. 設置 OCiM=011,在計數器與 CCRi 匹配時翻轉 OCiM 管腳的輸出
2. 設置 OCiPE = 0,禁用預裝載寄存器
3. 設置 CCiP = 0,選擇高電平為有效電平,開始輸出高電平。
4. 設置 CCiE = 1,使能輸出
5. 設置 PWMA_CR1 寄存器的 CEN 位來啟動計數器。
輸入捕獲配置:
先設置PSCR,根據你的所測頻率范圍來設數據。設ARR一般為最大值
1.選擇有效輸入端,設置 PWMA_CCMR1 寄存器中的 CC1S=01,此時通道被配置為輸入,並且PWMA_CCR1 寄存器變為只讀。
2. 根據輸入信號 TIi 的特點,可通過配置 PWMA_CCMR1 寄存器中的 IC1F 位來設置相應的輸入濾波器的濾波時間。假設輸入信號在最多 5 個時鍾周期的時間內抖動,我們須配置濾波器的帶寬長於 5 個時鍾周期;因此我們可以連續采樣 8 次,以確認在 TI1 上一次真實的邊沿變換,即在PWMA_CCMR1 寄存器中寫入 IC1F=0011,此時,只有連續采樣到 8 個相同的 TI1 信號,信號才為有效(采樣頻率為 fMASTER)。
3. 選擇 TI1 通道的有效轉換邊沿,在 PWMA_CCER1 寄存器中寫入 CC1P=0(上升沿)。
4. 配置輸入預分頻器。在本例中,我們希望捕獲發生在每一個有效的電平轉換時刻,因此預分頻器被禁止(寫 PWMA_CCMR1 寄存器的 IC1PS=00)。
5. 設置 PWMA_CCER1 寄存器的 CC1E=1,允許捕獲計數器的值到捕獲寄存器中。
6. 如果需要,通過設置
PWMA_IER 寄存器中的 CC1IE 位允許相關中斷請求。
7.使能計數器設置 PWMA_CR1 寄存器的 CEN 位來啟動計數器。
3. 立創上面的STC12C5410AD單片機能輸出幾路PWM
STC12C5410AD 單片機,是高速/ 低功耗/ 超強抗干擾的新一代8051 單片機,指令代碼完全兼容傳統8051,但速度快8-12 倍,內部集成MAX810 專用復位電路。4 路PWM,8 路高速10 位A/D 轉換,針對電機控制,強干擾場合。
1. 增強型 8051 CPU,1T,單時鍾/ 機器周期,指令代碼完全兼容傳統8051
2. 工作電壓:
STC12C5410AD 系列工作電壓:5.5V - 3.5V(5V 單片機)/ 3.8V - 2.2V(3V 單片機)
3. 工作頻率范圍:0 - 35 MHz,相當於普通8051 的 0~420MHz
4. 用戶應用程序空間1K / 2K / 4K / 6K / 8K / 10K / 12K 位元組......
5. 片上集成 512 位元組 RAM(STC12C5410AD 系列),
6. 通用I/O 口(27/23/15 個),復位後為: 准雙向口/ 弱上拉(普通8051 傳統I/O 口)
可設置成四種模式:准雙向口/ 弱上拉,推挽/ 強上拉,僅為輸入/ 高阻,開漏
每個I/O 口驅動能力均可達到20mA,但整個晶元最大不得超過55mA
7. ISP (在系統可編程)/IAP(在應用可編程),無需專用編程器,無需專用模擬器
可通過串口(P3.0/P3.1)直接下載用戶程序,數秒即可完成一片
8. EEPROM 功能
9. 看門狗
10. 內部集成MAX810 專用復位電路(外部晶體12M 以下時,可省外部復位電路)
11. 時鍾源:外部高精度晶體/ 時鍾,內部R/C 振盪器 用戶在下載用戶程序時,可選擇是使用內部R/C 振盪器還是外部晶體/ 時鍾 常溫下內部R/C 振盪器頻率為:5.2MHz ~ 6.8MHz
精度要求不高時,可選擇使用內部時鍾,但因為有製造誤差和溫漂,應認為是4MHz ~ 8MHz
12. 共6 個16 位定時器/ 計數器,兩個專用16 位定時器T0 和T1再加上PCA 模塊可再實現4 個16 位定時器。
13. 2 個時鍾輸出口,可由T0 的溢出在P1.0 輸出時鍾,可由T1 的溢出在P1.1 輸出時鍾
4. 51單片機一共能產生幾路pwm波控制電機速度。
這與定時器的數量有關,還有的單片機有專門的PWM發生器,比如STC12系列的就有兩個PWM定時器。當然還可以用另外兩個定時器模擬PWM,所以共有四個,想52單片機有3個定時器,所以可以模擬出3路PWM。
5. 51單片機可以輸出幾路PWM
現在好多51單片機有自帶的PWM,沒有的話可用定時器做啊
比如STC的好多都有,最多的有四路PWM