sbit Sevro_moto_pwm=P2^0; // 舵机信号线(橙色)
unsigned char pwm_val = 0;//变量定义
unsigned char push_val = 14;//舵机归中,产生约,1.5MS 信号
void delay1ms(unsigned int k) //延时1ms函数,k等于多少就延时多少ms
{
unsigned int a,b,c,d;
for(d=0;d<k;d++)
for(c=1;c>0;c--)
for(b=50;b>0;b--)
for(a=2;a>0;a--);
}
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256; //100US定时
TL1=(65536-100)%256;
pwm_val++;
if(pwm_val<=push_val)
Sevro_moto_pwm=1; //PWM信号高电平时间
else
Sevro_moto_pwm=0; //PWM信号高电平时间
if(pwm_val>=100)
pwm_val=0;
}
void main(void)
{
TMOD=0X10;
TH1=(65536-100)/256; //100US定时
TL1=(65536-100)%256;
TR1= 1;
ET1= 1;
EA = 1;
push_val=13; //舵机归中,机器执行指令有周期,所以PWM信号有误差
delay1ms(1000); //延时1S让舵机转到其位置,停留一下
while(1) /*无限循环*/
{
push_val=4; //舵机向正转约90度,机器执行指令有周期,所以PWM信号有误差
delay1ms(500); //延时500MS让舵机转到其位置
push_val=22; //舵机向反转约90度,机器执行指令有周期,所以PWM信号有误差
delay1ms(500);; //延时500MS让舵机转到其位置
}
}
① 测距原理:
倒车雷达超声波模块向四周发送超声波,超声波接触到障碍物时反射,被超声波模块所接收,模块根据超声波发送和返回时间差以及超声波传输的速度,就能计算岀车体和障碍物之间的实际距离。对于不同的距离,产生不同的声音作为距离提示。
② 超声波测距过程:
trig引脚产生一个大于10s的高电平信号,模块开始工作,自动发送8个40kHz的方波,并检测是否有信号返回,一旦接收到返回信号,echo引脚由高电平自动变成低电平;高电平持续的时候则为超声波传输的时间,超声波在空气中传输的速度(340m/s),测试距离=(echo高电平时间 * 声速(340m/s)/2,如图: