MSP430下的超声波测距模块

2019-07-23 16:58发布

模块叫DYP-ME007,一块红 {MOD}的电路板,引出五个引脚,显得活泼时尚。阅读其技术资料,发现真是简介明了.....VCC引脚要求接5v,不够5v经验证不能正常工作..TRIG引脚用来主机发出10us的高电平,以驱动模块内部发出超声波,超声波经过反射接受,模块内部自动处理,在ECHO引脚输出一个脉宽和距离成正比的PWM信号.OUT引脚悬空..不知道是用来做什么的...按理说可以检测发出时间和受到波形的时间,然后用声速来计算距离..但是在试验中却发现这个时间几乎是不变的..不知道为什么..大家一起研究哈.. 因为最近在做只能家居,可能各种计时器用的多,所以在这里写了一个不用计时器的.占用两个io口.#include <msp430x14x.h>int temp[2],check;int main( void ){int i;WDTCTL = WDTPW + WDTHOLD;P2DIR|=0xff;P2OUT&=~BIT1;P2DIR&=~BIT2;_DINT();BCSCTL1&=~XT2OFF; //采用xt2高频晶振do {IFG1&=~OFIFG;for(i=0xff;i>0;i--);} while(IFG1&OFIFG);_EINT();BCSCTL2|=SELM_2+SELS+DIVS_3; //mclk 与 smclk选择高频TACTL|=TASSEL_2; //ta选择smclk 8分频TACTL|=MC_1;CCR0=10;//时钟选择高频的可以提高精度P2OUT|=BIT1;while(!TACTL&BIT0);TACTL&=~(TAIFG+MC_1);P2OUT&=~BIT1; //发送完成10us的高电平
//10us作为一个驱动信号TACTL|=MC_2; //增计数模式while(!(P2IN&BIT2)); //此处千万注意,!P2IN&BIT2与!(P2IN&BIT2)的区别...运算符的优先级问题. 要不你一辈子调不成功的TACTL&=~MC_2; //收到了ECHO信号,先停止时钟,再读TAR temp[0]=TAR;if(TAR>10) //经过试验如果收不到ECHO信号,会瞬间返回一个高电平,然后持续一个相对的高电平.{//所以用if判断 使程序不进入死循环TACTL|=MC_2;while(P2IN&BIT2);TACTL&=~MC_2;temp[1]=TAR; //记录高电平结束时的TAR check=temp[1]-temp[0]; //在此处设置断点以观察结果}}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
vivilzb1985
1楼-- · 2019-07-23 22:07
这个肯定是程序中对时间的处理没处理好的,多检查下的。
vivilzb1985
2楼-- · 2019-07-24 01:36
这个计时是从发出声波开始到接到返回的声波信号结束的。
chuntian2016
3楼-- · 2019-07-24 02:47
不用计时器的怎么做的?时间需要计数的啊。。
可可球
4楼-- · 2019-07-24 03:01
感谢版主分享,超声波测距模块中心频率是多少,40K的吗
shenmu2012
5楼-- · 2019-07-24 04:38
 精彩回答 2  元偷偷看……
comeon201208
6楼-- · 2019-07-24 09:58
这个没有读取该超声波模块的时间间隔的是不可以的吧,或者是该模块自身就具备都区功能的话就不需要单片机有相关的设置即可。

一周热门 更多>