资源描述
电动车跷跷板总结报告
电
动
车
翘
翘
板
总
结
报
告
学校:
组员:
2013.7.27
摘要
本系统采用一个能实时测量角度的角度传感器,采用STC12C5A作为主控芯片,外加四路循迹传感器,完成了规定时间内定点停车、保持平衡,倒车至指定位置、能够沿直线行进,指示小车平衡,显示达到平衡的时间,显示总行驶时间等基本的功能,并能基本完成在跷跷板有配重的情况下的基本动作。
关键词
单片机STC12C5A,角度传感器MMA8452,L293D电机驱动,四路循迹传感器
一:方案论证与比较
1. 微机控制模块
方案一:采用STM8S208C8单片机,本开发板采用ST公司8位单片机STM8S208CB,原理图简单,外部IO口较多,是一款简单实用高性价比的入门级开发板。
方案二:采用STC12C5A单片机,该芯片由宏晶科技生产的单时钟/机器周期(IT)的单片机,是高速/低功耗的超强抗干扰的新一代的8051单片机,指令代码完全兼容传统的51单片机,但速度快8-10倍,内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制和强干扰。
因此,我们采用较为熟悉的STC12C5A单片机,并且它是1T的高速单片机,运算速度完全适合角度传感器,所以我们选择方案二
2. 车架模块
方案一:自己制作车架,采用铝板,通用板,木板搭构,结构灵活,能很好的装相应的传感器
方案二:自行购买车架,这种车架结构牢固,价格低廉,车架上较多的孔,能够用来装传感器和电机
因此,我们采用方案二,节省制作时间,提高工作效率
3. 电机模块
方案一:采用步进电机,步进电机有较大的扭矩,能通过单片机产生准确的步幅,能够让小车移动较小的距离
方案二:采用直流电机,直流电机驱动简单,有较高的转速和扭矩
由于步进电机的价格较高,编程麻烦,且在这个项目中对电机的要求不高,直流电机能满足要求,因此,我们采用方案二
4. 角度传感器模块
方案一:采用专用的平衡传感器倾角传感器。倾角传感器经常用于系统的水平测量,从工作原理上可分为“固体摆”式、“液体摆”式、“气体摆”三种倾角传感器,倾角传感器是通过测量静态重力加速度的变化,转换成倾角变化。测量输出传感器相对于水平面的倾角和俯仰角度,角度响应速度最快5次/秒。具有5阶滤波。精度高响应速度快。
方案二:采用水银开关探测跷跷板平衡度,其原理是跷板左偏水银开关电路导通,右偏水银开关断开电路不通,这样控制电动车在平衡点小角度来回摆动来使跷跷板动态平衡,此方案测量灵敏、安装简单而且成本很低。
考虑测量数据的准确性,我们采用方案一,在淘宝上购买了角度传感器MMA8452
5. 显示模块
方案一:采用12864液晶显示,12864不仅能显示数字、符号,还能显示汉字与图形,操作方法与其他液晶显示相似
方案二:采用1602液晶显示,1602体积小,能显示字母、数字、符号,相比与12864显示的内容较少
由于我们只需要显示电动车行驶的全部时间,已平衡的信号标志,相对显示内容较少,且考虑到屏幕的大小,因此,我们采用方案二
6. 电机驱动模块
我们直接采用L293D电机驱动电路,L293D是一个具有高电压大电流的全桥驱动芯片,它响应频率高,功耗大。因此我们选用L293D作为步进电机的驱动,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
二:系统原理图
电动跷跷板采用STC12C5A单片机进行智能控制。开始由手动启动小车,并复位,当经过规定的起始黑线,红外光电传感器检测,通过单片机控制小车开始避障、调速;在电动车进驶过程中,采用双极式H型PWM脉宽调制技术,以提高系统的静动态性能;
前进
开始
系统原理图如下图:
LCD初始化
开始计时
是否到达B端
寻黑线
停止
延时 ms
显示时间 延迟5S
读取角度值
后退
小车前进
判断是否平衡
否
是否到达A
小车后退
否
是
停止
液晶显示平衡
延时5S
停止
检测哪个对管为高电平
寻线转向模块设计
系统初始化
否
前进
向右转
左边
否 否
判断传感器是否检测白线
是
向左转
检测两边是否为白线
是
前进
是
三:硬件设计电路
1. 循迹模块的电路设计
由红外发射管发射信号,当信号遇到反射后,黑色接受管接到信号,此时三极管截至,输出低电平,发光二极管亮;当信号没有被发射时,黑色管接收不到信号,此时三极管导通,输出高电平,发光二极管灭
电路图如下:
我们在电动车的前后各装了两个光电传感器,在往前行驶的过程中,车前面的两个光电传感器工作。小车向右行驶时,左边的检测到黑线,输出高电平,单片机接受到信号,控制左边的电机减速,左右两边有一定的速差,从而实现小车的寻线。我们在跷跷板的前端和末端贴了两条黑线,当小车行两边的传感器全部检测到末端的黑线,说明已到达终点,停止5s,5s后小车启动返回,当同时检测到起点的黑线时,小车停止,整个行驶过程结束
2. 电机驱动电路设计
驱动电路如下:
L293D四倍高电流H桥驱动程序。 L293D提供双向驱动电流高达600毫安,电压是从4.5 V至36 V的。该设备是专为驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。
其中,我们采用两块L293D芯片实现四轮驱动,每个电机的INX1,INX2接单-片机,OUT分别接电机的正负极,利用单片机的控制来实现小车的前进、后退与拐弯。
3.液晶显示模块
液晶电路结构如
第一行将显示小车第一阶段、总过程的时间,第二行将会显示小车平衡的标志
4. 电压转化模块
电路图如下: 5V转3V
LM317是应用最为广泛的电源集成电路之一,它不仅具有固定式三端稳压电路的最简单形式,又具备输出电压可调的特点。此外,还具有调压范围宽、稳压性能好、噪声低、纹波抑制比高等优点。lm317是可调节3端正电压稳压器,在输出电压范围1.2伏到37伏时能够提供超过1.5安的电流,此稳压器非常易于使用。 我们只要调节R2的阻值就能达到想要的电压3.3V。
5. 角度传感器模块
MMA8452内部测的是X,Y,Z轴的加速度,通过单片机读取到三个值,通过反正切arctan运算出角度值。因为这是经过运算得到的有较大的误差,尤其在有外部抖动的情况下,因此我们只是用一个粗略的范围来判断小车是否平衡。
计算公式为:a=(Vout-Voff)/sensitivity; 角度=arcsin(a);
跷跷板长约1600mm,高约70mm,理论的倾角为5度左右,平衡时倾角为0度,因此我们只要求当小车测的角度在-3至3即可认为平衡
四:软件设计
系统软件设计说明
在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。
在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。
模块程序设计法的主要优点是:
1、 单个模块比起一个完整的程序易编写及调试;
2、 模块可以共存,一个模块可以被多个任务在不同条件下调用;
3、 模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑定时子程序、角度子程序﹑中断子程序、显示子程序﹑调速子程序﹑转向子程序构成。
具体程序见附录
五:系统调试与测试
1. 模式选择模块
模式一:(按键P3^0)当按下按键时,小车将直接进行寻线,在延时一段时间之后,关闭寻线,开启测角度功能,当现角度大于给定的范围时,小车向前行驶一段时间,并向后行驶一段距离,以一进一退的方式前进;当角度小于规定的角度时,小车以一退一进的方式前进,直至小车达到平衡
模式二:(按键P3^1)(在跷跷板有配重的情况下)当按下按键时,小车会在跷跷板之外30厘米处的任意处开始寻线,当车前的两个光电管都接受不到信号时,延时,小车开始寻线。我们在跷跷板的一段端贴了一条黑胶布,当检测到黑线时,小车开启角度测量,开始寻找平衡点,寻平衡的方式与模式一相同。
2. 平衡显示模块
我们首先采用的是小车每步以很小的距离前进,并延时一段时间,再检测小车是否平衡。如果不平衡的话,小车就继续前进或后退。但经过几天的尝试,我们发现小车的重量较轻,木板较重,当小车到达平衡点时,木板仍处于上翘状态,只有当小车再往前几厘米时,有一定的力矩时,木板才会移动,但此时小车已经过平衡点。小车将会进入死循环,很难找出平衡点。我们后来选用了两个方案:
方案一:增大中心轴直径,用以增大摩擦力;当摩擦力增大时,能够较好的缓冲木板下落时的速度,能够很好的削弱下降时的惯性,后经我们实验,增大中心轴直径能更加容易找到平衡点
方案二:小车以一进一退的方式前进或后退,我们采用这种方式行进的距离也很小,大约在1cm左右,但这方法的好处在于当小车快平衡时,小车前进的距离已超过平衡点,此时木板有向下的趋势,在前进一段距离之后,小车马上往后移动一定的距离,此时总的移动距离较小,但在小车后退的过程中,木板又往后压。通过这个过程能使木板翘起,这样小车能比较简单的完成动作。
后经过小组讨论,我们认为加粗中心轴直径效果虽好,但有投机取巧的嫌疑,方案二能通过简单的延时函数就能实现小车的前进和后退,遂我们采用方案二
根据题目要求计算得木板的最大倾角在5度左右,但在我们实际用传感器测得最大倾角在10度左右,经过我们几天的调试,当角度在-6到6时我们即认为小车达到平衡,此时平衡效果较好,能达到题目要求
3:供电模块
L293D电机驱动电路能输出最大峰值为1A的电流,在调试的过程,我们采用了多种电源,包括1.5V的干电池,8V的充电锂电池,和数控直流稳压电源。由于8V的锂电池输出电压较高,电机的转速较高,很难实现电机的控制,这样会导致小车在行驶的过程中不稳定,不利于寻找平衡点,在提高电压的同时会出现电机转速不一样的情况;采用数控直流稳压电源虽然能输出0—250v的电压,但必须连上电源线,比较麻烦,有时会因为操作不当导致输出电压过高,损害仪器;干电池采用串联的形式,电压能达到6v左右,经过长时间使用,压降不会有太大的变化。因此,我们采用4节电池串联供电
五:参考文献
1. 黄根春等编著《全国大学生电子设计竞赛教程——基于TI器件设计方法》 电子工业出版社
2. 赵建领编著 《51系列单片机开发宝典》 电子工业出版社
3. 张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版 哈尔滨工业大学出版社
4. 赵负图,传感器集成电路手册 第一版 化学工业出版社 2004 590~591
六:附录
1.寻线程序
if(xunxian0!=0||xunxian1!=0)
{
stop();
DelayMs(1000);
break;
}
while(1)
{
if(xunxian0==0&&xunxian1!=0)
{
speed0=90;
speed1=7;
goright();
}
if(xunxian0!=0&&xunxian1==0)
{
speed0=7;
speed1=90;
goleft();
}
if(xunxian0==0&&xunxian1==0)
{
speed0=speed1=25;
go();
}
if(xunxian0!=0&&xunxian1!=0)
{DelayMs(300);break;}
}
break;
2. 角度测量程序
stop();
Multiple_Read_MMA8452();
display_x()
RX_DATA=0;
DelayMs(430);
if(tempx>=jiaodu)
{
DelayMs(100);
if(tempx>=jiaodu)
{
DelayMs(100);
if(tempx>=jiaodu)
{
if(tempx<6)
{
speed0=speed1=20;
DelayMs(20);
}
else{
speed0=10;
speed1=10;
}
goback();
DelayMs(120);
stop();
go();
DelayMs(65);
stop();
DelayMs(50);
LCD_Write_String(0,1," ");
stop();
Multiple_Read_MMA8452();
display_x();
RX_DATA=0;
DelayMs(430);
if(tempx>=jiaodu)
{
DelayMs(100);
if(tempx>=jiaodu)
{
DelayMs(100);
if(tempx>=jiaodu)
{
if(tempx<6)
{
speed0=speed1=20;
DelayMs(20);
}
else{
speed0=10;
speed1=10;
}
goback();
DelayMs(120);
stop();
go();
DelayMs(65);
stop();
DelayMs(50);
LCD_Write_String(0,1," ");
}
}
}
stop();
Multiple_Read_MMA8452();
display_x();
RX_DATA=0;
DelayMs(430);
if(tempx<=-jiaodu)
{
DelayMs(100);
if(tempx<=-jiaodu)
{
if(tempx>-6)
{
speed0=speed1=15;
DelayMs(15);
}
else{
speed0=10;
speed1=10;
}
go();
DelayMs(150);
stop();
speed0=speed1=15;
goback();
DelayMs(80);
stop();
DelayMs(150);
LCD_Write_String(0,1," ");
12
展开阅读全文