一、基础知识
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输出高电平持续的时间,我们配置中断上升沿触发。当高电平结束时即检测到低电平时关闭定时器。文章来源:https://www.toymoban.com/news/detail-440494.html
利用上面的距离计算公式于是我们得到下列代码文章来源地址https://www.toymoban.com/news/detail-440494.html
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);
}
到了这里,关于stm32-CS100A 超声波测距芯片原理及代码解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!