新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 軟件實現多路PWM的輸出

        軟件實現多路PWM的輸出

        作者: 時間:2012-10-27 來源:網絡 收藏
        單片機應用于舞臺燈光、民用照明的調光、電機轉速、溫度控制等眾多領域時需要用到PWM占空比進行調節。市場上,集成了硬件PWM模塊的單片機型號如PIC16F628A、STC12C2052等。使用硬件PWM時僅需進行一些特殊功能寄存器的設置,使用方便。但硬件PWM輸出路數往往較少,如果要增PWM的輸出路數則會使產品成本上升,較難適應于價格敏感的產品上。如:PIC16F628A、STC12C2052僅具有兩路PWM輸出。舞臺光通常要到用三路PWM信號調光(三路分別控制紅、綠、藍三基色進行組合搭配出不同色彩)。因此軟件實現PWM是較為合理的選擇。

        在舞臺燈光廠做了這么久,雖然明白軟件PWM的原理,但就是弄不清它們的關系,一直寫不出比較好的軟件PWM程序。近日,一偶然的機會得到啟發,寫下這個程序和單片機愛好者分享。

        程序如下:

        AUXR EQU 8EH
        PWM1DATA EQU 60H
        PWM2DATA EQU 61H
        PWM3DATA EQU 62H
        PWM1DATA1 EQU 63H
        PWM2DATA1 EQU 64H
        PWM3DATA1 EQU 65H
        PWM1 EQU P0.5
        PWM2 EQU P0.6
        PWM3 EQU P0.7
        ORG 0000H
        AJMP MAIN
        ORG 000BH
        AJMP TIMER0
        ORG 0030H
        MAIN:
        CLR PWM1
        MOV P0,#11H
        MOV SP,#30H
        MOV AUXR,#01H
        CLR RS1
        CLR RS0
        MOV TMOD,#02H
        MOV TH0,#00H

        MOV TL0,#00H
        MOV R2,#0FFH;R2用作PWM周期寄存器
        MOV PWM1DATA,#0
        MOV PWM2DATA,#85
        MOV PWM3DATA,#170
        MOV PWM1DATA1,PWM1DATA
        MOV PWM2DATA1,PWM2DATA
        MOV PWM3DATA1,PWM3DATA
        SETB EA ;開中斷總控制
        SETB ET0;開TO中斷控制
        SETB TR0 ;開始 計數

        MAIN1:
        ACALL DEL
        INC PWM1DATA
        INC PWM2DATA
        INC PWM3DATA
        AJMP MAIN1
        DEL:
        MOV R4,#05H
        D1:
        MOV R5,#0FFH
        D2:
        MOV R6,#0FFH
        DJNZ R6,$
        DJNZ R5,D2
        DJNZ R4,D1
        RET

        TIMER0: ;定時器中斷
        PUSH ACC
        TIMER001:
        MOV A,PWM1DATA1
        JZ TIMER0011
        SETB PWM1
        DEC PWM1DATA1
        AJMP TIMER002
        TIMER0011:
        CLR PWM1
        TIMER002:
        MOV A,PWM2DATA1
        JZ TIMER0021
        SETB PWM2
        DEC PWM2DATA1
        AJMP TIMER003
        TIMER0021:
        CLR PWM2
        TIMER003:
        MOV A,PWM3DATA1
        JZ TIMER0031
        SETB PWM3
        DEC PWM3DATA1
        AJMP TIMER004
        TIMER0031:
        CLR PWM3
        TIMER004:
        DJNZ R2,TIMER005
        MOV R2,#0FFH
        MOV PWM1DATA1,PWM1DATA
        MOV PWM2DATA1,PWM2DATA
        MOV PWM3DATA1,PWM3DATA
        TIMER005:
        POP ACC
        RETI
        END

        這個程序是基于實現的。因為PWM的頻率較低,所以當的是LED時會有較大的閃動。如果要解決這個問題,則可以提高時鐘頻率。或使用工作速度更快的單片機,如STC12C2052可以設置為1時鐘1,工作頻率最高可達420MHZ。盡量不要改變定時器T0的初值(初值越小越好,最好為00H),因為如果單片機此時還要執行其它的任務(如串行通訊)時,T0的中斷頻率過高對軟件PWM是致命的。

        pwm相關文章:pwm原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新竹市| 临邑县| 泸溪县| 固原市| 游戏| 黔江区| 莱州市| 梨树县| 平度市| 岚皋县| 中西区| 宁明县| 祥云县| 巧家县| 肃北| 昌都县| 华坪县| 富民县| 金阳县| 揭东县| 内江市| 西吉县| 玉林市| 阳谷县| 佳木斯市| 怀安县| 兴业县| 柳河县| 曲麻莱县| 云安县| 辛集市| 忻城县| 库尔勒市| 武义县| 宁南县| 双江| 三穗县| 黑山县| 灵璧县| 株洲市| 宜良县|