智能小车设计与实现
作者:朱梅梅
来源:《电脑知识与技术》2012年第21期
摘要:本项目以增强型51芯片STC12C5A60S2为主控芯片,配合直流电机,灰度传感器,红外接近开关等器件构成智能小车。该系统通过调节PWM波的输出可实现小车的前进,后退,转向,加速,减速等操作,可精准地完成小车沿边界线行走,在标志线处转弯和在超速区加速等功能。
关键词:主控芯片;智能小车;边界线行走;标志线处转弯;超速区加速
中图分类号:TP313文献标识码:A文章编号:1009-3044(2012)21-5192-04
Design and Implementation of the Smart Car
ZHU Mei-mei
(Jiangsu Vocational and Technical College of Finance &
Economics,Huai’an 223003,China)
Abstract: This project enhanced 51-chip STC12C5A60S2 constitute a Smart car for the main chip, with the DC motor, gray-scale sen sors, infrared proximity
龙源期刊网 http://www.qikan.com.cn
switches and other devices. The system adjusts the PWM wave output can be realized the car forward, backward, turning, acceleration, deceleration operation, the car along the border boundary can be accurately completed to walk in the flag line at the turn and accelerate in the speeding District functions.
Key words: master chip; smart car; boundary line to walk; flag line at the turn; speeding district acceleration
1系统方案与论证
本系统主要由微控制器模块,电机模块,电机驱动模块,电源模块,边界检测模块和标志检测模块组成。为了更好地实现各模块的功能,分别设计了几种方案并进行了论证。
1.1微控制器的论证与选择
方案一:采用可编程逻辑器件FPGA作为微控制器,FPGA可以实现各种复杂的功能,规模大,密度高,体积小,稳定性高,IO资源丰富,易于进行功能扩展。FPGA处理速度很快,适合作为大规模控制系统的控制核心,但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高,考虑性价比因素,最终放弃了此因素。
方案二:采用STC公司STC12C5A60S2单片机作为主控制器,STC12C5A60S2是高速,低功耗,高性能的增强型51单片机,片内含60K的flash,1280B的SRAM,带有片内AD,独立的波特率发生器以及PCA定时器可方便地产生PWM波。
龙源期刊网 http://www.qikan.com.cn
综合考虑采用方案二。
1.2电机模块的论证与选择
方案一:采用步进电机,步进电机是一种将电脉冲转化为不连续的机械运动的机电装置,电机旋转的角度正比于脉冲数,故步进电机具有快速启停的能力,转动精度高,正反转控制灵活。
方案二:采用普通的直流电机,直流电机具有优良的调速特性,过载能力强,能承受频繁的冲击过载,可实现频繁的无级快速启动,制动和反转。直流电机更易于购买,并且电路相对简单。
综合考虑采用方案二。
1.3电机驱动模块的论证与选择
方案一:用分立元件构成驱动电路,分立元件够成驱动电路,结构简单,价格低廉,在实际中应用广泛,但这种电路性能不够稳定。
方案二:采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可分别控制两个直流电机,而且还带有控制使能端,用该芯片作为电机驱动,操作简便,稳定性好,性能优良。
综合考虑采用方案二。
龙源期刊网 http://www.qikan.com.cn
1.4电源模块的论证与选择
方案一:采用蓄电池供电,蓄电池具有较强的电流驱动能力,以及稳定的电压输出性能,但是蓄电池体积过于强大,在小型电动车上使用极为不方便。
方案二:采用可充电镍氢电池,直接对电机供电,通过7805转换成+5V后给单片机供电,此种电池工作后单片机和传感器工作稳定,直流电机不受影响,且电池体积小,能够满足系统的要求。
综合考虑采用方案二。
1.5边界检测模块的论证与选择
方案一:根据题目要求,小车场地高出了地面,为了防止小车掉离场地,需要对场地边界进行检测。由于场地边界由黑胶带围绕,可以用灰度传感器检测边界。灰度传感器根据不同颜色对光的反射强度不一样来判断木板与黑胶带的区别。
方案二:采用红外接近开关来检测边界,红外接近开关对目标物发出红外光,当目标物在一定距离之内时,接近开关才有感知,输出信号,否则接近开关没有信号输出,从而达到开关的功能,用红外接近开关可以有效地检测处高出地面的边界,使用方便。
综合考虑采用方案二。
1.6标志检测模块的论证与选择
龙源期刊网 http://www.qikan.com.cn
方案一:根据题意,在起始点,终点,转弯处都贴有黑胶带提醒小车转弯或加速,灰度传感器根据不同颜色对光的反射强度不一样来判断木板与黑胶带的区别,所以灰度传感器对检测黑胶带最为合适,采用此方案。
综上所述:本作品选用STC12C5A60S2作为主控制芯片,选用L298N来驱动直流电机,边界检测和标志检测采用红外接近开关和灰度传感器来实现,两车之间通过NRF24L01无线通信模块进行通信,整个系统用可充电镍氢电池来供电。
2硬件设计
2.1系统总体框图
图1系统总体框图
2.2主控制器电路的设计
2.2.1主控制器最小系统图
2.2.2 STC12C5A60S2单片机简介
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次/秒),针对电机控制,抗干扰场合。
龙源期刊网 http://www.qikan.com.cn
2.2.3 STC12C5A60S2单片机的主要性能
1)增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;
2)用户应用程序空间为60K,片上集成1280字节的RAM;
3)看门狗;
4)共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;
5)PWM(2路)/PCA(可编程计数器阵列,2路),可用来当2路D/A使用,也可用来再实现2个定时器,也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);
6)A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次);
2.3电机驱动电路的设计
2.3.1电机驱动电路原理图
图3电机驱动原理图
龙源期刊网 http://www.qikan.com.cn
2.3.2 L298N介绍及电路工作原理
L298N是专门用来驱动电机的芯片,内部集成了一个H桥电路和保护电路,连接时第1、29、30脚必须通过10K电阻接地。第8脚必须接地。11、12或27、18任意接一组电源就可以。在连接、测试时千万不要用手去接触MMC的任何引脚,否则输出不了信号。一旦过流保护被启动,芯片必须重新上电后才可恢复正常工作,如果用手去碰MMC的第1、29、30脚则过流保护立即启动。
3软件设计
3.1主程序设计
单片机复位后,首先开始初始化工作,初始化定时器1以产生系统时钟,初始化PCA定时器,以产生PWM波,初始化片内ADC,以便传感器采集数据。小车的行驶区域分为两种:非超车区和超车区,小车的身份又分为:超车和被超车。系统主程序框图如图4所示:
主程序代码如下:
void SystemInit()
{jiffies=0;delay_time=0;
oflag=0;lcount=0;
龙源期刊网 http://www.qikan.com.cn
time1_init();//定时器1初始化
ADC_init(ADC0|ADC1|ADC2|
ADC5|ADC6|ADC7); //片内ADC初始化
pwm_init();//PCA定时器初始化}
void APP_fun()
{Fcar=0;Scar=!Fcar;
Dir=RIGHT;
while(1)
{ triside(200);//非超速区处理函数
Overtake(200);//超速区处理函数
Scar=!Fcar;//切换小车身份
Dir=RIGHT;oflag=0;}}
龙源期刊网 http://www.qikan.com.cn
void main()
{SystemInit();APP_fun(); }
3.2非超车区程序设计
由于小车初始位于非超车区,我们需要小车在非超车区内实现正常行驶和转速的功能,并且通过计算遇到的黑线数目实时监测小车是否已经进入超车区。
非超车区代码如下:
void triside(uchar speed)
{lcount=0;
while(!isOvertake()//检测是否到达超车区
{while(!isLine())//检测是否有黑线
{RelySw(Dir,speed);}
while(isLine());lcount=lcount
lcount=0;}
龙源期刊网 http://www.qikan.com.cn
3.3超车区程序设计
在超车区每个小车轮流扮演两种角色:超车和被超车。超车在检测到超车区标记后左转进入超车区,然后向前走一条反射线后出超车区。被超车检测到超车区标记后先左转,然后减速沿边界向前走,直至离开超车区。
超车区代码如下:
void Overtake(uchar speed)
{
if(Fcar) //被超车
{curr=jiffies;
while(curr+550>jiffies)
{RelySw(RIGHT,speed); }//沿右边转
while(!isLine())
RelySw(RIGHT,speed/3);//沿右边减速行驶
龙源期刊网 http://www.qikan.com.cn
Fcar=0;
return ;}
else //超车
{ InOvertake(speed);//转弯
GoForward(speed); //直走
while(!isEdge_L())
是否到达左边边界
GoForward(speed);
while(!isEdge_R())
//检测到黑虚线
RelySw(LEFT,speed);
GoForward(speed);
龙源期刊网 http://www.qikan.com.cn
while(isEdge_R());
//越过虚线
while(!isEdge_R())
GoForward(speed);
RelySw(RIGHT,speed);
//沿右边缘到达终点
Fcar=1;
return ;}}
4结论
经测试,甲乙两车完成一次超车的时间约为57s。
本智能小车以STC12CSA60S2为主控芯片,配合灰度传感器和红外接近开关,可以沿车到平滑地绕走一圈,并灵活地实现超车。
参考文献:
龙源期刊网 http://www.qikan.com.cn
[1]于国亮.单片机原理与应用[M].北京:清华大学出版社,2008.
[2]廖先芸.电子技术实践与训练[M].北京:高等教育出版社,2002.
[3]徐科军.传感器与检测技术[M].北京:电子工业出版社,2001.
因篇幅问题不能全部显示,请点此查看更多更全内容