发 帖  
原厂入驻New
[问答] 为什么收到的数字都是1~110左右的一些奇怪的数?
2020-8-26 14:00:42  52 超声波
分享
uint32_t timer_value,wave_distance;
uint8_t s[25];
TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlclockGet());//初值装满
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x08);//触发信号
SysCtlDelay(800/3); //延时20微秒
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00);//触发信号结束
while(GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_2)==0x00);//收到回波检测到上升沿跳出
TimerEnable(TIMER0_BASE, TIMER_A);//开始计时
while(GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_2)==0x04);//回波信号结束检测到下降沿跳出
timer_value=SysCtlClockGet()-TimerValueGet(TIMER0_BASE, TIMER_A);//读取值
TimerDisable(TIMER0_BASE, TIMER_A);//停止计时
wave_distance=timer_value*344000/SysCtlClockGet();//计算距离
sprintf(s,"%d",wave_distance);//写入字符数组
UARTSend(s);//通过串口打印

为什么收到的数字都是1~110左右的一些奇怪的数,貌似只和超声波模块放的位置有一点点关联,例如模块固定,数字稍稳定。但距离根本不靠谱。。。
0
2020-8-26 14:00:42   评论 分享淘帖
9 个讨论
看不懂,是不是和你那个延时有关呢,还有你直接CCS中监测timer_valu的值,看看是不是在计算过程中损失的
2020-8-26 14:15:50 评论

举报

建议使用定时器的capture功能来抓边沿,这样会很准确。
2020-8-26 14:22:04 评论

举报

Evawang 发表于 2020-8-26 19:29
建议使用定时器的capture功能来抓边沿,这样会很准确。

之后改成这样了。。问题解决 还是很感谢~~
2020-8-26 14:33:56 评论

举报

Evawang 发表于 2020-8-26 19:29
建议使用定时器的capture功能来抓边沿,这样会很准确。

正好在做电机测速,         
  //GPIOE3作为脉冲1信号的输入
                SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
                GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_DIR_MODE_IN);
                GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_3,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU );

while(1)
    [//当读入的计数脉冲信号没有翻转时,始终读取该信号
                while(GPIOPinRead(GPIO_PORTE_BASE,GPIO_PIN_3)!=status)
                [   ]
                                cnt1++;
                   status = 1-status;
//若信号翻转,则计数加1,同时改变status为当前状态值,等待下
//一次翻转,这样得以保证每一个上升沿和下降沿都被计数。
  ]

但是发现GPIOPinRead(GPIO_PORTE_BASE,GPIO_PIN_3)读回来的全部都是0,结果就内层的while里面出不来了,没预想的一样能记录脉冲个数了。(光编是有脉冲发回来的。)
我是想知道这边为什么会读不出来。是我在哪里的操作的问题吗?
2020-8-26 14:53:55 评论

举报

hgq1133 发表于 2020-8-26 20:01
正好在做电机测速,         
  //GPIOE3作为脉冲1信号的输入
                SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

看上去程序没问题,跳不出里面的while是因为你条件没达到吧
2020-8-26 15:02:04 评论

举报

ljmlvmd 发表于 2020-8-26 20:09
看上去程序没问题,跳不出里面的while是因为你条件没达到吧

不是,写的GPIO读管脚一致读不到变化。后来改用捕捉写了程序。 但还是有疑惑没解决
2020-8-26 15:19:45 评论

举报

hgq1133 发表于 2020-8-26 20:27
不是,写的GPIO读管脚一致读不到变化。后来改用捕捉写了程序。 但还是有疑惑没解决

读管教没有变化?你测试下你IO的配置,初始化就没做好
2020-8-26 15:29:16 评论

举报

问一下,您是怎么解决的,我也遇到了和你一样的问题。
2020-8-26 15:41:22 评论

举报

shan812 发表于 2020-8-26 19:41
之后改成这样了。。问题解决 还是很感谢~~

您好,能贴出您的超声波测距程序吗。我想学习下,谢谢您了
2020-8-26 15:50:38 评论

举报

只有小组成员才能发言,加入小组>>

1454个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表