红外避障传感器原理图策划Word格式.docx
《红外避障传感器原理图策划Word格式.docx》由会员分享,可在线阅读,更多相关《红外避障传感器原理图策划Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
![红外避障传感器原理图策划Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/24/46150630-6f9a-4534-9f1e-a964645ea84e/46150630-6f9a-4534-9f1e-a964645ea84e1.gif)
455是晶振,它产生38k的方波,HEF4024BT是7位二进制计数器,38k的方波作为计数器HEF4024BT的时钟输入。
HEF4024BT的O2与O3接与非门加一个非门去控制HEF4024BT的复位端。
也就是说当HEF4024BT计数到第四位与第三位同时为1时,HEF4024BT就会被清零。
同时当HEF4024BT的O3为1时,HEF4011BT的O4为低电平,触发红外发光二极管发送信号。
当HEF4024BT的O3为0时,HEF4011BT的O4为高电平,关闭发光二极管,这段时间为4个方波周期。
也就实现了38k载波调制的红外。
接收头是红外线一体化接收头是集红外接收、放大、滤波和比较器输出的模块。
当收到信号时,OUT端输出低电平,LEDR被点亮,指示收到信号,前方有障碍物。
没有收到信号,OUT端输出反之。
五、实验源程序:
#defineucharunsignedchar
#defineuintunsignedint
#defineMOTOR_CP0//P0口作为电机的控制口。
#defineSIGNALP1//P2口的低两位为循迹传感器输入口。
#defineSHELVES25//速度总档数。
#defineBACK0xA5//后退
#defineFORWARD0xC6//前进
sbitPWM_R=P0^7;
//右电机PWM输入口
sbitPWM_L=P0^2;
//左电机PWM输入口
voidtimer_init(void);
//定时器初始化函数。
voidleft(void);
//右转弯函数。
voidleft(void);
//左转弯函数。
voidforward(void);
//前进函数。
ucharpercent_l=0;
//左轮占空比ucharpercent_r=0;
//右轮占空比uintrun_time=0;
//车轮运行一步的时间
/*************************************************************
*******
说明:
无
入口参数:
返回值:
设计:
tongwei日期:
2009.09.15
修改:
日期:
**************************************************************
*********/
{
TMOD=0x02;
//定时器0工作在方式2,定时值自动重载,启动仅
受TR0的控制。
TH0=256-200;
//定时周期为200us*SHELVES
EA=1;
//开总中断。
ET0=1;
//开定时器0中断。
TR0=1;
//启动定时器0。
}
通过控制左右轮不同的占空比,实现左右转。
//timer_init();
//初始化定时器0。
MOTOR_C=FORWARD;
//方向向前
percent_r=0;
//右轮速度慢。
percent_l=4;
//左轮速度快。
percent_r=4;
//右轮速度快。
percent_l=2;
//左轮速度慢。
percent_r=3;
//右轮同速度。
percent_l=3;
//左轮同速度。
{
MOTOR_C=BACK;
功能:
停车
**************************************************************
voidstop(void)
//右轮零速度。
percent_l=0;
//左轮零速度。
}
函数名:
ucharcheck_sig()
检测信号,并返回信号代码。
ucharcheck_sig(void)
uchartemp=0;
temp=SIGNAL&
0x01;
//信号输入口就只有低两位,得到信号码。
returntemp;
avoid()
实现避障功能。
对采集的信号进行分析,转换为对电机的控制。
voidavoid(void)
ucharsig=0;
//存储采集的信号
timer_init();
//初始化定时器0
while
(1)
run_time=0;
//清计时器,重新开始。
sig=check_sig();
//存储信号码
switch(sig)
case1:
//没有检测到障碍物。
forward();
break;
case0:
//检测到障碍物,首先小车倒退一段距离,让后左转弯,最后继续前进。
back();
while(run_time<
350);
//决定后退的时间。
left();
180);
//决定左转弯角度。
default:
3);
//运行一步,时间为3*5ms
timer_zero()
定时器0中断服务函数
voidtimer_zero(void)interrupt1{
staticuchartemp=0;
//中断次数计数,
EA=0;
//关总中断,屏蔽其他中断。
if(temp<
SHELVES)//高电平保持时间。
percent_l)
PWM_L=1;
//左电机高电平
else
PWM_L=0;
//左电机低电平
percent_r)
PWM_R=1;
//右电机高电平
PWM_R=0;
//右电机低电平
temp++;
//实现计数
else//一个PWM周期结束,计数清零。
temp=0;
run_time++;
main()
voidmain(void)
avoid();