PWM控制LED渐亮及渐灭Word文档下载推荐.docx
《PWM控制LED渐亮及渐灭Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PWM控制LED渐亮及渐灭Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
![PWM控制LED渐亮及渐灭Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/1374915c-8203-499f-b1c2-b97e0b8fd014/1374915c-8203-499f-b1c2-b97e0b8fd0141.gif)
BOVBIT;
母周期显示完毕标志
SSSEQU30H
;
子周期占空宽度调节
T10EQU31H
子周期宽度
AAAEQU32H
子周期占空宽度入口
BBBEQU33H
母周期占空宽度入口
T20EQU34H
母周期宽度
MMMEQU35H
母周期占空宽度调节
A10EQU36H
子周期宽度缓冲
B20EQU37H
母周期宽度缓冲
KEY2BIT
COM1BIT
COM2BIT
COM3BIT
COM4BIT
NOISE1EQU38H
NOISE2EQU39H
NOISE3EQU3AH
ORG00H
LJMPMAIN
ORG0BH
LJMPPWM
PWM:
MOVTH0,#0FFH
MOVTL0,#90H
PUSHACC
####################################################
JB
BOV,OUTLOW
*********************************************
SOV,IFSEND
DEC
T10
保持计数同步
DJNZSSS,LRET
占空参数修正
MOV
SSS,AAA
复原子周期占空参数
A,T10
CJNEA,#0,SCTN
对占空比为100%时的修正
AJMPT10END
SCTN:
CLR
LED
SETBSOV
AJMPLRET
IFSEND:
DJNZT10,LRET
T10END:
T10,A10
复原子周期宽度参数
SETBLED
SOV
子周期处理完毕
**********************************************
T20
DJNZMMM,LRET
MMM,BBB
A,T20
CJNEA,#0,MCTN
AJMPT20END
MCTN:
SETBBOV
OUTLOW:
LED
母周期低电平部分输出0DJNZT10,LRET
T10,A10
DJNZT20,LRET
T20END:
MOVT20,B20
BOV
母周期处理完毕
#############################
LRET:
POPACC
RETI
MAIN:
P3,#00001100B
MOVTMOD,#01H
MOVA10,#10
子周期宽设置
MOVB20,#20
母周期宽设置
MOVT10,A10
MOVAAA,#6
子周初始占空宽度设置
MOVBBB,#20
母周初始占空宽度设置
MOVSSS,AAA
MOVMMM,BBB
SETBET0
SETBTR0
SETBEA
20H,#0;
所有标志位清零
R0,#250
R1,#2;
每隔*250*2ms调节一次亮度
FREE:
KEYBBBBBBBBBBBBBBBBBBBBBBBBBBBB
PCON,#1
CHANGE2:
KEY,CHOU1
KEY2,CHOU1
DJNZNOISE1,FREE
JNBKEY,$
JNBKEY2,$
AJMPFREE3
CHOU1:
MOVNOISE1,#0
DOWN1:
JBKEY,UP1
DJNZNOISE2,FREE
DJNZBBB,NEXT
减1修正
BBB,#1
NEXT:
KEY,FREE
操作完成后待松键再退出
JNB
KEY2,FREE
SJMPNEXT
UP1:
MOVNOISE2,#0
IFUP:
JBKEY2,LCRNOS
DJNZNOISE3,FREE
INC
BBB
加1修正
A,BBB
CJNEA,#21,NEXT2
BBB,#20
NEXT2:
KEY2,FREE
KEY,FREE
SJMPNEXT2
LCRNOS:
MOVNOISE3,#0
AJMPFREE;
KEYB
FREE3:
KEY
CHANGE1:
KEY,CHOU2
KEY2,CHOU2
DJNZNOISE1,FREE3
AJMPFREE
CHOU2:
DOWN2:
JBKEY,UP2
DJNZNOISE2,FREE3
DJNZAAA,NEXT3
AAA,#1
NEXT3:
KEY,FREE3
KEY2,FREE3
SJMPNEXT3
UP2:
IFUP2:
JBKEY2,LCRNOS2
DJNZNOISE3,FREE3
AAA
A,AAA
CJNEA,#11,NEXT4
AAA,#10
NEXT4:
KEY2,FREE3
KEY,FREE3
SJMPNEXT4
LCRNOS2:
AJMPFREE3;
END
系统分类:
用户分类:
标签:
来源:
转贴
阅读全文(812)|回复(0)
3
发表于2007/7/3119:
25:
55
一、定时/计数器PWM设计要点
根据PWM的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点:
1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。
如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。
2.然后根据需要PWM的频率范围确定ATmega128定时/计数器的PWM工作方式。
AVR定时/计数器的PWM模式可以分成快速PWM和频率(相位)调整PWM两大类。
3.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。
此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而比较匹配寄存器的值决定了占空比的大小。
PWM频率的计算公式为:
PWM频率=系统时钟频率/(分频系数*(1+计数器上限值))
4.快速PWM模式适合要求输出PWM频率较高,但频率固定,占空比调节精度要求不高的应用。
5.频率(相位)调整PWM模式的占空比调节精度高,但输出频率比较低,因为此时计数器仅工作在双向计数方式。
同样计数器的上限值决定了PWM的频率,比较匹配寄存器的值决定了占空比的大小。
PWM频率=系统时钟频率/(分频系数*2*计数器上限值))
6.相位调整PWM模式适合要求输出PWM频率较低,但频率固定,占空比调节精度要求高的应用。
当调整占空比时,PWM的相位也相应的跟着变化(PhaseCorrect)。
7.频率和相位调整PWM模式适合要求输出PWM频率较低,输出频率需要变化,占空比调节精度要求高的应用。
此时应注意:
不仅调整占空比时,PWM的相位会相应的跟着变化;
而一但改变计数器上限值,即改变PWM的输出频率时,会使PWM的占空比和相位都相应的跟着变化(PhaseandFrequencyCorrect)。
8.在PWM方式中,计数器的上限值有固定的0xFF(8位T/C);
0xFF、0x1FF、0x3FF(16位T/C)。
或由用户设定的0x0000-0xFFFF,设定值在16位T/C的ICP或OCRA寄存器中。
而比较匹配寄存器的值与计数器上限值之比即为占空比。
二、PWM应用设计参考
下面给出一个设计示例,在示例中使用PWM方式来产生一个1KHz左右的正弦波,幅度为0-Vcc/2。
首先按照下面的公式建立一个正弦波样本表,样本表将一个正弦波周期分为128个点,每点按7位量化(127对应最高幅值Vcc/2):
f(x)=64+63*sin(2πx/180)x∈[0…127]
如果在一个正弦波周期中采用128个样点,那么对应1KHz的正弦波PWM的频率为128KHz。
实际上,按照采样频率至少为信号频率的2倍的取样定理来计算,PWM的频率的理论值为2KHz即可。
考虑尽量提高PWM的输出精度,实际设计使用PWM的频率为16KHz,即一个正弦波周期(1KHz)中输出16个正弦波样本值。
这意味着在128点的正弦波样本表中,每隔8点取出一点作为PWM的输出。
程序中使用ATmega128的8位T/C0,工作模式为相位调整PWM模式输出,系统时钟为8MHz,分频系数为1,其可以产生最高PWM频率为:
8000000Hz/510=15686Hz。
每16次输出构成一个周期正弦波,正弦波的频率为。
PWM由OC0(PB4)引脚输出。
参考程序如下(ICCAVR)。
2007-3-15果为高,则证明是由一个低电平地和一个高电平组成,即保存一个1.为1则再调一个延时,让它延到低电平。
等待到高电平后重复上述过程解码。
遥控器解码程序介绍:
通过上述的解码原理,利用单片机的中断口来测PWM码的宽度,通过本实验仪配备的遥控,单片机解码在数码管上显示。
实际应用例如:
红外遥控。
DSP2407A开发板硬件PWM电机控制电路讲解
【来源:
】【发布时间:
2007-03-13】【字体:
】
PWM电机控制实验针对微型直流电机。
两路带死区的PWM信号从DSP引脚上直接产生。
电机驱动采用的是4个NPN的三极管,可控制正反转。
DSP的PWM口在复位和无控制状态时默认为IO口,且为高电平。
这样可能引起4个NPN管同时导通。
为防止这种情况发生,对DSP出来的PWM信号进行了反相,即复位时给NPN基极的是低电平。
以下是一段产生占空比为20%的脉冲信号的c51程序,我想电机转速对应于一定的占空比,如果你要改变占空比,可能需要建立一个对应于不同转速的参数表(如定时器初值等),查表
得到不同参数,以改变占空比和转速。
你用什么驱动电路?
/*采用6MHz晶振,在脚上输出周期为,占空比为20%的脉冲信号*/
/*定时100ms,周期需25次中断,高电平需5次中断*/
#include
<
>
typedef
unsigned
char
uchar;
sbit
P1_0=P1^0;
uchar
time=0;
period=25;
high=5;
void
timer0()
interrupt
1
using
{
TH0=0x3c;
/*定时器初值重装载*/
TL0=0xb0;
time++;
if(time==high)
/*高电平持续时间结束,变低*/
P1_0=0;
}
else
if(time==period)
/*周期时间到,变高*/
P1_0=1;
}
main()
TMOD=0x01;
/*定时器0方式1*/
/*定时器装载初值*/
EA=1;
/*开CPU中断*/
ET0=1;
/*开定时器0中断*/
TR0=1;
/*启动定时器0*/
while
(1)
/*等待中断*/
{}