久久精品人妻一区二区蜜桃-欧美精品人妻一区二区免费视频-久久精品免费一区二区喷潮-久久精品中文闷骚内射-精品bbw-精品久久无码中文字幕-小小水蜜桃3视频高清在线观看-日韩免费一级aaa片毛太久-欧美激情肉欲高潮无码鲁大师-欧美影片一区二区三区-亚洲精品无码av无码专区一本,波多野吉衣一区二区三区在线观看,囯精品人妻无码一区二区三区99,包哟哟在线观看免费观看

產(chǎn)品分類

當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 工業(yè)傳感器 > 超聲波傳感器

類型分類:
科普知識
數(shù)據(jù)分類:
超聲波傳感器

protues超聲波傳感器:HC-SR04超聲波模塊程序原理和Proteus ISIS仿真

發(fā)布日期:2022-10-09 點擊率:550


protues超聲波傳感器:HC-SR04超聲波模塊程序原理和Proteus ISIS仿真  第1張

protues超聲波傳感器:HC-SR04超聲波模塊程序原理和Proteus ISIS仿真

一、原理介紹
遇到障礙物,能夠感應(yīng)做出反應(yīng),超聲波可以作為一種測量手段,超聲波在固體液體氣體中傳播良好,氣體中速度約為340m/s。如果知道時間,那么就可以計算出距離。利用宏晶STC89C52計算超聲波模塊HC-SR04反饋信號高電平的時間,換算成距離顯示在數(shù)碼管上(這里用573和138組合的共陰極數(shù)碼管顯示電路)。
STC89C52是國產(chǎn)宏晶的一塊8位寄存器芯片,IO準(zhǔn)雙向口,可以輸入輸出,七個中斷源,六個中斷通道,有ISP系統(tǒng),支持USB串口下載,8KB系統(tǒng)可編程下載Flash(程序儲存空間),512BRAM(數(shù)據(jù)儲存空間),27個特殊功能寄存器。
HC-SR04超聲波模塊,模塊四個引腳觸發(fā)信號Trig,回聲信號Echo,供電VCC和GND,測量周期60ms以上。當(dāng)給Trig一個10us以上的脈沖時,HC-SR04內(nèi)部自動循環(huán)發(fā)出8個40KHz的脈沖,Echo剛收到回波時置一(超出一定范圍收到的信號不夠HC-SR04置一定時器不計數(shù)),單片機定時器開始計數(shù),直到Echo沒有收到信號置零,記了TH+TL次機器周期,一個機器周期需要12個振蕩周期,由此時間就可以計算出來,再用時間X速度就可以計算出距離S。
數(shù)碼管有七段的,十四段的,十六段的,這里用的八位共陰極七段數(shù)碼管。共陰極數(shù)碼管就是共地,a,b,c,d,e,f,g,h對應(yīng)哪一段輸入高電平,哪一段LED亮,所以特定的組合可以顯示0~9數(shù)字,所以有共陰極段碼表,一組數(shù)組,顯示幾就對P0端口賦值對應(yīng)這個數(shù)值的下標(biāo)的數(shù)組元素。
HC-SR04收發(fā)信號,STC89C52計算結(jié)果,數(shù)碼管顯示,74HC573負(fù)責(zé)數(shù)碼管的段選,74LS138負(fù)責(zé)數(shù)碼管的位選。
二、仿真測試
完整的電路仿真圖如圖一所示,首先打開Protues ISIS新建一個空白文件,從庫中拾取元件,選擇IC芯片AT89C52,第一步取兩個20PF~33PF的電容一個晶振和個地信號組成晶振電路,第二步給P0口上拉一的330歐的排阻,第三步加入兩個四位共陰極(CC)七段數(shù)碼管,第四步加一個74HC573進行段選,連接數(shù)碼管的段選引腳,第五步加入一個74LS138,三位地址線控制八位位選,連接上數(shù)碼管的位選位,第六步構(gòu)造一個HC-SR04超聲波傳感器模塊,并根據(jù)程序連好線,第七步加入一個信號源和一個示波器,方便模擬測試,電路連接完成。
圖一 仿真電路
激勵源連接在HC-SR04模塊的Echo腳上,進行如圖二的設(shè)置。

圖二 激勵源設(shè)置
示波器分別接上HC-SR04的Trig和Echo腳,雙擊主控芯片,打開程序生成的hex文件,點擊運行,得到如圖三的結(jié)果。

圖三 仿真結(jié)果
首先黃色線是Trig,放大看了下,如圖四。單位5us,由圖可見四格多,這個觸發(fā)信號高電平20幾us,符合資料中Trig觸發(fā)信號高電平要保持10us以上。其次水平滾輪每20代表一格即一個單位,結(jié)合圖三和圖五,兩個發(fā)射信號水平滾輪數(shù)間隔左右,800格左右,單位為1ms,即800ms,符合程序中發(fā)射間隔800ms。最后數(shù)碼管顯示34,給Echo的方波200hz,占空比40%,即高電平2ms,12M晶振的單片機一個機器周期1us,定時器需要計數(shù)2000次,所以TH+TL=2000,根據(jù)公式S=(Th+TL)X1.7/100=34cm。綜上所述,仿真程序設(shè)計沒有問題。
圖四 觸發(fā)信號保持時間
圖五 觸發(fā)信號間隔時間
三、程序設(shè)計
 ? ?
#include "reg51.h"
#include

//常變量定義:
code unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//表:共陰數(shù)碼管 0-9 -
unsigned int ?time=0;
unsigned int ?timer=0;
unsigned long S=0;
bit flag =0;
unsigned char l_disbuff[4]={ 0,0,0,0};//顯示緩沖
unsigned char l_posit=1; //位選擇
//引腳定義:
//sbit SMG_q = P2^2; //定義數(shù)碼管陽級控制腳(千位)本例程只用到三位數(shù)碼管
sbit SMG_b = P2^2; //定義數(shù)碼管陽級控制腳(百位)
sbit SMG_s = P2^3; //定義數(shù)碼管陽級控制腳(十位)
sbit SMG_g = P2^4; //定義數(shù)碼管陽級控制腳(個位)
sbit RX = P2^1; //模塊引腳
sbit TX = P2^0;
//顯示函數(shù),參數(shù)為顯示內(nèi)容
void display()
{
P0=0x00; //
switch(l_posit){
case 0: //選擇千位數(shù)碼管,關(guān)閉其它位
//SMG_q=0;
SMG_b=1;
SMG_s=1;
SMG_g=1;
P0=table[l_disbuff[0]];
break;
case 1: //選擇百位數(shù)碼管,關(guān)閉其它位
//SMG_q=1;
SMG_b=0;
SMG_s=1;
SMG_g=1;
P0=table[l_disbuff[1]];//加入小數(shù)點要與一下
break;
case 2: //選擇十位數(shù)碼管,關(guān)閉其它位
//SMG_q=1;
SMG_b=1;
SMG_s=0;
SMG_g=1;
P0=table[l_disbuff[2]];
break;
case 3: //選擇個位數(shù)碼管,關(guān)閉其它位
//SMG_q=1;
SMG_b=0;
SMG_s=0;
SMG_g=1;
P0=table[l_disbuff[3]];
break;
}
l_posit++;
if(l_posit>3)
l_posit=0;

}
void Count(void)
{
 time=TH0*256+TL0;
 TH0=0;
 TL0=0;

S=(time*1.7)/100; ? ? //算出來是CM
 if((S>=700)||flag==1) //超出測量范圍顯示“-”
 { ?
 ?flag=0;
 ?l_disbuff[1]=10;  ? //“-”
 ?l_disbuff[2]=10;  ? //“-”
 ?l_disbuff[3]=10;  ? //“-”
 }
 else
 {
 ?l_disbuff[1]=S%1000/100;
 ?l_disbuff[2]=S%1000%100/10;
 ?l_disbuff[3]=S%1000%10 %10;
 }
}
void zd0() interrupt 1  //T0中斷用來計數(shù)器溢出,超過測距范圍
{
? ? flag=1; //中斷溢出標(biāo)志
}
void ?zd3() ?interrupt 3  //T1中斷用來掃描數(shù)碼管和計800MS啟動模塊
{
 TH1=0xf8;
 TL1=0x30;
 display();
 timer++;
 if(timer>=400)
 {
 ?timer=0;
 ?TX=1;  ? ? ? ?//800MS ?啟動一次模塊
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();
 ?_nop_();?
 ?_nop_();?
 ?_nop_();?
 ?_nop_();
 ?TX=0;
 }?
}
void ?main( ?void ?)
{ ?
? ? TMOD=0x11;  ? //設(shè)T0,T1為方式1
TH0=0;
TL0=0; ? ? ? ? ?
TH1=0xf8;  ? //2MS定時
TL1=0x30;
ET0=1; ? ? ? ? ? ? //允許T0中斷
ET1=1;  ? //允許T1中斷
TR1=1;  ? //開啟定時器
EA=1;  ? //開啟總中斷
while(1)
{
 while(!RX); //當(dāng)RX為零時等待
 TR0=1;  ? ?//開啟計數(shù)
 while(RX); //當(dāng)RX為1計數(shù)并等待
 TR0=0; //關(guān)閉計數(shù)
? ? ?Count(); //計算
}
}
? ? ? ? ? ? ?
四、實物測試
protues超聲波傳感器:HC-SR04超聲波模塊程序原理和Proteus ISIS仿真  第2張

protues超聲波傳感器:HC-SRF04超聲波測距傳感器+Proteus仿真(附源碼與仿真電路)

一、模塊介紹

1.1 模塊圖示

模塊共有四個引腳,分別是Vcc(供5V電源)、Trig(控制端,下文簡稱Tr)、Echo(接收端,下文簡稱Ec)、Gnd(地線)

2.2 產(chǎn)品參數(shù)

?

二、 工作原理(時序)

在初始狀態(tài)時,Tr引腳電平由單片機拉高,Ec引腳電平由傳感器拉低。工作時,首先由單片機將Tr引腳拉低后再給一個高電平脈沖(持續(xù)時間至少為10us),傳感器收到該脈沖信號后開始向外發(fā)射8個40KHz的方波即用來測距的超聲波。該測距超聲波以聲速(340m/s)向前傳播,在遇到障礙物時,該超聲波被反彈向回傳播,因此最終能夠被傳感器接收到,傳感器會記錄從發(fā)射超聲波到接收到超聲波的所經(jīng)歷的時間t。傳感器在收到返回的信號后,由Ec引腳輸出一個與t相同時間的高電平脈沖。此時,我們只需要通過單片機內(nèi)部定時/計數(shù)器記錄Ec引腳高電平脈沖時間即可得超聲波的傳播時間t。因此可算出傳感器到障礙物間的距離=340*(t/2)? ?(因為t是超聲波一來一回經(jīng)歷的時間,所以單程時間要除以2)。

?

三、例程(例程均為自己編寫且仿真通過)

單片機為AT89C52,工作頻率為12Mhz,最終結(jié)果通過八段數(shù)碼管顯示。

注意:因為12MHz的單片機的機器周期為1us,即計數(shù)值就等于以us為單位的時間值,因此計算公式 可以寫為? 時間=TH0*256+TL0;但如果使用的單片機工作頻率為11.0592MHz,其機器周期為1.085us,因此時間計算公式需寫為? 時間=(TH0*256+TL0)*1.085

?

四、仿真電路

?

左肩理想右肩擔(dān)當(dāng),君子不怨永遠(yuǎn)不會停下腳步!

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

protues超聲波傳感器:Proteus超聲波測距仿真電路圖+單片機源程序

大多數(shù)人感覺超聲波測距proteus仿真是無法實現(xiàn)的,雖然proteus自帶的庫有GUR03和SRF04兩種模型,但是卻與實際傳感器使用方法相差甚遠(yuǎn),即使求助度娘也很難找到簡單易懂的教程。
gur03和srf04.png (8.23 KB, 下載次數(shù): 61)
下載附件
2020-3-31 23:52 上傳
之前很多人想做超聲波測距仿真但都沒有找到很好的辦法去實現(xiàn),在軟件里沒有這樣的元件,有人用一個按鍵開關(guān)去模擬仿真,這樣仿真出來的效果,非常不好。還有人用555時基電路產(chǎn)生一個延時信號(555電路作為超聲波仿真的內(nèi)部元件),來模擬超聲波頭發(fā)送后遇到回波返射回來的這階段時間,來對單片機超聲波測距單片機系統(tǒng)進行模擬,能完成對超聲波測距模塊大致仿真,但需要繁雜的設(shè)計。
下面是一個超聲波測距模塊的proteus模型,能直接用于proteus仿真,且使用方法與實際傳感器幾乎一致,模型如下圖。樓主千辛萬苦終于完成了仿真,分享交流一下,請大家不嗇賜教!
ULTRASonIC SENSOR.png (23.56 KB, 下載次數(shù): 82)
下載附件
2020-3-31 23:56 上傳
(library文件見附件)
下面是仿真效果:
simulation.png (157.85 KB, 下載次數(shù): 77)
下載附件
2020-4-1 00:06 上傳
單片機程序代碼:#include

//生成20us的脈沖寬度的觸發(fā)信號
Trig=1;
Delay20us();
Trig=0;
//等待回響信號變高電平
while(!Echo);
TR0=1;                //啟動定時器0
//等待回響信號變低電平
while(Echo);
TR0=0;                //關(guān)閉定時器0
//返回距離值(mm)
return (SPEEDSOUND*(TH0*256.0+TL0))/2000;
}
//HCSR04初始化
void HCSR04_Initialize()
{
SPEEDSOUND=334.1+25*0.61;
Trig=0;
Echo=0;
TMOD=0x01;
}
//測距的數(shù)值排序求平均
float DistanceStatistics()
{
uchar i;
float disData;
for(i=0;i<7;i++)          //連續(xù)測距        {                disData+=MeasuringDistance();                        delay(1);                }        return disData/7.0; } void main() {        LcdInitiate();//1602初始化        HCSR04_Initialize();//HC-SR04初始化        while(1)        {                Distancevalue=DistanceStatistics()        ;                display_val((int)Distancevalue,0x45);//顯示距離值                delay(1000);                LEDRed=~LEDRed;                //測距系統(tǒng)工作指示燈                        } } 復(fù)制代碼 全部文件已打包,請自行下載(2個文件內(nèi)容一樣,推薦下載7z的): 7z: 7z壓縮版.7z (96.58 KB, 下載次數(shù): 124) 2021-4-28 19:46 上傳 點擊文件名下載附件 下載積分: 黑幣 -5 winrar: 超聲波測距(仿真原理圖+源程序).rar (102.08 KB, 下載次數(shù): 1048) 2021-5-17 18:03 上傳 點擊文件名下載附件 下載積分: 黑幣 -5

protues超聲波傳感器:Proteus超聲波測距仿真電路圖+單片機源程序_1

推薦閱讀

單片機學(xué)習(xí)筆記————proteus實現(xiàn)虛擬串口

一、環(huán)境搭建1.proteus軟件2.虛擬串口軟件3.串口助手二、繪制原理圖使用非門的原因:由于MAX232在proteus中的非符號管腳并無取反的作用。實際不需要。

發(fā)表于 2021-11-09
單片機學(xué)習(xí)筆記————proteus實現(xiàn)虛擬串口

ARM嵌入式實驗 熟悉PROTEUS電子仿真軟件的使用(LPC2138)

一、實驗?zāi)康恼莆誖PROTEUS電子仿真軟件的安裝過程;掌握RPROTEUS電子仿真軟件的使用方法;掌握創(chuàng)建電子仿真原理圖的過程;掌握為ARM芯片添加程序并仿真調(diào)試的過程。二、實驗內(nèi)容實現(xiàn)流水燈仿真實驗。安裝RPROTEUS電子仿真軟件,根據(jù)實驗原理圖創(chuàng)建一個PROTEUS原理圖,并添加相應(yīng)的元件和導(dǎo)線;使用RealView MDK集成開發(fā)環(huán)境建立并生成實現(xiàn)流水燈的代碼,為ARM芯片添加代碼,最后查看仿真運行結(jié)果。三、實驗要求了解RPROTEUS電子仿真軟件的安裝過程;能夠使用RPROTEUS電子仿真軟件建立原理圖并添加元件和導(dǎo)線;能夠設(shè)置元件及芯片的參數(shù),并為ARM芯片添加代碼;能夠檢查并修改原理圖的錯誤,并進行仿真運行

發(fā)表于 2021-08-11
ARM嵌入式實驗 熟悉PROTEUS電子仿真軟件的使用(LPC2138)

CVAVR編譯在proteus7.4中無法正確運行問題

這個問題主要會出現(xiàn)在用CVAVR來編譯的程序中。一時興起想弄個仿真,結(jié)果怎么著都不正常,AVR的端口一閃一閃的,覺得很奇怪,后來才發(fā)現(xiàn)是看門狗溢出了導(dǎo)致單片機不停的復(fù)位,把程序下到網(wǎng)上的proteus的AVR中就可以,網(wǎng)上下的proteus中的ATmega16何庫里找出來的不太一樣,就是沒明白為什么庫里調(diào)出來的不行。 后來在仿真日志中發(fā)現(xiàn)原來是看門狗一直都開著,我又沒喂狗,因此一直都把處理器復(fù)位了,這回我更郁悶,我又沒開看門狗,又沒配置fuse,為什么自己會開呢,搞了N久后,發(fā)現(xiàn)有這個可能,一個CVAVR本身編譯之后在proteus仿真中,默認(rèn)開了看門狗(實際上我并沒有開啊!!!而且在實物中,要配置fuse才能開的吧?)經(jīng)過考究后

發(fā)表于 2021-08-05

proteus7.7+Keil2仿真80C51控制流水燈

, 我們還要收集實驗所需的器件(比如多個LED發(fā)光二極管、多個阻值不同的電阻、多個不同類型的開關(guān)等). 上面的問題可以通過proteus來較好的解決.在"流水燈"實驗中, 我們可以直接在proteus中繪制原理圖. 在proteus元件庫中, 我們可以找到需要的器件, 這是很方便的.在繪制完原理圖后, 打開Keil2, 將編寫好的控制程序(.c)進行編譯, 之后定位到編譯生成的.hex文件, 進入proteus, 將80C51控制程序的路徑改為定位的位置即可.從上面使用proteus進行實驗的步驟來看, 使用軟件仿真是一種極其靈活的方式.將電路的原理圖(下圖示)繪制完畢后, 我們來看一下軟件控制部分

發(fā)表于 2021-08-04
proteus7.7+Keil2仿真80C51控制流水燈

proteus7.7+Keil2仿真80C51控制路口信號燈(無綠燈倒計時+綠燈倒計

本例的控制程序未使用80C51的(定時器)中斷功能, 而是以for循環(huán)作為延時函數(shù), 以粗略提供0.5s和1s的時延.本例的控制邏輯為①南北方向圓餅燈為紅燈時, 南北方向車輛停止在停車線內(nèi)等待. ②南北方向圓餅燈為綠燈時, 南北方向車輛(直行和左轉(zhuǎn))同時放行. ③東西方向圓餅燈為紅燈時, 東西方向車輛停止在停車線內(nèi)等待. ④東西方向圓餅燈為綠燈時, 東西方向車輛(直行和左轉(zhuǎn))同時放行. ⑤圓餅燈為黃燈時, 未越過停車線的車輛應(yīng)停車等待. ⑥南北方向和東西方向的右轉(zhuǎn)車輛在不影響交通秩序的前提下, 可不用看圓餅燈通行.本例的設(shè)計邏輯其實并不復(fù)雜. 我先將南北方向的信號控制設(shè)計好, 之后相對于南北方向設(shè)計東西方向即可.  如果非

發(fā)表于 2021-08-04
proteus7.7+Keil2仿真80C51控制路口信號燈(無綠燈倒計時+綠燈倒計

proteus7.7+Keil2仿真80C51控制路口信號燈(帶左轉(zhuǎn)信號燈)

要想設(shè)計帶左轉(zhuǎn)信號的路口信號燈, 就必須先將圓餅信號燈的控制邏輯理解透徹.在本例的設(shè)計過程中, 我設(shè)計了本路口的信號控制邏輯: 南北直行放行 -> 東西直行放行 -> 南北左轉(zhuǎn)放行 -> 東西左轉(zhuǎn)放行, 若不考慮數(shù)碼管的顯示問題, 則只需對圓餅信號燈的控制程序稍加修改即可. 但在實際應(yīng)用中, 大部分的路口都配備了數(shù)字顯示數(shù)碼管, 用于顯示直行方向紅、黃、綠燈的倒計時秒數(shù), 以提升交通通行效率——所以, 在此很有必要將倒計時顯示功能加入到設(shè)計中.我將完整的信號控制邏輯繪制為下圖.在實際編程中, 由于我一開始并未將控制邏輯完全理清, 所以編寫的控制程序是在圓餅信號控制系統(tǒng)之上經(jīng)過修修補補完成的, 多少有點碰巧的成分.

發(fā)表于 2021-08-04
proteus7.7+Keil2仿真80C51控制路口信號燈(帶左轉(zhuǎn)信號燈)

下一篇: PLC、DCS、FCS三大控

上一篇: 電氣控制線路圖控制原

推薦產(chǎn)品

更多