day9补充 串口显示超声波传感器测量值
目的:通过串口将超声波传感器采集到的值发送到电脑端
6超声波模块使用
6.1引脚连接
VCC---5V(新板子背面丝印带2021,就可以使用3V3供电)
Trig---触发信号输入(模块输入单片机发来的信号)----随便找个引脚配置输出模式(PB6)
Echo---回想信号输出(模块输出单片机输入)---随便找个引脚配置输入模式(PE6)
GND---GND


6.2超声波原理
第一部发送起始信号:Trig连接的单片机引脚配置输出模式,输出一个至少10us的触发信号;
第二部模块来做,完成后通过IO口输出一个高电平信号给单片机;
第三部处理返回信号,高电平信号与测试距离成正比,通过定时器记录输入高电平持续时间,根据公式得出距离。


为了超声波测距更加准确可以采用温度补偿

6.3超声波距离计算
通过检测到的高电平持续的时间,计算实际距离

已知测距精度是3mm,声速按照340米每秒算

得到3mm,用时9us,只需在每9us计数一次,知道有多少个9us,便知有多少个3mm。得到的往返距离再除以2,得到实际距离。
6.4代码展示
main.c

.main.h

gpio.c
//超声波初始化 TRIG-PB6 ECHO-PE6
void SR04_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //引脚编号
//TRIG输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //输出速率
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //无上下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
//ECHO输入模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //无上下拉
GPIO_Init(GPIOE, &GPIO_InitStructure);
TRIG_RESET;
}
//获取距离
uint32_t SR04_GetDistance(void)
{
uint32_t cnt=0;
//1.TRIG输出至少10us的高电平
TRIG_SET;
Delay_us(15);
TRIG_RESET;
//2.等待ECHO引脚出现高电平
while( ECHO_READ == 0 );
//3.计算高电平持续的时间
while( ECHO_READ == 1 )
{
Delay_us(9);
cnt++;
}
cnt = cnt/2;
return cnt*3; //单位是mm
}
gpio.h

更多推荐

所有评论(0)