linux模拟多路pwm,软件实现多路PWM的输出

单片机应用于舞台灯光、民用照明的调光、电机转速、温度控制等众多领域时需要用到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

这个程序是基于STC89C52实现的。因为PWM的频率较低,所以当PWM控制的是LED时会有较大的闪动。如果要解决这个问题,则可以提高时钟频率。或使用工作速度更快的单片机,如STC12C2052可以设置为1时钟1机器周期,工作频率最高可达420MHZ。尽量不要改变定时器T0的初值(初值越小越好,最好为00H),因为如果单片机此时还要执行其它的任务(如串行通讯)时,T0的中断频率过高对软件PWM是致命的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值