遥控调光灯设计.docx
- 文档编号:10816331
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:33
- 大小:96.90KB
遥控调光灯设计.docx
《遥控调光灯设计.docx》由会员分享,可在线阅读,更多相关《遥控调光灯设计.docx(33页珍藏版)》请在冰豆网上搜索。
遥控调光灯设计
摘要
在现代社会发展中环保节能是必然的发展的趋势。
电子遥控技术的发展使现代人的生活习惯慢慢走向便利,本设计就设计一款可遥控调光。
它主要以51单片机为主控芯片,由ADC0809对旋转亮度旋钮进转把模拟量换成数字量。
使用PWM驱动方式,通过调速PWM脉冲的脉宽比控制双向可控硅的导通角从而达到LED亮度连续可调。
遥控部分使用AT89C2051单片机进行红外编码调制提高抗干扰能力,接收用红外一体化接收头,由51单片机对信号进行解码,实现整机控制。
关键词:
ADC0809PWM调制红外编码连续可调
摘要…………………………………………………………………………………………2
1方案论证…………………………………………………………………………………4
1方案论述…………………………………………………………………………4
2方案论证…………………………………………………………………………4
2硬件电路的设计………………………………………………………………………4
1电路方框图………………………………………………………………………4
2主要单元电路……………………………………………………………………………5
3软件的部分设计………………………………………………………………………6
1遥控红外编码部分………………………………………………………………………7
2主机解码部分……………………………………………………………………………10
5系统测试…………………………………………………………………………………12
1主机功能测试………………………………………………………………………12
2从机功能测试…………………………………………………………………………12
6总结………………………………………………………………………………………13
7参考文献……………………………………………………………………………13
8附录………………………………………………………………………………………13
一.方案论证
1.方案论述
方案一:
手动调节由电位器直接控制双向可控硅的导通角,遥控发射部分用NE555多谐振荡电路控制红外发光管,接收部分用SONYCX20106红外接收芯片,在经过分频电路,再来通过切换电阻阻值来调节可控硅的导通角。
方案二:
手动调节由电位器直接控制可控硅的导通角完成,红外发射部分由小单片机AT89C2051来完成,接收有红外一体化接收,然后在由单片机完成数据处理,用单片机的I/O切换不同阻值电阻来控制可控硅的导通角。
方案三:
手动调节先由电位器来调节一个模拟量,在由AD0809来转换成一个数字量,再由单片机来处理。
红外发射部分还是由小单片机AT89C2051来完成,接收部分是由红外一体化接收,在由单片机处理,用PWM调制方式控制输出电压。
2.方案论证
(1)方案一里面电路简单,但达不到题目要求采用单片机为主控芯片的要求,功能也不能完全实现,所以舍弃此方案。
(2)方案二电路简单易控制,但在手动调节和遥控调节会互相干扰,达不到便利的目的,所以就舍弃此方案。
(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 TR0=0; if(ircode&0x01)//判断红外编码最低位,1宽的高电平,0窄的高电平 { set_count=120; } else { set_count=38; } flag=0; count=0; TR0=1; while(count TR0=0; 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; count=0; TR0=1; while(count TR0=0; ircode=ircode>>1; } } /******************************************* 发送红外数据 *******************************************/ voidsendcode(void) { set_count=575;//发送9ms38K红外光 flag=1; count=0; TR0=1; while(count TR0=0; set_count=320;//间隔4.5ms flag=0; count=0; TR0=1; while(count TR0=0; ircode=irsys[0];//发送26位系统码的前1-8位 sendcode_8(); ircode=irsys[1];//发送26位系统码的前9-16位 sendcode_8(); ircode=irsys[2];//发送26位系统码的前17-24位 sendcode_8(); ircode=irsys[3];//发送26位系统码的前24-26位 sendcode_2(); ircode=irdata;//发送8位数据码 sendcode_8(); ircode=~irdata;//发送8位数据反码 sendcode_8(); set_count=28;//发送0.56ms38k红外波(编码中的0.56ms低电平) flag=1; count=0; TR0=1; while(count TR0=0; ir=1; delay(23);//延时23ms(编码中的23ms高电平) set_count=575;//发送9ms38k红外波 flag=1; count=0; TR0=1; while(count TR0=0; set_count=330;//间隔4.5ms flag=0; count=0; TR0=1; while(count TR0=0; set_count=30;//发送0.56ms38k红外波(编码中的0.56ms低电平) flag=1; count=0; TR0=1; while(count TR0=0; ir=1; } /******************************************* 定时器初始化 *******************************************/ 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///外部中断 { TR0=1;//开定时器中断 if(count>12&&count<270)//如果信号合法,则放入buf_count,count清0,对下一个脉冲信号计时 { buf_count=count; count=0; } 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&&buf_count<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;//系统码计算清零 buf_count=0;//中断计数暂存清0 } elseif((buf_count>40&&buf_count<70)||(buf_count>12&&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>40&&buf_count<70) { buf_count=0; buf_key_code>>=1; buf_key_code|=0x80;//收到1 key_bit_count++;//数据脉冲累加 } elseif(buf_count>12&&buf_count<32)//收到0 { buf_count=0; buf_key_code>>=1;//收到0 key_bit_count++; } } else//若收完8位数据则做以下处理 { ir_status=0;//接收状态返回到空闲 key_code=buf_key_code; key_bit_count=0; buf_key_code=0; buf_count=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 #include #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>0;x--) for(y=113;y>0;y--); } 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///外部中断 { TR0=1;//开定时器中断 if(count>12&&count<270)//如果信号合法,则放入buf_count,count清0,对下一个脉冲信号计时 { buf_count=count; count=0; } 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&&buf_count<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;//系统码计算清零 buf_count=0;//中断计数暂存清0 } elseif((buf_count>40&&buf_count<70)||(buf_count>12&&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>40&&buf_count<70) { buf_count=0; buf_key_code>>=1; buf_key_code|=0x80;//收到1 key_bit_count++;//数据脉冲累加 } elseif(buf_count>12&&buf_count<32)//收到0 { buf_count=0; buf_key_code>>=1;//收到0 key_bit_count++; } } else//若收完8位数据则做以下处理 { ir_status=0;//接收状态返回到空闲 key_code=buf_key_code; key_bit_count=0; buf_key_code=0; buf_count=0; TR0=0; new_code=1; } } } } voidRUN_AD(void) { ALE=0; delay_ms(20); ALE=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遥控 调光 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)