51单片机驱动智能小车原理图
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
count1=0; }
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
count2=0; }//**********第五部分 中断服务程序 End********************************
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
void forward_turn2()//电机 2 前进
9
{ IN3=0; IN4=1;
}
void reverse_rutn2()//电机 2 后退 {
IN1=1; IN2=0; }
void speed1(int ct,int sd)//电机 1 速度控制函数,其中参数 sd 为生成 PWM 波形的比较基准 {
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();
| 反馈值
光电传感器
图 1 循迹小车框架图
五、小车各模块电路图及说明
1 电源部分: 方案 1: 采用 6 节 1.5V 干电池供电,电压达到 9v,经 7805 稳压后给支流电机供电,给单片机系统和其他 芯片供电。但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,我们放弃了这种方案。 方案 2:采用 2 节 4.2V 可充电式锂电池串联共 8.6V 给直流电机供电,经过 7805 的电压变换后给支流电机 供电,给单片机系统和其他芯片供电。但由于电压不太够,价格昂贵,因此,我们放弃了。 方案 3:采用:9V 蓄电池为直流电机供电,将 12V 电压降压、稳压后给单片机系统和其他芯片供电。蓄电池 具有较强的电流驱动能力以及稳定的电压输出性能。但蓄电池的体积过于庞大,使用极为不方便,因此,我们放 弃了。
计 算 机 控 制 课程设计说明书
题目: 循 迹 小 车
学生姓名: 学 号: 院 (系): 专 业: 指导教师:
王荣明 200706040123 电信学院(自动化系) 测控技术与仪器 刘文波、姜丽波
2011 年 2 月 25 日
1
循迹小车方案书
一、课设题目:循迹小车 二、课设要求:
1、完成基本设计功能 (顺利走一个“8“字型的黑色轨迹一周) 2、所用时间长短 3、自己发挥部分(音乐、彩灯、壁障、显示等) 4、指导老师:郑恩让 周强 黄建兵 姜丽波 刘文波
//*********************第二部分 子函数定义 Start**************************** void forward_turn1()//电机 1 前进 {
IN1=0; IN2=1; }
void reverse_rutn1()//电机 1 后退 {
IN1=1; IN2=0; }
4
RPR220 采用 DIP4 封装,其具有如下特点: 塑料透镜可以提高灵敏度。 内置可见光过滤器能减小离散光的影响。 体积小,结构紧凑。 我们设计并论证了两种光电对管检测及调理电路,电路原理图分别如 4 和图 5 所示:
图 4 光电对管检测电路 1 图 4 所示电路中,R1 起限流电阻的作用,当有光反射回来时,光电对管中的三极管导通,R2 的上端变为高 电平,此时 VT1 饱和导通,三极管集电极输出低电平。 当没有光反射回来时,光电对管中的三极管不导通,VT1 截至,其集电极输出高电平。 VT1 在该电路中起到滤波整形的作用。 经试验和示波器验证,该电路工作性能一般,输出还有杂散干扰波的成分。如果输出加施密特触发器就可以 实现良好的输出波形。 但是这种电路用电量比较大,给此种传感器调理电路供电的电池压降较快。究其原因,是因为光敏三极管和 三极管 VT1 导通时的导通电流较大。 因此我们考虑用比较器的方案。
//**********第 4 部分 主函数 Start******************************** main() {
TMOD=0x11;//中断模式设置 TH0=(65536-1000)/256;//定时器 1 初始化 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;
} } //**********第 4 部分 主函数 End********************************
//**********第五部分 中断服务程序 Start******************************** void time0()interrupt 1 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count1++; if(count1>=1000)//周期是 1s
11
speed1(ct1,sd1); speed2(ct2,sd2); }
void right_turn2(int ct1,int sd1,int ct2,int sd2)//小车右转 {
forward_turn1(); reverse_rutn1();
speed1(ct1,sd1); speed2(ct2,sd2); } //**********第三部分 小车直线前进,左转,右转函数定义 End********
十、总结
这次课程设计,不仅锻炼了我单片机硬件设计的能力,也进一步掌握了 C51 语言的编程,让我对自动控制领 的相关理论有了更深刻的认识,同时也看到了教学知识与工业应用的差距。
sbit IN3=P1^3; sbit PWM2=P1^4; sbit IN4=P1^5;
sbit RPR1=P1^6;//此处是传感器 RPR220 管脚位声明 sbit RPR2=P1^7;
int count1=0;//用于定时计数的两个全局变量位声明 int count2=0; //*********************第一部分 End***************************************
//**********第三部分 小车直线前进,左转,右转函数定义 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();
5
RPR220 参数如下:
图 5 光电对管检测电路 2
六、总电路原理图图:
6
七、元器件清单:
图 6 循迹小车电路图(详见附页)
元器件
数量
电机(带轮)
2
L298
1
LM339
2
RPR220
4
Max232
1
Stc89c51(带底座)
1
104 电容
10
10uf 电容
2
1k 电阻
5
2k 电阻
5
510 欧姆
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); }
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*********************
5
10K 电阻
5
5.1K 电阻
2
10K 电位器
2个
开关
5
电路板
1
33pf
2
12M晶振
1
Led
1
7805
1
7
排阻 1K 二极管 4148
八、程序流程图
1 10
开始 启动寻迹程序
探测黑线
否 是否探测到黑线
是 判断处理程序(switch)
左轮探测到黑线
右轮探测到黑线
左右轮同时探测到黑线
向左转
向右转
继续前进
继续前进 结束
九、循迹小车程序
8
#include<reg52.h> //*********************第一部分 Start*************************************** sbit IN1=P1^0;//以下是点击驱动芯片 L298 管脚位声明 sbit PWM1=P1^1; sbit IN2=P1^2;
三、任务时间表:1、元月 4-6 号完成方案的大体框架,确定大致元器件及元器件相关参数。
2、元月 7 号完成电路图绘制 3、元月 8 号确定元器件清单 4、元月 9-10 进行编程,仿真 5、元月 11 号购买元器件
四、框架图
给定值 r +
偏差 e
控制器ቤተ መጻሕፍቲ ባይዱ单片机
执行器 电机
被控对象 车速和方向
循迹小车
图 2 电源模块电路图 2、电机驱动控制部分: 这部分采用专门的电机控制芯片 L298,它可同时对两个电机进行驱动控制,电路简单,控制效果好,干扰 小,因此我们采用此方案,电路图如下
L298 的具体参数如下:
图 3 电机驱动控制部分电路图
3
L298 管脚排列如下:
3 传感器探测部分: 方案 1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到 白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值 会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。 但是这种方案受光照影响很大,不能够 稳定的工作。因此我们考虑其他更加稳定的方案。 方案 2:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照 射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管 发出的光线则检测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳 定,且容易受外界光线的影响,因此我们放弃了这个方案。 方案 3:用 RPR220 型光电对管。RPR220 是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光 二极管,而接收器是一个高灵敏度,硅平面光电三极管。
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
count2=0; }//**********第五部分 中断服务程序 End********************************
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
void forward_turn2()//电机 2 前进
9
{ IN3=0; IN4=1;
}
void reverse_rutn2()//电机 2 后退 {
IN1=1; IN2=0; }
void speed1(int ct,int sd)//电机 1 速度控制函数,其中参数 sd 为生成 PWM 波形的比较基准 {
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();
| 反馈值
光电传感器
图 1 循迹小车框架图
五、小车各模块电路图及说明
1 电源部分: 方案 1: 采用 6 节 1.5V 干电池供电,电压达到 9v,经 7805 稳压后给支流电机供电,给单片机系统和其他 芯片供电。但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,我们放弃了这种方案。 方案 2:采用 2 节 4.2V 可充电式锂电池串联共 8.6V 给直流电机供电,经过 7805 的电压变换后给支流电机 供电,给单片机系统和其他芯片供电。但由于电压不太够,价格昂贵,因此,我们放弃了。 方案 3:采用:9V 蓄电池为直流电机供电,将 12V 电压降压、稳压后给单片机系统和其他芯片供电。蓄电池 具有较强的电流驱动能力以及稳定的电压输出性能。但蓄电池的体积过于庞大,使用极为不方便,因此,我们放 弃了。
计 算 机 控 制 课程设计说明书
题目: 循 迹 小 车
学生姓名: 学 号: 院 (系): 专 业: 指导教师:
王荣明 200706040123 电信学院(自动化系) 测控技术与仪器 刘文波、姜丽波
2011 年 2 月 25 日
1
循迹小车方案书
一、课设题目:循迹小车 二、课设要求:
1、完成基本设计功能 (顺利走一个“8“字型的黑色轨迹一周) 2、所用时间长短 3、自己发挥部分(音乐、彩灯、壁障、显示等) 4、指导老师:郑恩让 周强 黄建兵 姜丽波 刘文波
//*********************第二部分 子函数定义 Start**************************** void forward_turn1()//电机 1 前进 {
IN1=0; IN2=1; }
void reverse_rutn1()//电机 1 后退 {
IN1=1; IN2=0; }
4
RPR220 采用 DIP4 封装,其具有如下特点: 塑料透镜可以提高灵敏度。 内置可见光过滤器能减小离散光的影响。 体积小,结构紧凑。 我们设计并论证了两种光电对管检测及调理电路,电路原理图分别如 4 和图 5 所示:
图 4 光电对管检测电路 1 图 4 所示电路中,R1 起限流电阻的作用,当有光反射回来时,光电对管中的三极管导通,R2 的上端变为高 电平,此时 VT1 饱和导通,三极管集电极输出低电平。 当没有光反射回来时,光电对管中的三极管不导通,VT1 截至,其集电极输出高电平。 VT1 在该电路中起到滤波整形的作用。 经试验和示波器验证,该电路工作性能一般,输出还有杂散干扰波的成分。如果输出加施密特触发器就可以 实现良好的输出波形。 但是这种电路用电量比较大,给此种传感器调理电路供电的电池压降较快。究其原因,是因为光敏三极管和 三极管 VT1 导通时的导通电流较大。 因此我们考虑用比较器的方案。
//**********第 4 部分 主函数 Start******************************** main() {
TMOD=0x11;//中断模式设置 TH0=(65536-1000)/256;//定时器 1 初始化 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;
} } //**********第 4 部分 主函数 End********************************
//**********第五部分 中断服务程序 Start******************************** void time0()interrupt 1 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count1++; if(count1>=1000)//周期是 1s
11
speed1(ct1,sd1); speed2(ct2,sd2); }
void right_turn2(int ct1,int sd1,int ct2,int sd2)//小车右转 {
forward_turn1(); reverse_rutn1();
speed1(ct1,sd1); speed2(ct2,sd2); } //**********第三部分 小车直线前进,左转,右转函数定义 End********
十、总结
这次课程设计,不仅锻炼了我单片机硬件设计的能力,也进一步掌握了 C51 语言的编程,让我对自动控制领 的相关理论有了更深刻的认识,同时也看到了教学知识与工业应用的差距。
sbit IN3=P1^3; sbit PWM2=P1^4; sbit IN4=P1^5;
sbit RPR1=P1^6;//此处是传感器 RPR220 管脚位声明 sbit RPR2=P1^7;
int count1=0;//用于定时计数的两个全局变量位声明 int count2=0; //*********************第一部分 End***************************************
//**********第三部分 小车直线前进,左转,右转函数定义 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();
5
RPR220 参数如下:
图 5 光电对管检测电路 2
六、总电路原理图图:
6
七、元器件清单:
图 6 循迹小车电路图(详见附页)
元器件
数量
电机(带轮)
2
L298
1
LM339
2
RPR220
4
Max232
1
Stc89c51(带底座)
1
104 电容
10
10uf 电容
2
1k 电阻
5
2k 电阻
5
510 欧姆
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); }
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*********************
5
10K 电阻
5
5.1K 电阻
2
10K 电位器
2个
开关
5
电路板
1
33pf
2
12M晶振
1
Led
1
7805
1
7
排阻 1K 二极管 4148
八、程序流程图
1 10
开始 启动寻迹程序
探测黑线
否 是否探测到黑线
是 判断处理程序(switch)
左轮探测到黑线
右轮探测到黑线
左右轮同时探测到黑线
向左转
向右转
继续前进
继续前进 结束
九、循迹小车程序
8
#include<reg52.h> //*********************第一部分 Start*************************************** sbit IN1=P1^0;//以下是点击驱动芯片 L298 管脚位声明 sbit PWM1=P1^1; sbit IN2=P1^2;
三、任务时间表:1、元月 4-6 号完成方案的大体框架,确定大致元器件及元器件相关参数。
2、元月 7 号完成电路图绘制 3、元月 8 号确定元器件清单 4、元月 9-10 进行编程,仿真 5、元月 11 号购买元器件
四、框架图
给定值 r +
偏差 e
控制器ቤተ መጻሕፍቲ ባይዱ单片机
执行器 电机
被控对象 车速和方向
循迹小车
图 2 电源模块电路图 2、电机驱动控制部分: 这部分采用专门的电机控制芯片 L298,它可同时对两个电机进行驱动控制,电路简单,控制效果好,干扰 小,因此我们采用此方案,电路图如下
L298 的具体参数如下:
图 3 电机驱动控制部分电路图
3
L298 管脚排列如下:
3 传感器探测部分: 方案 1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到 白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值 会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。 但是这种方案受光照影响很大,不能够 稳定的工作。因此我们考虑其他更加稳定的方案。 方案 2:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照 射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管 发出的光线则检测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳 定,且容易受外界光线的影响,因此我们放弃了这个方案。 方案 3:用 RPR220 型光电对管。RPR220 是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光 二极管,而接收器是一个高灵敏度,硅平面光电三极管。