智能循迹小车设计报告.docx
《智能循迹小车设计报告.docx》由会员分享,可在线阅读,更多相关《智能循迹小车设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
智能循迹小车设计报告
电子作品设计报告
项目名称:
智能小车
学院:
机电工程学院
专业:
应用电子技术
班级:
09应电
(1)班
组别:
第三组
姓名:
杨磊赖焕宁梁广生
指导教师:
杨青勇玉宁
关键词:
3
引言:
3
车体方案认证与选择4
2.1.5RS485数据总线6
摘要:
本组的智能小车是采纳凌阳的车架,是以两个电机来驱动小车,主板部份自行设计。
通过接收器MAX1483来搜集信息,传送进主控芯片PIC16F886单片机,进行数据处置后,送进驱动芯片L293D以完成相应的操作。
采纳反射式红外光电传感器ST178来实现小车自动循迹功能,而且整个进程采纳液晶显示屏RT1602来显示相应的数据。
关键词:
PIC16F886L293D反射式红外光电传感器ST178自动循迹
引言:
近现代,随着电子科技的迅猛进展,人们对技术也提出了更高的要求。
汽车的智能化在提高汽车的行驶平安性,操作性等方面都有庞大的优势,在一些特殊的场合下也能知足一些特殊的需要。
智能小车系统涉及到自动操纵,车辆工程,运算机等多个领域,是以后汽车智能化是一个不可幸免的大趋势。
本文设计的小车以PIC16f886为操纵核心,用反射式红外光电传感器作为检测元件实现小车的自动循迹前行,并显示等功能。
一、系统设计
本组智能小车的硬件要紧有以PIC16f886作为核心的主控器部份、自动循迹部份、显示部份、电机驱动部份。
其中电机驱动部份和其他部份别离由两个不同的电源分开供电。
小车硬件系统结构示用意如下:
设计要求:
(1)大体要求:
实现小车的前进后退,左转右转(依照程序预设)
(2)扩展部份:
实现小车自动循迹功能,避障功能。
车体方案论证与选择:
方案一:
自己动手制作电动车,一方面材料缺少,另一方面制作进程要花费大量的时刻,而且同窗中手艺也不行,制作出来的小车还可能机械性能不行。
考虑到时刻与性能这两方面,咱们舍弃了这一方案
方案二:
购买凌阳小车,
购买的凌阳小车具有组装完整的车架车轮、电机及其驱动电路。
易改装,好操纵。
机械性能有保障。
其小车图片如下:
综合考虑,咱们选择了方案一
二、硬件设计及说明
原理图设计
2.1.1稳压电源:
电源电路为系统提供了基准电源,是整个系统工作稳固性关键所在,同时又考虑到节省空间的问题,因此咱们选用了来稳固电压输出(5V),利用了电解电容C一、C2来作为滤波电容。
其原理图如下:
2.1.2大体系统:
大体系统操纵电路采纳单片机PIC16F886作为主控单元,负责整个电路的资源分派和对各路信号的搜集、分析和处置。
配置了20MHZ的外部晶振和蜂鸣器。
同时还配置了四个端口作功能扩展。
(能够用来连接小车循迹模块)单片机操纵电路原理图如所示:
2.1.3电机驱动:
驱动电路要紧采纳驱动芯片L293D来直接驱动电机,L293D为单块集成电路、高电压、高电流、四通道驱动,其额定工作电流为1A,最大可达1.5A,Vss电压最小,最大可达36V,可直接的对电机进行操纵,不必隔离电路。
L293D从主控单片机PIC16F886那里同意指令来直接操纵电机的工作状态。
能够对电机进行正反转,停止的操作,超级方便。
发光二极管作为电源的指示灯。
其驱动电路原理图如下所示:
2.1.4液晶显示部份:
要紧用RT1602来显示数据,二极管1N4148用来调节显示器的对照度,电阻R2用来调节显示器的背光亮度。
(LCD液晶具有功耗低、显示内容丰硕、清楚,显示信息量大,显示速度较快等特点)
2.1.5RS485数据总线
要紧用到的接收器是MAX1483
由于MAX1483是用于RS-485和RS-422通信的低功耗收发器。
这种类型的摆率限制的驱动器,能够减小EMI和由于不适当的电缆端接所引发的反射。
保证数据速度高达250kbps。
MAX1483仅绘制的供给电流为20μA。
另外,还有一个低电流关断模式,仅消耗μA。
这两种模式都工作在+5
V单电源。
驱动器具有短路电流限制,并通过将驱动器输出设置为高阻抗状态的热功耗关断电路来爱惜功耗可不能过大。
当输入为开路,接收器输入具有失效爱惜功能,保证了逻辑高电平输出。
MAX1483具有1/8单位负载输入阻抗,保证总线上多达256个收发器。
2.1.6循迹部份
要紧由四个反射式红外光电传感器ST178和四个电位器组成。
采纳ST178型光电管完成系统循迹任务,循迹电路是用以实现小车沿着场地的黑色弧形引导轨迹进行前进和位置校正的,且小车不能偏离该轨迹。
在本设计中采纳ST178型反射式红外光电传感器完成系统循迹任务,硬件电路实现比较简单,其灵敏度能够通过调剂多圈电位器来实现。
其电路原理图如下:
PCB设计
2.2.1主板PCB图如下:
图1.主板PCB图
2.2.2循迹板PCB
图2.循迹板PCB图
三、软件设计及说明
系统软件流程图如以下图所示:
(系统程序的具体代码见附录2)
主程序流程图
循迹子函数流程图
四、系统测试进程
测试工具:
仪器名称
用途
电脑
调试及下载程序
数字万用表
测量各种电路工作情况
测试进程:
1.咱们尝试着先用PIC12F683来操纵小车的前进、后退、左右转向。
结果实验成功,小车能正常的跑动起来。
那个小实验,是为了检测小车的机械性能。
达到了咱们预期目的。
2.制作主板
主板通电前检查:
电路安装完毕,咱们第一直观检查电路各部份生产线是不是正确,检查电源、地线、信号线、元器件引脚之间有无短路,器件有无接错。
结果发觉L293芯片的5和12管脚没有接地,查看发觉原先是原理图没注意更正才致使的。
1.通电检查:
给电机通电,观看电机是不是工作正常。
电机正常工作时,后驱工作电流为320mA,电压为;前驱电机工作电流为180mA,电压为。
给主板通电,观看电路各部份器件有无异样现象。
2.主板安装调试(主控芯片用PIC16F886),在调试的进程中咱们发觉了原理图中有一个小小的错误。
那个错误致使小车的稳压芯片过热。
一路讨论以后决定,修改原理图,调换小车驱动芯片的位置。
改动以后,小车电源稳压芯片过热现象消失。
小车也能实现了大体的功能。
(由于咱们没能在制板之前发觉那个问题,致使了主板在修整后变得不太美观了。
)
3.制作并调试小车循迹板,传感器采纳反射式红别传感器ST178,当Vcc=5V时,工作电流为17mA,VR1=,VD=,RD=欧。
电路图如下:
在调试的进程中却发觉小车不循迹,通过了4天的尽力,终于发觉了问题的所在,原先是焊错了一个电阻致使(错将1K电阻当做220欧的来用)。
更正后调试,终于也能实现了循迹功能。
五、总结
测试结果说明:
本组智能小车能专门好的完成了大体功能和循迹功能,跑道是由黑色胶布在白色地面上拉线完成,小车能够从O型跑道的任何段为起点,跑完全程。
本组智能小车目前只能完成在没有任何交叉路口的跑道上,要想跑在有“十”字路口的跑道上,还须要对循迹程序进行补充和修改。
咱们保留了各类硬件接口和软件子程序接口,方便以后的扩展和进一步的开发。
六、附录
附录一:
系统元器件清单如表1所示
主板元件清单
循迹板元件清单
附件二:
系统测试源程序
#include<>
#fusesHS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,MCLR
#usedelay(clock=20M)
#zero_ram
#usefast_io(A)//IO直接操作
#usefast_io(B)//IO直接操作
#usefast_io(C)//IO直接操作
#definePORTA0x05
#definePORTB0x06
#definePORTC0x07
//======电机概念======
#bitM1=
#bitM2=
#bitM3=
#bitM4=
#bitPWM1=
#bitPWM2=
//=====循迹概念======
#bitIN1=
#bitIN2=
#bitPGC=
#bitPGD=
//=====液晶屏概念=====
#bitEN=
#bitRW=
#bitRS=
////========宏概念=======
#defineTIME1000//动作延时
#defineMAX200//占空比设定
#defineMED185
#defineMIN170
//概念I0端口检测
#defineSENSE1bit_test(*PORTB,4)
#defineSENSE2bit_test(*PORTB,5)
#defineSENSE3bit_test(*PORTB,6)
#defineSENSE4bit_test(*PORTB,7)
#include""
voidinit()
{
set_tris_C(0X00);
set_tris_B(0xf0);
set_tris_A(0x10);
port_b_pullups(0xff);//关闭B口内部弱上拉
setup_timer_2(T2_DIV_BY_1,200,1);//sett2
setup_ccp1(ccp_pwm);//setcpp--pwmmode
setup_ccp2(ccp_pwm);
lcd_init();
}
//传感检测结果表达
voidsense_detect()
{
lcd_gotoxy(1,1);
lcd_putc("NCVT");
lcd_gotoxy(7,2);//指定开始显示的坐标
if(SENSE1)lcd_putc("1");
elselcd_putc("0");
if(SENSE2)lcd_putc("1");
elselcd_putc("0");
if(SENSE3)lcd_putc("1");
elselcd_putc("0");
if(SENSE4)lcd_putc("1");
elselcd_putc("0");
}
//前进
voidgo()
{
M1=0;
M2=1;
M3=0;
M4=0;
set_pwm2_duty(0);//setpwm占空比
set_pwm1_duty(MAX);
}
//后退
voidback()
{
M1=1;
M2=0;
M3=0;
M4=1;
set_pwm2_duty(MAX);//setpwm占空比
set_pwm1_duty(MAX);
delay_ms(100);
}
//停止
voidstop()
{
M1=0;
M2=0;
M3=0;
M4=0;
set_pwm1_duty(0);//setpwm占空比
set_pwm2_duty(0);
}
//右小转
voidrun_MIN_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MIN);
}
//右中转
voidrun_MED_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MED);
}
//右大转
voidrun_MAX_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MAX);
}
//左小转
voidrun_MIN_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MIN);
}
//左中转
voidrun_MED_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MED);
}
//左大转
voidrun_MAX_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX);//setpwm占空比
set_pwm2_duty(MAX);
}
//寻迹判定
voidtrace()
{
if((IN1==0)&&(IN2==0)&&(PGC==1)&&(PGD==0))//左小转
run_MIN_left();
if((IN1==0)&&(IN2==0)&&(PGC==1)&&(PGD==1))//左中转
run_MED_left();
if((IN1==0)&&(IN2==1)&&(PGC==0)&&(PGD==0))//右小转
run_MIN_right();
if((IN1==0)&&(IN2==1)&&(PGC==1)&&(PGD==0))//前进
go();
if((IN1==0)&&(IN2==0)&&(PGC==0)&&(PGD==1))//左大转
run_MAX_left();
if((IN1==1)&&(IN2==1)&&(PGC==0)&&(PGD==0))//右中转
run_MED_right();
if((IN1==1)&&(IN2==0)&&(PGC==0)&&(PGD==0))//右大转
run_MAX_right();
if((IN1==1)&&(IN2==1)&&(PGC==1)&&(PGD==1))//停
stop();
if((IN1==0)&&(IN2==0)&&(PGC==0)&&(PGD==0))//后退
back();
}
voidmain()
{
init();
while
(1)
{
sense_detect();
trace();
}
}