电子作品设计报告
项目名称: 智能小车
学院: 机电工程学院
专业: 应用电子技术
班级: 09应电(1)班
组别: 第 三 组
姓名: 杨磊 赖焕宁 梁广生
指导老师:杨青勇 玉宁
目录
摘要:................................................................................................ 3
关键词:............................................................................................ 3
引言:................................................................................................ 3
一、系统设计.................................................................................... 3
1.1设计要求................................................................................. 4
1.2车体方案认证与选择............................................................. 4
二、硬件设计及说明........................................................................ 5
2.1原理图设计............................................................................. 5
2.1.1稳压电源.......................................................................... 5
2.1.2基本系统.......................................................................... 5
2.1.3电机驱动........................................................................... 5
2.1.4液晶显示部分................................................................... 6
2.1.5RS485数据总线................................................................ 6
2.1.6循迹部分........................................................................... 7
2.2PCB设计................................................................................... 7
2.2.1主板PCB........................................................................... 7
2.2.2循迹板PCB....................................................................... 8
三、软件设计及说明........................................................................ 8
四、系统测试过程.......................................................................... 10
五、总结.......................................................................................... 11
六、附录.......................................................................................... 11
附录一:系统元器件清单........................................................... 11
附件二:系统测试源程序........................................................... 12
摘要:本组的智能小车是采用凌阳的车架,是以两个电机来驱动小车,主板部分自行设计。通过接收器MAX1483来采集信息,传送进主控芯片PIC16F886单片机, 进行数据处理后,送进驱动芯片L293D以完成相应的操作。采用反射式红外光电传感器ST178来实现小车自动循迹功能,并且整个过程采用液晶显示屏RT1602来显示相应的数据。
关键词:PIC16F886 L293D 反射式红外光电传感器ST178 自动循迹
引言:
近现代,随着电子科技的迅猛发展, 人们对技术也提出了更高的要求。汽车的智能化在提高汽车的行驶安全性,操作性等方面都有巨大的优势,在一些特殊的场合下也能满足一些特殊的需要。智能小车系统涉及到自动控制,车辆工程,计算机等多个领域,是未来汽车智能化是一个不可避免的大趋势。本文设计的小车以PIC16f886 为控制核心,用反射式红外光电传感器作为检测元件实现小车的自动循迹前行,并显示等功能。
一、系统设计
本组智能小车的硬件主要有以PIC16f886 作为核心的主控器部分、自动循迹部分、显示部分、电机驱动部分。其中电机驱动部分和其他部分分别由两个不同的电源分开供电。
小车硬件系统结构示意图如下:
1.1设计要求:
(1)基本要求:实现小车的前进后退,左转右转(按照程序预设)
(2)扩展部分:实现小车自动循迹功能,避障功能。
1.2车体方案论证与选择:
方案一:自己动手制作电动车,一方面材料缺少,另一方面制作过程要花费大量的时间,而且同学中手艺也不好,制作出来的小车还可能机械性能不好。考虑到时间与性能这两方面,我们放弃了这一方案
方案二:购买凌阳小车,购买的凌阳小车具有组装完整的车架车轮、电机及其驱动电路。易改装,好控制。机械性能有保障。其小车图片如下:
综合考虑,我们选择了方案一
二、硬件设计及说明
2.1原理图设计
2.1.1 稳压电源:
电源电路为系统提供了基准电源,是整个系统工作稳定性关键所在,同时又考虑到节省空间的问题,所以我们选用了LT1117-5.0来稳定电压输出(5V),使用了电解电容C1、C2来作为滤波电容。其原理图如下:
2.1.2 基本系统:
基本系统控制电路采用单片机PIC16F886作为主控单元,负责整个电路的资源分配以及对各路信号的采集、分析和处理。配置了20MHZ的外部晶振以及蜂鸣器。同时还配置了四个端口作功能扩展。(可以用来连接小车循迹模块)单片机控制电路原理图如所示:
2.1.3 电机驱动:
驱动电路主要采用驱动芯片L293D来直接驱动电机,L293D为单块集成电路、高电压、高电流、四通道驱动,其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V,可直接的对电机进行控制,无须隔离电路。L293D从主控单片机PIC16F886那里接受指令来直接控制电机的工作状态。可以对电机进行正反转,停止的操作,非常方便。发光二极管作为电源的指示灯。其驱动电路原理图如下所示:
2.1.4 液晶显示部分:
主要用RT1602来显示数据,二极管1N4148用来调节显示器的对比度,电阻R2用来调节显示器的背光亮度。(LCD液晶具有功耗低、显示内容丰富、清晰,显示信息量大,显示速度较快等特点)
2.1.5 RS485数据总线
主要用到的接收器是MAX1483
由于MAX1483是用于RS-485和RS-422通信的低功耗收发器。这种类型的摆率限制的驱动器,能够减小EMI和由于不恰当的电缆端接所引起的反射。保证数据速率高达250kbps。MAX1483仅绘制的供应电流为20μA。此外,还有一个低电流关断模式,仅消耗0.1μA。这两种模式都工作在+5 V单电源。驱动器具有短路电流限制,并通过将驱动器输出设置为高阻抗状态的热功耗关断电路来保护功耗不会过大。当输入为开路,接收器输入具有失效保护功能,保证了逻辑高电平输出。MAX1483具有1/8单位负载输入阻抗,保证总线上多达256个收发器。
2.1.6 循迹部分
主要由四个反射式红外光电传感器ST178和四个电位器组成。采用ST178型光电管完成系统循迹任务,循迹电路是用以实现小车沿着场地的黑色弧形引导轨迹进行前进和位置校正的,且小车不能偏离该轨迹。在本设计中采用ST178型反射式红外光电传感器完成系统循迹任务,硬件电路实现比较简单,其灵敏度可以通过调节多圈电位器来实现。其电路原理图如下:
2.2 PCB设计
2.2.1 主板PCB图如下:
图1.主板PCB图
2.2.2 循迹板PCB
图2.循迹板PCB图
三、软件设计及说明
系统软件流程图如下图所示:(系统程序的具体代码见附录2)
主程序流程图
循迹子函数流程图
四、系统测试过程
测试工具:
测试过程:
1. 我们尝试着先用PIC12F683来控制小车的前进、后退、左右转向。结果试验成功,小车能正常的跑动起来。这个小试验,是为了检测小车的机械性能。达到了我们预期目的。
2. 制作主板
3. 主板通电前检查:电路安装完毕,我们首先直观检查电路各部分生产线是否正确,检查电源、地线、信号线、元器件引脚之间有无短路,器件有无接错。结果发现L293芯片的5和12管脚没有接地,查看发现原来是原理图没注意改正才导致的。
4. 通电检查:给电机通电,观察电机是否工作正常。电机正常工作时,后驱工作电流为320 mA,电压为5.4V;前驱电机工作电流为180mA,电压为5.41V。给主板通电,观察电路各部分器件有无异常现象。
5. 主板安装调试(主控芯片用PIC16F886),在调试的过程中我们发现了原理图中有一个小小的错误。这个错误导致小车的稳压芯片过热。一起讨论之后决定,修改原理图,调换小车驱动芯片的位置。改动之后,小车电源稳压芯片过热现象消失。小车也能实现了基本的功能。(由于我们没能在制板之前发现这个问题,导致了主板在修整后变得不太美观了。)
6. 制作并调试小车循迹板,传感器采用反射式红外传感器ST178,当Vcc=5V时,工作电流为17mA,VR1=3.83V,VD=1.17V,RD=68.8欧。电路图如下:
在调试的过程中却发现小车不循迹,经过了4天的努力,终于发现了问题的所在,原来是焊错了一个电阻导致(错将1K电阻当成220欧的来用)。改正后调试,终于也能实现了循迹功能。
五、总结
测试结果表明:本组智能小车能很好的完成了基本功能和循迹功能,跑道是由黑色胶布在白色地面上拉线完成,小车可以从O型跑道的任何段为起点,跑完全程。本组智能小车目前只能完成在没有任何交叉路口的跑道上,要想跑在有“十”字路口的跑道上,还须要对循迹程序进行补充和修改。我们保留了各种硬件接口和软件子程序接口,方便以后的扩展和进一步的开发。
六、附录
附录一:系统元器件清单如表1所示
主板元件清单
循迹板元件清单
附件二:系统测试源程序
#include <16f886.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,MCLR
#use delay(clock=20M)
#zero_ram
#use fast_io(A) //IO直接操作
#use fast_io(B) //IO直接操作
#use fast_io(C) //IO直接操作
#define PORTA 0x05
#define PORTB 0x06
#define PORTC 0x07
//======电机定义======
#bit M1=PORTC.5
#bit M2=PORTC.4
#bit M3=PORTC.3
#bit M4=PORTC.0
#bit PWM1=PORTC.2
#bit PWM2=PORTC.1
//=====循迹定义======
#bit IN1=PORTB.4
#bit IN2=PORTB.5
#bit PGC=PORTB.6
#bit PGD=PORTB.7
//=====液晶屏定义=====
#bit EN=PORTA.0
#bit RW=PORTA.1
#bit RS=PORTA.2
////========宏定义=======
#define TIME 1000 //动作延时
#define MAX 200 //占空比设定
#define MED 185
#define MIN 170
//定义I0端口检测
#define SENSE1 bit_test(*PORTB,4)
#define SENSE2 bit_test(*PORTB,5)
#define SENSE3 bit_test(*PORTB,6)
#define SENSE4 bit_test(*PORTB,7)
#include "lcd_1602_4bit.h"
void init()
{
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); //set t2
setup_ccp1(ccp_pwm); //set cpp --pwm mode
setup_ccp2(ccp_pwm);
lcd_init();
}
//传感检测结果表达
void sense_detect()
{
lcd_gotoxy(1,1);
lcd_putc(" NCVT Ver1.1 ");
lcd_gotoxy(7,2); //指定开始显示的坐标
if(SENSE1) lcd_putc("1");
else lcd_putc("0");
if(SENSE2) lcd_putc("1");
else lcd_putc("0");
if(SENSE3) lcd_putc("1");
else lcd_putc("0");
if(SENSE4) lcd_putc("1");
else lcd_putc("0");
}
//前进
void go()
{
M1=0;
M2=1;
M3=0;
M4=0;
set_pwm2_duty(0); //set pwm 占空比
set_pwm1_duty(MAX);
}
//后退
void back()
{
M1=1;
M2=0;
M3=0;
M4=1;
set_pwm2_duty(MAX); //set pwm 占空比
set_pwm1_duty(MAX);
delay_ms(100);
}
//停止
void stop()
{
M1=0;
M2=0;
M3=0;
M4=0;
set_pwm1_duty(0); //set pwm 占空比
set_pwm2_duty(0);
}
//右小转
void run_MIN_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MIN);
}
//右中转
void run_MED_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MED);
}
//右大转
void run_MAX_right()
{
M1=0;
M2=1;
M3=0;
M4=1;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MAX);
}
//左小转
void run_MIN_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MIN);
}
//左中转
void run_MED_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MED);
}
//左大转
void run_MAX_left()
{
M1=0;
M2=1;
M3=1;
M4=0;
set_pwm1_duty(MAX); //set pwm 占空比
set_pwm2_duty(MAX);
}
//寻迹判断
void trace()
{
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();
}
void main()
{
init();
while(1)
{
sense_detect();
trace();
}
}