基于单片机遥控车的制作与工艺
四年级 记叙文 5764字 764人浏览 redofapple2012

电气1311 胡小雪 题目类型:

软件开发 2016年 4 月 18日

摘 要

本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和控制核心;采用并行口通信控制电动机驱动芯片L298N ,达到用红外遥控方式控制小车前进、后退、左转、右转等操作。该设计电路结构简单、可靠性高,且小车上提供了发光二级管组成的提示系统,各种信息一目了然,搭建了有好的操作界面。

关键词:单片机;红外遥控;小汽车

引言

随着电子技术的飞速发展,红外遥控成为目前使用最广泛的一种通信和遥控手段,该装置具有体积小、功耗低、功能强、成本低等特点。红外遥控小车在军事、民用及科学研究等领域得到了广泛的应用。单片机以其强大的控制能力为实现这一愿望提供了切实可行的手段。本设计红外遥控小汽车使用AT89S52单片机开发板和一些简单的外围电路作为主要驱动装置,用遥控器控制小车作前进,后退,左转,右转等运动。

1 设计任务

设计一个红外遥控小车。

1.1 要求

1、用任何遥控控制

2、用遥控控制可以向前、向后、向左、向右转。

2 红外遥控系统

通用红外遥控系统由发射和接受两大部分组成,应用编/解码专用集成电路芯片来进行控制操作。发射部分包括键盘矩阵、编码调制、LED 红外发送器;接

受部分包括光、电转换放大器、解调、解码电路。红外遥控示意图如图1所示。

图 1红外遥控示意图

2.1 遥控发射器及其编码

当发射器按键按下后,既有遥控吗发出,所按的键不同遥控编码也不同,这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms 、间隔0.56ms 、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms 、间隔1.685ms 、周期为2.25ms 的组合表示二进制的“1”,其波形如图2.1所示。

图2.1 红外波形图

上述“0”和“1”组成的32位二进制码经38kHz 的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图2.1.1所示。

图2.1.1 红外码示意图

产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能

区别不同的电器设备,放置不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H ;后16位为8位操作码(功能码)及其反码。

遥控器在案件按下后,周期性地发出同一种32位二进制码,周期约为108ms 。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图2.1.2为发射波形图。

图2.1.2 遥控连发信号波形

2.1.2 遥控发射器接受电路图

图2.1.2 遥控发射电路

2.2 遥控信号接收

接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外界原件,就能完成从红外线接收到输出与TTL 电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线

数据传输。接收器对外只有3个引脚:Out 、GND 、Vcc 与单片机接口非常方便,如图2.2所示。

①脉冲信号输出接,直接接单片机的IO 口;

②GND 接系统的底线(0V );

③Vcc 接系统的电源正极(+5V);

图2.2红外一体化接收头

3系统的具体设计与实现

3.1 遥控小车硬件芯片

3.1.1 AT89S52AT89S52为ATMEL 所生产的一种低功耗、高性能CMOS 8 位微控制器,具有8K 在系统可编程Flash 存储器,引脚如图3.1.1。其主要功能列举如下:

1、拥有灵巧的8位CPU 和在系统可编程Flash

2、晶片内部具时钟振荡器(传统最高工作频率可至12MHz )

3、内部程序存储器(ROM )为8KB

4、内部数据存储器(RAM )为256字节

5、32个可编程I/O口线

6、8个中断向量源

7、三个16位定时器/计数器

8、三级加密程序存储器

9、全双工UART 串行通道

图 3.1.1 52单片机管脚图

3.1.2 遥控小车控制模块结构图

图3.1.2遥控小车控制模块

3.1.3 遥控小车硬件组成及简单电路原理图

L298要开小车硬件主要有2个直流电机、4个继电器、二组5v 电源、AT89S52单片机。简单电路原理图3.1.2如下:

图3.1.2简单电路原理图

3.2 遥控小汽车控制设计方案

运动要求:在设计中要求能用遥控实现小车的前后左右四个方向的运动。

遥控可以选用无线遥控和红外遥控。由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计家用电器的红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)

要有

不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器) ,所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方便。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。

所以我决定使用红外遥控的方式。另外红外信号的解码可以用芯片解码也可以使用单片机通过编程软件解码。软件解码需要的外部元件很少,从而可以节约成本。因此我们选择单片机通过编程软件解码。

因为红外的遥控很普遍,所以我们选取了一个普通的现成的红外遥控。我们只需要制作接收部分和电机驱动部分。

当按下红外线遥控器上的按钮时单片机的红外接收探头接收到信号发给单片机,再有单片机控制四个继电器上的高低电平,在通过继电器的工作,当继电器电路一接通后直流电机的电力形成了闭合回路,直流电机开始工作,作出相应的运动形式。具体按键控制如下所示:

表3.2按键功能表

3.3 单片机的调试

采用软件解码,单片机的程序调试就格外重要。要想用单片机控制小车的运动,首先要知道遥控器的按键码值。为此,我编写程序,用1602LCD 显示遥控器的按键码值(程序见附录)。其流程如图3.3

图3.3程序流程图

如此实验多次可得遥控的按键码值,确定了按键码值。

4 实验原理

单片机解码原理:

利用单片机的中断系统来实时接收红外信号,利用定时器来计算红外信号高低电平的持续时间来控制,然后编程把解出来的红外码转换成16进制码。根据解出的不同的16进制码确定下一步动作。

电机驱动原理:

由于单片机本身提供的电压低电流小,所以在控制电路中有着明显的不足之处,主要表现在红外遥控距离一长时小车就会出现不被控制的情况。针对这个问题我想了很久后决定在外围加上5v 电源驱动控制电机,从而能达到遥控目的。在外围加上5v 后的电机运转速度和遥控距离明显有了与之前不同的运动状,表现出了动力强遥控性能好的特点。

5 系统系能测试

为了保证电路万无一失,我们先用万用版制作了图3.2.1所示的单片机最小系统,并且用杜邦线将单片机IO 口与直流电机和红外一体化接头按图

3.1.2(省略了所以电容及二极管)连接好。由于电路简单,采用了万用表来测量各脚的电压。将编写好的程序录入单片机实验,实验数据如表5

按2键 按8键 按4键 按6键 按2、4键 按2、6键 按8、4键 按8、6键

P21电压 4.95 0 0 0 4.95 4.94 0 0 P22电压 0 4.89 0 0 0 0 4.84 4.89 P23电压 0 0 4.79 0 4.79 0 4.74 0 P24电压 0 0 0 4.99 0 4.97 0 4.92

表5实验数据表

经过多次实验,数据相差均不超过0.1V ,故认为方案可行。

小车制作出来后,发现除了5键,各个按键灵敏度都不错,此纯系遥控器按键不灵所至,偶尔电机迟缓动作也是由于小车电机齿轮老化。本小车制作成功。

采用单一单片机结构,用软件商的多任务结构是系统同时去执行多个操作,提高了CPU 得利用率和系统的灵活性。该设计具有结构轻巧、操作简单、维护方便、成本低、可靠性高等优点,有一定得开发利用前景。

6 结论

采用单一单片机结构,用软件商的多任务结构是系统同时去执行多个操作,提高了CPU 得利用率和系统的灵活性。该设计具有结构轻巧、操作简单、维护方便、成本低、可靠性高等优点,有一定得开发利用前景。可应用于各个电子产业领域,有着简单、实用、安全、实时性强的高性能特点。可广泛应用于普通家电电器产品和工业小型机械产品。

参考文献

[1] 李华MCS-51系列单片机实用接口技术.. 北京:航天航空大学出版社,1999.

[2] 李建华. 使用遥控原理与制作. 北京:人民邮电出版社,1996

[2] 邱关源. 电路. 高等教育出版社,1989. 第三版.

[2] 龚淑秋,李忠波. 电子技术(非电类专业)[M].北京:机械工业出版社,2010.7:206~

259

[2] 龚淑秋,李忠波. 电子技术(非电类专业)[M].北京:机械工业出版社,2010.7:206~

259

附 录:

单片机程序

#include<reg51.h>

#define c(x)(x*110592/120000)

unsigned char Ir_Buf[4];

sbit IRIN = P3^2;

unsigned char IRCOM[7];

void IRdelay(unsigned char x);

unsigned char keys=0xff;

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=0x81;

TCON=0x01;

motor=0;

while(1)

{

switch(keys)

{

case ~0xF3: go();break; case ~0xA1: back();break; case ~0xF7: turn_lef();break; case ~0xA5: turn_rig();break; case ~0xE7: inc();break; case ~0xAD: dec();break; case ~0xE3: stop();break; default:break;

}

motor=0;

delay1ms(100-on);

motor=1;

delay1ms(on);

}

}

//==中断读取红外键值程序=========================

void int0(void) interrupt 0

{

unsigned char j,k,N=0;

IRdelay(15);

if (IRIN==1)

{

return;

}

//确认IR 信号出现

while (!IRIN) //等IR 变为高电平,跳过9ms 的前导低电平信号。 {IRdelay(1);}

for (j=0;j<4;j++) //收集四组数据

{

for (k=0;k<8;k++) //每组数据有8位

{

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

keys=IRCOM[2];

}

//==0.14ms延时=============================== void IRdelay(unsigned char x) //x*0.14MS

{

unsigned char i;

while(x--)

{

for (i = 0; i<13; i++) {}

}

}

//==方向向前================================== void go()

{

zheng=1;

fan=0;

left=1;

right=0;

keys=0;

}

//==方向向后================================== void back()

{

zheng=0;

fan=1;

left=0;

right=1;

keys=0;

}

//==左转====================================== void turn_lef()

{

zheng=0;

fan=1;

left=1;

right=0;

keys=0;

}

//==右转====================================== void turn_rig()

{

zheng=1;

fan=0;

left=0;

right=1;

keys=0;

}

//==停止程序================================== void stop()

{

on=0;

keys=0;

}