超声波测距模块工作原理
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值
void main()
{
uint32 timevar;
uint32 flag;
gpio_init(TRIG,GPO,0);
gpio_init(ECHG,GPI,0);
while(1)
{
flag = 0;
gpio_set(TRIG,1); //产生触发脉冲
pit_delay_us(PIT1,15);
gpio_set(TRIG,0);
while(gpio_get(ECHG) == 0); //等待电平变高,低电平一直等待
pit_time_start (PIT0); //开始计时
while(gpio_get(ECHG) == 1) //等待电平变低,高电平一直等待
{
flag++;
if(flag >FLAGWAIT)
{
break;
}
};
timevar = pit_time_get_us (PIT0); //停止计时,获取计时时间
if(flag <FLAGWAIT )
{
timevar = timevar * 340 /2/1000;
if(timevar > 5)
{
printf("\n\n距离为:%dmm",timevar); //打印延时时间
}
}
DELAY_MS(1000);
}
}