【CH579M-R1】+ 串行通讯模式下的超声波距离检测
本帖最后由 jinglixixi 于 2020-10-13 21:52 编辑<p>前面介绍过,CH579M 有4组独立的UART,利用好它并增强系统的功能。这里就再介绍一种它的用法。</p>
<p>JSN-SR04T-V3.0 是一款一体化超声波测距模块,它有多种使用模式,其中最主要的有2种,即触发方式测距和通讯方式测距。</p>
<p>所谓“通讯方式测距”,就是通过串口向测距模块发送一个采集指令,即可接收到模块反馈来的</p>
<p>十六进制数据,经转换即可以十进制的形式进行显示。</p>
<p>该测距模块的收发界面如图1所示,其中“55”是模块的采集指令,而接收到的则为4字节的反馈信息。</p>
<p></p>
<p>图1 收发界面</p>
<p> </p>
<p>以“FF 00 E6 E5”为例,其中的FF为引导码,E5为校验码(校验码E5=FF+00+E6),00 E6则为检测值(00 E6 = 230),即检测值为230,单位为mm。</p>
<p>若改为OLED屏显示,则主程序为:</p>
<pre>
<code class="language-cpp">int main()
{
UINT8 len,m;
UINT16 n;
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
GPIOB_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );
GPIOB_ModeCfg( GPIO_Pin_16, GPIO_ModeIN_PU );
GPIOA_ModeCfg( GPIO_Pin_7, GPIO_ModeIN_PU );
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"CH579M TEST",16);
OLED_ShowString(0,2,"OLED HC-04",16);
UART1_SendString( TxBuff, sizeof(TxBuff)-1);
mDelaymS(200 );
UART1_SendString( COM, sizeof(COM) );
while(1)
{
len = UART1_RecvString(RxBuff);
if( len==4 )
{
OLED_ShowString(0,2,"L= mm",16);
m=RxBuff+RxBuff+RxBuff;
if((RxBuff==0xff)&&(RxBuff==m))
{
n=RxBuff*256+RxBuff;
OLED_ShowNum(24,2,n,4,16);
}
}
mDelaymS(1000 );
UART1_SendString( COM, sizeof(COM) );
}
}</code></pre>
<p> </p>
<p>图2 运行效果图</p>
<p> </p>
<p>此外,如使用上位机的专用软件来收发,则可得到图3所示的效果。</p>
<p></p>
<p>图3 测距值得波形显示</p>
<p>感谢分享,测量精度还是不错的,希望以后能够多分享一下经验~有开发板图片更好~</p>
w494143467 发表于 2020-10-13 11:46
感谢分享,测量精度还是不错的,希望以后能够多分享一下经验~有开发板图片更好~
<p>有时间补一个</p>
<p>图已添加</p>
<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&goto=findpost&pid=3016360&ptid=1144226" target="_blank"><font color="#999999">w494143467 发表于 2020-10-13 11:46</font></a></font> 感谢分享,测量精度还是不错的,希望以后能够多分享一下经验~有开发板图片更好~</blockquote>
</div>
<p>哈哈,上张双色双味儿的,不用改程序只需换个屏。</p>
<p></p>
<p>这样一发一收好把握,如果是发一次自动采集命令,模块每隔一段时间发一次距离,这时候就该考虑下是否粘包或者分包情况了</p>
<p> </p>
RCSN 发表于 2020-10-13 22:05
这样一发一收好把握,如果是发一次自动采集命令,模块每隔一段时间发一次距离,这时候就该考虑下是否粘包或 ...
<p>是这样</p>
<p><a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html" target="_blank">沁恒CH579M-R1开发板测评</a></p>
<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html">https://bbs.eeworld.com.cn/thread-1140005-1-1.html</a></p>
<p>楼主手里好玩的模块真不少</p>
littleshrimp 发表于 2020-10-23 21:24
楼主手里好玩的模块真不少
<p>也不太多,家底都抖搂出来了,该攒银子再续点了!</p>
<p>您好,请问如果使用ch579m直接进行驱动普通两目的超声波传感器,驱动程序该如何写呢,目前我卡在了如何进行测量接收回波的时间。期待回复,先谢谢啦</p>
554585 发表于 2020-12-17 23:37
您好,请问如果使用ch579m直接进行驱动普通两目的超声波传感器,驱动程序该如何写呢,目前我卡在了如何进行 ...
<p>这就需要学习定时/计时器的捕获功能了(如怎样使用上下沿捕捉计时器的时间、规定某个引脚为捕捉引脚等),用计时差来换算出距离值,我嫌它麻烦已舍弃了这种传感器。</p>
页:
[1]