“深入解析STM32-CS100A超声波测距芯片的原理和代码”

 一、基础知识

1.功能:超声波测距

        CS100A 是苏州顺憬志联新材料科技有限公司(www.100sensor.com)推出的一款工
业级超声波测距芯片,CS100A 内部集成超声波发射电路,超声波接收电路,数字处理电
路等,单芯片即可完成超声波测距,测距结果通过脉宽的方式进行输出,通信接口兼容
现有超声波模块。

        整个电路只需极少的外围器件,也可采用单面 PCB,在保证较高性能的
基础上,可大幅度降低成本。

2.硬件介绍及电路连接

       管脚:

 

参考电路 

 

 详解:

        其中 R1,C1 组成电源滤波电路。Y1 为 8MHZ 的晶体振荡器。RT21 为 40KHZ 的发射
探头,RT11 为 40KHZ 的接收探头。
R2 为 15 兆欧的下拉电阻,可以调节测距灵敏度。减小这个电阻,可以增强抗干扰
能力,但也会减小灵敏度,降低测距范围;增大这个电阻,可以得到更远的测量距离,
但也会对周围小物体的回波信号更加敏感。一般建议选用 10MR~22MR。
当个别情况下周围有其他小物体,或干扰,测量远距离不准时,可适当减小 R2 的
值,以提高抗干扰能力。
        现象:当测量远距离时,(偶尔会)出现几十厘米到一米多的测量结果。
        解决办法:可适当减小 R2(R2 取值范围建议 5.1MR~22MR)

3.性能:

 

 

二、底层代码原理分析

1基本工作原理

        在 TRIG 管脚输入一个 10US 以上的高电平(一般建议 50US 左右),芯片(TP,TN
管脚)便可发出 8 个 40KHZ 的超声波脉冲,然后(RP,RN)检测回波信号。当检测到
回波信号后,通过 ECHO 管脚输出。

        根据 ECHO 管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间
*340m/s)/2。
当测量距离超过测量范围时,CS100A 仍会通过 ECHO 管脚输出高电平的信号,高电
平的宽度约为 33ms 。

        测量周期:当芯片通过 ECHO 管脚输出的高电平脉冲后,便可进行下一次测量,所
以测量周期取决于测量距离,当测距很近时,ECHO 返回的脉冲宽度较窄,测量周期就
很短;当测距较远时,ECHO 返回的脉冲宽度较宽,测量周期也就相应的变长。
        最坏情况下,被测物体超出测量范围,此时返回的脉冲宽度最长,约为 33ms,所
以最坏情况下的测量周期大于 33ms 即可(比如测量周期可取 50ms)。  

2代码分析

1时序图

 

 

步骤1

测距时序图表明你只需要提供一个10uS 以上脉冲触发信号。延时它所建议的50us。

所以我们得到第一段代码

void Wave_SRD_Strat(void)
{
	GPIO_SetBits(GPIOB,Trig);   //将Trig设置为高电平
	delay_us(50);               //持续大于10us触发,触发超声波模块工作
	GPIO_ResetBits(GPIOB,Trig); 
	
}

步骤2

         该模块内部将发出8 个40kHz 周期电平并检测回波。一然后(RP,RN)检测回波信号。当检测到
回波信号后,通过 ECHO 管脚输出,根据 ECHO 管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2。

(GPIO_ReadInputDataBit(GPIOF,Echo)

我们需要检测ECho输出高电平持续的时间,我们配置中断上升沿触发。当高电平结束时即检测到低电平时关闭定时器。

利用上面的距离计算公式于是我们得到下列代码

void EXTI9_5_IRQHandler(void)
{
	delay_us(10);
	
	
	if(EXTI_GetITStatus(EXTI_Line8)!=RESET)
	{
		TIM_SetCounter(TIM3,0);
		TIM_Cmd(TIM3,ENABLE);
		
		while(GPIO_ReadInputDataBit(GPIOF,Echo));  //等待低电平
		
		TIM_Cmd(TIM3,DISABLE);
		
		Distance=TIM_GetCounter(TIM3)*340/200.0;
		
		if(Distance>0)
		{
			printf("Distance:%f cm\r\n",Distance);
		}
			
		EXTI_ClearITPendingBit(EXTI_Line8);
}

物联沃分享整理
物联沃-IOTWORD物联网 » “深入解析STM32-CS100A超声波测距芯片的原理和代码”

发表评论