OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6866|回复: 10

求助关于超声波测距的问题

[复制链接]

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
发表于 2014-7-24 09:42:59 | 显示全部楼层 |阅读模式
5金钱
这两天在弄超声波壁障,根据51程序移植到32上,但是每次调试都卡在while(!ECHO); 语句 。 模块是新买的 应该没问题 求助大神如何解决 实在没办法了。

[mw_shl_code=c,true]void bizhang_init(void) { RCC->APB2ENR |= 1<<5; //开启GPIOD时钟 GPIOD->CRH &= 0xFFFFFF00; GPIOD->CRH |= 0x00000043; // PD8 推挽输出(TRIG) PD9 浮空输入 (ECHO) } void Triger(void) { TRIG=0; delay_us(10); TRIG=1; delay_us(10); TRIG=0; } float calculate_d(void) { float d=0; TIM2->CNT = 0; while(!ECHO); TIM2->CR1|=0x01; //使能定时器2 while(ECHO); TIM2->CR1&=~(0x01); //失能定时器2 d = ( TIM2->CNT / 2000.0) * 340.0 ; d /= 2.0; return d; } float bizhang(void) { float t; Triger(); t=calculate_d(); return t; } void TIM2_Int_Init(u16 arr,u16 psc) {      RCC->APB1ENR|=1<<0;    //TIM2时钟使能          TIM2->ARR=arr;      //设定计数器自动重装值        TIM2->SC=psc;                //   TIM2->DIER&=~(1<<0);   //允许更新中断       //   TIM2->CR1|=0x01;    //使能定时器2      MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2     }  int main(void) { Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600); //串口初始化为9600 delay_init(72); //延时初始化 motor_init(); TIM3_PWM_Init(65535,0); //TIM3用于产生电机PWM波 TIM2_Int_Init(65534,35999); bizhang_init();         WM_ZKB_LEFT=30000;         WM_ZKB_RIGHT=30000;      IN1 = 1;      IN2 = 0;      IN3 = 1;     IN4 = 0; while(1) { if(bizhang()<0.3) bizhang_process();         } } [/mw_shl_code]


智能小车.rar

2.3 MB, 下载次数: 400

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2013-12-9
在线时间
17 小时
发表于 2014-7-24 10:07:05 | 显示全部楼层
while(!ECHO);
22     TIM2->CR1|=0x01;    //使能定时器2
23     while(ECHO);
完全一个死循环!!!!!!
https://yixinelectric.taobao.com/
QQ:562463654
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
 楼主| 发表于 2014-7-24 10:22:28 | 显示全部楼层
回复【2楼】chen_sir:
---------------------------------
数据手册上说: 
只需要在 Trig/TX 管脚输入一个 10US 以上的
高电平,系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回
波信号。ECHO管脚高电平持续时间 即为超声波来回时间。 也就是触发TRIG后 ECHO会由低到高 然后持续一段时间 最后产生一个下降沿。

就是根据这个时序写的,应该不会死的啊
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
 楼主| 发表于 2014-7-24 10:26:58 | 显示全部楼层
超声波模块 US-100 时序图




回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
 楼主| 发表于 2014-7-24 11:43:26 | 显示全部楼层
回复【2楼】chen_sir:
---------------------------------
大哥,知道如何解决么
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-7-24 14:00:39 | 显示全部楼层
其实你可以用输入捕获功能,另外用一个IO口出发超声波模块就行
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
 楼主| 发表于 2014-7-24 14:06:44 | 显示全部楼层
回复【6楼】红木甲板:
---------------------------------
有没有代码参考下? 输入捕获不是测量脉宽的吗?
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-7-24 15:39:32 | 显示全部楼层
回复【7楼】Mr.kevin:
---------------------------------
你看时序图的第三条线,高电平时间其实就是声波来回的时间,通过输入捕获功能可以很方便得到这个值,你捕获高电平时间就好了
代码直接参考原子输入捕获例程,你加个计算距离的代码就行
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-3-23
在线时间
0 小时
 楼主| 发表于 2014-7-24 18:15:16 | 显示全部楼层
回复【8楼】红木甲板:
---------------------------------
按照你说的方法能测距了,但是不太准,不知道为什么,谢谢了!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-5-25
在线时间
0 小时
发表于 2015-5-25 10:32:17 | 显示全部楼层
回复【8楼】红木甲板:
---------------------------------
请问要是测4个以上的超声波怎么办呢?输入捕获的通道不够了啊
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2015-5-25 11:16:16 | 显示全部楼层
回复【10楼】纠缠state:
---------------------------------
一个定时器有4个通道呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 01:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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