173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机如何去写3种pwm

htxw 2023-03-15 资讯中心 22 ℃

怎么用单片机产生PWM波形

单片机产生PWM波形波形的方法:

主要是采用软件控制,控制2个时间。

具体就是由单片机的引脚输出PWM波形;单片机引脚 如P1.7 控制其输出高电平的时间T1 和输出低电平的时间T2。

PWM波形的周期T=T1+T2

PWM波形的占空比=(100T1/T)%

PWM波形实现的算法:

1 根据PWM波形的频率f,计算出PWM波形的周期T=1/f;

2 根据PWM波形的占空比 计算出高电平时间 T1=占空比×T

3 计算出低电平时间 T2=T-T1

4 按上述时间去控制 单片机引脚高低电平的时间就可以了。

呵呵 赶快自己写程序吧 别忘了给俺加分呀

单片机PWM程序是怎么编写的啊,能给一个简单的例子吗?

有PWM功能的单片机入STC12系列单片机,直接给专用寄存器赋值开启相应定时器就可以了。普通单单片机,PWM需要用自己来调配。比如:

#includereg51.h

unsigned char pwhh,pwhl,pwlh,pwll;

bit flag;

sbit pwm=P1^0;

void t0isr() interrupt 1

{

if(flag)

{

TH0=pwhh;

TL0=pwhl;

}

else

{

TH0=pwlh;

TL0=pwll;

}

pwm=~pwm;

}

main()

{

TMOD=0x01;

pwhh=(65536-1000)/256;

pwhl=(65536-1000)%256;

pwlh=(65536-500)/256;

pwll=(65536-500)%256;

TH0=pwhh;

L0=pwhl;

TR0=1;

ET0=1;

EA=1;

while(1);

}

我想使用单片机定时器输出3路pwm波,这三路pwm波的频率为100Hz;相位之差和为360。大神 帮帮忙

3路PWM波,频率100HZ,周期为10ms,这个应该很简单吧,用定时器进行定时0.1ms中断一次,100次为一循环,这样周期为10ms。相位差和为360,最简单的是,第1个方波比第2个差120,第2个比第3个差120,第3个比第1个差120。也就是说在第0ms第1个方波启动,第3.3333...ms第2个方波启动,6.66666ms第3个方波启动,而到10ms第1个方波第二个周期又开始启动。这只是最简单的,其实只要满足a b c三个方波启动时间刚好加起来等于10ms就可以。

回到定时器,程序你设定3个变量,a b c,其中a b c的初值分别用来表示第1 2 3方波的相位差,判断a b c的范围来确认三个方波的占空比。设置0.1ms中断,变量初值a=0 b=33 c=66每次中断a b c 分别++,当a=100 b=100 c =100,a=0 b=0 c=0。

主函数,设置3个IO口,PWM1 PWM2 PWM3,if(0a50);(PWM1==1);else;PWM1==0; if(0b50);(PWM2==1);else;PWM2==0; if(0c50);(PWM3==1);else;PWM3==0;其中a b c的取值范围就是占空比的值(1~99)。

注:1、因为a b c初值不同,所以相位差在初值就体现出来了。2、也可不用中断,判断定时器溢出位也可。3、想要更精确可以定时0.01ms,变量设定1000个。

以上也是我自己凭空想的,没实际实验,你可以试试!

求51单片机用三个定时器同时产生3路占空比可调的pwm的程序

一个定时器就能搞定

#includereg51.h

#includeINTRINS.h

#define u16 unsigned int

#define u8 unsigned char

sbit pwm1=P1^0;

sbit pwm2=P1^1;

sbit pwm3=P1^2;

u8 jsflag;

u8 pwm[3]={0,100,200};//三路pwm的值,范围为0-200

void init() //初始化函数

{   TMOD|=0x01;

TH0=(65536-100)/256;

TL0=(65536-100)%256;

EA=1;

    ET0=1;

TR0=1;

}

void main()//主函数

{

init();

while(1);

}

void timer0() interrupt 1//定时器,100us

{   

TH0=(65536-100)/256;

TL0=(65536-100)%256;

if(++jsflag=200)jsflag=0;

pwm1=(jsflag=pwm[0]?0:1);

pwm2=(jsflag=pwm[1]?0:1);

pwm3=(jsflag=pwm[2]?0:1);

}

求51单片机PWM汇编语言程序(用来控制3个红、绿、蓝LED灯,让这3个LED灯产生均色变化)

1、程序实现上应该不难,假设用3个8位变量来调节这三个灯,理想上可以得到256单色灰度效果。但通常能做到16等级灰度,也能看到一定效果。

2、这三个PWM周期相同,占空比不同,亮度就各有不同。

3、确保单片机管脚输出1时(100%,或单独调节满刻度),三个LED灯的驱动电流均达到饱和。并且合成色为白色。且根据最佳观测距离,选择相应视角的灯管。并考虑其安装位置。

4、若为256等级灰度,总共有2^24个组合渐变。且渐变过程还有更多组合。建议16等级实现先。

5、三个for循环,逐个调节PWMR、PWMG、PWMB参量。在定时器的最小定时管理单元中逐个判断,是否达到翻转调节。并控制各LED的亮灭。

【以上纯属理论分析,程序及效果自行完成】

怎么样用51单片机产生三路占空比PWM波啊?要汇编语言的,有思路也行

PWM EQU 7FH ;PWM赋初始值 OUT EQU P0 ;8个LED灯的接口

INCKEY EQU P3.2 ;K1,PWM值增加键。 DECKEY EQU P3.4 ;K2,PWM值减小键。

BEEP EQU P2.2

;----------------------------

ORG 0000H

SJMP START

ORG 000BH

SJMP INTT0

ORG 001BH

SJMP INTT1

ORG 0030H

;----------------------------

;主程序

;定时器0工作在模式1,定时器1工作在模式2。

;----------------------------

START:

MOV SP,#30H

MOV TMOD,#21H

MOV TH1,PWM ;脉宽调节

MOV TL1,#00H

MOV TH0,#0FCH ;1ms延时常数

MOV TL0,#066H ;频率调节

clr p1.4

SETB EA

SETB ET0

SETB ET1

SETB TR0

LOOP: MOV A,PWM ;

JB INCKEY,LOOP1 ;增加键是否按下?

CALL DELAY ;延时去抖动

JB INCKEY,LOOP1

CJNE A,#0FFH,PWMINC ;是否到最大值?

CALL BEEP_BL ;是,蜂鸣器报警。

SJMP LOOP

PWMINC:

INC PWM ;调节脉宽(脉宽减小)

SJMP LOOP

LOOP1: JB DECKEY,LOOP2 ;减小键是否按下?

CALL DELAY ;延时去抖动

JB DECKEY,LOOP2

CJNE A,#02H,PWMDEC ;是否到最小值?

CALL BEEP_BL ;是,蜂鸣器报警。

SJMP LOOP

PWMDEC:

DEC PWM ;调节脉宽(脉宽增加)

LOOP2: SJMP LOOP

;------------------------------

;T0中断服务子程序 (频率)

;控制定时器1中断

;------------------------------

INTT0:

CLR TR1

MOV TH0,#0FCH ;1ms延时常数

MOV TL0,#066H ;频率调节

MOV TH1,PWM

SETB TR1

MOV OUT,#07fH ;启动输出

RETI

;------------------------------

;T1中断服务子程序 (脉宽)

;控制PWM脉冲宽度

;------------------------------

INTT1:

CLR TR1 ;脉宽调节结束

MOV OUT,#0FFH ;结束输出

RETI

;------------------------------

;10ms延时子程序

;------------------------------

DELAY:

MOV R6,#50

DELAY1:

MOV R7,#100

DJNZ R7,$

DJNZ R6,DELAY1

RET

;-----------------------------------------------

;蜂鸣器响一声子程序

;-----------------------------------------------

BEEP_BL:

MOV R6,#100

BL1: CALL BL2

CPL BEEP

DJNZ R6,BL1

MOV R5,#25

CALL DELAY2

RET

BL2: MOV R7,#180

BL3: NOP

DJNZ R7,BL3

RET

DELAY2: ;延时R5×10MS

MOV R6,#50

BL4: MOV R7,#100

BL5: DJNZ R7,BL5

DJNZ R6,BL4

DJNZ R5,DELAY2

RET

;---------------------------------------------------

END

你可以参考这个程序自己写写

单片机如何去写3种pwm的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:单片机如何去写3种pwm

<