电子设计大赛之
“duang片机,给生活加特技”
题目:红外遥控开门
红外遥控开门
一、选题背景
华工北校宿舍的们是没有外置门把的,每次同学来敲门都要走到门口开房门,非常麻烦,如果出门忘记带钥匙就没办法从外面打开门。因此,使用红外遥控开门就能很方便实现门的自动开启。本课题要求使用红外遥控器控制来控制步进电机的转动,从而达到开门效果。通过51单片机设定密码锁,并对红外遥控器的信号进行解码,输入正确密码时可以开锁。主要是需要实现单片机最小电路的设计,红外接收电路的设计,步进电机驱动电路的设计以及液晶显示模块的电路设计等。
二、方案论证
2.1设计题目要求
制作红外遥控开门装置,使得开关门可以通过红外遥控器控制步进电机转动来控制。
(1)当用上遥控器上锁后,需输入相应的开门密码,单片机判断后,若正确,蜂鸣器发出“滴滴”,代表开门,若错误,蜂鸣器发出较快的“滴滴滴滴”。
(2)在下次用遥控器上锁之前,直接按开门键即可开门。
(3)单片机断电之后,所设密码不会丢失。
(4)实现修改密码功能:以原密码修改旧密码,或者有更高层的密码可直接修改旧密码(类似于安全码)。
(5)平时不用时,单片机处于休眠模式(降低功耗),但接收到遥控器的消息后,单片机进入工作模式。
2.2方案设计与论证
2.2.1设计思路
单片机最小系统部分:设计使单片机运行起来的最小系统,控制外围电路;
红外信号解码部分:设计红外接收电路,与单片机连接,并编写解码程序利用单片机对红外信号进行解码;
显示部分:设计液晶与单片机连接的接口电路,编写控制液晶显示的程序,将开门过程的信息实时显示在液晶屏上;
报警部分:由单片机控制外围的蜂鸣器,当密码输入正确是,输出方波使其发出“滴滴”声,输入错误时,则发出较快“滴滴滴滴”;
电机驱动部分:设计步进电机驱动电路,当按下开门键时,由单片机控制其转;
信息保存部分:利用单片机内部自带的EEPROM,将密码实时写入EEPROM中,重新执行程序时从EEPROM中读取密码数据,实现掉电保存。
2.2.2设计方案论证与比较
(1)红外遥控电路:
方案一:使用红外发射管与红外接收管组合
红外发射管与接收管组合硬件电路简单,制作简便;但是需要外加电路对信号进行调制,增加按键电路,同时接收效率不高,难以实现题目要求
方案二:使用红外遥控器与红外一体接收管1838
红外遥控器内置调制电路,按下某个按键即发射出特定的调制信号,信号稳定,且传输效率高;红外一体接收管1838对红外遥控器发射的信号进行解调,并转换为数字信号输出到输出管脚,利用单片机可以很方便地对信号进行解码,同时外围电路设计简单。
综上所述,选择方案二。
(2)显示模块
方案一:使用LCD128液晶进行显示
LCD128是一款常用的中文图形点阵液晶,128x点阵,内含中文字库,可以显示SCAII码跟中文,同时,硬件电路简单,支持并行与串行操作时序,当使用串行操作时,只需要少量IO口便能进行控制,由单片机进行控制时需要遵守读写时序,能比较详细显示程序运行过程的信息。
方案二:是用移位寄存器74HC595与数码管配合显示
74HC595是一种8位串行输入,8位串行输入或并行输出的三态移位寄存器,利用74HC595可以大量节省单片机的IO口资源,实现对外数据的传输;数码管是多个发光二极管组成的“8”字形器件,通过8根管脚来控制内部对应二极管的亮与灭。但是数码管只能显示数字,且外围接口电路复杂,显示多位数字时需要不停进行动态扫描,显示效果单一。
综上所述,选择方案一。
(3)掉电保存模块
方案一:使用AT24C02作为外部ROM
AT24C02是一个串行的E2PROM,内部含256个8位字节,通过I2C总线进行操作,数据保密性好,能保存100年,操作简便,外部接口电路简单,需要遵守I2C协议与单片机进行通讯,能对单片机数据进行保存。
方案二:使用STC12C5A60S2内部自带的E2PROM
STC12C5A60S2将内部的Data Flash当做E2PROM,擦写次数达10万次以上,并且内部拥有相应的控制寄存器,可以很方便对程序执行过程中的数据进行保存,执行速度快,指令操作简单,不需要添加外围元件即能实现对数据的保存。
综上所述,选择方案二。
2.3方案框图
三、硬件电路论述
3.1最小系统电路
图1 单片机最小系统电路
51单片机是一块芯片,单独时没办法进行工作。使得单片机能顺利工作的最少外围电路合称为最小系统,包括电源滤波模块,复位电路模块,时钟电路模块等。
3.1.1滤波电路
由于平时使用的5V电源并不是完全是直流成分,其中还包含了交流信号部分,为了剔除这部分噪声,在电源正极与负极之间并联了两个电容,其中104小电容可滤除高频信号,10uF电容可滤除低频信号,保证了流入单片机的电流基本上为直流电。
此外,在滤波电路旁并联一个LED,作为电源指示灯。其中1K电阻起到限流作用,防止LED被烧毁。
3.1.2复位电路 图2 滤波电路
程序在运行过程中,难免会发生错误,导致程序失控。此时通过一个复位按钮让程序从头开始执行,就能有效解决这个问题。51单片机有一个专门的复位管脚,当给管脚送一个高电平时,单片机就能复位,从头开始执行程序。
当电路稳定时,由于电容的隔直作用,RST引脚通过10K电阻接到低电平,不发生复位。当按下按键开关时,RST引脚瞬间变为高电平,芯片复位。
3.1.3时钟电路 图3 复位电路
51单片机工作的时候需要一个精准的时钟信号,根据这个信号执行指令,通过外接一个晶振与两个电容,与内部电路构成一个振荡器为芯片提供一个高频的时钟信号。其中,晶振的频率决定了单片机工作速度的快慢。
图4 时钟电路
3.2红外接收电路
图5 红外接收电路
红外一体接收头1838将红外遥控器发射的红外信号进行解调生成数字信号,并通过输出引脚OUT输出到单片机中。
3.3液晶显示电路
LCD128第三管脚用于设置对比度,通过改变10K电位器103的阻值就能实现对比度调节。PSB为时序选择端,接高电平时选择串行操作时序。RST为复位脚,低电平有效,此项目不需要复位功能,故接高电平。19与20 引脚分别是背光灯的正负极,正极的供电通过三极管9012来控制供电,单片机控制BG_VCC输出0时,三极管导通给背光灯供电,输出1时三极管截至,背光灯熄灭。
CS,SID,CLK则为液晶的控制引脚,直接由单片机IO口控制;CS为串行片选信号,置高电平选中芯片;SID为数据口,通过该管脚接受单片机的数据与指令;CLK为串行时钟,时钟信号由单片机产生。 图6 液晶接口电路
控制时需要严格遵守时序图,串行时序图如下:
图7 串行操作时序图
数据传送分为3个字节:
第一字节——串口控制
RW位为1时表示数据从LCD到MCU,RW位为0时表示数据从MCU到LCD
RS位为1时表示数据为显示数据,RS位为0时表示数据为控制指令
第二字节——D7到D4表示数据字节的高四位
第二字节——D3到D0表示数据字节的低四位
具体工作时序的操作:
(1)将CS拉高选中LCD;
(2)将SCLK拉低,允许修改SID上的数据,为产生上升沿做准备;
(3)在SCLK为低电平期间修改SID的数据;
(4)将SCLK拉高,产生上升沿,LCD将SID上的数据读入;
(5)重复2到4步骤,直到24位数据传输完毕;
(6)将CS拉低取消选中。
3.4步进电机驱动电路
步进电机需要的驱动电流比较大,单片机无法直接驱动,因此选择ULN2003达林顿管来增大驱动电流,同时另外增加供电电压,使步进电机顺利转动。
图8 步进电机驱动电路
四、整机电路
图9 整机电路图
五、软件原理论述
5.1红外解码程序
红外遥控器使用的是TC9012是一款专用红外发射集成电路,TC9012 的一帧数据中含有 32 位码,包含两次 8 位用户码, 8 位数据码和 8 位数据码的反码及最后位的同步位。引导码由 4.5ms 的载波和 4.5ms 的载波关断波形所构成,以作为用户码、数据码以及他们的反码的先导。
“ 1”和“ 0”的区分取决于脉冲之间的时间,称之为脉冲位置调制方式。
发射码格式与数据参数如下图所示:
图10 TC9012发射码格式
图11 数据参数示意图
数据解码过程用到了单片机内部资源的外部中断与定时器中断,采用单片机外部中断的下降沿触发,识别非常灵敏,可以准确捕捉每个跳变信号;同时,使用8位定时器自动重装模式,准确计算出脉冲信号的持续时间,从而得到红外信号数据。
具体操作过程:
(1)接收到下降沿信号时计算是否为9ms,若是,则认为是启动信号;
(2)依次接收数据线上的32为数据,将其数据参数暂时存入数组中,等到数据接收完毕,接收标志位置1;
(3)接收标志位为1时,启动数据转换,将32位数据合为4字节数据,存入数组中;
(4)判断第三字节与第四字节是否互为反码,是则认为数据接收正确
(5)将数据码返回给调用函数。
5.2单片机内部E2PROM操作程序
STC12C5A60S2系列单片机内部集成了的EEPROM是与程序空间是分开的,利用ISP/IAP技术可将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区,每个扇区包含512字节。在用户程序中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。数据存储器的擦除操作是按扇区进行的。
单片机内部的E2PROM有专门的寄存器对其进行管理,包括数据寄存器IAP_DATA、地址寄存器IAP_ADDRH和IAP_ADDRL、命令寄存器IAP_CMD、命令触发寄存器IAP_TRIG、命令寄存器IAP_CONTR,具体地址如下图所示:
图12 与E2PROM相关的寄存器
(1)IAP_DATA : ISP/IAP操作时的数据寄存器。
ISP/IAP 从Flash读出的数据放在此处,向Flash写的数据也需放在此处
(2)IAP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。
IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。
(3)IAP_CMD模式选择:
图13 模式选择相关位
(4)IAP_TRIG: 在IAPEN(IAP_CONTR.7) = 1 时,对IAP_TRIG先写入5Ah,再写入 A5h,ISP/IAP 命令才会生效。
(5)命令寄存器IAP_CONTR:
IAPEN: ISP/IAP功能允许位。
0:禁止IAP读/写/擦除Data Flash/EEPROM
1: 允许IAP读/写/擦除Data Flash/EEPROM
SWBS: 软件选择从用户应用程序区启动(送0),还是从系统ISP监控程序区启动ISP监控程序区启动监控程序区启动程序区启动(送1)。
要与SWRST直接配合才可以实现
SWRST: 0: 不操作; 1: 产生软件系统复位,硬件自动复位。
CMD_FAIL: 如果送了 ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败,则为1,需由软件清零
图14 等待时间设置表
具体操作过程:
(1)操作控制寄存器,使能IAP功能,设置CPU等待时间;
(2)关闭中断,防止中断打扰数据写入或读出;
(3)向命令寄存器写入操作命令,若为写指令,还需向数据寄存器写入数据;
(4)向地址寄存器写入要操作的地址;
(5)向触发寄存器写入触发命令5AH和A5H;
(6)关闭 IAP功能,若为读指令,则将数据返回。
六、总结
经过了半个月的努力,编程序,调试电路,组合测试以及写论文,总算将这个比赛项目做完了。在不落下功课的情况下争分夺秒地完成赛题确实很不容易,但是最后的成果出来了,基本的功能也都实现了,虽然创新方面做得不足,但也是蛮高兴的。
刚开始赛题发布的时候,看到ABC三个赛题,心里不会完全不知道从哪开始,因为寒假在家里学过单片机,赛题基本跟协会布置的作业很相近。所以有了较大的信心,代码以前写过有一些可以直接移植就比较方便。当然,问题还是不少,主要是在密码锁这部分内容比较难以控制,以前写过的程序因为使用了大量的goto语句导致可读性很差,难以重新使用,所以此次就严格控制goto的使用,在编写程序的同时用注释分隔开,达到了较好的可读性。因为调试电路时做得比较仔细,所以焊接部分做得比较快,功能也都能实现。
然后就是写论文部分,因为以前没有接触过论文的写法,格式都不懂,写起来就挺费劲的,而且还要自己学习绘制电路图,这就需要借助Altium Designer,但又没学过,因此就只能从头学起,画画电路图还好,但是PCB就没办法弄了,而且元件库还是网上下载的,所以,这方面以后还要好好学学。除此之外,还要查阅其他的相关资料,力求用简洁的语言表述自己的电路方案也不容易。
通过此次比赛,我更加了解到,学习电设真的不是一样容易的事情,除了要学得多,还得要能很好地表达自己,在遇到不懂的知识要学会如何查阅获取资料,并且需要耐心,制作过程中需要很细心,一点都不能马虎,否则可能就会前功尽弃,而且要尽可能在实验前找到错误所在,增加项目的成功几率。
感谢协会能举办这次活动,每次活动都会让自己有意想不到的收获,希望以后继续努力下去,不断提高自己的实践能力。
参考文献
[1]郭天祥. 新概念51单片机C语言教程:入门、提高、开发、拓展. 北京:电子工业出版社,2009
[2]数据手册http://www.alldatasheet.com/ 下载本文