新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 淺談利用單片機設計PWM脈沖信號發生器

        淺談利用單片機設計PWM脈沖信號發生器

        作者: 時間:2016-11-24 來源:網絡 收藏
        PWM是脈沖寬度調制(Pulse Width Modulation)的英文縮寫,它是開關型穩壓電源中按穩壓的控制方式分類中的一種,而脈寬寬度調制式(PWM)開關型穩壓電路是在控制電路輸出頻率不變的情況下,通過電壓反饋調整其占空比,從而達到穩定輸出電壓的目的。
        簡單的說,PWM是一種對模擬信號電平進行數字編碼的方法。理論上講就是電壓或電流源以一種通(ON)或斷(OFF)的重復脈沖序列被加到模擬負載上去的,通的時候就是電源被加到負載上,斷的時候就是供電被斷開的時候,所以PWM信號仍然是數字的。要想達到這樣一種脈寬調制效果,模擬電壓和電流時可以直接控制。例如音響的音量控制,在簡單的模擬電路中,它的控制是由連接了一個可變電阻的旋鈕來實現的,其過程是擰動旋鈕,電阻值變小或變大,流過該電阻的電流也隨之增加來減小,從而改變驅動揚聲器的電流值,那么聲音也就相應變大或變小。從這個例子來看,模擬控制是直觀而簡單的,但是并不是所有的模擬電路都是可行并且經濟的,其中很重要的一點就是模擬電路容易隨時間漂移,它的調節過程就很困難,為了解決問題就要增加很多的電路,使得電路變得復雜并且昂貴。除此之外,模擬電路中許多的元器件會發熱,也就相對提高了電路的功耗,并且對噪聲也敏感,任何干擾或噪聲都會改變電流值的大小。
        綜上所述,通過數字方式來控制模擬電路可以大幅度降低系統的成本和功耗,而單片機I/O口的數字輸出可以很簡單地發出一個脈沖波,在配以外部元器件就可以調節脈沖波的占空比,完成PWM的功能。本文主要介紹利用89S52系列的單片機,控制某個I/O口中一個管腳的數字輸出,生成相應周期的脈沖波,并利用按鍵控制其占空比的調節,包括了占空比自小到大和自大到校的順序及倒序可調,其調節范圍廣,操作簡便,各元器件間的干擾較小,對模擬電路的控制十分有效。
        1.PWM波的生成
        PWM波既為數字輸出,就是其幅值只有高電平(ON)和低電平(OFF)之分,所以只要使單片機中作為PWM波輸出端的那個管腳輸出“1”和“0”,并且搭配不同的時間段,就可以形成不同周期的PWM波。舉例說明:若要生成周期為10ms的脈沖,就可以利用單片機編程指令控制其輸出端輸出“1”,并且保持一段時間tp,然后再輸出“0”,同樣使其保持一段時間tr,兩種數字輸出保持的時間必須要滿足,現就已生成10ms周期的脈沖波,而PWM波與該脈沖波的區別就是還要能夠調節占空比。占空比是指正半周脈寬占整個周期的比例,即高電平保持時間于周期的比值,該比值為百分數(),因此在周期一定的情況下,調節占空比就是調節高電平保持的時間。
        2.應用編程
        本文介紹的PWM波是利用單片機定時中斷去確定脈沖波的周期,并且通過兩個按鍵自增和自減某個變量送至中斷中,通過此變量去分配高低電平各自占用的時間,形成不同的占空比,即假設一個周期滿額比例值為10,則高電平保持時間的比例為該變量值,那么低電平保持時間的比例就是10減去該變量值。
        如圖1所示為單片機的外部接線圖,其中省略了單片機最小系統,此圖即可利用89SC52單片機設計出滿足周期為10ms、初始占空比為50%、占空比調節范圍為0~100%的PWM脈沖信號發生器。占空比調節范圍是指高電平保持時間為0~10ms,那么低電平保持時間就是10ms~0。P0.7腳為PWM波輸出口,作為PWM脈沖信號發生器可連接其它電路,本文僅連接示波器去觀察波形的占空比變化情況,P2.0腳為自增按鈕控制端,每按一次高電平保持時間增加1ms,P2.1腳為自減按鈕控制端,每按一次高電平保持時間減少1ms。圖2所示為初始50%占空比的波形圖以及20%、40%、60%和80%占空比的波形圖,以此看出PWM的變化。
        89C52單片機生成PWM波C語言程序:
        #define uint unsigned int
        sbit pwm=P0^7;
        sbit k1=P2^0;
        sbit k2=P2^1;
        bit bz;//定義一個按鍵是否松開的標志位
        uchar b;
        uchar m=5;//m為控制占空比的變量,初始占空比50%
        void delay(uint i)
        {while(i--);}
        void dingshi() interrupt 1//定時中斷
        {TL0=(65536-1000)%256; //1ms初始化
        TH0=(65536-1000)/256;
        b++;
        if(b==10) b=0; //10ms周期定時
        if(b void main()
        {EA=1;ET0=1;
        TMOD=0x01;//定時0工作在方式1,1ms中斷1次
        TL0=(65536-1000)%256;
        TH0=(65536-1000)/256;
        TR0=1;//開中斷
        while (1)
        {if((k1==0)&&(bz==0)) {delay(1110);if(k1==0){bz=1;m++;if(m==11) m=10;}}//每按一次占空比自增10%
        if((k2==0)&&(bz==0)) {delay(1110);if(k2==0){bz=1;m--;if(m==255) m=0;}}//每按一次占空比自減10%
        if((k1==1)&&(k2==1)) bz=0;//判斷按鍵是否松開}}
        綜合硬件設計和軟件設計可以看出,利用單片機數字輸出方式可以很簡單的完成脈沖寬度的調制,無須通過對模擬電路各元器件參數的計算進行調節,并且可以隨時調整輸出不同周期的脈沖波,利用該方法設計的PWM脈沖信號發生器可以很廣泛。但是此設計也有一些缺點,其占空比只能按10%的比例調節,調節精度還有待提高。
        參考文獻
        【1】何立民,張俊謨.單片機中級教程:第2版[M].北京:北京航空航天大學出版社,2002.
        【2】吳金戌,沈慶陽,郭庭吉.8051單片機實踐與應用[M].北京:人民郵電出版社,2003.
        【3】賀小光,藍諷,陳敬艷.PWM可調直流穩壓控制電源電路的設計研究[J].東北師大學報


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宾川县| 鹤山市| 贡山| 阿荣旗| 黄冈市| 呼和浩特市| 科尔| 双桥区| 东乡族自治县| 麻城市| 壤塘县| 平安县| 河北区| 连云港市| 灵川县| 湄潭县| 淮滨县| 大竹县| 钦州市| 平原县| 遂昌县| 通化县| 阳曲县| 乐亭县| 牟定县| 浦江县| 丹凤县| 成都市| 莱芜市| 岗巴县| 厦门市| 银川市| 朝阳县| 永胜县| 额尔古纳市| 宾川县| 湟中县| 卓资县| 镇赉县| 沂水县| 浏阳市|