- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
智跑机器车设计报告(新)
2013年江西省大学生电子设计竞赛
智跑机器车设计报告
【A题】
2013年5月25日
概要
该智跑机器车是以STC12C5A60S2单片机为主控芯片,将红外线传感器、颜色传感器、漫反射式避障传感器选择光电漫反射避障传感器,当开关发射光束时,目标产生漫反射,发射器和接收器构成单个的标准部件,当光电开关有足够的组合光返回接收器时,开关状态发生变化,从而一起输出端电平的变化,继而利用电平进行障碍物判断二、系统硬件电路设计
2.1主控制器模块的设计
采用STC12C5A60S2单片机,包括时钟振荡电路、复位电路、外扩张口、P0口上拉10K排阻。
单片机最小系统原理图
2.1.1时钟电路
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22F。更好地保证震荡器稳定和可靠地工作。
复位是由外部的复位电路来实现的复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路 电机驱动模块电路图
2.4漫反射式避障模块
如图:该传感器是一种集发射与接收于一体的光电传感器。其检测距离可以根据要求进行调节。它是光电式传感器(光电开关)NPN常开。其易于装配、使用方便,使用时红色线接4.5~5V电源高电平,绿色线接电源低电平,而黄色线直接接单片机端口,输出TTL电平给单片机检测。从而控制电机驱动模块。
三、小车软件设计与实现
系统软件采用C语言开发,在Keil环境下编程调试并实现功能。主程序流程如图所示,进入主程序并初始化后,判断相应的子模块程序。软件程序设计采用模块化的结构,便于分析和实现功能。系统主要由4个模块组成:单片机最小系统、电机驱动、黑检测、。单片机最小系统为小车的控制核心。按下,单片机控制电机驱动小车直线行驶,同时红外对管开始检测黑带,检测到转弯标志线小车延时拐弯,进入后,,每个传感器的功能可变,通过对标志线来计数判断是否到达功能变更区,若到达则改变传感器检测功能。
#includestc12c5a60s2.h
#include12864.h
#includead.h
#includemotor.h
#includekey.h
sbit bull=P1^0;
uchar ad[4];
uint zuo,you;
void ceshi();
main()
{bull=0;
time0_nit();
inPWM();
init_adc();
lcd_int();
xianshi();
while(1)
{ceshi();
if(zuo800you100)
{
motor(1,mo1);
motor(2,mo2);
}
if(zuo800you100)
{motor(1,mo1);
motor(2,-mo2);
}
if(zuo800you100)
{
motor(1,-mo1);
motor(2,mo2);
}
}
}
void ceshi()
{
uchar i;
zuo=ADC(6);
ad[0]=zuo/1000;
ad[1]=zuo/100%10;
ad[2]=zuo/10%10;
ad[3]=zuo%10;
lcd_pos(0,4);
for(i=0;i4;i++)
{
write_dat(ad[i]+0x30);
}
you=ADC(7);
ad[0]=you/1000;
ad[1]=you/100%10;
ad[2]=you/10%10;
ad[3]=you%10;
lcd_pos(1,4);
for(i=0;i4;i++)
{
write_dat(ad[i]+0x30);
}
ad[0]=:;
ad[1]=mo1/100+0x30;
ad[2]=mo1/10%10+0x30;
ad[3]=mo1%10+0x30;
lcd_pos(2,2);
for(i=0;i4;i++)
{
write_dat(ad[i]);
}
ad[0]=:;
ad[1]=mo2/100+0x30;
ad[2]=mo2/10%10+0x30;
ad[3]=mo2%10+0x30;
lcd_pos(2,6);
for(i=0;i4;i+
文档评论(0)