高电平持续时间为什么是测距时间
① 为什么示波器高电平比低电平持续时间久
这个问题要从被测信号源去找原因而不是示波器,示波器仅仅是一个测量设备,它无从决定你的信号特征。
② 示波器触发模式下怎么读高电平持续时间
示波器测量项里正占空比和周期乘一下就是高电平停留时间。
由于信号无时无刻都在变化,如果一股脑的都把他们显示在示波器上,就会很乱,根本无法让我们看清楚,从而也就无法观察信号来解决问题。
考虑到信号大多数时候都是以某种规律周期性出现的,因此我们只要找到他重复的规律,把每一次重复叠加显示在示波器上,信号就可以稳定观察了。
③ 多谐振荡器高电平和低电平持续的时间分别和什么参数有关
多谐振荡器的电路形式很多,既可以由分立元件搭建也可以用集成电路配合外围元件构成,在没有确定具体电路形式的情况下,只能告诉你高电平与低电平的持续时间分别与RC的充放电时间和开关电路的(比较)翻转阈值有关。
④ 51单片机 HC-SR04超声波测距 我写的C语言代码,请问
1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。
2、例程:
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*位定义*/
sbitCHUFA=P0^1;//位定义超声波触发端(10us以上高电平触发)
sbitJIESHOU=P0^3;//接收端(接受高电平)
sbitBEEP=P2^0;//蜂鸣器
sbitOUT0=P3^2;//外部中断0
ucharJS_FLAG;//接收标志
uintCF_TIME,t0,t1,shu;
/*函数声明*/
voidtimer0();
voidint0();
voiddisplay(uint);
main(){
CHUFA=0;//初始化拉低触发端和接收端电平
JIESHOU=0;
JS_FLAG=0;
CF_TIME=15;//初始化触发时间(大于10us)
TMOD=0x11;//定时器方式选择
EA=1;//开总中断
ET0=1;//开定时器0中断
EX0=1;//开外部中断0
IT0=0;//外部中断选择下降沿触发
//JIESHOU=1;
while(1){
OUT0=JIESHOU;//外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0
if(JS_FLAG==0){//如果没有接收到高电平则触发
CHUFA=1;
while(CF_TIME--);//10us以上高电平触发传感器
}
if(JIESHOU==1){
TR0=1;//如果接收端收到高电平则启动定时器
JS_FLAG=1;//并且标志位置1
BEEP=0;//蜂鸣器响
}
display(t1);//显示测量时间(秒)
}
}
/*定时器0中断程序*/
voidtimer0()interrupt1{
TH0=(65536-10000)/256;//装初值10ms
TL0=(65536-10000)%256;
t0++;//每进入一次中断t0加1
}
/*外部中断0中断程序*/
voidint0()interrupt0{
TR0=0;//一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0
JS_FLAG=0;//接收标志位置0
BEEP=1;//关闭蜂鸣器
t1=t0*10/1000;//测量时间为进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位
t0=0;//t0清零
}
/*数码管显数函数*/
voiddisplay(uintshu){
//数码管显示函数
}
⑤ hc-sr04,接收到超声波,echo为低电平吗最好解释一下高低电平变化。还有低电平怎么来的请看问题详细
echo的高电平持续时间是发送超声波到接收到回波的间隔时间。平时都无电平或低电平。
⑥ 基于stm32的多功能时钟4——超声波测距
hello,读者们好!
前两章,主要讲述了环境参量的测量获取,想必大家都有些许收获。在这一章中,我将介绍如何利用超声波来测距。在现实生活中,利用超声波测距的应用很多,广泛应用于机器人避障 、物体测距 、液位检测 、公共安防、停车场检测等领域。
本次测距使用的超声波为HC-SRO4,该模块共有4个引脚,分别是两个电源引脚VCC和GND,一个触发控制信号输入(TRIG)和一个回响信号输出( ECHO),性能稳定,测度距离精确,模块高精度,盲区小。
那么,超声波模块测距原理是:首先,给Trig引脚至少10us的高电平信号,检测Echo是否有信号返回,若有信号返回,则Echo发出高电平。高电平持续的时间就是超声波从发射到返回的时间,所以测试距离为(高电平时间*声速)/2。下面,就是超声波模块的时序图。
本模块使用方法简单,配合stm32的定时器TIM4,一个控制口发一个10us以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器TIM4计时,当此口变为低电平时就可以读定时器TIM4的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值。
(1)配置超声波的引脚
/*初始化超声波引脚:Trig:PB0,Echo:PB1*/
void ultra_gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*使能GPIO的RCC时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/*配置Trig引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//Trig
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*配置Echo引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//Echo
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
由于PB0接超声波Trig引脚,所以选择推挽输出模式,PB1接超声波Echo引脚,所以选择浮空输入模式。这样,超声波模块引脚就配置完成。
(2)定时器TIM4初始化
/*定时器4的NVIC配置*/
void tim4_nvic_config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级为0
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;//子优先级为0
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
/*定时器4初始化*/
void tim4_config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
tim4_nvic_config(); //配置NVIC
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//开启时钟
TIM_DeInit(TIM4); //定时器4复位
TIM_TimeBaseInitStruct.TIM_Period = 1000-1; //自动重装载寄存器值
TIM_TimeBaseInitStruct.TIM_Prescaler = 72-1; //时钟预分频数
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //采样分频
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct); //初始化TIM4
TIM_ClearFlag(TIM4, TIM_FLAG_Update); //清除溢出中断标志
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM4, DISABLE);
}
由于考虑到测距时的距离过大,计数会溢出,出现不准确的现象,这里需要用到长计时,并且使用TIM4中断对计时变量进行自增,所以需要配置NVIC。这里设置的中断优先级比较高,因为测距不能被其他中断打断,否则可能出现数据不准的现象,或是数据抖动现象。其次,设置TIM4的中断溢出时间为1ms,此时还不能开启定时器TIM4。
(3)编写定时器中断程序
/*定时器4中断服务函数*/
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4 ,TIM_IT_Update)!=RESET)
{
TIM4_NUM++;//长计时变量
}
TIM_ClearITPendingBit(TIM4 ,TIM_FLAG_Update);
}
为避免测量的距离过长,这里我们需要进行长计时,只需在中断函数里这样操作:TIM4_NUM++,同时记得在每次测量距离前对TIM4_NUM复位即可。
(4)编写超声波测距相关函数
/*启动超声波测距*/
u16 ultra_measure(void)
{
u16 distance;
TRIG_H;
delay_us(20);
TRIG_L;
while(ECHO==RESET);
TIM_SetCounter(TIM4,0);
TIM4_NUM = 0;
TIM_Cmd(TIM4, ENABLE);
while(ECHO!=RESET);
TIM_Cmd(TIM4, DISABLE);
distance = (u16)ultra_get_distance();
return distance;
}
/*获取超声波传播时间,间接计算出距离*/
float ultra_get_distance(void)
{
u32 time;
float distance;
time = TIM4_NUM*1000;
time += TIM_GetCounter(TIM4);//获取超声波测距总时间
TIM4->CNT = 0; //定时器复位
distance = (float)time*0.017;
return distance;
}
这里,需要查阅超声波手册中的时序图,方可编写程序。首先,向给trig 发送至少10 us的高电平脉冲,然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照测试距离=(高电平时间*声速)/2 就可以算出超声波到障碍物的距离。
这里我们测算的距离:distance = (float)time*0.017,计算的距离单位为cm。
(5)主函数调用测距函数
最后,在主函数里,调用测距函数即可获取到距离值,再通过lcd显示函数,显示出距离值。
value = ultra_measure();
lcd_display_string(0,32,"测量距离");
lcd_display_num_m(3, 48, value/1000);
lcd_display_num_m(3, 56, (value%1000)/100);
lcd_display_num_m(3, 64, (value%100)/10);
lcd_display_num_m(3, 72, value%10);
通过本章的介绍,相信你对于超声波测距应该了解不少了吧,相信你也可以做出来的。通过不断改变超声波和障碍物之间的位置,距离值会随之改变,是不是很有趣啊~
到目前为止,多功能时钟已经具备了显示时间、测量温湿度、测量空气质量以及测距的功能,但我们的LCD显示部分还没有优化。在下一章中,我将带着大家完成多功能时钟人机交互界面(简称UI)的开发,到时候,我们的界面就会变得比较美观了。敬请期待~
⑦ HC-SR04超声波测距模块里的高电平时间就是超声波在空气中的传播时间怎么理解
因为收到出发信号的时候,模块已经记录了触发时候的时间,当收到回波时候马上输出回响信号,宽度就是发出脉冲的时间与收到回响信号的时间差。
⑧ 舵机的高电平时间问题
先说你得信号用词不对,
舵机
的信号称为PPM。不是PWM,然后我个人也不是太赞成用PWM控制舵机,浪费。而具体对你得问题,要看你是什么舵机,但至少你牌子、类型说一下啊。
还有,舵机(不管是哪种)不要瞎用手拧,瞎拧的话容易打坏齿轮。
从模拟的说起:如果是模拟舵机,电路上驱动电机的PWM其实就是PPM型号和电路本身的震荡电路的斩波结果,自然,一旦外部的PPM信号没有了,驱动电机的PWM也就没有了,舵机就随便拧了。
高阻态
、高电平、
低电平
时都一样的反应,
没信号就随便拧。
如果是
数字舵机
(按你的描述,你的舵机是数字舵机),这就要看人家单片机里的程序是怎么做的了。比如我手头上的,就属于上电没有位置信号时随便拧,给过信号就按信号的位置定死。
但数字舵机只要给出一个完整的信号,舵机就按这个信号定位置,就是说:假如给舵机一个1.5ms宽的高电平脉冲(中立位置),只给一个,然后再没有信号了,但舵机里的单片机已经记住这个1.5ms,他就转到中立位置上,除非再有信号,不然就一直保持中立位置。
数字舵机对于高阻态、低电平就相当于没信号,情况分析同上。
然后,对于高电平,因为舵机记得就是PPM信号的高电平时间,所以如果你给一个长时间的高电平,在最开始,它会以为这是一个信号,然后就计时,如果超出限制(比如是2.2ms)有的舵机就当做是无效信号,按上一次有效的处理,有的就做限制保护,只按2.2ms处理。之后因为你一直没有信号的变化,自然它也不会记时间,剩下的情况与前面一样。
一般模拟舵机用三极管做
H桥
电路,这和它的电路特性有关,用三极管更容易调速。而数字舵机则用
mos管
,拧数字舵机时,电机相当于发电机,因为mos管内部自带的防反流二极管的作用,电机2端此时相当于短路,电机工作在4
象限
,即刹车状态。所以,数字舵机不容易拧动,自然是更容易打齿
⑨ 为什么里面会说"高电平的持续时间就是超声波从发射到反回的时间"难以理解
这个看具体的电路。
从这个时序图来说,严格上是不对的。回波时间应该从发射脉冲开始计算。
⑩ HC-SR04超声波测距计算距离公式求解
因为当给TRIG端一个触发信号的时候,ECHO端的电平会被自动拉高,直到发出的波接触到物体然后返回时,ECHO变为低电平,ECHO从上升沿到下降沿的时间就是两倍的物体距离,所以公式里要除以2