当前位置:
文档之家› 51单片机驱动智能小车原理图
51单片机驱动智能小车原理图
5
10K 电阻
5
5.1K 电阻
2
10K 电位器
2个
开关
5
电路板
1
33pf
2
12M晶振
1
Led
1
7805
1
7
排阻 1K 二极管 4148
八、程序流程图
1 10
开始 启动寻迹程序
探测黑线
否 是否探测到黑线
是 判断处理程序(switch)
左轮探测到黑线
右轮探测到黑线
左右轮同时探测到黑线
向左转
向右转
继续前进
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
count1=0; }
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
count2=0; }//**********第五部分 中断服务程序 End********************************
speed1(ct1,sd1); speed2(ct2,sd2); }
void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转 {
forward_turn1(); forward_turn2();
speed1(ct1,sd1); speed2(ct2,sd2); } //*************以下是方案 2, 通过使两轮一正传,一反转来实现转向************************ void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转 { forward_turn1(); reverse_rutn1();
十、总结
这次课程设计,不仅锻炼了我单片机硬件设计的能力,也进一步掌握了 C51 语言的编程,让我对自动控制领 的相关理论有了更深刻的认识,同时也看到了教学知识与工业应用的差距。
继续前进 结束
九、循迹小车程序
8
#include<reg52.h> //*********************第一部分 Start*************************************** sbit IN1=P1^0;//以下是点击驱动芯片 L298 管脚位声明 sbit PWM1=P1^1; sbit IN2=P1^2;
5
RPR220 参数如下:
图 5 光电对管检测电路 2
六、总电路原理图图:
6
七、元器件清单:
图 6 循迹小车电路图(详见附页)
元器件
数量
电机(带轮)
L298
1
LM339
2
RPR220
4
Max232
1
Stc89c51(带底座)
1
104 电容
10
10uf 电容
2
1k 电阻
5
2k 电阻
5
510 欧姆
//**********第 4 部分 主函数 Start******************************** main() {
TMOD=0x11;//中断模式设置 TH0=(65536-1000)/256;//定时器 1 初始化 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;
if(ct<=sd) PWM1=1;
else PWM1=0;
}
void speed2(int ct,int sd)//电机 2 速度控制函数,其中参数 sd 为生成 PWM 波形的比较基准 {
if(ct<=sd) PWM2=1;
else PWM2=0;
} //*********************第二部分 子函数定义 End*********************
| 反馈值
光电传感器
图 1 循迹小车框架图
五、小车各模块电路图及说明
1 电源部分: 方案 1: 采用 6 节 1.5V 干电池供电,电压达到 9v,经 7805 稳压后给支流电机供电,给单片机系统和其他 芯片供电。但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,我们放弃了这种方案。 方案 2:采用 2 节 4.2V 可充电式锂电池串联共 8.6V 给直流电机供电,经过 7805 的电压变换后给支流电机 供电,给单片机系统和其他芯片供电。但由于电压不太够,价格昂贵,因此,我们放弃了。 方案 3:采用:9V 蓄电池为直流电机供电,将 12V 电压降压、稳压后给单片机系统和其他芯片供电。蓄电池 具有较强的电流驱动能力以及稳定的电压输出性能。但蓄电池的体积过于庞大,使用极为不方便,因此,我们放 弃了。
//**********第三部分 小车直线前进,左转,右转函数定义 Start********
void advance(int ct1,int sd1,int ct2,int sd2)//小车直线前进函数
10
{ forward_turn1(); forward_turn2();
speed1(ct1,sd1); speed2(ct2,sd2); } //*************以下是方案 1, 通过使两轮一快一慢来实现转向****************************** void left_turn1(int ct1,int sd1,int ct2,int sd2)//小车左转 { forward_turn1(); forward_turn2();
图 2 电源模块电路图 2、电机驱动控制部分: 这部分采用专门的电机控制芯片 L298,它可同时对两个电机进行驱动控制,电路简单,控制效果好,干扰 小,因此我们采用此方案,电路图如下
L298 的具体参数如下:
图 3 电机驱动控制部分电路图
3
L298 管脚排列如下:
3 传感器探测部分: 方案 1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到 白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值 会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。 但是这种方案受光照影响很大,不能够 稳定的工作。因此我们考虑其他更加稳定的方案。 方案 2:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照 射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管 发出的光线则检测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳 定,且容易受外界光线的影响,因此我们放弃了这个方案。 方案 3:用 RPR220 型光电对管。RPR220 是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光 二极管,而接收器是一个高灵敏度,硅平面光电三极管。
//*********************第二部分 子函数定义 Start**************************** void forward_turn1()//电机 1 前进 {
IN1=0; IN2=1; }
void reverse_rutn1()//电机 1 后退 {
IN1=1; IN2=0; }
计 算 机 控 制 课程设计说明书
题目: 循 迹 小 车
学生姓名: 学 号: 院 (系): 专 业: 指导教师:
王荣明 200706040123 电信学院(自动化系) 测控技术与仪器 刘文波、姜丽波
2011 年 2 月 25 日
1
循迹小车方案书
一、课设题目:循迹小车 二、课设要求:
1、完成基本设计功能 (顺利走一个“8“字型的黑色轨迹一周) 2、所用时间长短 3、自己发挥部分(音乐、彩灯、壁障、显示等) 4、指导老师:郑恩让 周强 黄建兵 姜丽波 刘文波
} } //**********第 4 部分 主函数 End********************************
//**********第五部分 中断服务程序 Start******************************** void time0()interrupt 1 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count1++; if(count1>=1000)//周期是 1s
TH1=(65536-1000)/256;//定时器 2 初始化 TL1=(65536-1000)%256; EA=1; ET1=1; TR1=1; while(1)
12
{ if(RPR1==0&&RPR2==0)//未检测到黑线,小车继续前进 { advance(count1,500,count2,500); } if(RPR1==1&&RPR2==0)//仅左轮检测到黑线,小车向左转弯 { left_turn1(count1,200,count2,500); } if(RPR1==0&&RPR2==1)//仅右轮检测到黑线,小车向右转弯 { right_turn1(count1,500,count2,200); } if(RPR1==1&&RPR2==1)/*左右轮均检测黑线,小车继续前进*/ /*(此处用来处理"8"字型路线交叉处小车如何前进的问题)*/ { advance(count1,500,count2,500); }