欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 一、超声波模块

一、超声波模块

2025/4/3 19:33:16 来源:https://blog.csdn.net/weixin_44386927/article/details/145968093  浏览:    关键词:一、超声波模块

一、SR04超声波模块

在这里插入图片描述

说明:

原理
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。(即mcu输出一个高电平持续10us脉冲信号。)
(2)ECHO引脚自动发送 8 个 40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
(即:通过mcu检测该引脚的电平状态。)

修改配置systick
在这里插入图片描述

配置tim:

/* 	滴答定时器配置1ms SystemCoreClock/1000    1ms中断一次SystemCoreClock/100000	 10us中断一次SystemCoreClock/1000000 1us中断一次*/HAL_SYSTICK_Config(SystemCoreClock/(1000000));/* 系统滴答定时器时钟源 */HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/* 系统滴答定时器中断优先级配置 */HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);uint64_t count=0;uint64_t time_end=0;//定时器配置,设定一个10us的更新中断。htim4.Instance = TIM4;htim4.Init.Prescaler = 120-1;//1hmz=1ushtim4.Init.CounterMode = TIM_COUNTERMODE_UP;htim4.Init.Period = 10-1;//10 usHAL_TIM_Base_Start_IT(&htim4);
//在中断回调里进行自加处理
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{/* 根据形参判断进入回调函数的是哪个定时器 */if(htim == &htim4){count++;}
}int16_t sonar_mm(void)		//测距并返回单位为毫米的距离结果
{uint32_t Distance,Distance_mm = 0;HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_SET);					//输出高电平HAL_Delay(15);//延时15微秒HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET);				//输出低电平while( HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_1)==0);//等待低电平结束count=0;//计时清零while(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_1)==1);//等待高电平结束time_end=count;	//记录结束时的时间if(time_end/100<38)		//判断是否小于38毫秒,大于38毫秒的就是超时,直接调到下面返回0{Distance=(count*346)/2;	//计算距离,25°C空气中的音速为346m/sDistance_mm=Distance/100;	//因为上面的time_end的单位是10微秒,所以要得出单位为毫米的距离结果,还得除以100}return Distance_mm;	//返回测距结果
}float sonar(void)	//测距并返回单位为米的距离结果
{uint32_t Distance,Distance_mm = 0;float Distance_m=0;HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_SET);//输出高电平HAL_Delay(15);//延时15微秒HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET);						//输出低电平while( HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_1)==0);//等待低电平结束count=0;//计时清零while(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_1)==1);//等待高电平结束time_end=count;		if(time_end/100<38){Distance=(time_end*346)/2;Distance_mm=Distance/100;Distance_m=Distance_mm/1000;}return Distance_m;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词