画画小车.docx
《画画小车.docx》由会员分享,可在线阅读,更多相关《画画小车.docx(20页珍藏版)》请在冰豆网上搜索。
![画画小车.docx](https://file1.bdocx.com/fileroot1/2023-2/21/cc726a63-09f5-4d1f-88fd-15bc28d68619/cc726a63-09f5-4d1f-88fd-15bc28d686191.gif)
画画小车
“三星视界杯”第七届智能控制设计大赛之高级组C题“
画画小车
队名:
北二
专业:
自动化
队长:
张超波
队员:
邢天宇
队员:
相鹏鹏
提交日期:
2012年5月1日
【摘要】
大学阶段我们通过专业课的学习学到了非常多的理论知识,而对于自动化这种实践性很强的专业必须多动手才能学以致用。
智能小车作为一个便宜而且实用的载体,是大学生充分发挥自己的想象能力和控制技术的良好途径。
本智能小车
以STC89C52开发板为基础以红外接受发射管为测速模块以PWM控制技术调速并兼具循迹等可扩充功能的智能画画小车。
该小车通过L298驱动模块驱动轮子转动,通过程序控制小车的前进与转向,到达终点即自动停止。
小车通过2个码盘和2个红外对管利用读回的脉冲数计算,以实现对小车行走距离的测量,判断是否达到设定值。
本小车可以实现对给定图形的绘制功能。
目录
摘要..................................................................................................2
第一部分硬件部分.......................................................................4
1.1系统各部分方案的比较与选取................................................4
1.1.1数据存储方案比较...............................................................4
1.1.2距离检测方案比较..............................................................4
1.1.3电机及调速方案比较..........................................................4
1.1.4电机驱动模块的方案选择..................................................5
1.2.系统的整体设计图及各部分的作用........................................5
1.3.各部分的硬件实现电路图和简单说明....................................6
1.3.1.L289模块..............................................................................6
1.3.2四位数码管...........................................................................6
1.3.3下载接口...............................................................................7
1.3.4电源接口输入电路...............................................................7
1.3.5单片机最小系统...................................................................7
第二部分软件部分.......................................................................8
2.1电机驱动功能的设计................................................................8
2.2让小车能够走出标准直线的设计...........................................8
2.3测距离功能设计........................................................................9
2.4一次烧录程序情况下的多种模式的转化问题........................10
第三部分报告总结.......................................................................16
第一部分硬件部分
1.1系统各部分方案的比较与选取
1.1.1数据存储方案比较
方案一、采用外接ROM进行存储。
采用外接ROM进行存储是保存实验数据的惯用方法,其特点是在单片机断电之后仍然能保存住数据,但无疑将增大软硬开销和时间开销。
方案二、直接用单片机内部的RAM进行存储。
虽然不能在断电后保存数据,但可以在实验结束后根据按键显示相应值。
而且本实验的数据存储不大,采用RAM可以减少IO接口的使用,便利IO接口分配,故此方案具有成本低、易实现的优点,更符合实际需求。
鉴于方案二的以上优点,综合比较,本方案采用方案二。
1.1.2距离检测方案比较
方案一
通过测试得出小车平均速度v,在行驶过程中将行驶时间与其乘积t•v作为驶过的距离。
但该方案受电池电量、路面介质等因素的影响,在大多数情况下均暴露出误差较大的缺点。
故不予采用。
方案二、
在两个前轮内侧安装码盘,并用一体化对射红外发射接收管进行检测。
对码盘的脉冲数进行计数,由于低速下轮子与地面接触良好,设每个脉冲小车前进为l,可以码盘检测到的脉冲数n乘以l/m得出行驶距离。
只要红外接收发射管工作足够稳定,就可以获得较好的测试效果。
方案三、
在齿轮箱中安装透射式光电开关,测出变速齿轮的每秒转速,用变速比和车轮周长计算出线速度,积分求行驶距离。
但在齿轮箱中使用光电开关,要求有足够的安装位置,不能影响传动机构的机械动作。
其优点是工作稳定。
综合以上方案优劣和小车的结构特点,本系统采用了方案二。
1.1.3电机及调速方案比较
方案一
采用交流电动机带动小车前进,优点是交流电动机结构简单,坚固耐用,运行可靠以及惯性小适用范围比较广。
方案二
采用交流电动机带动小车前进,优点是直流电动机运行比较平稳,调速性能好,运行速度上也具有一定优势。
由于需要对小车进行精确控制,小车直接能用干电池串联供电或者用直流稳压电源供电,而较小的交流电压则很难获得。
综合以上方案优劣和小车的结构特点,本系统采用了方案二。
1.1.4电机驱动模块的方案选择
通过比较发现L298N驱动模块相对其他驱动模块具有独特的优势,本驱动模块采用SMT工艺使得驱动的稳定性高,采用高质量铝电解电容,使电路稳定工作。
可以直接驱动两路3-16V直流电机,并提供了5V输出接口(输入最低只要6V),可以给5V单片机电路系统供电(低纹波系数),支持3.3VMCUARM控制,可以方便的控制直流电机速度和方向。
1.2系统的整体设计图及各部分的作用
各个模块主要实现的功能:
STC89C52单片机:
作为控制单元,实现数据存储和处理。
协调与控制各模块实现系统的特定功能。
电机驱动模块:
为电机提供合适电压,与单片机直接相连,受单片机控制。
直流减速电机:
带动车轮,使小车前进和后退。
红外测距模块:
利用红外对管配合码盘通过读脉冲的方式实现小车距离的测量。
电源模块:
利用5节1.5V电池串联或者直流稳压电源为系统提供电源。
1.3.各部分的硬件实现电路图和简单说明
1.3.1.L289模块
L289模块原理图
如上图对L298电机驱动模块对电机进行控制时,当IN1,IN2,IN3,IN4分别为高电平时,OUT1,OUT2,OUT3,OUT4也分别是高电平。
OUT1和OUT2脚接一个电机的两个输入端,OUT3和OUT4接另一个电机的输入端。
ENA是前者的使能端,ENB是后者的使能端。
只有在使能端使能,且电机的两个输入端一个为高平,一个为低电平,才能使电机转动。
1.3.2四位数码管
四位数码管原理图
本小车需要对小车行走的路程进行显示,以及在画不同的图形时,数码管的显示内容不同,这些可以通过控制数码管割断的亮灭实现数码管对数字的显示效果。
1.3.3下载接口
下载接口原理图
将编写的程序下载到单片机中去,实现单片机对画画功能的实现。
1.3.4电源接口输入电路
电源接口输入电路原理图
对单片机和直流电动机供电
1.3.5单片机最小系统
与L289驱动模块,测速模块,供电模块等相连,实现对小车的整体控制作用。
第二部分软件部分
2.1电机驱动功能的设计
采用PWM控制输出占空比,从而达到控制电机转速的的目的。
由于PWM的定时计数频率是恒定的,因此改变高低电平所占的时间即可实现对占空比的调节。
可以对定时计数器的计数脉冲装入一个总值,通过控制单片机与之相对应的位达到设定值后,输出的高低电平即改变,以此实现PWM调节。
2.2让小车能够走出标准直线的设计
作为和控制经常打交道的专业来说,一说到控制我们首先会想到PID,PID具有适用范围广和容易整定等特点,几乎工业控制百分之八十的控制都会用到PID,那么本次的智能小车系统为什么不采用PID控制算法呢?
首先从实际效果来看,在未调节之前,两个电动机之间存在细微的差异,行走比较长的距离后就会看到有明显的偏移量,为了对小车进行精确控制对小车的偏移纠正是很有必要的。
采用PID调节过后,我们会看到小车的行进路径会朝着发散的方向向外扩展,就算是比较好的调节参数也会存在类似波浪线的形状,并不能达到预期的目标。
原因可能为智能小车为比较简单的系统并不需要如此复杂的调节,合理的参数整定也是非常关键的因素。
对于这个系统我们完全可以利用两个轮子所计入的脉冲数的比较来实现两个轮子所走的路程完全一样,达到两个轮子走的是直线的目的。
每当一个短暂的时间对两个轮子的脉冲进行检测,当发现脉冲数不一样时就对其进行纠正,让走得快的轮子停止等待走的慢的轮子,直至两个轮子走的一样快时,让两个轮子继续同时前进。
//小车直线前进程序
voidrun(void)//
push_val_left=9;
push_val_right=9;
if(youchong==zuochong)
{
Left_moto_go;
Right_moto_go;
for(yan=0;yan<1000;yan++);
if(da)
{
Left_moto_zanting;
Right_moto_go;
}
if(!
da)
{
Left_moto_go;
Right_moto_zanting;
}
}
if(zuochong>youchong)
{
Left_moto_zanting;
Right_moto_go;
da=0;
}
if(zuochong{
Left_moto_go;
Right_moto_zanting;
da=1;
}
while(zuochong!
=youchong);
}
2.3测距离功能设计
小车的测速功能是通过测速码盘读回脉冲数与定时器结合实现的,小车在左
右轮的中断中不断更新两个轮子的脉冲数,我们所用的码盘有20个遮光扇片和20个空缺的地方,故轮子转一圈,单片机读回的脉冲数应该为20,经过测量和计算,小车轮胎的周长约为24cm,故平均一个脉冲所对应的周长为12mm。
通过左右轮的脉冲变化数的值,乘以12mm,即可计算出小车所走的距离。
本次制作的画画小车要求小车能够精确的画出一定的直线图形,就可以通过计算直线距离所对应的脉冲数,然后让小车再走完这些脉冲数之后能够自动停止。
以80cm的直线为例程序如下
if(n1==2)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
cm=75;
zhixian();
//8013
}
2.4一次烧录程序情况下的多种模式的转化问题
本小车需要完成在烧录一次程序的情况下,能够分别完成对不同距离的直线,矩形以及凹形的绘制功能。
这个要充分利用单片机系统自带的四位数码管,可以利用数码管指示不同的数值,每一个数值对应于一种模式,当数码管显示该数值时,小车能够立即执行该模式所对应的画图程序。
首先应该对数码管进行显示的初始化表,初始化表中小车能够显示从零到九这十个数字。
并让四个数码管接通电源后显示均显示零,然后通过按动按键使数码管的数值发生变化,进而使小车进入不同的画图模式中,就成功完成了转化问题。
while
(1)
{
for(n=0;n<30000;n++);
xianshi();
if(S1==0)
{
n1=n1+1;
}
if(S4==0)
{
P0=0xff;
if(n1==1)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
cm=35;
zhixian();
//4012
}
if(n1==2)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
cm=75;
zhixian();
//8013
}
if(n1==3)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
cm=95;
zhixian();
}
if(n1==4)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
cm=35;
zhixian();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=12;
youzhuan();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=55;
zhixian();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=12;
youzhuan();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=35;
zhixian();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=12;
youzhuan();
count1=0;
count2=0;
zuochong=0;
youchong=0;
for(iiiii=0;iiiii<30000;iiiii++);
cm=55;
zhixian();
}
if(n1==5)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
}
if(n1==6)
{
TMOD=0X01;
TH0=0XF8;
TL0=0X30;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
IE0=0;
IE1=0;
EA=1;
}
if(n1==7)
{
P0=0xff;
while
(1)
{
if(S1==0&&S2==1&&S3==1&&S4==1)
{
while(!
S1);
jishu[a]=1;
disi=0;
n1=0;
xianshi();
n1=n1+1;
for(n=0;n<10000;n++);
disi=1;
a++;
}
if(S1==1&&S2==0&&S3==1&&S4==1)
{
while(!
S2);
jishu[a]=2;
disan=0;
n1=0;
xianshi();
n1=n1+1;
for(n=0;n<10000;n++);
disan=1;
a++;
}
if(S1==1&&S2==1&&S3==0&&S4==1)
{
while(!
S3);
jishu[a]=3;
dier=0;
n1=0;
xianshi();
n1=n1+1;
for(n=0;n<10000;n++);
dier=1;
a++;
}
第三部分报告总结
作为一个硬件操作水平和软件编程水平均不是很高的小组来说,通过一个月左右的时间的探索和学习,最终完成小车功能的实现。
其中付出了很多艰辛的努力,也有着非常深刻的体会和感悟。
作为一个小组,我们首先应该能够发挥出团队精神,把每个人的作用以及协作能力发挥到极致。
每个人应该有侧重点的负责很重要一部分,同时不能一个人解决的问题又需要几个人讨论交流,上网翻书查阅资料或者请教别人,把问题解决的同时也能真正的学会知识怎么应用,应用的过程需要注意什么问题。
硬件方面不但要求对电路的焊接水平很高,有时一个地方虚焊就要通过万用表一个地方一个地方的测量排查,付出很多时间和汗水才能解决一个一时疏忽的小错误。
有的时候由于电池的放电现象导致电压不够也是一个困扰很长时间的问题,刚开始不知道什么原因也为此付出了很大代价。
软件编程方面,对于一个方案的实现首先提出了很多实现方法,而每一个实现方法均需要经过实践验证才能最终确定是否适合,每一次探索付出的精力都可想而知。
方法确定之后程序的编写过程也会遇到错误修改的繁琐过程,常常需要通宵达旦的努力才能实现一个功能。
通过本次比赛让我们明白怎样拿到一个问题后怎么解决它,为我们日后的研究工作打下了坚实的基础。
在最后,感谢这次比赛为我们提供了如此好的锻炼机会。