赛题“电动车跷跷板”是通过电子系统控制小车按照杠杆原理自动位移使跷跷板获得水平平衡及控制小车启停、转向和行驶速度的机电系统。我们根据电动车跷跷板的设计要求,对整个系统方案进行了研究,通过论证分析确立了较优的设计方案。我们选用玩具坦克车作为车体,该电动车是以C8051f020作为控制及数据处理的核心,用L298N驱动双步进电机,通过传感器检测、控制电动机的方向、快慢、启停,并运用LCD显示屏对小车的行驶时间及状态进行显示。电动车可以在跷跷板上自动寻找平衡点,并具有实时显示电动车行驶时间及平衡位置的功能。在基本功能的基础上我们也对发挥部分进行了设计,让小车在添加配重的情况下也能完成任务。
关键词:c8051f020 加速传感器 步进电机 寻迹 LCD
前言
赛题“电动机跷跷板”是通过电子系统控制小车按照一定的路线自动位移行驶,并根据杠杆平衡原理使跷跷板获得水平平衡,以及控制小车启停和行驶速度的机电系统。我们选择玩具坦克作为小车主体,该电动车是以c8051f020单片机为控制核心,用专用芯片L298N对双电机进行驱动,保证了驱动的可靠性和稳定性,安装红外反射对管TCRT5000用以在跷跷板上寻迹前进,通过运用加速传感器帮助小车寻找到平衡位置,另外安装1602LCD液晶显示屏对小车的运动时间等进行显示,供电方面用LM7805对单片机及其他各个模块进行供电。各模块相互配合在软件的下使电动车可以在跷跷板上能稳定、精确地寻找平衡点,具有较高爬坡能力和平衡能力,并能够实时显示电动车行驶时间以及平衡位置。
一.系统方案设计
(1)控制模块
方案一:使用传统51系列单片机,传统51单片机价格便宜,控制简单,但是它的运算速度慢,片内资源少,存储器容量小,难以实现复杂的算法。
方案二:使用C8051F系列单片机,C8051F单片机使用CIP-51微控制器内核,是标准的混合信号片上系统(SOC),除了具有标准8051的数字外设部件之外,片内还集成了数据采集和控制系统中常用的模拟部件和其它数字外设及功能部件.如电压比较器PAC,ADC,DAC,SPI, SMBus(I2C),UART等,特别方便进行数据的实时采集与控制。
较51单片机,C8051F单片机无疑是较好的选择。因此我们选择方案二。
(2)平衡检测模块
方案一:采用水银开关检测跷跷板的平衡点。其内部是由两根导线组合而成,只要当水银流动到导线的的两端即水银把两根导线短接在一起。但当跷跷板平衡时,有可能水银开关还未闭合,可靠性不高。
方案二:采用加速传感器和水银开关配合检测跷跷板的平衡点。利用水银开关检测小车是否到达C点,再利用加速传感器进行平衡调节。这种传感器通过感应小车运动时在X、Y、Z三维方向上的加速度,输出相应的电压,具有良好的线性变化。通过读取输出的电压值来控制小车速度,有助于电动车找到平衡点。
为了快速、准确地让小车找到平衡点,因此我们选择了方案二。
(3)电机驱动模块
方案一:采用内部集成H桥式芯片L298驱动电路。
方案二:采用分立元件的H桥驱动电路。
由于采用内部集成H桥式芯片每一组PWM波用来控制一个电机的速度,而另外两个I/O口可以控制电机的正反转,控制比较简单,电路也很简单,一个芯片内包含有8个功率管,这样简化了电路的复杂性,所以采用方案一。
(4)寻迹模块
方案一:采用发光二极管发光,用光敏二极管接收。当发光二极管发出的可见光照射到黑带时,光线被黑带接收,光敏二极管检测到信号,呈现高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到时,起阻抗迅速降低,此时输出端为高电平。但是由于光敏二极管受环境中可见光影响较大,电路中的电压不太稳定。
方案二:利用红线发射管发射红线,红外线二极管进行接收。采用四组红外光敏耦合三极管发射和接收红外信号,外面课见光对接收的信号影响较小。接收的红外信号转化为电压信号经过LM393进行比较,产生高电平或低电平输出,信号返回给C8051F单片机。
通过分析比较,此模块我们选择方案二。
(5)显示模块
方案一:采用数码管显示。数码管具有对外界环境要求低,可视性好,程序编译容易。考虑到数码管体积大,硬件稳定性差,显示的信息量少。
方案二:采用液晶显示。液晶显示器具有显示信息丰富、功耗低、体积小、画面效果好、分辨率高等特点,可以满足题目要求。
因此采用方案二的显示方案更合适。
二.理论分析与计算
根据题目要求,我们设计了一个闭环系统能让小车运动并调节跷跷板使其平衡。其闭环结构框图如图1所示
图1 平衡控制示意图
该系统的工作原理是:小车行驶上跷跷板之后,通过加速传感器不断检测,将其输出的电压值(即实际值)与设定的初值进行比较,通过步进电机的前后微移,不断修正,最终使实际值在给定的初值范围内,则跷跷板达到平衡状态。
在小车上,我们使用的是100线的金属码盘,小车的直径为4.7cm,我们可以计算该码盘能检测到的最小精度为:3.14×4.7cm÷100=0.148cm=1.48mm。可以满足小车运动的精度控制,保证了小车能使跷跷板平衡。
三.系统电路设计
(1)电源模块
采用12V干电池为直流电机供电,再利用两片7805将电压稳压至5V,由于其内部电流的,以及过热保护和安全工作区的保护,使它基本上不会损坏
能够提供稳定的5V电压。7805在系统电路中的电路如图2所示:
图2 电源模块电路图图
(2)电机驱动模块
从单片机输出的信号功率很弱,即使在没有其它外在负载时也无法带动电机,所以在实际电路中我们加入了电机驱动芯片提高输入电机信号的功率,从而能够根据需要控制电机转动。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。且由L298N结合单片机可实现对小车速度的精确控制。这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。所以根据驱动功率大小以及连接电路的简化要求选择L298N。L298在小车电路系统中如图3所示:
图3 电机驱动电路图
从图3中可以知道,一块L298N芯片能够驱动两个电机转动,它的使能端可以外接高低电平,也可以利用单片机进行软件控制,极大地满足各种复杂电路需要。另外,L298N的驱动功率较大,能够根据输入电压的大小 输出不同的电压和功率,解决了负载能力不够这个问题。
(3)寻迹模块
寻迹模块采用红外反射光电传感器TCRT5000,对跷跷板的引导线进行检测来控制小车的运动.TCRT50000在系统电路中的电路图如图4所示: 如图上图所示电路中,R1起限流电阻的作用,当有光反射回来时,光电对管中的三极管导通,R2的上端变为高电平,此时三极管饱和导通,三极管集电极输出低电平;当没有光反射回来时,通过电对管中的三极管不导通,三极管截至,其集电极输出高电平。从简单、方便、可靠等角度出发,同时在底盘装设4个红外探测头,进行两级方向纠正控制,将大大提高其循迹的可靠性,其具体位置分布如图5所示。图5中循迹传感器全部在一条直线上。其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。小车前进时,始终保持在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。第二级方向探测器实际是第一级的后备保护,它的存在是考虑到小车由于惯性过大会依旧偏离轨道,再次对小车的运动进行纠正,从而提高了小车循迹的可靠性。
图4 寻迹电路图
图5 寻迹示意图
(4)显示模块
用单5v电源电压,具有低功耗、长寿命、高可靠性的显示特点。内置192种字符,具有个字节的自定义字符RAM,可自定义8个5×8点阵字符或5×11点阵字符。拥有4到8位并口可选。其在系统电路中的电路图如图6所示。
图6 显示模块电路图
(5)平衡模块
这个模块我们运用MMA7361OR3轴小量程加速传感器配合水银开关检测小车运动和方向。我们利用水银开关判断小车是否到达C点,再用加速传感器调节跷跷板的平衡。加速传感器根据小车运动和方向改变输出信号的电压值判断小车的运动情况。各轴的信号在不运动或不被重力作用的状态下(0g),其输出电压是1.65V。如果沿某一个方向活动或受重力作用,输出电压会根据其运动方向以及设定的传感器灵敏度而改变其输出电压。用A/D转换器读取此输出信号,就可以检测其运动和方向。
(6)A/D转换模块
所谓 A/D 转换器就是模拟/数字转换器(ADC), 是将输入的模拟信号转换成数字信号。信号输入端可以是传感器或转换器的输出,而ADC 的数字信号也可能提供给微处理器,以便广泛地应用。我们运用的A/D转换器的型号是ad0804,其在系统电路中的电路图如图7所示:
图7 A/D转换模块电路图
四.系统软件设计
图8 系统流程图
对系统软件的设计,我们是在Keil编程环境中,利用C语言对程序进行编辑下载。
利用c8051f020单片机PCA的PWM功能,调节占空比来实现软件对小车的控制,软件涉及到传感器的采集以及AD模块的转化,同时还有LCD1602的实时显示等,其中实时显示时间使用单片机的定时器0中断来实现的,CPU每五十毫秒进入一次中断,当达到二十次中断时对数据进行处理并实时显示到LCD1602上。在程序的调试过程中,为了实现程序的可读性和可靠性,我们采用模块化处理的方式,将各个阶段的程序用子程序的形式进行处理运算,使程序一目了然并尽量减少程序出错或跑飞的概率,从而使小车能更好的完成任务。如图(9)所示为系统软件流程图。这种设计小车不仅能完成基本功能,也能在添加配重的情况下也能完成任务。
五.系统测试
当小车的制作和调试都完成时,我们对小车进行了检测。检测所用到的工具有米尺、秒表。通过测量得跷跷板的长为160cm,起点至中点的长为80cm,C点距地面的高度为70mm,符合赛题要求。我们又对小车的全程运动进行了测量。
测试数据如表一所示。
表一 小车测试数据表
根据表一数据可以看出小车能够按照题目的要求将跷跷板调平。通过观察可以看出小车在寻迹、显示、电机状态等方面都非常稳定。而且小车在各阶段的行驶中都能进行声音提示。
六.结束语
经过几天的努力我们顺利完成了题目要求的任务。在这期间我们遇到的最大的困难是程序的调试。由于对程序多任务的方法还不能很好的掌握,在调试小车的时候出现过很多问题,但经过不断地观察和调试,最终解决了这一问题。经过这些天的努力,我们不仅学到了很多知识,还深刻的认识到不管做什么事,当遇到问题时,一定要保持清醒的头脑,认真观察,仔细分析,努力寻找解决问题的方案,最后一定能有所收获。
参考文献
鲍可进. C8051F单片机原理及应用【M】. 北京:中国电力出版社,2006.
王丁,沈永良,李海燕. 机电一体化系统设计【M】. 北京:中国电力出版社,2009.
谭浩强. C程序设计【M】. 北京:清华大学出版社,2005.
附录
系统总图:
主程序:
void main()
{
config();
init();
PCA_Init();
PCA0_Init();
CKCON&=0XFF;
TMOD=0x01; //设置定时器0为工作方式1
TH0=0X73;
TL0=0X60;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1)
{
Functioning();
}
}
/*********************************************/
void timer() interrupt 1
{ TH0=0X73;
TL0=0X60;
tt++;
if(tt==20)
{
tt=0;
miao++;
if(miao==60)
{ miao=0;
fen++;
}
write_com(0x80+0x45);
write_date(0x30+fen/10);
write_date(0x30+fen%10);
write_date(':');
}
write_com(0x80+0x48);
write_date(0x30+miao/10);
write_date(0x30+miao%10);
}
调平程序:
void balance() //调平程序
{ if(ad>=1803)
{ adc();
lcd();
delay1ms(200) ;
If(ad>=1803)
{ delay1ms(200) ;
R_FORD(155);
delay1ms(1) ;
L_FORD(155);
delay1ms(800);
BREAK();
delay1ms(6000);
}
}
if((ad<1803)&&(ad>=1705))
{ delay1ms(10) ;
if((ad<1803)&&(ad>=1705))
{ delay1ms(10)
if((ad<1803)&&(ad>=1705))
{ delay1ms(10) ;
a=miao;
miao=0;
BREAK();
delay1ms(58000);
}
}
}
if(ad<1705)
{ delay1ms(20) ;
if(ad<1705 )
{ R_BACK(156);
delay1ms(2);
L_BACK(150);
delay1ms(1500);
BREAK();
delay1ms(4000);
}
}
} 下载本文