超声波测距模块说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近做超声波测距,就是简单的测量引脚高电平的时间。
思路是这样的
1.使用8MHZ时钟,不分频
初始化Timerx_Init(235,1);//8Mhz的计数频率,计数到235为1cm距离
2. PA0高电平时,打开定时器,测量时间
while(PAin(0))
{
TIM3->CR1|=0x01; //使能定时器3
}
TIM3->CR1|=0x00; //关闭定时器3
S=temp/2 //测量距离为总路程一半
temp=0;//计数值清零
3.计数到235时,产生中断,进入中断函数。执行temp++操作
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
temp++;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
4.得出距离值S
初学定时器,这样测距思路对吗
实际测试后,S值一直为0,为什么
超声波测距模块说明
1.模块引脚
从左到右(见图)模块引脚分别为:VCC、trig(控制端)、echo(接收端)、out(空脚)、GND
2.主要技术参数:
1:使用电压:DC5V
2:静态电流:小于2mA
3:电平输出:高电平VCC-0.2V 低<0.2V
4:感应角度:不大于15 度
5:探测距离:0.02m-5m
6:探测精度:3mm(既然探测精度精确到毫米,就是说数据可以显示到毫米级,也就是四位数了!)
板上接线方式:VCC、trig(控制端)、echo(接收端)、out(空脚)、GND。OUT 脚为防盗模块时的开关量输出脚,测距模块不用此脚!
3.使用方法:
(1)采用IO 触发测距,给TRIG 至少10us 的高电平信号(实际上25us 最佳);此处通过IO口给一个高电平就行了。(2)模块自动发送8 个40khz 的方波,自动检测是否有信号返回;
(3)有信号通过ECHO 返回,ECHO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.此处用定时
器定时看看到底多长时间!这里要检测高电平信号,本产品使用方法简单,用单片机IO 口控制TRIG 发一个10us以上(25us最佳)的高电平,就可以在接收口(ECHO)等待高电平输出.当ECHO 从低变到高就可以开定时器计时,当ECHO 变为低电平时就可以读定时器的值,此时就为此次测距的时间,据公式:测试距离=(高电平时间*声速(340m/s))/2,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了!
在程序编写上应该注意的问题:
第一个问题:基于SPI通信方式的一片74CH595驱动的四个数码管的显示的实现。要注意发送段码、发送位码、发送显示触发信号的顺序。
(1)、首先发送数码管所要显示值的段码;
(2)、在给74CH595一个显示触发脉冲;
(3)、最后要显示数据的数码管一个为选信号;这样就可以在相应的位置显示出相应的值;
注意:如要使四个数码管达到静态显示的效果,需要实时的进行扫描,故该程序中采用TIM3定时中断扫描。程序如下:SPI_SendData(*p);
delay(10);
GPIO_WriteHigh(GPIOC, GPIO_PIN_4);
delay(10);
GPIO_WriteLow(GPIOC, GPIO_PIN_4);
delay(10);
GPIO_WriteLow(GPIOD, GPIO_PIN_2);
delay(100);
GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
第二个问题:超声模块的触发和信号返回接受时的程序处理。
在给超声模块发送触发脉冲之前到接受到信号返回结束期
间应关闭定时中断数码管显示的扫描,这样才能完整无干扰的进行一次测距。若在期间开启显示中断扫描,可能引起返回信号的检测或是根本无法检测到。故在一次完整超声测距之前要关闭数码管显示中断扫描,在完整测距之后开启显示终端扫描,在进行下一次超声测距之前延时一段时间是此次的测量数据能够稳定显示一回,在重复进行下一次的测距!!!!!!!!!!!!