遥控调光灯设计Word格式文档下载.docx
《遥控调光灯设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《遥控调光灯设计Word格式文档下载.docx(33页珍藏版)》请在冰点文库上搜索。
![遥控调光灯设计Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/f600f52a-7edb-466b-b15c-ca3d04869139/f600f52a-7edb-466b-b15c-ca3d048691391.gif)
(3)方案三电路较复杂,程序控制也较难,在成本控制方面因为使用了AD0809所以也不是很理想。
但在功能方面手动调节和遥控调可以相互转换。
功能也就比较强大,达到题意的基本要求。
综上所述这里采用方案三。
二.
硬件电路的设计
1.电路方框图:
(1)主机电路方框图:
(2)遥控电路方框图:
2.主要单元电路
(1)调光电路
从单片机P1.6出来的PWM调制信号控制可控硅的导通角,导通角越大灯的亮度越高。
(2)模数转换电路
(3)遥控电路
三.
软件设计:
其中PWM程序使用定时器1作为PWM脉冲输出的基本单位。
程序中定时器0工作在模式2,且计时高低字节寄存器TH1、TL1的初始值为0x97H。
定时器的定时过程如图5-9所示。
从上图可以看出,中断与中断之间相隔时间为256us(即每256产生中断一次)。
程序中每一脉冲的周期有“P”个基本时间单位。
如果“P”为00H,则表示脉冲周期为256个基本时间单位。
因此每一个脉冲周期计算如下:
脉冲周期=25625us
=65536us
=65.536ms
程序中“clock”设为“FFH”,表示总共送出去255个高电平部分逐次曾大的脉冲。
输出的脉冲波形如图5-10所示。
输出脉冲中,第一个脉冲“T1”的脉宽比例为
1.遥控红外编码部分
/*******************************************
发送8位红外数据
*******************************************/
voidsendcode_8(void)
{
uchari;
for(i=0;
i<
8;
i++)
{
set_count=28;
//发送0.56ms38k红外波(编码中的0.56ms低电平)
flag=1;
count=0;
TR0=1;
while(count<
set_count);
TR0=0;
if(ircode&
0x01)//判断红外编码最低位,1宽的高电平,0窄的高电平
{
set_count=120;
}
else
set_count=38;
flag=0;
count=0;
TR0=1;
while(count<
set_count);
ircode=ircode>
>
1;
}
}
发送2位红外数据
voidsendcode_2(void)//前26位系统码最后两位
uchari;
for(i=0;
i<
2;
i++)
set_count=28;
flag=1;
count=0;
TR0=1;
while(count<
TR0=0;
if(ircode&
0x01)
set_count=120;
else
set_count=38;
flag=0;
while(count<
TR0=0;
ircode=ircode>
发送红外数据
voidsendcode(void)
set_count=575;
//发送9ms38K红外光
while(count<
set_count);
set_count=320;
//间隔4.5ms
ircode=irsys[0];
//发送26位系统码的前1-8位
sendcode_8();
ircode=irsys[1];
//发送26位系统码的前9-16位
ircode=irsys[2];
//发送26位系统码的前17-24位
ircode=irsys[3];
//发送26位系统码的前24-26位
sendcode_2();
ircode=irdata;
//发送8位数据码
ircode=~irdata;
//发送8位数据反码
set_count=28;
ir=1;
delay(23);
//延时23ms(编码中的23ms高电平)
//发送9ms38k红外波
flag=1;
count=0;
TR0=1;
set_count=330;
set_count=30;
定时器初始化
voidinit_timer()
EA=1;
TMOD=0X02;
//8位自动重载模式
ET0=1;
TH0=0XE8;
//定时13us,38K红外波,晶振22.1184
TL0=0XE8;
2.主机解码部分
voidinit(void)//时器初使化
ir=1;
//红外端口写1
EA=1;
//开总中断
TMOD=0x22;
//定时器0\1,模式2,8位自动装载模式
TH0=0Xd1;
TL0=0Xd1;
TH1=156;
TL1=156;
TR1=1;
ET1=1;
IT1=1;
//INT1下降沿触发
ET0=1;
EX1=1;
/***********************************************
定时器0中断
***********************************************/
voidtime0()interrupt1//时器中断
count++;
//定时器中断次数累加
/**********************************************
外部中断,红外解码程序
**********************************************/
voidint1()interrupt2///外部中断
//开定时器中断
if(count>
12&
&
count<
270)//如果信号合法,则放入buf_count,count清0,对下一个脉冲信号计时
buf_count=count;
delay_10us(10);
//延时100us以消除下降沿跳变抖动
if(ir==0)//INT1引脚稳定为低电平,则表法确实是信号,count重新计时,因上面延时了50us,故要补偿1次TO中断
count=2;
if(buf_count>
12&
buf_count<
270)//若收到的信号合法,则再进行信号分析
if(ir_status==0)//如果之前未收到引导码
if(buf_count>
210&
270)//判断是否引导码13.5ms
{
ir_status=1;
//系统标记
buf_count=0;
}
elseif(ir_status==1)///收到引导码
if(common_code_count>
=25)//若收完26个脉冲
ir_status=2;
//数据解码标记
common_code_count=0;
//系统码计算清零
//中断计数暂存清0
elseif((buf_count>
40&
70)||(buf_count>
32))
buf_count=0;
common_code_count++;
//每收到一个信号自加1
elseif(ir_status==2)//进入数据编码接收
if(key_bit_count<
8)//收到数据少于8位,则将收到的数据写入buf_key_code
if(buf_count>
70)
{
buf_count=0;
buf_key_code>
=1;
buf_key_code|=0x80;
//收到1
key_bit_count++;
//数据脉冲累加
}
elseif(buf_count>
32)//收到0
buf_count=0;
buf_key_code>
=1;
//收到0
else//若收完8位数据则做以下处理
ir_status=0;
//接收状态返回到空闲
key_code=buf_key_code;
key_bit_count=0;
buf_key_code=0;
TR0=0;
new_code=1;
四.
系统测试
4、1主机功能测试
这里测试是以数字示波器(型号:
DS5022M,带宽:
25MHz,实时采样率:
500MSa/s)
数字万用表(型号:
VC9807A+),旋转主机亮度旋钮,测量旋钮上的电压与PWM频率(如下表所示):
旋钮电压(V)
0.845
1.215
1.643
1.994
2.408
2.760
3.103
3.496
3.893
4.224
4.616
脉宽
2/13
3/13
4/13
5/13
6/13
7/13
8/13
9/13
10/13
11/13
12/13
(注:
其中我们设定1/13为高亮度,6/13为中亮度,11/13中低亮度)
电压与脉宽如下图所示:
由上图看出ACD0809转换数据较准确。
4、1从机功能测试
从机部分的测试,我们只测量距离。
实际制作中,距离可以达到8米左右。
五.总结
1.这是我们第一次参加这样的比赛,感觉很累很辛苦。
但我们感觉很高兴,我们通过几天的奋战,做出了我赛题所要求的产品。
2.我们在这次比赛中确实学到了很多东西,队友的分工合作直接影响到工作的效率,在比赛中也体会到那么一点一个产品开发的流程的味道。
3.这次比赛也为我们9月份的全国赛提供了一次演练的机会,得到了比赛时间按安排的宝贵经验。
4.这次比赛也让我们认识到自身的缺陷,让我们知道以后该训练的重点
六.参考文献
[1]《电子电工实践指导》王港元主编·
江西科学技术出版社(第四版)
[2]《C51单片机典型模块设计与应用》边春元李文涛江杰杜平等编著
[3]《模拟电子技术》周雪主编·
西安电子科技大学出版社(修订版)
[4]《常用集成电路应用实例》荷希才编·
电子工业出版社
[5]《数字集成电路应用300例》黄继昌等编·
人民邮电出版社
[6]《单片机C语言应用程序设计》马忠梅等编·
北京航空航天大学出版社
[7]《单片机外围电路设计》沙占友王彦朋孟志永等编·
电子工业出版社
七、附录
附录一:
主机原程序代码:
#include<
reg52.h>
math.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineAD_dataP2
uintk,k_on,off,TH;
uchartime;
bitON_OFF;
//电位器调接允许端,0允许,1允许
sbitALE=P3^6;
//ADC0809地址锁存允许信号
sbitEOC=P3^1;
//ADC0809转换结束信号
sbitOE=P3^4;
//ADC0809输出允许
sbitclock=P3^0;
//ADC0809外部时钟脉冲输入端
sbitLAMP=P1^6;
//高亮度LED驱动
sbitir=P3^3;
//红外端口
ucharkey_code=0;
//遥控键值
ucharnew_code=0;
//有无新按键
uintbuf_key_code=0;
//键值暂存
ucharkey_bit_count=0;
//键编码脉冲计数
uintcount=0;
//定时中断次数计数
uintbuf_count=0;
//定时中断计数暂存
ucharcommon_code_count=0;
//前导码脉冲计数
ucharir_status=0;
//脉冲接收器所处的状态,0:
无信号,1:
系统码接收区,2:
数据编码接收区
voiddelay_10us(unsignedchary)//延时子程序10us
unsignedcharx;
for(x=y;
x>
0;
x--);
voiddelay_ms(uintz)//延时子程序1ms
uintx,y;
for(x=z;
x--)
for(y=113;
y>
y--);
voidRUN_AD(void)
ALE=0;
delay_ms(20);
ALE=1