测距原理:
tirg平时都给低电平,当测距时,给trig输入10us以上的高电平,模块就会被激发。模块上的发射口向外发射8个40khz的声波信号。并开始计时。
声波遇到障碍物反射回来,模块的接收口收到这组声波后,会在echo引脚输出一段时间的高电平。高电平持续的时间刚好就是从开始计时到接受声波这2个事件所经历的时间。也即是声波从发出到被接受往返距离所用时间。
所以:
往返距离=echo高电平时间*声速
单程距离=超声波到障碍物距离=echo高电平时间*声速/2
测距注意:精准测量距离需要超声波模块和障碍物墙面严格平行。
编程:
单片机需要测定echo高电平时间。一般的单片机都可以用定时器去读取时间,MSP430 G2553 可以依靠捕获功能,捕获上升沿到下降沿的时间,从而得到距离。
代码:https://github.com/xddun/blog_code_search
MSP430G2553:
这段代码是一个基于MSP430微控制器的超声波测距程序。主要使用了MSP430的定时器和IO口控制。
代码中的宏定义部分定义了一些常量和函数,如CPU时钟频率、延时函数等。
在main()函数中,初始化了MSP430的基本时钟系统(BCSplus_init),初始化了OLED显示屏,并设置了TRIG和ECHO引脚的方向和选择模式。然后通过一个无限循环开始测距和显示距离的操作。
在测距过程中,首先打开定时器计数功能并设置触发方式为上升沿捕获。然后通过设置TRIG引脚产生一个短时间的高电平信号来触发超声波模块发送出去。接着进入低功耗模式(LPM0)等待超声波发射并接收返回的回波信号。
当超声波模块发送回波信号后,通过定时器的中断处理程序进行捕获。根据定时器的计数值和捕获时间,计算出距离,并显示在OLED屏上。最后退出低功耗模式,回到主循环继续进行下一次测距操作。
在代码末尾的BCSplus_init()函数中,对MSP430的基本时钟系统进行了设置,使得MCLK和SMCLK的时钟频率为16MHz。
总体来说,这段代码实现了超声波测距功能,并通过OLED显示距离结果。
代码:https://github.com/xddun/blog_code_search
MSP430F5529:
这段代码实现了一个超声波测距仪的功能。具体解释如下:
包含了头文件 "OLED.h" 和 <msp430.h>,用于调用相应的函数和库。
定义了一些常量和函数。
CPU_F 表示外部高频晶振的频率,这里设置为8MHz。
delay_us(x) 和 delay_ms(x) 是延时函数,用于延时指定的微秒和毫秒数。
Send_Byte(char data) 函数用于发送一个字节的数据。
Print_Str(char *s) 函数用于发送一个字符串。
声明了一些全局变量,包括 END_Date、STA_Date、over_flag、cap_fail_count 和 distance。
main() 函数是程序的入口。
首先停止看门狗计时器(WDT)。
设置时钟频率为8MHz。
初始化串口通信(UART)。
配置IO口和定时器,用于控制超声波传感器和测距。
初始化OLED显示屏。
启用中断并进入主循环。
激发超声波信号,并开始测距。
计算得到的时间差转换为距离,并进行显示。
延时一段时间后继续下一次测距。
TIMER0_A1_VECTOR 是定时器0通道1中断的中断处理函数。
判断捕获模式,如果是高电平,则保存开始时间;如果是低电平,则保存结束时间并设置标志位。
以上就是这段代码的主要功能和逻辑。它使用MSP430微控制器实现超声波测距功能,并通过OLED显示屏显示测距结果。
串口发送
超声波模块有的只能5V供电才能工作!有的兼容3.3V~5V都能正常供电。买的时候得注意。
如果是3.3V的单片机,推荐购买下图这种超声波模块:
或者下图这种HC-SR04+ (左下角型号里有个+号)
https://blog.csdn.net/x1131230123/article/details/109649680
代码:
https://github.com/xddun/blog_code_search
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!