一个关于超声波测距模块程序模块的程序 求助

查看: 2720|回复: 10
求助关于超声波测距的问题
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
这两天在弄超声波壁障,根据51程序移植到32上,但是每次调试都卡在while(!ECHO); 语句 。 模块是新买的 应该没问题 求助大神如何解决 实在没办法了。
[C] 纯文本查看 复制代码void bizhang_init(void)
RCC-&APB2ENR |= 1&&5;
//开启GPIOD时钟
GPIOD-&CRH &= 0xFFFFFF00;
GPIOD-&CRH |= 0x;
// PD8 推挽输出(TRIG) PD9 浮空输入 (ECHO)
void Triger(void)
delay_us(10);
delay_us(10);
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 ;
float bizhang(void)
t=calculate_d();
void TIM2_Int_Init(u16 arr,u16 psc)
&& & RCC-&APB1ENR|=1&&0;&& &//TIM2时钟使能&& &
&&& &TIM2-&ARR= &&& &//设定计数器自动重装值& &
&TIM2-&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();
bizhang_init();
&&&&&&&&PWM_ZKB_LEFT=30000;
&&& &&&&PWM_ZKB_RIGHT=30000;
if(bizhang()&0.3)
bizhang_process();
13:22 上传
点击文件名下载附件
2.3 MB, 下载次数: 338
主题帖子精华
新手入门, 积分 136, 距离下一级还需 -116 积分
在线时间13 小时
while(!ECHO);
22 &&&&TIM2-&CR1|=0x01;&&&&//使能定时器2
23 &&&&while(ECHO);
完全一个死循环!!!!!!
https://yixinelectric.taobao.com/
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
回复【2楼】chen_sir:
---------------------------------
数据手册上说:&
只需要在&Trig/TX&管脚输入一个&10US&以上的
高电平,系统便可发出&8&个&40KHZ&的超声波脉冲,然后检测回
波信号。ECHO管脚高电平持续时间&即为超声波来回时间。&也就是触发TRIG后&ECHO会由低到高&然后持续一段时间&最后产生一个下降沿。
就是根据这个时序写的,应该不会死的啊
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
超声波模块 US-100 时序图
9ead72e3f360efd8c31bbe_374.png (0 Bytes, 下载次数: 43)
22:54 上传
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
回复【2楼】chen_sir:
---------------------------------
大哥,知道如何解决么
主题帖子精华
中级会员, 积分 367, 距离下一级还需 133 积分
在线时间46 小时
其实你可以用输入捕获功能,另外用一个IO口出发超声波模块就行
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
回复【6楼】红木甲板:
---------------------------------
有没有代码参考下?&输入捕获不是测量脉宽的吗?
主题帖子精华
中级会员, 积分 367, 距离下一级还需 133 积分
在线时间46 小时
回复【7楼】Mr.kevin:
---------------------------------
你看时序图的第三条线,高电平时间其实就是声波来回的时间,通过输入捕获功能可以很方便得到这个值,你捕获高电平时间就好了
代码直接参考原子输入捕获例程,你加个计算距离的代码就行
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间0 小时
回复【8楼】红木甲板:
---------------------------------
按照你说的方法能测距了,但是不太准,不知道为什么,谢谢了!
主题帖子精华
新手入门, 积分 28, 距离下一级还需 -8 积分
在线时间0 小时
回复【8楼】红木甲板:
---------------------------------
请问要是测4个以上的超声波怎么办呢?输入捕获的通道不够了啊
主题帖子精华
中级会员, 积分 367, 距离下一级还需 133 积分
在线时间46 小时
回复【10楼】纠缠state:
---------------------------------
一个定时器有4个通道呢
Powered by单片机超声波模块程序求助 - 大学生电子设计竞赛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
单片机超声波模块程序求助
22:35:58  
各位大大,本人单片机初学者一枚,遇到一个单片机控制两个超声波模块测距的问题,一直不能解决,希望大大么可以帮助下。。。感激不尽。
15:17:07  
22:42:31  
我也正在纠结
15:02:53  
不知道你用的是什么单片机,我用的是430,用捕获模式很容易就可以写出来。其他单片机的话可以利用定时器和外部中断来写,也是可以的。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
关于超声波模块测距离的问题我的程序里有一个time=TH0*256+TL0;我就是不知道为什么要乘以256,后面有写到s=time*0.0172;为什么要乘以0.0172我用的是hc-sr04超声波模块.
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
*256是16位计数器的高8位和低八位之分.恢复成16位数的时候要*256.*0.0172,根据超声的声速,单片机的频率,得出来的一个系数.
这个系数是怎么算出来的啊
点数代表的时时间,这个时间间隔要看单片机的速度。时间*声速/2=距离。所以你先要弄清楚你的单片机每个周期的时间。或者说你这个定时器一个周期的时间。
我想问下为什么超声波的程序里面,接受成功的标志位不是用定时器的标志位啊,而是自己定义的
您有没有安卓手机与单片机蓝牙通讯教程啊!我想学啊
标志位肯定是自己定义的。这种现成的教程应该是不会有的。基础的东西好好学学。
为您推荐:
其他类似问题
扫描下载二维码查看: 2148|回复: 5
求助,HC-SR04超声波模块上单片机的内部程序
我最近在做超声波模块,但是老师想要把模块上的单片机去掉,在外部接串口,
或者有哪位大哥有HC-SR04超声波模块上单片机的内部程序吗?能不能发给我,或者联系我QQ:<font color="#ff6723,谢谢
请问你做出来了吗?
单片机超声波测距原理图及程序,详情请打开:
超声波测距原理图
回帖助人的奖励!
在淘宝上有专门的串口超声波模块US-100
不明的吃果群众,求大神解答
& && && &&&----啊哈哈这是小尾巴
Powered by一个关于超声波模块的程序 求助 _ 太原宠物网
一个关于超声波模块的程序 求助
只能帮你到这里?还是测量值不动?超声波测距程序是两部分组成,得到是测量的问题。而不是笼统得说
然后期待“大神”分分钟给你改程序然后就可以用了。你这个程序是哪里不对:超声波程序(外部中断+定时器)能理解初学者迫切希望解决程序问题?编译错误。手头没板子,还是串口通信的问题?你应该根据具体问题给出自己分析?还是串口显示乱码,串口程序。但你有没有想过你 问问题的方式 有问题
将TRIG 设置为低电平
P0INP &= ~0x80;/);
P0IF = 0; asm(&
void Delay_1us(uint microSecs););
H1=T1CNTH;);); &#47.c****************************#include &ulloop--)
Delay_10us(100)。
void Init_UltrasoundRanging()
P1DIR = 0x08;nop&nop&
distance=(float)data*340/ uchar H3;
__interrupt void P0_ISR(void);
Delay_10us(60000);
asm(&quot,用了31个nop*/设置系统主时钟频率为32MHZ
P0IFG = 0; asm(&P0_7 中断使能
PICTL |= 0x01;ulloop&/nop&/); asm(& asm(& 等待晶振稳定
CLKCONCMD &= ~0x47;nop&自动重装模式(0x0000-&
Delay_1s(2),中断有效;nop&
/); asm(&* 320NOPs == 10usecs 因为延时还有计算的缘故;
data=256*H2+L2-L1-256*H1; asm(&/
Init_UltrasoundRanging(); P0IE = 1;
for( ulloop=1000;).h&quot、下拉 有初始化的左右
P0IEN |= 0x80;);
T1CNTH=0; asm(&/ asm(&此时的CLKCONSTA为0x88;nop&
void UltrasoundRanging(uchar *ulLoadBufPtr)
SysClkSet32M();nop&/
if(P0IFG&0x080)
T1CTL = 0x09;
} #pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
void SysClkSet32M();nop& extern
uchar L1;需要延时10us以上的高电平
void Init_UltrasoundRanging();
for(yy = 310;),
void Delay_10us(uint n);
T1CNTL=0; uchar L3;
*ulLoadBufPtr++=T1CNTH;); asm(&ioCC
extern uchar RG;tt&
LoadRegBuf[3]=T1CNTH;/);); asm(& nop&/
*ulLoadBufPtr++=T1CNTL;设置P0_7引脚;
for(tt = asm(&nop& asm(&);
L1=T1CNTL; asm(& #endif×××××××××××××××××××××××××××××××××××××××××××/
asm(&nop&);nop& asm(&nop&
T1CTL = 0x00; #include & uchar H2#ifndef ULTRASOUND_H #define ULTRASOUND_H
#define uchar unsigned char #define uint unsigned int #define TRIG P1_3
T1CTL = 0x09;nop&
void Delay_1s(uint n);
{asm(& asm(&外部ECHO反馈信号
P0IFG = 0;
asm(&quot。
void Delay_1us(uint microSecs) {
while(microSecs--)
uchar H1;nop&); extern
uchar LoadRegBuf[4];
Delay_10us(60000);} }
void Delay_1s(uint n) {
uint ulloop=1000;););通道0;* 32 NOPs == 1 usecs 因为延时还有计算的缘故;
H2=T1CNTH;0;U asm(&ioCC2530;
/tt--);全局数据.h&
LoadRegBuf[2]=T1CNTL;
T1CNTH=0;nop&quot,用以存储定时计数器的值;nop&0;10000;/);nop&nop&nop&nop&/);nop&);tt&/
} } void Delay_10us(uint n) { / asm(&
Delay_1us(10); asm(&quot,下降沿触发中断
IEN1 |= 0x20;/
EA = 0;nop& void Delay(uint n);)!ECHO); asm(&
//U uchar L2;);nop&);nop&
Delay_1s(1).h&);/ asm(&
} ××××××××××××××××××××××××××××××××××××××#include &×××××××××××U asm(&
/nop&nop&quot,用了310个nop*/tt++); asm(&
/nop&0为输入1为输出
设置TRIG P1_3为输出模式
TRIG=0; void main(void) {
UltrasoundRanging(LoadRegBuf);
for(tt = 0;/);
/0xffff).h&nop&yy& uchar H1;
} void SysClkSet32M()
CLKCONCMD &= ~0x40。即普通时钟和定时器时钟都是32M;
L2=T1CNTL;n; asm(& #include &);
/ uchar L1; asm(&nop& extern
asm(&); extern
uchar H2;清中断标志
EA=1;);有上拉;
uchar LoadRegBuf[4],32分频;); extern
void UltrasoundRanging(uchar *ulLoadBufPtr);//
#define ECHO P0_7
/yy--);nop&设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40);NOP&
T1CNTL=0; ex/)
是的,应该是超时清零的一个动作。
是的,应该是超时清零的一个动作。
你连用什么芯片都没有,怎么写程序。
能理解初学者迫切希望解决程序问题。但你有没有想过你 问问题的方式 有问题? 超声波测距程序是两部分组成:超声波程序(外部中断+定时器),串口程序。 你这个程序是哪里不对?编译错误?还是串口显示乱码?还是测量值不动?你应该根据具体问题...
#ifndef ULTRASOUND_H #define ULTRASOUND_H #define uchar unsigned char #define uint unsigned int #define TRIG P1_3 //P1_2 #define ECHO P0_7 //P0_1 extern uchar RG; extern uchar H1; extern uchar L1; extern uchar H2; extern uchar ...
去你学校图书馆 都交了钱的 中国知网
你好!你显示用数码管还是液晶呢?原理图发一下
去了解一下CAN通信的方式就好了。
没有硬件,没有技术要求,别人实在没有办法给你做的。再说这种东西,还是自己做好些。
返回主页:
本文网址:http://www.0351pet.cn/view-.html}

我要回帖

更多关于 us 100超声波模块程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信