遥控电动小车实验与程序设计.docx

上传人:b****1 文档编号:1173797 上传时间:2023-04-30 格式:DOCX 页数:18 大小:411.71KB
下载 相关 举报
遥控电动小车实验与程序设计.docx_第1页
第1页 / 共18页
遥控电动小车实验与程序设计.docx_第2页
第2页 / 共18页
遥控电动小车实验与程序设计.docx_第3页
第3页 / 共18页
遥控电动小车实验与程序设计.docx_第4页
第4页 / 共18页
遥控电动小车实验与程序设计.docx_第5页
第5页 / 共18页
遥控电动小车实验与程序设计.docx_第6页
第6页 / 共18页
遥控电动小车实验与程序设计.docx_第7页
第7页 / 共18页
遥控电动小车实验与程序设计.docx_第8页
第8页 / 共18页
遥控电动小车实验与程序设计.docx_第9页
第9页 / 共18页
遥控电动小车实验与程序设计.docx_第10页
第10页 / 共18页
遥控电动小车实验与程序设计.docx_第11页
第11页 / 共18页
遥控电动小车实验与程序设计.docx_第12页
第12页 / 共18页
遥控电动小车实验与程序设计.docx_第13页
第13页 / 共18页
遥控电动小车实验与程序设计.docx_第14页
第14页 / 共18页
遥控电动小车实验与程序设计.docx_第15页
第15页 / 共18页
遥控电动小车实验与程序设计.docx_第16页
第16页 / 共18页
遥控电动小车实验与程序设计.docx_第17页
第17页 / 共18页
遥控电动小车实验与程序设计.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

遥控电动小车实验与程序设计.docx

《遥控电动小车实验与程序设计.docx》由会员分享,可在线阅读,更多相关《遥控电动小车实验与程序设计.docx(18页珍藏版)》请在冰点文库上搜索。

遥控电动小车实验与程序设计.docx

遥控电动小车实验与程序设计

遥控小车及程序

 

1、实验前言

随着科技的发展,近年来单片机等微型处理器在控制方面的应用越来越多。

加之其易于使用、性价比高,所以用该类型芯片开发的产品成本低廉且使用方便。

我们正是看中了单片机处理器的这些优点,经过性价比的分析设计了出了基于51系列的AT89S52处理器的电动遥控小车。

本作品主要采用红外发送和红外接收技术,利用PC838红外接收管接收红外遥控发出的信号,然后将数据传送至AT89S52单片机中进行数据处理,从而控制L297电机驱动。

实现小车遥控控制的功能。

 

二、模块分析

1、红外控制模块

方案一:

红外发射器使用PT2262/PT2272芯片搭建而成,红外接收模块使用PC838红外接收管搭建。

方案二:

红外发射器直接使用市场现成的红外发射模块。

由于自己搭建的红外发射器不稳定,且干扰因素多,综合考虑,红外发射器采用市场现成模块电路。

红外接收模块由红外接受管PC838及相应器件搭建。

 

红外遥控原理:

一般红外遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。

  当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。

这种遥控码具有以下特征:

  采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。

  上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。

一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。

后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。

  根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms的结果码。

  遥控串行数据编码波形如下图所示:

接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。

所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38kHz红外信号,高电平处则不发送红外信号。

2、电机驱动模块:

方案一:

使用L297驱动芯片做直流电机驱动,原理:

芯片内的PWM斩波器电路可开关模式下调节步进电机绕组中的电机绕组中的电流。

该集成电路采用了SGS公司的模拟/数字兼容的I2L技术,使用5V的电源电压,全部信号的连接都与TFL/CMOS或集电极开路的晶体管兼容。

L297的芯片引脚特别紧凑,采用双列直插20脚塑封封装。

方案二:

使用L298驱动芯片做直流电机驱动,驱动原理和297相似,但是该芯片使用时产生热量过多。

综合考虑,采用方案一。

3、显示模块

方案一:

采用LCD液晶显示器,LCD有明显的优点:

功耗的,美观,寿命长,尺寸小,使用方便,但其成本相对LED较高。

方案二:

采用LED数码管显示,LED数码管亮度高,但不足以达到实验显示要求,且难以控制。

综合考虑采用方案一。

三、系统分析

该系统是基于51系列的AT89S52处理器的电动遥控小车。

本作品主要采用红外发送和红外接收技术,使用红外遥控板上的K1及前后左右五个控制按键触发发射红外信号,利用PC838红外接收管接收红外遥控发出的信号,然后将数据传送至AT89S52单片机中进行数据处理,从而控制L297电机驱动。

实现小车遥控控制的功能。

 

1、硬件模块设计

 

 

 

仿真图

 

小车整体图

 

显示部分

遥控部分

 

2、软件模块设计

系统初始化

系统数据转化

与LCD显示

外部

中断0等待

No

Yes

处理器对中断数据处理

L297驱动

直流电机车体

 

4、实验感悟

通过这次实验,我们锻炼了自己的动手能力,了解了遥控小车的原理及制作过程,使我们的团队意识增强,经过几天的努力,完成了模块的设计与制作,完成了整个系统的编程、组装与调试。

基本上满足竞赛的要求,使用模块时,综合考虑电路的简单、电路的成本、以及电路的性能。

此次设计仍有一些问题没有得到完全解决,对一些器件的应用还不是很熟悉,因此在今后的学习中,更要好好学习知识,增加技能训练。

比如红外传感器的原理与应用的知识,光敏二极管的原理与应用电路等,当我们遇到不懂不会的问题时,我们能通过图书馆、网络等各种渠道学习想要知道的知识,有时候虽然只是一个很简单的小车模块,但使我们认识到自己所学的专业知识在实践中所出现的很大的不足。

在实际的设计当中也应注意到的许多问题,如在焊接时应提前布线、制图,以免在调试过程时无从下手。

虽然在这次设计中对于知识的运用和衔接还不够熟练,但是我们将在以后的工作和学习中继续努力、不断完善。

学习自己的专业知识,加强自己的动手实践,努力提高自己的专业技能,能在今后的生活学习中更好的应用。

5、参考文献

[1]董少明.单片机原理与应用.北京:

北京理工大学出版社,2009

[2]黄智伟.全国大学生电子设计竞赛电路设计.北京:

北京航空航天出版社,2006

[3]张毅刚等.电子系统设计.哈尔滨:

哈尔滨工业大学出版社,2009

[4]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编.北京:

北京理工大学出版社

附录1、遥控系统功能键列表

 

按键编号

按键码

按键名

功能

1

0x10

K1

停止

2

0x1D

UP

前进

3

0x12

DOWN

后退

4

0x19

L

左转

5

0x11

R

右转

 

附录2、遥控小车硬件连接图

 

附录2、系统软件程序

/*******************************************************************

**

*红外遥控直流电机运行*

**

*MCU:

AT89S52晶振:

11.0592MHz*

*******************************************************************/

#include//管脚定义头文件

#include"lcd.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitBEEP=P3^7;//蜂鸣器

sbitIRIN=P3^2;//红外接收端口

bitflag=0;//红外接收有效标志

ucharcodecdis1[]={"IR_CODE:

--H"};

ucharcodecdis2[]={"RATE:

"};

ucharcodecdis3[]={"STOP"};//停止

ucharcodecdis4[]={">>>>"};//正转

ucharcodecdis5[]={"<<<<"};//反转

ucharcodecdis6[]={"G0!

"};//前进

ucharcodecdis7[]={"BACK"};//后退

ucharIRCOM[6];

charcodereserve[3]_at_0x3b;//保留0x3b开始的3个字节

/**********************************************************

x*0.14ms延时子函数

**********************************************************/

voiddelay(ucharx)

{

uchari;

while(x--)

{

for(i=0;i<14;i++);

}

}

/**********************************************************

蜂鸣器响一声

**********************************************************/

voidbeep(void)

{

uchari;

for(i=0;i<200;i++)

{

delay(5);

BEEP=!

BEEP;//BEEP取反

}

BEEP=1;//关闭蜂鸣器

}

/**********************************************************

编码转换与显示子函数

**********************************************************/

voidcode_conv(void)

{

IRCOM[4]=IRCOM[2];

IRCOM[5]=IRCOM[4]&0x0f;//低位

if(IRCOM[5]>0x09)

IRCOM[5]=IRCOM[5]+0x37;

else

IRCOM[5]=IRCOM[5]+0x30;

IRCOM[4]=(IRCOM[4]&0xf0)>>4;//高位

if(IRCOM[4]>0x09)

IRCOM[4]=IRCOM[4]+0x37;

else

IRCOM[4]=IRCOM[4]+0x30;

lcd_pos(10,1);//第一行10列

lcd_wdat(IRCOM[4]);

lcd_wdat(IRCOM[5]);

}

/**********************************************************

主函数

**********************************************************/

voidmain(void)

{

P0=0xff;//端口初始化

P2=0xff;

P1=0xf0;//步进电机断电

lcd_init();//LCD1602初始化

lcd_pos(0,1);//设置显示位置为第一行

wr_string(cdis1,0);//显示字符串1

lcd_pos(0,2);//设置显示位置为第二行

wr_string(cdis2,0);//显示字符串2

lcd_pos(10,2);//第二行10列

wr_string(cdis3,0);//显示停止标记

EA=1;//允许总中断

EX0=1;//使能INT0外部中断

IT0=1;//下降沿触发

//flag=1;

while

(1)

{

code_conv();//显示键码

if(flag)

{

if(IRCOM[2]==0x10)//为遥控器K1键

{

lcd_pos(10,2);//第二行10列

wr_string(cdis3,0);//显示停止标记

P1=0xf0;//步进电机断电

}

if(IRCOM[2]==0x1d)//为遥控器的UP键

{//小车前进

lcd_pos(10,2);//第二行10列

wr_string(cdis6,0);//的显示前进标记

P1=0xf9;//取数据,前进

delay(5);

}

if(IRCOM[2]==0x12)//为遥控器的DOWN键

{//小车后退

lcd_pos(10,2);//第二行10列

wr_string(cdis7,0);//显示后退标记

P1=0xf5;//取数据,后退

delay(5);

}

if(IRCOM[2]==0x19)//为遥控器的L键

{

//小车左转

lcd_pos(10,2);//第二行10列

wr_string(cdis5,0);//显示左转标记

P1=0xe8;//取数据,左转

delay(5);

}

if(IRCOM[2]==0x11)//为遥控器的R键

{

//小车右转

lcd_pos(10,2);//第二行10列

wr_string(cdis4,0);//显示右转标记

P1=0xd1;//取数据,右转

delay(5);

}

flag=0;

}

}

}

/**********************************************************

INT0中断服务子函数(负责红外解码)

**********************************************************/

voidIR_IN()interrupt0

{

unsignedcharj,k,Num=0;

EX0=0;//关闭INT0中断

delay(15);//延时

if(IRIN==1)

//再确认IR信号是否出现

{

EX0=1;//开INT0中断

return;//退出

}

while(!

IRIN)

//等IR变为高电平,跳过9ms的前导低电平信号。

{

delay

(1);

}

while(IRIN)

//等IR变为低电平,跳过4.5ms的前导高电平信号。

{

delay

(1);

}

for(j=0;j<4;j++)

//收集四组数据

{

for(k=0;k<8;k++)

//每组数据有8位

{

while(IRIN)

//等IR变为低电平

{

delay

(1);

}

while(!

IRIN)

//等IR变为高电平

{

delay

(1);

}

while(IRIN)

//计算IR高电平时长

{

delay

(1);

Num++;

if(Num>=15)

{

EX0=1;//0.14ms计数过长自动离开。

return;

}

}//高电平计数完毕

IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”

if(Num>=8)

IRCOM[j]=IRCOM[j]|0x80;

//数据最高位补“1”

Num=0;

}//endfork

}//endforj

if(IRCOM[0]!

=0x00)

//比较用户码

{

EX0=1;//开INT0中断

return;//退出

}

if(IRCOM[2]!

=~IRCOM[3])

//接收数据是否正确

{

EX0=1;//开INT0中断

return;//退出

}

beep();//蜂鸣器响一声

flag=1;

EX0=1;//重新开INT0中断

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2