目 录
1 引 言 .................................................................... 2
1.1红外遥控技术背景 ......................................................... 2
2 总体设计方案 .............................................................. 4
2.1 方案:红外遥控控制小车................................................... 4
3 NECUPD6121G红外遥控系统 ................................................... 5
3.1 NECU PD 6121G .............................................................. 5
3.2 简单发射电路............................................................. 5
3.3 发射编码及信号波形....................................................... 6
4 AT89S52单片机 ............................................................ 11
4.1 AT89S52单片机 ......................................................... 11
5 L298N驱动模块 ............................................................ 16
5.11 L298N 驱动模块说明 ..................................................... 16
5.2 L298芯片驱动参数 ....................................................... 16
5.3 功能简图................................................................ 16
6 遥控赛车系统框图及电路设计 . ............................................... 19
6.1系统框图及电路设计 ...................................................... 19
7红外遥控赛车程序设计 ...................................................... 20
7.1红外信号解码设计框图 .................................................... 20
7.2 红外接收软件设计........................................................ 22
结 束 语 ................................................................... 24
参考文献 ................................................................... 25
附录一:电路原理图 . ......................................................... 26
附录二:赛车实物图 . ......................................................... 27
附录三:程序清单............................................................ 28
红外遥控赛车软件算法设计
陈辉
摘要:通过对设计要求的认真分析和研究,拿出了几种可行方案,最终选定一个最佳方案。该方案是采用先进的单片机技术实现遥控,采用模块化设计,主要分为两个模块:红外遥控模块和L298电机驱动模块。红外发射模块中通过Upd6121G 红外遥控器发射管对单片机发射信号,红外接收模块中的单片机受红外接收管接收的信号控制。文章详细的讨论了实现上述红外遥控过程其工作原理和软件设计。
关键词:遥控器 红外发射 红外接收 单片机
1 引 言
1.1红外遥控技术背景
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
60年代初,一些发达国家开始研究民用产品的遥控技术,单由于受当时技术条件限制,遥控技术发展很缓慢,70年代末,随着大规模集成电路和计算机技术的发展,遥控技术得到快速发展。在遥控方式上大体经理了从有线到无限的超声波,从振动子到红外线,再到使用总线的微机红外遥控这样几个阶段。无论采用何种方式,准确无误传输新信号,最终达到满意的控制效果是非常重要的。最初的无线遥控装置采用的是电磁波传输信号,由于电磁波容易产生干扰,也易受干扰,因此逐渐采用超声波和红外线媒介来传输信号。与红外线相比,超声传感器频带窄,所能携带的信息量少,易受干扰而引起误动作。较为理想的是光控方式,逐渐采用红外线的遥控方式取代了超声波遥控方式,出现了红外线多功能遥控器,成为当今时代的主流。
由于红外线在频谱上居于可见光之外,所以抗干扰性强,具有光波的直线传播特性,不易产生相互间的干扰,是很好的信息传输媒体。信息可以直接对红外光进行调制传输,例如,信息直接调制红外光的强弱进行传输,也可以用红外线产生一定频率的载波,再用信息对载波进调制,接收端再去掉载波,取到信息。从信息的可靠传输说,后一种方法更好,这就是我们今天看到的大多数红外遥控所采用的方法。由于红外线的波长远小于无线电波的波长,因此在采用红外遥控方式时,不会干扰其他电器的正常工作,也不会影响临近的无线电设备。
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。
图1 红外发射框图
发射器一般由指令键(或操作杆) 、指令编码系统、调制电路、驱动电路、发射电路等几部分组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载波进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定的指令编码信号。
图2红外接收框图
接收器一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构) 等几部分组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器
将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制。
1.2单片机
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU 表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU 的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU 集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
以单片机为核心的控制系统,因为其实时控制功能强,可靠性高,实用性强,应用范围广等优点,得到了极为广泛的应用。随着人们生活水平的不断提高, 单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中红外遥控就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。因此了解单片机知识,掌握单片机的应用技术具有重大的意义。它的理论性和实践性都很强,我们在理论课学习中主要学习单片机的基本构造,各部分的工作原理以及指令系统,然而,光是理论的学习是远远不够的,最重要的是把理论和实践相结合。
所以此次实习,通过设计一个基于AT89S52单片机的遥控器设计,以增进对单片机电路的感性认识,加深对理论方面的理解和巩固,了解和掌握软硬件设计过程、方法及实现,增强自己的动手和实践能力,为以后在工作和学习中,设计和实现应用系统打下良好基础。
2 总体设计方案
根据任务书的要求,利用无线发射无线接收远程控制单片机从而控制小车运行,可以拟定以下方案。
2.1 方案:红外遥控控制小车
在不需要多电路的应用场合,可以使用由常规集成电路组成的单通道红外遥控电路。这种遥控电路不需要使用昂贵的专用编译码器,因此成本低。以NEC 的Upd6121G 遥控器为例小巧便携成本低廉且功耗小,一颗银锌纽扣电池可使用半年之久。故实用性强。
红外发射部分
图3红外发射框图 可以直接产生一个控制功能的震荡电路频率,再通过红外发光二极管发射出去。由SM0038红外接收芯片进行解码输出TTL 电平信号,单片机接收到红外指令根据程序控制L298N 电机驱动模块进而控制小车运行。
红外接收部分
图4 红外接收框图
3 NECUpd6121G红外遥控系统
3.1 NECUpd6121G
日本电气股份有限公司(日文:日本电気株式会社,英文:NEC Corporation,Nippon Electric Company, Limited 的简称)简称日本电气或日电或NEC ,是一家跨国信息技术公司,总部位于日本东京港区。NEC 为商业企业、通信服务以及政府提供信息技术(IT )和网络产品。它的经营范围主要分成三个部分:IT 解决方案、网络解决方案和电子设备。
采用Upd6121G 编码协议的红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路,如图5所示。
发射端 接收端
图5 红外遥控系统框图
3.2 简单发射电路
红外线属于一种电磁射线,其特性等同于无线电或X 射线。人眼可见的光波是380nm-780nm ,发射波长为780nm-1mm 的长射线称为红外线. 尽管肉眼看不到这种光线,但利用红外线发送和接收装置却可以发送和接收红外线信号,实施红外线通讯。利用红外线通讯无需连线,只需将两设备的红外线装置对正即可传输数据。红外线通讯方向性很强,适用于近距离的无线传输。完整的红外遥控器电路主要由:集成发射芯片、晶体振荡器、红外线发射管、推动晶体三极管、导电橡胶等组成,如图6所示。
3.3 发射编码及信号波形 图6 最简单的红外发射接收电路
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC 的uPD6121G 组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.125ms的组合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms的组合表示二进制的“1”,如图7所示。
图7 遥控码的0和1波形图
上述“0”和“1”组成的 32 位二进制码经 38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。
UPD6121G 产生的遥控编码是连续的 32 位二进制码组,其中前 16 位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制 01H ;后 16 位为 8 位操作码(功能码)及其反码,如图8所示。
图8 遥控信号发射编码
遥控器在按键按下后,周期性地发出同一种 32 位二进制码,周期约为 108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在 58.5~76.5ms 之间,图9为发射波形图。
图9 一帧完整波形图
当按键按下超过36ms ,振荡器使芯片激活,如图06所示将发射一组108ms 的编码脉冲, 这108ms 发射代码由一个起始码(9ms ), 一个结果码(4.5ms ), 低8位地址码(9ms~18ms)高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。
图10 红外编码图
如果键按下超过108ms 仍未松开时,如图07所示每隔108ms 输出一帧9ms 载波+2.25ms关断+0.56ms载波的信号,直至释放接下来发射的代码(连发代码)代码格式,这种连发代码常用于电视遥控器长按连续增加音量等功能。
图11 长按按键的红外波形图
注:代码宽度算法:
16 位地址码的最短宽度:1.12×16=18ms 16 位地址码的最长宽度:2.24ms ×16=36ms易知 8 位数据代码及其 8 位反代码的宽度和不变:(1.12ms+2.24ms)×8=27ms ∴32 位代码的宽度为(18ms+27ms)~(36ms+27ms)
1. 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以 0.56ms 的低电平开始,不同的是高电平的宽度不同,“0”为 0.56ms,“1”为 1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从 0.56ms 低电平过后,开始延时,0.56ms 以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比 0.56ms 长些,但又不能超过 1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms 最为可靠,一般取 0.84ms 左右均可。
2. 根据码的格式,应该等待 9ms 的起始码和 4.5ms 的结果码完成后才能读码。
3.4 红外接收解码系统
红外接收电路一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身,并输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作。在本系统中我们采用红外一体化接收头SM0038,外观及红外接收电路如图08所示。SM0038 黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达35m 。它能与TTL 、COMS 电路兼容。SM0038 为直立侧面收光型。三个管脚分别是地、+5 V 电源、解调信号输出端。
图12 SM0038引脚图和原理图
SM0038接收红外信号频率为38 kHz,周期约26 μs ,同时能对信号进行放大、检波、整形,得到TTL 电平的编码信号。 TTL 电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V 等价于逻辑“0”,这被称做TTL (晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。经过SM0038调解后的波形由OUT 输入单片机的P33口,单片机识别后得到TTL 电平的编码信号,对其信号进行解码翻译,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.125ms的组合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms的组合表示二进制的“1”。这样就得出了一连串的数据,再根据编码程序对数据赋予的含义,就可以完整的接收和翻译出所要实现的功能,如图13所示。
a
b
图13 一帧SM0038调解后的波形
10
4 AT89S52单片机
4.1 AT89S52单片机
本次设计所使用的单片机是Atmel 公司的AT89S52芯片,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash ,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k 字节Flash ,256字节RAM ,32位I/O 口线,看门狗定时器,2个数据指针三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 AT89S52的引脚图如图14所示:
图14 AT89S52引脚图
AT89S52单片机引脚注释: VCC : 电源 GND : 地
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为
11
低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash 编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash 编程和校验时,P3口也接收一些控制信号。
RST : 复位输入。晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH) 上的DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE )是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash 编程时,此引脚(PROG )也用作编程输入脉冲。
在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH 的SFR 的第0位置“1”,ALE 操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC 指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH 的SFR 的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN :外部程序存储器选通信号(PSEN )是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH 的外部程序存储器读取指令,EA 必须接GND 。为了执行内部程序指令,EA 应该接VCC 。在flash 编程期间,
12
EA 也接收12伏VPP 电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 4.2 时钟电路
单片机的时钟电路由振荡电路和分频电路组成,其振荡电路由反相器以及并联外接的石英晶体和电容组成,用于产生振荡脉冲。分频电路用于把振荡脉冲分频,以的到所需要的时钟信号。
图15 晶振电路
振荡电路如图11所示:其输入端为引脚XTAL1,输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容,石英晶体为一感性原件,与电容构成振荡回路,为片内放大器提供正反馈和振荡的相移条件,从而构成一个稳定的自激振荡器。振荡器的频率主要取决于晶体的振荡频率, 一般晶体可在1.2~12 MHz 之间任选, 电容C1、 C2可在5~30 pF之间选择, 电容的大小对振荡频率有微小的影响, 可起频率微调作用。
振荡脉冲经二分频后作为系统的时钟信号,时钟信号经过三分频产生ALE 信号,ALE 信号用于控制把P0口的低8位地址送入锁存器锁起来,以实现低地址和数据的分时传送,ALE 还可作为外部时钟或外部脉冲使用。时钟信号经六分频得到机器周期信号。
4.3 中断系统 A 中断的概念
当CPU 与外设交换信息时,由于外设的速度比较慢,若用查询的方式,则CPU 就要浪费很多时间去等待外设。这样就存在一个快速的CPU 与慢速的外设之间的矛盾。为了解决这个问题,就发展了中断的概念。
CPU 正在处理某一程序时,发生了另一突发事件请求CPU 迅速去处理(中断发生) ;CPU
暂
13
时停止当前的工作,转到需要处理的中断源的服务程序的入口(中断响应) ,一般在入口处执行一跳转指令转去处理中断事件(中断服务) ;待CPU 将中断事件处理完毕后,再回到原来程序被中断的地方继续处理执行程序(中断返回) ,这一处理过程称为中断。
51单片机的中断系统提供5个中断源:外部中断0和外部中断1,定时/计数器(T0)和(T1)的溢出中断,串行接口的接收和发送中断。本程序中只用到了外部中断1。
B 中断控制
1 中断允许寄存器IE(A8H)
CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器(IE)控制的。IE 各位的定义如表1所示:
表1中断允许寄存器IE :
EA ——中断允许总控制位
EA =0——中断总禁止,禁止所有中断
EA =1——中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位设置。 EX0和EX1——外部中断允许控制位 EX0(EX1)=0——禁止外部中断
ET0和ET1——定时器/计数器中断允许控制位 ET0(ET1)=0——禁止定时器/计数器中断 ET0(ET1)=1——允许定时器/计数器中断 ES ——串行中断允许控制位 ES=0——禁止串行中断 ES=1——允许串行中断 2中断优先级控制寄存器(IP )
各中断的优先级通过中断优先级控制寄存器IP 来设定,其未定义及位地址如表2所示: 表2中断优先级控制寄存器:
PX0——外部中断0优先级设定位;
14
PT0——定时中断0优先级设定位; PX1——外部中断1优先级设定位; PT1——定时中断1优先级设定位; PS ——串行中断优先级设定位。 3定时器控制寄存器(TCON )
该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H 。按位操作时,各位的地址为88H ~8FH 。寄存器的内容及位地址表示如表3所示:
表3定时器控制寄存器:
IE0和IE1——外中断请求标志位。当CPU 采样到 INT0(或INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“1”。 当中断响应完成转向中断服务程序时,由硬件把IE0(或IE1)清零。
TR0 和TR1——定时器运行控制位: TR0 (TR1 )=0——定时器/计数器不工作 TR0 (TR1 )=1——定时器/计数器开始工作
TF0和TF1——计数溢出标志位。当计数器产生计数溢出时,相应的溢出标位 硬件置“1”。 并自动产生定时中断请求。
15
5 L298N驱动模块
5.11 L298N驱动模块说明
L298是SGS 公司的产品,比较常见的是15脚Multiwatt 封装的L298N ,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,可以直接驱动两路3-30V 直流电机,并提供了5V 输出接口,可以给5V 单片机电路系统供电, 支持3.3VMCU 控制,可以方便的控制直流电机速度和方向,也可以控制2相步进电机如图16所示。
图12
图16 L298控制电路
5.2 L298芯片驱动参数
1. 驱动芯片:全新原装L298N 双H 桥驱动芯片 2. 驱动部分端子供电范围VMS :+5V ~+30 V 3. 驱动部分峰值电流Io :2 A
4. 逻辑部分端子供电范围Vss :3.3-5.5 V 5. 逻辑部分工作电流范围:0~47 mA
6. 控制信号输入电压范围:高电平4.5-5.5V 低电平0 V 7. 最大功耗:20 W
8. 存储温度:-25℃~+130℃ 9. 驱动板尺寸:55 mm*49mm*33mm 10. 驱动板重量:46 g
11. 其他功能:控制方向指示灯、电源指示,电流检测,逻辑部分板内取电接口。 5.3 功能简图
模块提供4输入或者6输入单片机信号,用跳线帽灵活选择,支持PWM 调速,支持3.3V 单片机,板载上拉电阻,完美解决51单片机IO 口驱动能力不够的问题。
16
模块接线方法:IN1-IN4接单片机, ENA,ENB可以用跳线帽选择直接接高电平或者用单片机控制,IN1-IN4提供4个跳线帽选择是否接上10K 的上拉电阻,OUT1-OUT2接直流电机1,OUT3-OUT4接电机2,VCC ,GND 分别接电池盒正负极,当VCC 电压大于6V 时,+5为输出,可以方便给5V 的单片机供电,当VCC 电压小于6V 时,需拔掉5V_EN跳线帽,外部给+5提供一个5V 电压保证298N 芯片的正常工作。
VCC:理论上可以最高输入46V ,但是理论上L298N 芯片的最高功率只有25W ,在50V 最高工作电压时,电流不应超过 0.5A,实际模块上有7805芯片给单片机提供5V ,7805的正向工作电压不应超过28V ,所以模块VCC 理论最大工作电压不应超过28V ,实际建议不应该超过24V ,在24V 工作电压下,单个电机的电流不应超过1A ,2个电机同时使用单个电机的电流不应超过0.5 A;
VCC 输入多少V ,完全取决于电机的额定电压,OUT 的高电平电压等于VCC ,低电平电压等于0V ,本公司的减速电机额定电压一般6V ,建议VCC 用6V 的电源,履带车额定电压为5-9V ,建议7.2V 供电。
GND:接地,这个要注意的是,如果和单片机板以及其他系统连一起的时候,整个系统的GND 要连一起,如果不连一起,电压就没有一个参考电平,无法进行正常控制。
+5:5V 输出,模块板载7805,可以方便给单片机以及其他需要5V 的系统供电,前提是VCC 接大于6V 电压的时候,+5 端才有5V 输出,如果VCC 小于6V ,需要拔掉5V_EN跳线帽, +5端输入一个3.3V-5V 的电压,因为L298N 逻辑部分需要供电。
IN1-IN4:接单片机IO 口,高低电平分别对应OUT1-OUT4的高低电平;
OUT1-OUT4:OUT1、OUT2接电机1,OUT3、OUT4接电机2,OUT1和OUT2有电压差即一个为高一个为低电机才转;
ENA :OUT1-OUT2的使能端,高电平有效,低电平禁止, 跳线帽接上默认ENA 为高电平,一般不用管,如果需要PWM 调速,就需要拔掉跳线帽,ENA 接单片机IO 口;
ENB :OUT3-OUT4的使能端,高电平有效,跳线帽接上默认 ENA为高电平,一般不用管,如果需要PWM 调速,就需要拔掉跳线帽,ENB 接单片机IO 口;
R1-R4:跳线帽接上,IN1-IN4端加了10K 的上拉电阻,跳线帽拔掉,无上拉电阻; OUT1,OUT2和OUT3,OUT4之间可分别接电动机5,7,10,12脚接输入控制电平,控制电机的正反转。EnA ,EnB 接控制使能端,控制电机的停转。表1是L298N 功能逻辑图。由表1可知EnA 为低电平时,输入电平对电机控制起作用,当EnA 为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。下图为L298N 控制逻辑表
17
表4 L298N控制逻辑表:
18
6 遥控赛车系统框图及电路设计
6.1系统框图及电路设计
遥控接收单元由单片机最小系统和红外接收器、控制对象电路等组成,接收控制器由一个AT89S52芯片作为控制中心, 与接收电路和各自的控制电路共同构成。其中接收电路使用一体化红外接收头SM0038, SM0038工作频率为38 kHz,能对收到遥控信号进行放大、检波、整形、解调, 得到TTL 电平的编码信号, 再送给单片机, 经单片机解码并执行相关控制程序
图18 红外遥控赛车系统框图
图19 遥控赛车控制电路图
19
7红外遥控赛车程序设计
7.1红外信号解码设计框图
程序开始是对单片机进行初始化设置,循环扫描判断是否有键按下,对SM0038所发出的TTL 电平进行解码,遥控信号解码程序流程图如图20所示。
20
图20 程序框图
21
7.2 红外接收软件设计
//==中断读取红外键值程序========================= void int0(void) interrupt 2 {
IRdelay(15); if (IRIN==1)
{
return;
unsigned char j,k,N=0;
}
//确认IR 信号出现
while (!IRIN) //等IR 变为高电平,跳过导9ms 的前低电平信号。 {IRdelay(1);}
for (j=0;j
for (k=0;k
while (IRIN) //等 IR 变为低电平,跳过4.5ms 的前导高电平
信号。
{IRdelay(1);}
while (!IRIN) //等 IR 变为高电平
{IRdelay(1);}
while (IRIN) //计算IR 高电平时长
{
IRdelay(1); N++; if (N>=30)
{ return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
22
} }
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0;
}
23
结 束 语
这是一个磨练意志的过程。从课题的选择开始,到硬件和软件系统的设计,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过S52单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Protel 99 SE软件画电路图, 这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更加明确了自己专业的方向。这次时间是短暂的,但这我想我们学到的应该不仅仅是专业技术等表面上的东西,更深一层的是对人生的感悟,对未来的想法,年轻人的桀骜不驯在此时已经不在有意义,取而代之的是理性的思维。我们应该具备什么样的能力,我们适合什么样的人生,我们应该在怎样的岗位上实现自己的人生价值。
实习是培养学生综合运用所学知识、发现、提出、分析和解决实际问题, 锻炼实践能力的重要环节, 是对学生实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。
实习是短暂的,影响却是长远的。通过实习让我体会了团队合作的益处,在团队中一起发现问题、讨论问题,共同进步、共同提高。硬件实习主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把所学的知识学的更加扎实。
在本文的撰写过程中,导师夏雨果给予了悉心的指导和关心,使我克服了众多困难终于完成了毕业设计的撰写工作。导师渊博的知识、严谨求实的治学态度及敬业精神,给我留下了深刻的印象,并将在我今后的人生道路上产生深远的影响,在此论文完成之际,谨向导师致以崇高的敬意和衷心的感谢!再一次感谢所有关心我、帮助我的人!
24
参考文献
【1】 吕国泰,白朋友主编。电子技术(第3版)。高等教育出版社出版社。2010年1月。 【2】 杜刚主编,王启宁、戎华洪、张东霞等编著。电路设计与制板——Protel99se 应用教程,清华大学出版社,2009年6月。
【3】 赖万钦,严桂兰编著。C 语言程序设计基础。夏门大学出版社,2006年7月。 【4】 李春彪编著。电路电工基础与实训(第2版)。北京大学出版社,2008.8月。
【5】 单承赣,单玉峰,姚磊等编著。射频识别(RFID )原理与应用。电子工业出版社,2008.3月。
【6】 ATMEL公司AT89S52的技术手册。
25
附录一:电路原理图
图21 遥控赛车控制电路图
26
附录二:赛车实物图
图22 红外遥控赛车作品
27
附录三:程序清单
#include
#define c(x)(x*110592/120000) unsigned char Ir_Buf[4]; sbit IRIN = P3^3; unsigned char IRCOM[7];
void IRdelay(unsigned char x); sbit motor=P2^0; sbit zheng=P2^1 ; sbit fan=P2^2; sbit left=P2^3; sbit right=P2^4; void delay1ms(int); void inc(); void dec(); void go(); void back(); void turn_lef(); void turn_rig(); void stop(); char on=0; char a,b,c,d;
//==主程序=================================== main() {
IE=0x84; TCON=0x01; motor=0; while(1) {
switch(keys) {
case 0x08: go();break;//左转 case 0x5A: back();break;//右转 case 0x52: turn_lef();break;//后退 case 0x18: turn_rig();break;//前进 case 0x15: inc();break; case 0x07: dec();break; case 0x1C: stop();break; default:break; } motor=0;
delay1ms(100-on);
28
motor=1;
delay1ms(on); } }
//==中断读取红外键值程序========================= void int0(void) interrupt 2 {
unsigned char j,k,N=0;
IRdelay(15);
if (IRIN==1) // 1为高说明没有接收到nec 红外信号,等待 {
return; }
//确认IR 信号出现
while (!IRIN) //等IR 变为高电平,跳过9ms 的前导低电平信号。
{IRdelay(1);}
for (j=0;j
for (k=0;k
while (IRIN) //等 IR 变为低电平,跳过4.5ms 的前导高电平信号。
{IRdelay(1);}
while (!IRIN) //等 IR 变为高电平 {IRdelay(1);}
while (IRIN) //计算IR 高电平时长 {
IRdelay(1); N++; if (N>=30)
{ return;} //0.14ms计数过长自动离开。
} //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0;
}//end for k }//end for j }
29
//==0.14ms延时=============================== void IRdelay(unsigned char x) //x*0.14MS {
unsigned char i;
while(x--)
{
for (i = 0; i
}
}
//==加速程序================================= void inc()
{
if(on!=100) on+=10;
keys=0;
}
//==延迟程序================================== void delay1ms(int x)
{ int i,j;
for(i=0;i
for(j=0;j
}
//==方向向前================================== void go()
{
zheng=1;
fan=0;
left=1;
right=0;
}
//==方向向后================================== void back()
{
zheng=0;
fan=1;
left=0;
right=1;
}
//==左转====================================== void turn_lef()
{
zheng=0;
fan=1;
left=1;
30
right=0;
}
//==右转====================================== void turn_rig()
{
zheng=1;
fan=0;
left=0;
right=1;
}
//==停止程序================================== void stop()
{
zheng=1;
fan=1;
left=1;
right=1;
}
31
目 录
1 引 言 .................................................................... 2
1.1红外遥控技术背景 ......................................................... 2
2 总体设计方案 .............................................................. 4
2.1 方案:红外遥控控制小车................................................... 4
3 NECUPD6121G红外遥控系统 ................................................... 5
3.1 NECU PD 6121G .............................................................. 5
3.2 简单发射电路............................................................. 5
3.3 发射编码及信号波形....................................................... 6
4 AT89S52单片机 ............................................................ 11
4.1 AT89S52单片机 ......................................................... 11
5 L298N驱动模块 ............................................................ 16
5.11 L298N 驱动模块说明 ..................................................... 16
5.2 L298芯片驱动参数 ....................................................... 16
5.3 功能简图................................................................ 16
6 遥控赛车系统框图及电路设计 . ............................................... 19
6.1系统框图及电路设计 ...................................................... 19
7红外遥控赛车程序设计 ...................................................... 20
7.1红外信号解码设计框图 .................................................... 20
7.2 红外接收软件设计........................................................ 22
结 束 语 ................................................................... 24
参考文献 ................................................................... 25
附录一:电路原理图 . ......................................................... 26
附录二:赛车实物图 . ......................................................... 27
附录三:程序清单............................................................ 28
红外遥控赛车软件算法设计
陈辉
摘要:通过对设计要求的认真分析和研究,拿出了几种可行方案,最终选定一个最佳方案。该方案是采用先进的单片机技术实现遥控,采用模块化设计,主要分为两个模块:红外遥控模块和L298电机驱动模块。红外发射模块中通过Upd6121G 红外遥控器发射管对单片机发射信号,红外接收模块中的单片机受红外接收管接收的信号控制。文章详细的讨论了实现上述红外遥控过程其工作原理和软件设计。
关键词:遥控器 红外发射 红外接收 单片机
1 引 言
1.1红外遥控技术背景
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
60年代初,一些发达国家开始研究民用产品的遥控技术,单由于受当时技术条件限制,遥控技术发展很缓慢,70年代末,随着大规模集成电路和计算机技术的发展,遥控技术得到快速发展。在遥控方式上大体经理了从有线到无限的超声波,从振动子到红外线,再到使用总线的微机红外遥控这样几个阶段。无论采用何种方式,准确无误传输新信号,最终达到满意的控制效果是非常重要的。最初的无线遥控装置采用的是电磁波传输信号,由于电磁波容易产生干扰,也易受干扰,因此逐渐采用超声波和红外线媒介来传输信号。与红外线相比,超声传感器频带窄,所能携带的信息量少,易受干扰而引起误动作。较为理想的是光控方式,逐渐采用红外线的遥控方式取代了超声波遥控方式,出现了红外线多功能遥控器,成为当今时代的主流。
由于红外线在频谱上居于可见光之外,所以抗干扰性强,具有光波的直线传播特性,不易产生相互间的干扰,是很好的信息传输媒体。信息可以直接对红外光进行调制传输,例如,信息直接调制红外光的强弱进行传输,也可以用红外线产生一定频率的载波,再用信息对载波进调制,接收端再去掉载波,取到信息。从信息的可靠传输说,后一种方法更好,这就是我们今天看到的大多数红外遥控所采用的方法。由于红外线的波长远小于无线电波的波长,因此在采用红外遥控方式时,不会干扰其他电器的正常工作,也不会影响临近的无线电设备。
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。
图1 红外发射框图
发射器一般由指令键(或操作杆) 、指令编码系统、调制电路、驱动电路、发射电路等几部分组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载波进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定的指令编码信号。
图2红外接收框图
接收器一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构) 等几部分组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器
将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制。
1.2单片机
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU 表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU 的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU 集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
以单片机为核心的控制系统,因为其实时控制功能强,可靠性高,实用性强,应用范围广等优点,得到了极为广泛的应用。随着人们生活水平的不断提高, 单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中红外遥控就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。因此了解单片机知识,掌握单片机的应用技术具有重大的意义。它的理论性和实践性都很强,我们在理论课学习中主要学习单片机的基本构造,各部分的工作原理以及指令系统,然而,光是理论的学习是远远不够的,最重要的是把理论和实践相结合。
所以此次实习,通过设计一个基于AT89S52单片机的遥控器设计,以增进对单片机电路的感性认识,加深对理论方面的理解和巩固,了解和掌握软硬件设计过程、方法及实现,增强自己的动手和实践能力,为以后在工作和学习中,设计和实现应用系统打下良好基础。
2 总体设计方案
根据任务书的要求,利用无线发射无线接收远程控制单片机从而控制小车运行,可以拟定以下方案。
2.1 方案:红外遥控控制小车
在不需要多电路的应用场合,可以使用由常规集成电路组成的单通道红外遥控电路。这种遥控电路不需要使用昂贵的专用编译码器,因此成本低。以NEC 的Upd6121G 遥控器为例小巧便携成本低廉且功耗小,一颗银锌纽扣电池可使用半年之久。故实用性强。
红外发射部分
图3红外发射框图 可以直接产生一个控制功能的震荡电路频率,再通过红外发光二极管发射出去。由SM0038红外接收芯片进行解码输出TTL 电平信号,单片机接收到红外指令根据程序控制L298N 电机驱动模块进而控制小车运行。
红外接收部分
图4 红外接收框图
3 NECUpd6121G红外遥控系统
3.1 NECUpd6121G
日本电气股份有限公司(日文:日本电気株式会社,英文:NEC Corporation,Nippon Electric Company, Limited 的简称)简称日本电气或日电或NEC ,是一家跨国信息技术公司,总部位于日本东京港区。NEC 为商业企业、通信服务以及政府提供信息技术(IT )和网络产品。它的经营范围主要分成三个部分:IT 解决方案、网络解决方案和电子设备。
采用Upd6121G 编码协议的红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路,如图5所示。
发射端 接收端
图5 红外遥控系统框图
3.2 简单发射电路
红外线属于一种电磁射线,其特性等同于无线电或X 射线。人眼可见的光波是380nm-780nm ,发射波长为780nm-1mm 的长射线称为红外线. 尽管肉眼看不到这种光线,但利用红外线发送和接收装置却可以发送和接收红外线信号,实施红外线通讯。利用红外线通讯无需连线,只需将两设备的红外线装置对正即可传输数据。红外线通讯方向性很强,适用于近距离的无线传输。完整的红外遥控器电路主要由:集成发射芯片、晶体振荡器、红外线发射管、推动晶体三极管、导电橡胶等组成,如图6所示。
3.3 发射编码及信号波形 图6 最简单的红外发射接收电路
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC 的uPD6121G 组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.125ms的组合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms的组合表示二进制的“1”,如图7所示。
图7 遥控码的0和1波形图
上述“0”和“1”组成的 32 位二进制码经 38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。
UPD6121G 产生的遥控编码是连续的 32 位二进制码组,其中前 16 位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制 01H ;后 16 位为 8 位操作码(功能码)及其反码,如图8所示。
图8 遥控信号发射编码
遥控器在按键按下后,周期性地发出同一种 32 位二进制码,周期约为 108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在 58.5~76.5ms 之间,图9为发射波形图。
图9 一帧完整波形图
当按键按下超过36ms ,振荡器使芯片激活,如图06所示将发射一组108ms 的编码脉冲, 这108ms 发射代码由一个起始码(9ms ), 一个结果码(4.5ms ), 低8位地址码(9ms~18ms)高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。
图10 红外编码图
如果键按下超过108ms 仍未松开时,如图07所示每隔108ms 输出一帧9ms 载波+2.25ms关断+0.56ms载波的信号,直至释放接下来发射的代码(连发代码)代码格式,这种连发代码常用于电视遥控器长按连续增加音量等功能。
图11 长按按键的红外波形图
注:代码宽度算法:
16 位地址码的最短宽度:1.12×16=18ms 16 位地址码的最长宽度:2.24ms ×16=36ms易知 8 位数据代码及其 8 位反代码的宽度和不变:(1.12ms+2.24ms)×8=27ms ∴32 位代码的宽度为(18ms+27ms)~(36ms+27ms)
1. 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以 0.56ms 的低电平开始,不同的是高电平的宽度不同,“0”为 0.56ms,“1”为 1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从 0.56ms 低电平过后,开始延时,0.56ms 以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比 0.56ms 长些,但又不能超过 1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms 最为可靠,一般取 0.84ms 左右均可。
2. 根据码的格式,应该等待 9ms 的起始码和 4.5ms 的结果码完成后才能读码。
3.4 红外接收解码系统
红外接收电路一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身,并输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作。在本系统中我们采用红外一体化接收头SM0038,外观及红外接收电路如图08所示。SM0038 黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达35m 。它能与TTL 、COMS 电路兼容。SM0038 为直立侧面收光型。三个管脚分别是地、+5 V 电源、解调信号输出端。
图12 SM0038引脚图和原理图
SM0038接收红外信号频率为38 kHz,周期约26 μs ,同时能对信号进行放大、检波、整形,得到TTL 电平的编码信号。 TTL 电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V 等价于逻辑“0”,这被称做TTL (晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。经过SM0038调解后的波形由OUT 输入单片机的P33口,单片机识别后得到TTL 电平的编码信号,对其信号进行解码翻译,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.125ms的组合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms的组合表示二进制的“1”。这样就得出了一连串的数据,再根据编码程序对数据赋予的含义,就可以完整的接收和翻译出所要实现的功能,如图13所示。
a
b
图13 一帧SM0038调解后的波形
10
4 AT89S52单片机
4.1 AT89S52单片机
本次设计所使用的单片机是Atmel 公司的AT89S52芯片,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash ,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k 字节Flash ,256字节RAM ,32位I/O 口线,看门狗定时器,2个数据指针三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 AT89S52的引脚图如图14所示:
图14 AT89S52引脚图
AT89S52单片机引脚注释: VCC : 电源 GND : 地
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为
11
低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash 编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash 编程和校验时,P3口也接收一些控制信号。
RST : 复位输入。晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH) 上的DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE )是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash 编程时,此引脚(PROG )也用作编程输入脉冲。
在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH 的SFR 的第0位置“1”,ALE 操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC 指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH 的SFR 的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN :外部程序存储器选通信号(PSEN )是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH 的外部程序存储器读取指令,EA 必须接GND 。为了执行内部程序指令,EA 应该接VCC 。在flash 编程期间,
12
EA 也接收12伏VPP 电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 4.2 时钟电路
单片机的时钟电路由振荡电路和分频电路组成,其振荡电路由反相器以及并联外接的石英晶体和电容组成,用于产生振荡脉冲。分频电路用于把振荡脉冲分频,以的到所需要的时钟信号。
图15 晶振电路
振荡电路如图11所示:其输入端为引脚XTAL1,输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容,石英晶体为一感性原件,与电容构成振荡回路,为片内放大器提供正反馈和振荡的相移条件,从而构成一个稳定的自激振荡器。振荡器的频率主要取决于晶体的振荡频率, 一般晶体可在1.2~12 MHz 之间任选, 电容C1、 C2可在5~30 pF之间选择, 电容的大小对振荡频率有微小的影响, 可起频率微调作用。
振荡脉冲经二分频后作为系统的时钟信号,时钟信号经过三分频产生ALE 信号,ALE 信号用于控制把P0口的低8位地址送入锁存器锁起来,以实现低地址和数据的分时传送,ALE 还可作为外部时钟或外部脉冲使用。时钟信号经六分频得到机器周期信号。
4.3 中断系统 A 中断的概念
当CPU 与外设交换信息时,由于外设的速度比较慢,若用查询的方式,则CPU 就要浪费很多时间去等待外设。这样就存在一个快速的CPU 与慢速的外设之间的矛盾。为了解决这个问题,就发展了中断的概念。
CPU 正在处理某一程序时,发生了另一突发事件请求CPU 迅速去处理(中断发生) ;CPU
暂
13
时停止当前的工作,转到需要处理的中断源的服务程序的入口(中断响应) ,一般在入口处执行一跳转指令转去处理中断事件(中断服务) ;待CPU 将中断事件处理完毕后,再回到原来程序被中断的地方继续处理执行程序(中断返回) ,这一处理过程称为中断。
51单片机的中断系统提供5个中断源:外部中断0和外部中断1,定时/计数器(T0)和(T1)的溢出中断,串行接口的接收和发送中断。本程序中只用到了外部中断1。
B 中断控制
1 中断允许寄存器IE(A8H)
CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器(IE)控制的。IE 各位的定义如表1所示:
表1中断允许寄存器IE :
EA ——中断允许总控制位
EA =0——中断总禁止,禁止所有中断
EA =1——中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位设置。 EX0和EX1——外部中断允许控制位 EX0(EX1)=0——禁止外部中断
ET0和ET1——定时器/计数器中断允许控制位 ET0(ET1)=0——禁止定时器/计数器中断 ET0(ET1)=1——允许定时器/计数器中断 ES ——串行中断允许控制位 ES=0——禁止串行中断 ES=1——允许串行中断 2中断优先级控制寄存器(IP )
各中断的优先级通过中断优先级控制寄存器IP 来设定,其未定义及位地址如表2所示: 表2中断优先级控制寄存器:
PX0——外部中断0优先级设定位;
14
PT0——定时中断0优先级设定位; PX1——外部中断1优先级设定位; PT1——定时中断1优先级设定位; PS ——串行中断优先级设定位。 3定时器控制寄存器(TCON )
该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H 。按位操作时,各位的地址为88H ~8FH 。寄存器的内容及位地址表示如表3所示:
表3定时器控制寄存器:
IE0和IE1——外中断请求标志位。当CPU 采样到 INT0(或INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“1”。 当中断响应完成转向中断服务程序时,由硬件把IE0(或IE1)清零。
TR0 和TR1——定时器运行控制位: TR0 (TR1 )=0——定时器/计数器不工作 TR0 (TR1 )=1——定时器/计数器开始工作
TF0和TF1——计数溢出标志位。当计数器产生计数溢出时,相应的溢出标位 硬件置“1”。 并自动产生定时中断请求。
15
5 L298N驱动模块
5.11 L298N驱动模块说明
L298是SGS 公司的产品,比较常见的是15脚Multiwatt 封装的L298N ,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,可以直接驱动两路3-30V 直流电机,并提供了5V 输出接口,可以给5V 单片机电路系统供电, 支持3.3VMCU 控制,可以方便的控制直流电机速度和方向,也可以控制2相步进电机如图16所示。
图12
图16 L298控制电路
5.2 L298芯片驱动参数
1. 驱动芯片:全新原装L298N 双H 桥驱动芯片 2. 驱动部分端子供电范围VMS :+5V ~+30 V 3. 驱动部分峰值电流Io :2 A
4. 逻辑部分端子供电范围Vss :3.3-5.5 V 5. 逻辑部分工作电流范围:0~47 mA
6. 控制信号输入电压范围:高电平4.5-5.5V 低电平0 V 7. 最大功耗:20 W
8. 存储温度:-25℃~+130℃ 9. 驱动板尺寸:55 mm*49mm*33mm 10. 驱动板重量:46 g
11. 其他功能:控制方向指示灯、电源指示,电流检测,逻辑部分板内取电接口。 5.3 功能简图
模块提供4输入或者6输入单片机信号,用跳线帽灵活选择,支持PWM 调速,支持3.3V 单片机,板载上拉电阻,完美解决51单片机IO 口驱动能力不够的问题。
16
模块接线方法:IN1-IN4接单片机, ENA,ENB可以用跳线帽选择直接接高电平或者用单片机控制,IN1-IN4提供4个跳线帽选择是否接上10K 的上拉电阻,OUT1-OUT2接直流电机1,OUT3-OUT4接电机2,VCC ,GND 分别接电池盒正负极,当VCC 电压大于6V 时,+5为输出,可以方便给5V 的单片机供电,当VCC 电压小于6V 时,需拔掉5V_EN跳线帽,外部给+5提供一个5V 电压保证298N 芯片的正常工作。
VCC:理论上可以最高输入46V ,但是理论上L298N 芯片的最高功率只有25W ,在50V 最高工作电压时,电流不应超过 0.5A,实际模块上有7805芯片给单片机提供5V ,7805的正向工作电压不应超过28V ,所以模块VCC 理论最大工作电压不应超过28V ,实际建议不应该超过24V ,在24V 工作电压下,单个电机的电流不应超过1A ,2个电机同时使用单个电机的电流不应超过0.5 A;
VCC 输入多少V ,完全取决于电机的额定电压,OUT 的高电平电压等于VCC ,低电平电压等于0V ,本公司的减速电机额定电压一般6V ,建议VCC 用6V 的电源,履带车额定电压为5-9V ,建议7.2V 供电。
GND:接地,这个要注意的是,如果和单片机板以及其他系统连一起的时候,整个系统的GND 要连一起,如果不连一起,电压就没有一个参考电平,无法进行正常控制。
+5:5V 输出,模块板载7805,可以方便给单片机以及其他需要5V 的系统供电,前提是VCC 接大于6V 电压的时候,+5 端才有5V 输出,如果VCC 小于6V ,需要拔掉5V_EN跳线帽, +5端输入一个3.3V-5V 的电压,因为L298N 逻辑部分需要供电。
IN1-IN4:接单片机IO 口,高低电平分别对应OUT1-OUT4的高低电平;
OUT1-OUT4:OUT1、OUT2接电机1,OUT3、OUT4接电机2,OUT1和OUT2有电压差即一个为高一个为低电机才转;
ENA :OUT1-OUT2的使能端,高电平有效,低电平禁止, 跳线帽接上默认ENA 为高电平,一般不用管,如果需要PWM 调速,就需要拔掉跳线帽,ENA 接单片机IO 口;
ENB :OUT3-OUT4的使能端,高电平有效,跳线帽接上默认 ENA为高电平,一般不用管,如果需要PWM 调速,就需要拔掉跳线帽,ENB 接单片机IO 口;
R1-R4:跳线帽接上,IN1-IN4端加了10K 的上拉电阻,跳线帽拔掉,无上拉电阻; OUT1,OUT2和OUT3,OUT4之间可分别接电动机5,7,10,12脚接输入控制电平,控制电机的正反转。EnA ,EnB 接控制使能端,控制电机的停转。表1是L298N 功能逻辑图。由表1可知EnA 为低电平时,输入电平对电机控制起作用,当EnA 为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。下图为L298N 控制逻辑表
17
表4 L298N控制逻辑表:
18
6 遥控赛车系统框图及电路设计
6.1系统框图及电路设计
遥控接收单元由单片机最小系统和红外接收器、控制对象电路等组成,接收控制器由一个AT89S52芯片作为控制中心, 与接收电路和各自的控制电路共同构成。其中接收电路使用一体化红外接收头SM0038, SM0038工作频率为38 kHz,能对收到遥控信号进行放大、检波、整形、解调, 得到TTL 电平的编码信号, 再送给单片机, 经单片机解码并执行相关控制程序
图18 红外遥控赛车系统框图
图19 遥控赛车控制电路图
19
7红外遥控赛车程序设计
7.1红外信号解码设计框图
程序开始是对单片机进行初始化设置,循环扫描判断是否有键按下,对SM0038所发出的TTL 电平进行解码,遥控信号解码程序流程图如图20所示。
20
图20 程序框图
21
7.2 红外接收软件设计
//==中断读取红外键值程序========================= void int0(void) interrupt 2 {
IRdelay(15); if (IRIN==1)
{
return;
unsigned char j,k,N=0;
}
//确认IR 信号出现
while (!IRIN) //等IR 变为高电平,跳过导9ms 的前低电平信号。 {IRdelay(1);}
for (j=0;j
for (k=0;k
while (IRIN) //等 IR 变为低电平,跳过4.5ms 的前导高电平
信号。
{IRdelay(1);}
while (!IRIN) //等 IR 变为高电平
{IRdelay(1);}
while (IRIN) //计算IR 高电平时长
{
IRdelay(1); N++; if (N>=30)
{ return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
22
} }
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0;
}
23
结 束 语
这是一个磨练意志的过程。从课题的选择开始,到硬件和软件系统的设计,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过S52单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Protel 99 SE软件画电路图, 这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更加明确了自己专业的方向。这次时间是短暂的,但这我想我们学到的应该不仅仅是专业技术等表面上的东西,更深一层的是对人生的感悟,对未来的想法,年轻人的桀骜不驯在此时已经不在有意义,取而代之的是理性的思维。我们应该具备什么样的能力,我们适合什么样的人生,我们应该在怎样的岗位上实现自己的人生价值。
实习是培养学生综合运用所学知识、发现、提出、分析和解决实际问题, 锻炼实践能力的重要环节, 是对学生实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。
实习是短暂的,影响却是长远的。通过实习让我体会了团队合作的益处,在团队中一起发现问题、讨论问题,共同进步、共同提高。硬件实习主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把所学的知识学的更加扎实。
在本文的撰写过程中,导师夏雨果给予了悉心的指导和关心,使我克服了众多困难终于完成了毕业设计的撰写工作。导师渊博的知识、严谨求实的治学态度及敬业精神,给我留下了深刻的印象,并将在我今后的人生道路上产生深远的影响,在此论文完成之际,谨向导师致以崇高的敬意和衷心的感谢!再一次感谢所有关心我、帮助我的人!
24
参考文献
【1】 吕国泰,白朋友主编。电子技术(第3版)。高等教育出版社出版社。2010年1月。 【2】 杜刚主编,王启宁、戎华洪、张东霞等编著。电路设计与制板——Protel99se 应用教程,清华大学出版社,2009年6月。
【3】 赖万钦,严桂兰编著。C 语言程序设计基础。夏门大学出版社,2006年7月。 【4】 李春彪编著。电路电工基础与实训(第2版)。北京大学出版社,2008.8月。
【5】 单承赣,单玉峰,姚磊等编著。射频识别(RFID )原理与应用。电子工业出版社,2008.3月。
【6】 ATMEL公司AT89S52的技术手册。
25
附录一:电路原理图
图21 遥控赛车控制电路图
26
附录二:赛车实物图
图22 红外遥控赛车作品
27
附录三:程序清单
#include
#define c(x)(x*110592/120000) unsigned char Ir_Buf[4]; sbit IRIN = P3^3; unsigned char IRCOM[7];
void IRdelay(unsigned char x); sbit motor=P2^0; sbit zheng=P2^1 ; sbit fan=P2^2; sbit left=P2^3; sbit right=P2^4; void delay1ms(int); void inc(); void dec(); void go(); void back(); void turn_lef(); void turn_rig(); void stop(); char on=0; char a,b,c,d;
//==主程序=================================== main() {
IE=0x84; TCON=0x01; motor=0; while(1) {
switch(keys) {
case 0x08: go();break;//左转 case 0x5A: back();break;//右转 case 0x52: turn_lef();break;//后退 case 0x18: turn_rig();break;//前进 case 0x15: inc();break; case 0x07: dec();break; case 0x1C: stop();break; default:break; } motor=0;
delay1ms(100-on);
28
motor=1;
delay1ms(on); } }
//==中断读取红外键值程序========================= void int0(void) interrupt 2 {
unsigned char j,k,N=0;
IRdelay(15);
if (IRIN==1) // 1为高说明没有接收到nec 红外信号,等待 {
return; }
//确认IR 信号出现
while (!IRIN) //等IR 变为高电平,跳过9ms 的前导低电平信号。
{IRdelay(1);}
for (j=0;j
for (k=0;k
while (IRIN) //等 IR 变为低电平,跳过4.5ms 的前导高电平信号。
{IRdelay(1);}
while (!IRIN) //等 IR 变为高电平 {IRdelay(1);}
while (IRIN) //计算IR 高电平时长 {
IRdelay(1); N++; if (N>=30)
{ return;} //0.14ms计数过长自动离开。
} //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0;
}//end for k }//end for j }
29
//==0.14ms延时=============================== void IRdelay(unsigned char x) //x*0.14MS {
unsigned char i;
while(x--)
{
for (i = 0; i
}
}
//==加速程序================================= void inc()
{
if(on!=100) on+=10;
keys=0;
}
//==延迟程序================================== void delay1ms(int x)
{ int i,j;
for(i=0;i
for(j=0;j
}
//==方向向前================================== void go()
{
zheng=1;
fan=0;
left=1;
right=0;
}
//==方向向后================================== void back()
{
zheng=0;
fan=1;
left=0;
right=1;
}
//==左转====================================== void turn_lef()
{
zheng=0;
fan=1;
left=1;
30
right=0;
}
//==右转====================================== void turn_rig()
{
zheng=1;
fan=0;
left=0;
right=1;
}
//==停止程序================================== void stop()
{
zheng=1;
fan=1;
left=1;
right=1;
}
31