基于单片机的智能循迹小车答辩PPT1.0版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//IN1 //IN2 //IN3 //IN4
sbit HW1=P2^0; sbit HW2=P2^1; sbit HW3=P2^2;
//三路寻迹模块接口第一路 //三路寻迹模块接口第二路 //三路寻迹模块接口第三路
#define Left_go {P3_4=0,P3_5=1;} //当 P3_4=0,P3_5=1; 时左电机前进 #define Left_back {P3_4=1,P3_5=0;} //当 P3_4=1,P3_5=0; 时左电机后退 #define Right_go {P3_6=0,P3_7=1;} //当 P3_6=0,P3_7=1; 时右电机前转
Left_pwm=1; else
Left_pwm=0;
void pwm_out_right(void) //右电机调速 {
if(Right_stop) { if(pwm_val_right<=push_val_right)
Right_pwm=1; else
Right_pwm=0; if(pwm_val_right>=40)
程序变得更加直观易懂。程序的主要模块有:主程序
、定时溢出中断服务程序、外部中断服务程序。
2
Keil C51单片机软件开发系统可用于编辑C或汇编 源文件。然后分别由C51编译器编译生成目标文件 (.OBJ)。目标文件与库文件一起经LIB51连接
定位生成绝对目标文件(.ABS)。ABS文件由
OH51转换成标准的Hex文件。
三路红外探头检测状态及其小车控制方法
路漫漫其修远兮, 吾将上下而求索
所谓的差速,是指左右两车轮的速度差,假如左边 车轮比右边的快,则小车会偏向右。同时,左边的 车轮转速比右的慢,那么小车会向左边转动。
目前主要有以下两种方式。
(1)小车向左转,可是是左轮停止,左轮继续转 动,这样可实现左转,这种方式实现小角度的转弯 ,在角度不大时可采用此种方式。
路漫漫其修远兮, 吾将上下而求索
L298N接入直流电机的端口接法
循迹原理: 利用红外线对于不同颜色具有不同的反射性
质的特点。在小车行驶过程中传感器的红外发射 二极管不断发射红外光,当红外光遇到白色地面 时发生漫反射,红外对管接收管接收反射光;如 果遇到黑线则红外光被吸收,则红外管接收不到 信号.
w=1; } if(HW3==0&&HW2==0&&HW1==0&&w==1) {
rotate_left(); q=0;i=0;j=0; } if(HW3==1&&HW2==1&&HW1==1)//检测到全为黑线时 停止 { stop(); }
/*************第五部分 中断服务函数*************/
经过多次的测试证明,循迹传感器呈M型布局时更适合检
测多弯道的轨迹。由于传感器不在同一直线上,故小车转
2
弯时,左右两边后部的传感器有较大的采样空间,两边前 端的传感器则对采集的信号有更好的前瞻性。整个布局有
利于在弯道处提高小车速度。但相对一字型布局,M型布
局容易产生不稳定信号,从而产生信号震荡,影响小车行
void forward(void) //前进 {
push_val_left=4; //PWM 调节参数 改这个值可以改变其速度 push_val_right=4; Left_go; Right_go;
}
void rotate_left(void) //旋转左转 {
push_val_left=3; push_val_right=4; Left_back; Right_go; }
驶的稳定性。
小车保留了扩展功能。循迹小车在完成设计预想的前提
3
下,考虑到车体结构设计的简单化,降低了制作成本, 使之更具有普及性。保留了各种硬件接口和软件子程序
接口,方便以后的扩展和进一步的开发。
路漫漫其修远兮, 吾将上下而求索
结论:
本课题研究的内容主要是智能小车的循迹系统。以实验组装小车为基 础,使用了3个光电传感器来探测周围环境,同时对采集到的数据信 息进行融合。取得了以下成果:
1
小车可以实现按照预定轨道在无外部环境影响或改变时 ,小车将一直在轨道上循迹。
路漫漫其修远兮, 吾将上下而求索
路漫漫其修远兮, 吾将上下而求索
void little_left(void) //小车前进向左微调 {
Left_go; Right_go; push_val_left=2; push_val_right=5; } void rotate_right(void) //旋转右转 { push_val_left=4; push_val_right=3; Left_go; Right_back; } void little_right(void) //小车前进向右微调 { Left_go; Right_go; push_val_left=4; push_val_right=2; }
基于单片机的智能循迹 小车答辩PPT1.0版
路漫漫其修远兮, 吾将上下而求索
2020年4月12日星期日
小车实物图
路漫漫其修远兮, 吾将上下而求索
• 整个系统括单片 机控制模块、电
机驱动模块、循
迹模块、电源和 小车车体。
本系统采用简单明了的设计方案。
通过高发射功率红外光电二极管和高灵敏度光电 晶体管组成的传感器循迹模块判断黑线路经
L298N驱动芯片和直流电机接线原 理图
L298N电机驱动板
路漫漫其修远兮, 吾将上下而求索
实物图
L298N 是一个内部有两 个H桥的驱动芯片,这样电 机的运转只需要用三个信号 控制:两个方向信号和一个 使能信号。
注意:L298N 芯片的工作电压需要两路: 第一路: 输出供给电机回路的工作电源 第二路: 输入逻辑控制回路电源 5V ( 电源出/入)
然后由STC89C52单片机通过IO口控制L298N驱 动模块改变两个直流电机的工作状态
最后实现小车循迹
路漫漫其修远兮,
3ห้องสมุดไป่ตู้
吾将上下而求索
控制系统结构框图
路漫漫其修远兮, 吾将上下而求索
2.循迹小车硬件设计 电机驱动模块 循迹模块
路漫漫其修远兮, 吾将上下而求索
电机驱动模块
路漫漫其修远兮, 吾将上下而求索
void init()
//初始化
{
TMOD=0X01;
TH0=(65536-1000)/256; //1ms定时
TL0=(65536-1000)%256;
EA = 1;
ET0= 1;
TR0= 1;
}
void timer0() interrupt 1 //TIMER0中断服务子函数产生PWM信号 {
TH0=(65536-1000)/256; //1ms定时 TL0=(65536-1000)%256; //time++; pwm_val_left++; pwm_val_right++; pwm_out_left(); pwm_out_right(); }
#define Right_back {P3_6=1,P3_7=0;} //当 P3_6=1,P3_7=0; 时右电机后退
路漫漫其修远兮, 吾将上下而求索
void pwm_out_left(void) //左电机调速,调节push_val_left的值改变电
机转速,占空比 {
if(Left_stop) { if(pwm_val_left<=push_val_left)
LM339比较器 红外探头电路
IN1-为定位器调节的电压输入端(V固定)
IN1+为探头输出的电压(探头out与GND间电压)Vout
检测到白色时 R1减 小 Vout<V固定 输出 低电平 LED亮
Vout V固定
检测到黑线时 R1增大 Vout>V固定 输出
高电平 LED灭
路漫漫其修远兮, 吾将上下而求索
{
if(HW3==0&&HW2==1&&HW1==0)
//直行
{
{
forward();
}
if(HW3==0&&HW2==0&&HW1==1)
//微右
{
}
路漫漫其修远兮, 吾将上下而求索
little_right(); i=1;
if(HW3==0&&HW2==0&&HW1==0&&i==1) //右转出线时(特别) { little_right(); j=0;q=0;w=0; }
(2)小车向左转,可以是左轮反转,右轮正转, 这样可以实现大角度的左转,甚至可以进行原地打 转。
同理可推出小车如何向右转向。
路漫漫其修远兮,
13
吾将上下而求索
循迹小车软件设计:
本设计采用C语言来编译程序。模块化结构程序的设
计,可以使系统软件便于调试与优化,也使其他人更
1
好地理解和阅读系统的程序设计。因此,软件的设计 上,运用了模块化程序的结构对软件进行设计,使得
sbit Left_pwm=P1^6; //接驱动模块ENA使能端,输入PWM信号调节速度 Sbit Right_pwm=P1^7; //接驱动模块ENB使能端,输入PWM信号调节速度
sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7;
} else
}
路漫漫其修远兮, 吾将上下而求索
if(pwm_val_left>=40) pwm_val_left=0;
Left_pwm=0;
} else
}
pwm_val_right=0; Right_pwm=0;
/*********************第三部分 电机驱动函数*********************/
if(HW3==1&&HW2==0&&HW1==0)//微左 { little_left(); j=1; }
if(HW3==0&&HW2==0&&HW1==0&&j==1)//左转出线时(特别) { little_left(); i=0;q=0;w=0; }
if(HW3==0&&HW2==1&&HW1==1)//两个传感器测 右拐 { rotate_right(); q=1; }
路漫漫其修远兮, 吾将上下而求索
} } 路漫漫其修远兮,
吾将上下而求索
if(HW3==0&&HW2==0&&HW1==0&&q==1)//调整 {
rotate_right(); w=0;i=0;j=0; }
if(HW3==1&&HW2==1&&HW1==0)//两个传感器测到 左拐 {
rotate_left();
路漫漫其修远兮, 吾将上下而求索
void stop(void)//停止 {
push_val_left=0; push_val_right=0; }
/*********************第四部分 主函数*********************/
void main()
{
init();
while(1)
路漫漫其修远兮, 吾将上下而求索
3
在软件调试中,使用功能强大且的WAVE 6000软件进 行软件编译与调试,使用Microcontroller ISP Software及其配套的单片机对程序进行烧录。
主要程序功能
/*********************第一部分 管脚声明*********************/
红外对管采集回来的信号通过3路循迹传感器 模块里面的LM339比较器后输出高或低电平,从 而实现信号的检测。
路漫漫其修远兮, 吾将上下而求索
当模块检测到前方障碍物信 号时 电路板上红色指示灯点 亮,同时OUT 端口持续输出 低电平信号,该模块检测距离 2~60cm, 检测角度35°
路漫漫其修远兮, 吾将上下而求索