• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 軟件實現(xiàn)多路PWM的輸出

    軟件實現(xiàn)多路PWM的輸出

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

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

    程序如下:

    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 ;開始 計數(shù)

    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

    這個程序是基于實現(xiàn)的。因為PWM的頻率較低,所以當(dāng)的是LED時會有較大的閃動。如果要解決這個問題,則可以提高時鐘頻率?;蚴褂霉ぷ魉俣雀斓膯纹瑱C(jī),如STC12C2052可以設(shè)置為1時鐘1,工作頻率最高可達(dá)420MHZ。盡量不要改變定時器T0的初值(初值越小越好,最好為00H),因為如果單片機(jī)此時還要執(zhí)行其它的任務(wù)(如串行通訊)時,T0的中斷頻率過高對軟件PWM是致命的。

    pwm相關(guān)文章:pwm原理




    關(guān)鍵詞: PWM控制 STC89C52 機(jī)器周期

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 开化县| 东城区| 盈江县| 罗源县| 色达县| 襄汾县| 富源县| 阜阳市| 武宁县| 雅江县| 钟祥市| 桐乡市| 景谷| 遂平县| 清流县| 香格里拉县| 洛阳市| 铜川市| 青浦区| 凭祥市| 石渠县| 论坛| 育儿| 太和县| 扶余县| 密云县| 临西县| 遵化市| 平塘县| 安乡县| 雷山县| 兴山县| 桦甸市| 饶平县| 兰坪| 乌兰察布市| 石泉县| 宕昌县| 贵州省| 东平县| 通化县|