在片上PWM(脈沖寬度調(diào)制)資源方面,,低成本的8位單片微控制器是很吝嗇的,。設(shè)計(jì)人員在采用PWM資源時(shí),經(jīng)常被迫要犧牲一個(gè)捕捉/比較通道或定時(shí)器通道,,因?yàn)镻WM通道要共用相同的片上資源。本例描述了如何用一個(gè)片上未用同步串行端口來(lái)產(chǎn)生PWM信號(hào),,并將它們轉(zhuǎn)換為一個(gè)慢速移動(dòng)的模擬信號(hào)(圖1),。很多基于微控制器的獨(dú)立電氣設(shè)備都不會(huì)使用同步串行端口。因此,,可以用微控制器的波特率發(fā)生器和并/串轉(zhuǎn)換器部分來(lái)生成位模式,,構(gòu)成一個(gè)256位的PWM形式。然后用RC濾波器過(guò)濾這個(gè)PWM輸出,,提取出一個(gè)模擬信號(hào)(參考文獻(xiàn)1),。同步通信沒(méi)有異步通信的起始位和停止位,因此位模式可以產(chǎn)生出長(zhǎng)周期的高電平或低電平,。
圖1,,可以用片上未用的同步串行端口產(chǎn)生PWM信號(hào),并將其轉(zhuǎn)換為一個(gè)慢速運(yùn)動(dòng)的模擬信號(hào),。
采用這種概念,,可以用一個(gè)十進(jìn)制數(shù)165產(chǎn)生原數(shù)據(jù)(圖2)。一個(gè)PWM轉(zhuǎn)換周期包含生成的256位,,即32字節(jié),。“on”位的數(shù)量對(duì)應(yīng)于轉(zhuǎn)換為PWM的原數(shù)據(jù)值。因此,,對(duì)于165位的原數(shù)據(jù),,有165位個(gè)on,91位個(gè)off,。要產(chǎn)生一個(gè)165位的on周期,,前20個(gè)字節(jié)(即160位)傳送為0×ff個(gè)on態(tài)字節(jié)。訣竅在于第21個(gè)字節(jié)(或過(guò)渡字節(jié))的組成,。該字節(jié)的一些LSB(最低有效位)為1,,其余為0,,構(gòu)成所需要的on周期長(zhǎng)度。在這一例子中,,電路需要5個(gè)以上的on位:160+5=165,。因此,過(guò)渡字節(jié)的形式應(yīng)為0001111b(字節(jié)=0×1f),。
圖2,,采用這種概念,可以用十進(jìn)制值165產(chǎn)生原數(shù)據(jù),。
圖3以流程圖的形式表示這個(gè)過(guò)程,。通過(guò)選擇晶體、PLL(鎖相環(huán))和波特率,,可以根據(jù)自己的應(yīng)用修改PWM頻率,。用簡(jiǎn)單的RC濾波器就可以將PWM轉(zhuǎn)換為一個(gè)慢速運(yùn)動(dòng)的模擬值。雖然本方法描述的是一個(gè)8位PWM,,但也可以修改每個(gè)PWM周期的總位數(shù),,從而增加或降低分辨率。相應(yīng)地增加或減少了轉(zhuǎn)換時(shí)間,。
圖3,,通過(guò)選擇晶體、PLL和波特率,,可以針對(duì)自己應(yīng)用修改PWM頻率,。
代碼采用的是Microchip公司的PIC18F4525,它用一只4MHz晶體,,以及用于同步串行通信的10kHz波特率,,獲得10000/256=39.31Hz的PWM頻率??梢杂靡粋€(gè)0.1s的RC濾波器對(duì)其作濾波,,對(duì)慢速運(yùn)動(dòng)的模擬信號(hào)來(lái)說(shuō)這已足夠,如運(yùn)動(dòng)控制應(yīng)用的速度設(shè)置點(diǎn),。采用20MHz晶體時(shí),,可以實(shí)現(xiàn)大于1.5MHz的同步串行波特率,以及數(shù)kHz的PWM頻率,。
Reference
1. Mitchell, Mike,“Make a DAC with a microcontroller’s PWM timer,”EDN, Sept 5, 2002, pg 110.