电子设计小车入库 程序控制Word下载.docx
- 文档编号:18909902
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:15
- 大小:142.54KB
电子设计小车入库 程序控制Word下载.docx
《电子设计小车入库 程序控制Word下载.docx》由会员分享,可在线阅读,更多相关《电子设计小车入库 程序控制Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
(volatileunsignedint*)0x7013
#defineboolint
#definetrue1
#definefalse0
voidInit_IO()
//初始化接口,IOA口为输入、IOB口为输出
{
Set_IOA_Dir(0x0000);
Set_IOA_Attrib(0x0000);
Set_IOA_Data(0x0000);
Set_IOB_Dir(0xffff);
Set_IOB_Attrib(0xffff);
Set_IOB_Data(0x0000);
}
//--------------------------------------------------------------
boolLight(void)
//检测光源,如果检测到光源返回true,否则返回false
{
//读取IOA口第1位值,值为1表示检测到光源,值为0表示没有检测到光源
unsignedintia;
ClearWatchDog();
ia=Get_IOA_Data();
ia=ia&
0x0001;
if(ia==0x0001)
returntrue;
else
returnfalse;
voidTurnRight(unsignedinttn)
//原地右转tn步
inti,j;
for(j=0;
j<
tn;
j++)
i=i&
0x00c0;
i=i|0x2400;
*P_IOB_Data=i;
F_Delay(60);
//Delay的参数需要测试?
?
i=i|0x0000;
F_Delay(40);
}
voidTurnLeft(unsignedinttn)
//原地左转tn步
voidGoAhead(unsignedintgn)
//前进gn步
gn;
i=i|0x2800;
F_Delay(90);
//前轮检测黑线
boolFBlackline(void)
//前轮检测黑线,如果没有检测到黑线,返回false,否则返回true
//读取IOA口第5、6位值,值为00表示没有检测到黑线,值为11表示两轮都压黑线
0x0030;
if(ia==0x0000)
boolFLeftWheel(void)
//检测前左轮是否压线,是返回true,否则返回false
//读取IOA口第5、6位值,值为01表示右压黑线,值为10表示左压黑线
0x0020;
if(ia==0x0020)
boolFRightWheel(void)
//检测右轮是否压线,是返回true,否则返回false
//读取IOA口第5、6位值,值为01表示右压黑线,值为10表示左压黑线
0x0010;
if(ia==0x0010)
boolFRLWheel(void)
//检测两轮是否都压线,是返回true,否则返回false
if(ia==0x0030)
//后轮检测黑线
boolBFLeftWheel(void)
//读取IOA口第7、8位值,值为01表示右压黑线,值为10表示左压黑线
0x0080;
if(ia==0x0080)
boolBFRightWheel(void)
//读取IOA口第7、8位值,值为01表示右压黑线,值为10表示左压黑线
0x0040;
if(ia==0x0040)
boolBFRLWheel(void)
if(ia==0x00c0)
/*原地测光源并转向*/
voidTestLight(void)
//检测光源
unsignedintn=5;
//此参数需要测试,实现原地转向?
while(!
Light())
//找不到光源
TurnRight(n);
//原地转向n
return;
//---------------------------------------------------------------
//读取IOA口数据
unsignedinttest_IOA()
unsignedintn;
n=*P_IOA_Data;
returnn;
//对光源行走
voidRun(void)
//此参数需要测试?
unsignedintn=5;
//每检测一次,小车的行驶步数
unsignedintm=3;
//原地左转或右转的步数
unsignedintioa;
//存读取的IOA口的值
while
(1)
ioa=test_IOA();
if(ioa&
0x0001)
//如果感受到光源
GoAhead(n);
//前进n步
else
m=3;
do
TurnLeft(m);
//原地右转m步,即一个小的角度s'
if(!
Light())
//如果没有感受到光源
TurnRight(2*m);
//原地左转2m步,即一个小的角度2s'
m=2*m;
}while(!
Light());
0x0030)
//如果测到黑线
break;
//入圈模块
voidEntry(void)
unsignedinttn=5;
unsignedintrm=5;
//后轮每检测一次,小步前进的步数
unsignedintrrn=100;
//小车驶向圈心时,前进的步数
unsignedint
ioa;
GoAhead(rm);
//前进一小步rm
if((ioa&
0x00c0)==0x00c0)
//后两轮都压线
0x0080)
//如果左轮压线
TurnLeft(tn);
//原地右转tn
elseif(ioa&
0x0040)
//如果右轮压线
TurnRight(tn);
GoAhead(rrn);
//前进到圆心
voidStop(void)
//停车
inti;
voidYuying(void)
//语音到站提示
intmain(void)
Init_IO();
//初始化IO口
TestLight();
//找光源
Run();
//行走
Entry();
//入圈
Stop();
Yuying();
黑龙江2006E题作品:
简易自动入库小车
2009-05-2209:
33
摘要:
采用单片机AT89C51作为简易入库小车的检测和控制核心。
车库黑圈和路面引导白线检测使用反射式红外传感器,车速和距离检测使用断续式光电开关,引导光源检测采用光敏电阻阵列。
基于自动控制原理,采用高效的H型PWM电路动态控制电机的转速和转向;
控制系统与电路用光电耦合器完全隔离以避免干扰。
添加电子罗盘模块后可使小车的环境适应性更强。
添加状态标志模块后,行驶过程中有声光提示,使得本设计更趋人性化。
关键词:
智能小车寻迹寻光入库
系统设计
简易入库小车,根据题目要求,系统可以划分为控制部分和信号检测部分。
其中信号检测部分包括:
光源探测模块、路程测量模块、路面检测模块、方向检测模块;
控制部分包括:
电机驱动模块、控制器模块、状态标志模块。
模块框图如图所示。
为了实现各模块的功能,分别做了几种不同的设计方案并进行了论证。
控制模块
方案一:
选用PIC、或AVR、或凌阳SPCE061A等作为控制核心;
这些单片机资源丰富,可以实现复杂的逻辑功能,功能强大,完全可以实现对小车的控制。
但对于此题目而言,其有时得不到体现,成本也稍高,有点资源浪费。
方案二:
采用单片机AT89C51作为系统控制器方案。
运算能力强。
软件编程灵活、功耗低、技术成熟和成本低。
基于以上分析,拟选用方案二。
光源探测
本体要求小车在光源引导下,进入车库。
光源探测模块的功能主要是引导小车朝光源行驶。
采用红外温度感应器件。
用此可较为准确地寻找不远处的100W白炽灯。
但是,如此一来,电路实现较为复杂。
采用多光敏电阻阵列。
对每个光敏电阻状态进行编码,由此确定小车的转向。
考虑到实现的方便性,我们采用方案二。
路面检测
路面检测模块实现小车进入白色车库、不压黑线、和沿白色引导线行驶。
探测路面黑圈和白色引导线的基本原理:
光线照射到路面并反射,由于黑和白对光的反射系数不同,所以可以根据接收到的反射光强弱来判断黑白。
采用光敏传感器。
由于其他光源影响(特别是白天),会造成误判或漏判,效果不会很好。
采用反射式红外发射—接受对管。
为增强抗干扰能力,增加了脉冲调制功能。
对管的个数有3个。
在车头左、中、右各装一对管。
本系统采用方案二。
电机驱动模块
采用步进电机,电脉冲驱动。
改变脉冲频率调速,改变相序实现正反转。
此方案可以轻松实现前进距离、转向、角度控制、制动定位等功能。
但两个轮子电机参数不易匹配,并且加大系统复杂程度。
采用直流电机,H型脉冲宽度调制(PWM)桥式驱动电路。
此方式调速功能较好,可灵活正、反转,在原地旋转。
电源
采用单一电池电源供电。
这样供电比较简单;
但是由于电动机启动瞬间电流较大,而且PWM驱动电动机电流波动较大,会造成电源电压不稳,可能造成传感器误检测,甚至单片机程序跑飞、复位等异常现象。
双电源:
将电机驱动电源与控制系统电源分开,光电耦合连接。
提高系统的稳定性。
方向检测
最简易情况:
小车的起始位置位于中间车库轴线下,2米横线中间位置,可以根据几何原理直接计算到达各个车库需要偏转的角度、前进距离和到达车库后的调整车头的旋转角度。
从而完成任务。
如果小车在2米横线任意位置,要实现到达后小车车头方向为正西方向,车身与圆形车库的纵轴对齐,可有几种方案。
使用图像识别导引。
对小车行驶区域的环境进行图象识别,实现智能行驶。
但实现难度较大,成本高。
光源检测和路面检测结合法。
由光源检测模块探测到光驱,并驱使小车以直线方式靠近光源。
由路面检测模块检测到车库黑线时停止,小车就进行寻迹动作:
确定转向,沿着黑线行驶,同时仍进行光源检测。
当与车身垂直的光敏元件检测到灯光的时候,小车处于圆形车库正西方向处。
然后小车转向90度,车围朝向光源倒退30cm(车库半径,可用光敏传感器测距或者添加路程计算模块),即到达车库中心。
车头正西、车身与圆形车库纵轴对齐。
此方案可以不用添加其他装置模块,即可实现。
但是编程相对复杂。
暂未实现。
方案三:
使用电子罗盘(指南针电路)
由于本题的车库纵轴方向为正东方向,可以使用指南针电路实现小车的方向识别。
自己制作:
可以采用传统的指南针,加霍尔元件(如UGN3503型霍尔器)。
由于磁偏角的存在,以及制作等因素,精度不高。
采用商品:
此类电子罗盘商品大多采用Honeywell磁阻传感器制成,价格较贵(从几十到几百元不等)。
但易于集成、定位精度高、环境适用性强。
如上海直川开发的ZCC211N-232特小型低成本电子罗盘,输入电压低,功耗小,体积仅有一元硬币大小,很适用于小车方向定位。
路径规划:
小车在原地打转,用光敏电阻阵列探测光源位置。
车头转向。
方向由光敏电阻阵列确定。
如果为小车东南方灯光亮,小车转向正南方。
方向由电子罗盘确定。
小车沿2m横线前进。
同时用光源检测模块检测光源。
光敏电阻阵列可采用正方形阵列,或双层异向排列。
当东西朝向(即小车两侧的)的传感器正中的检测到光源直射时,小车停止。
右转90度,车围朝向车库。
倒车2米。
即到达车库中心。
车头朝西,车身与圆形车库的纵轴对齐。
在前进和倒车途中,使用光敏电阻阵列和电子罗盘确定修正方向,保证精度。
倒车距离需要添加路程计算模块。
本系统采用方案三。
路程计算
采用断续式光电开关。
借鉴光电鼠标的工作原理,在车轮或车轴上均匀地安装多个遮光条,用计数光脉冲的方法测量小车的位移,并据此计算车子的速度。
系统各个模块的最终方案:
控制模块,采用单片机AT89C51控制;
光源探测模块,采用多光敏电阻阵列;
路面检测模块,采用采用反射式红外发射—接受对管;
电机驱动模块,采用H型脉冲宽度调制(PWM)桥式驱动电路;
电源模块,采用双电源。
方向控制,采用电子罗盘;
路程计算,采用断续式光电开关。
单元电路设计。
引导线白线检测采用反射式红外发射—接受对管
上图为ST178光电传感器原理图。
该设计使用反射式光电传感器ST178,光电传感器的发射孔和接收孔位于同一侧。
当光电传感器发射管发射的红外线探测到白色物体时,红外线反射使接收管导通。
电压比较器LM393的Ⅴin+拉低,输出为低电平。
当检测到引导线或边界线时,接收管截止,Ⅴin+为高,比较器输出为高电平。
沿引导线入库状态真值表
在车头左、右各装一对管。
传感器编号
小车状态
3
2
1
小车动作
正常行驶
前进
轻微右偏
左转(幅度小)
严重右偏
左转(幅度大)
轻微左偏
右转(幅度小)
严重左偏
右转(幅度大)
脱离引导线
--
沿引导线入库后的光源探测示意图
在原地旋转寻找光源只需一个光敏电阻即可,在沿着引导线入库的时候需要用到三个光敏元件判定小车偏移。
采用多个带黑色套管的光敏元件以不同角度采光的方案,如上图所示。
原理是:
光敏电阻A、B、C接收光的方向不一样,导致其两端电压也不一样,通过比较A、B和B、C的电压,确定光源相对小车的方位。
当A管电压高于B管电压(即A管接收光强大于B管接收光强)时,说明光源在小车左前方;
当C管电压大于B管电压,说明光源在小车右前方;
当B管电压大于A管、C管电压时,光源在小车正前方。
软件设计(主程序流程图)
系统测试
总结
本系统以AT89C51芯片为核心部件,利用光电检测技术实现了电动车的寻光源入库,沿引导线入库等功能。
对于小车的进入车库时的方向检测控制,也有了方案。
另外可以添加状态标志模块,使用蜂鸣器和发光二极管,在拐弯旋转,到达车库后进行声光报告,更加人性化。
由于时间有限,特别是设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子设计小车入库 程序控制 电子设计 小车 入库