高電平持續時間為什麼是測距時間
① 為什麼示波器高電平比低電平持續時間久
這個問題要從被測信號源去找原因而不是示波器,示波器僅僅是一個測量設備,它無從決定你的信號特徵。
② 示波器觸發模式下怎麼讀高電平持續時間
示波器測量項里正占空比和周期乘一下就是高電平停留時間。
由於信號無時無刻都在變化,如果一股腦的都把他們顯示在示波器上,就會很亂,根本無法讓我們看清楚,從而也就無法觀察信號來解決問題。
考慮到信號大多數時候都是以某種規律周期性出現的,因此我們只要找到他重復的規律,把每一次重復疊加顯示在示波器上,信號就可以穩定觀察了。
③ 多諧振盪器高電平和低電平持續的時間分別和什麼參數有關
多諧振盪器的電路形式很多,既可以由分立元件搭建也可以用集成電路配合外圍元件構成,在沒有確定具體電路形式的情況下,只能告訴你高電平與低電平的持續時間分別與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