STC89C52单⽚机为智能⼩车的控制
摘要
本设计是以STC89C52单⽚机为智能⼩车的控制核⼼,采⽤直流电机驱动⼩车前进及转向,电机驱动采⽤电磁继电器和L298芯⽚,电源主要是由以充电电池为动⼒。系统由单⽚机通过IO⼝控制⼩车的前进避线及转向,通过硬件和软件的调试,最终在预设⿊线的⽩⾊区域内完成循环超车任务。
⽬录
1系统⽅案 (2)
1.1 主控制器的论证与选择 (2)
1.2 电机与驱动的论证与选择 (2)
1.3 检测系统的论证与选择 (2)
1.4 ⽆线通信系统的论证与选择 (2)
2系统理论分析与计算 (2)
2.1 ⼩车模型的分析 (2)
2.1.1 智能⼩车控制系统 (2)
2.1.2 智能⼩车转向和速度的控制 (2)
2.2 赛道记忆的计算 (2)
2.2.1判断⿊线记忆 (2)
3电路与程序设计 (4)
3.1电路的设计 (4)
3.1.1系统总体框图 (3)
3.1.2 电机⼦系统框图 (3)
3.1.3 红外检测⼦系统框图 (4)
3.1.4电源 (4)
3.2程序的设计 (4)
3.2.1程序功能描述与设计思路 (4)
3.2.2程序流程图 (4)
4测试⽅案与测试结果 (6)
汽车遥控器
4.1测试⽅案 (6)
4.2 测试条件与仪器 (6)
4.3 测试结果及分析 (7)
4.3.1测试结果(数据) (7)
4.3.2测试分析与结论 (7)
附录1:电路原理图 (8)
附录2:源程序 (9)
智能⼩车(C题)
【本科组】
1系统⽅案
本系统主要由单⽚机最⼩系统模块、直流电机驱动模块、红外光检测模块、锂电池模块组成,下⾯分别论证这⼏个模块的选择。
1.1 主控制器的论证与选择
⽅案⼀:采⽤FPGA(Field Programmable Gate Array)控制⽅案。FPGA内部具有独⽴的I/O接⼝和逻辑单元,使⽤灵活、适⽤性强,且相对单⽚机来说,还具有速度快、外围电路较少和集成度⾼的特点,因此特别适⽤于复杂逻辑电路设计。但是FPGA的成本⾼,⽽且由于本设计对输出的数独要求不⾼,所以FPGA⾼速处理的优势得不到充分体现。
⽅案⼆:采⽤STC公司的STC89C52单⽚机作为系统的控制器。STC89C52有40个引脚、32个独⽴的I/O⼝、两个外部中断和3个定时器/计数器,虽然相对FPGA来说在功能和速度上有点差异,但单⽚机软件编程灵活,可⽤软件较简单地实现各种算法和逻辑控制,并且由于其成本低、体积⼩、技术成熟和功耗⼩等优点,技术⽐较成熟,开发过程中可以利⽤的资源和⼯具丰富。
综合以上两种⽅案,选择⽅案⼆。
1.2 电机与驱动的论证与选择
⽅案⼀:采⽤步进电机作为⼩车的动⼒源。步进电机是⼀种将电脉冲信号转换成⾓位移或线位移的开环控制元件,可在各种数控系统中作为执⾏元件,在⾮超载情况下,电机的转速、停⽌的位置只取决于脉冲信号的频率和脉冲数,⽽不受负载变化的影响。但步进电机⽤于⼩车功耗⾼且需要相应的硬件驱动,电路复杂。
⽅案⼆:采⽤直流电机作为⼩车的动⼒源。直流电机具有优良的调速特性,调速平滑、⽅便,调整范围⼴,过载能⼒强,能承受频繁的冲击负载,可实现频繁的⽆级快速启动、制动和反转。直流电机的驱动电路简单,可以⽤分⽴元件搭成H桥驱动电路,也
可以使⽤集成芯⽚L298N。L298N是双全桥2A电机驱动芯⽚,内含两个H桥的⾼电压⼤电流双全桥式驱动器,接受标准TTL逻辑电平信号,可以很⽅便地驱动两个直流电机,本设计⽤到两个N20⼩型直流电机,完全可以⽤简单电路实现系统需求。
综合以上两种⽅案,⼩车不需要精确转⾓定位,选择⽅案⼆。
1.3 检测系统的论证与选择
⽅案⼀:采⽤光敏电阻对⿊线判断。光敏电阻光照性为⾮线性、反应灵敏度⼀般,检测距离范围有限,其受外部影响较⼤,检测信号易出现误差。
⽅案⼆:采⽤激光收发管对⿊线判断。激光收发管线性度好、反应快,检测范围⼴,其受外部影响很⼩。但对⿊线判断需要⿊⽩对⽐度⾼,要求较严格。
⽅案三:采⽤红外收发管对⿊线判断。红外收发管线性度⼀般,反应较快,检测范围⼀般,受外部影响不⼤,对⿊线判断可通过调节来改变⿊⽩对⽐度不同的灵敏度。
综合考虑采⽤红外收发管作为检测系统对⿊线判断。
1.4 ⽆线通信系统的论证与选择
⽅案⼀:采⽤NRF2401进⾏两车⽆线通信。NRF2401是⼀款⼯作在2.4~2.5GHz世界通⽤ISM频段的单⽚⽆线收发器芯⽚。内置通信协议可以进⾏⾼质量、⼤容量的通信。通过配置寄存器可以⼯作在多种模式,强⼤的⽆线通信能⼒使其应⽤很⼴泛。
⽅案⼆:采⽤⽆线遥控收发组件。⽆线遥控收发套件,这是⼀种⽬前⽤途⾮常⼴泛的100⽶四键遥控模块,常⽤于报警器设防、车库门遥控、摩托车、汽车的防盗报警等,这类⽤途要求遥控器的遥控距离并不远,⼀般50⽶⾜够了。
综合考虑本设计两辆⼩车之间通过判断⿊线之后进⾏简单的⾼低电平通信即可,采⽤⽅案⼆作为本设计的⽆线通信系统。
2系统理论分析与计算
2.1 ⼩车模型的分析
2.1.1智能⼩车控制系统
智能⼩车控制系统⼀般可看作随动系统,使得模型车跟随道路的变化⽽运⾏,另⼀⽅⾯,模型车在⾛直线或蛇形线时,也可以看作⼀个恒值调节系统,能够跟随道路变化⽽更加平稳快速的运⾏。在设计控制算法时,要既能满⾜跟随系统的动态特性,同时⼜能满⾜恒值调节的稳定特性。
2.1.2智能⼩车转向和速度的控制
控制模型车的转向和速度,使其能够跟随道路的变化来运⾏。实现这⼀⽬标有两个难点:⼀是各种外界⼲扰因素作⽤于系统,影响被控对象偏离控制规律,例如道路变化,检测信号的噪声和电池电压不稳等;⼆是控制对象车模本⾝的惰性使得被控量变化不能够灵活⾃如。为此,我们需要分析外部扰动以及控制对象的动态特性。
2.2 赛道记忆的计算
2.2.1判断⿊线记忆
由于⽐赛限定赛道,且赛道上有固定转弯标志线,每次⾏驶⼀圈都会检测到固定数量的⿊线,从⽽可以判断出⼩车的⼤概位置。
3电路与程序设计
3.1电路的设计
3.1.1系统总体框图
系统总体框图如图3.1.1.1所⽰。⼩车以STC89C52单⽚机作为系统核⼼,按键⽤来检测运⾏不同的程序,红外收发管判断出⿊线并产⽣低电平给单⽚机来确定⼩车的运⾏,⽆线通信模块在两车间简单通信实现超车后被超车跟跑的功能。
图3.1.1.1 系统总体框图
3.1.2 电机驱动⼦系统框图如图3.1.2.1
图3.1.2.1 L298驱动⼦系统框图
3.1.3 红外检测⼦系统框图如图3.1.3.1
图3.1.3.1 红外收发⼦系统框图
3.1.4电源
电源由7.4V 锂电池提供,通过L7805三端稳压管输出5V 为单⽚机系统、L298芯⽚、⽆线通信模块供电,通过L7806三端稳压管输出6V 给L298N 为直流电机供电。
3.2程序的设计
3.2.1程序功能描述与设计思路
1、程序功能描述
根据题⽬要求软件部分主要实现⼩车的转弯和调速。
STC89C52
按键切换程序
⿊线检测模块
⽆线通信模块
电机驱动模块
直流减速电机
L298
⼩车左轮
⼩车右轮
红外接收
红外发送
产⽣⾼电平
1)⼩车转弯功能:设置⼩车⼀侧车轮速度⼤于另⼀次车轮速度实现转弯。2)⼩车调速功能:设置PWM的不同值驱动⼩车变速。
2、程序设计思路
⼩车左侧传感器检测到⿊线实现右转,右侧检测到⿊线实现左转。
3.2.2程序流程图
1、主程序流程图如图3.2.2.1
图3.2.2.1 主程序流程图
4测试⽅案与测试结果
4.1测试⽅案
1、硬件测试
完成PCB的制作与焊接后分别测试⼩车两个电机是否能被驱动、传感器是否可以⼯作,各单元组装完毕后在进⾏整车程序测试。
2、软件仿真测试
通过写程序⽚段来控制由⼋个LED组成的圆圈模拟⼩车车轮的运⾏状态,可以精确地仿真出⼩车运⾏的情况。
3、硬件软件联调
完成硬件测试与软件仿真后,组装整车写实际运⾏的程序对⼩车控制完成题⽬要求,对于出现的问题分别微调程序处理。
4.2 测试条件与仪器
测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查⽆误,硬件电路保证⽆虚焊。
测试仪器:⾼精度的数字毫伏表,数字⽰波器,数字万⽤表。
4.3 测试结果及分析
4.3.1测试结果(数据)
⼩车完成⼀圈的时间:(单位/S)
次数 1 2 3
甲车正常⾏驶⼀圈16.7 17.1 16.9
⼄车正常⾏驶⼀圈17.2 17.1 16.8
甲车实现超车功能⾏驶⼀圈23.4 22.1 25.4
⼄车实现超车功能⾏驶⼀圈25.6 24.3 26.5
超车完成
次数 1 2 3 ⼄车超甲车第⼀圈24.6 25.4 25.8
甲车超⼄车第⼆圈40.6 45 52
⼄车超甲车第三圈78.9 83.7 77.4
甲车超⼄车第四圈109.7 123.4 116.8
4.3.2测试分析与结论
根据上述测试数据,每⼀辆下车单车单圈⾏驶时间和两辆车交替领跑所⽤时间,以及每辆车进⼊超车区后实现超车所⽤时间,通过仔细的⽐较分析,由此可以得出以下结论:
1、单量车⾏驶时不⽤进⾏两车之间的信息交换,所⽤时间较短。基本达到⼩车的最⾼⾏驶车速。
2、为了实现两车交替领跑并且要去所⽤时间最短,最为理想的实现⽅法是两车尽量全速前进,为实现后⾯车超车,就要在超车时前⾯的车辆适当的减速等待超车。
3、题⽬要求两车正常⾏驶,交替领跑,我们通过查阅相关资料,得出正常⾏驶包括正常的前进,后退,停⽌,加速,减速,转弯。本程序设计中⽤到了上述所有正常的操作,完成题⽬要求。
综上所述,本设计达到设计要求。
附录1:电路原理图
单⽚机系统图
附录2:部分源程序
#include
sbit key=P0^6;
sbit key2=P0^7;
sbit key3=P1^0;
sbit en0=P2^4;
sbit en00=P2^5;
sbit en11=P2^6;
sbit en1=P2^7;
sbit inf=P1^1;
sbit send=P1^2;
sbit xuanze=P1^3;
unsigned int t=0,tt,tt2;