Ebben az oktatóanyagban egy áramkört fogunk megvitatni és megtervezni a távolság mérésére. Ezt az áramkört a „HC-SR04” ultrahangos érzékelő és az AVR mikrovezérlő összekapcsolásával fejlesztették ki. Ez az érzékelő az „ECHO” nevű technikát használja, amelyet olyankor kap, amikor a hang visszaverődik egy felülettel való ütés után.
Tudjuk, hogy a hangrázkódások nem tudnak behatolni a szilárd anyagok között. Tehát az történik, amikor egy hangforrás olyan rezgéseket generál, amelyek a levegőben 220 méter / másodperces sebességgel haladnak. Ezeket a rezgéseket, amikor találkoznak a fülünkkel, hangként írjuk le. Mint korábban említettük, ezek a rezgések nem tudnak átmenni szilárdan, ezért amikor olyan falfelülettel ütköznek, akkor ugyanolyan sebességgel visszaverődnek a forráshoz, amelyet visszhangnak hívnak.
A „HC-SR04” ultrahangos érzékelő a visszhang alapján a távolsággal arányos kimeneti jelet ad. Az érzékelő itt ultrahangos tartományban generál hangrezgést, amikor kiváltja, majd megvárja a hangrezgés visszatérését. Most a paraméterek, a hangsebesség (220 m / s) és az idő mire a visszhang eljut a forrásig, a távolsággal arányos kimeneti impulzust biztosít.
Amint az ábrán látható, először el kell indítanunk az érzékelőt a távolság mérésére, vagyis egy HIGH logikai jelet az érzékelő kioldócsapjánál 10uS-nál hosszabb ideig, ezt követően az érzékelő hangrezgést küld, visszhang után az érzékelő biztosítja egy jel a kimeneti csapnál, amelynek szélessége arányos a forrás és az akadály közötti távolsággal.
Ezt a távolságot kell kiszámítani, távolság (cm-ben) = az impulzus kimenetének szélessége (uS-ben) / 58.
Itt a jel szélességét az uS többszörösében kell megadni (mikro másodperc vagy 10 ^ -6).
Szükséges alkatrészek
Hardver: ATMEGA32, Tápegység (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF kondenzátor, 10KΩ ellenállás (2 db), HC-SR04 érzékelő.
Szoftver: Atmel studio 6.1, progisp vagy flash magic.
Áramköri ábra és működési magyarázat
Itt a PORTB használatával kapcsolódunk az LCD adatporthoz (D0-D7). Aki nem akar dolgozni az ATMEGA32A FUSE BITS-ével, az nem használhatja a PORTC-ot, mivel a PORTC egy speciális típusú kommunikációt tartalmaz, amelyet csak a FUSEBITS megváltoztatásával lehet letiltani.
Az áramkörben megfigyelheti, hogy csak két vezérlőcsapot vettem igénybe, ez rugalmasságot ad a jobb megértéshez. A kontrasztbitet és a READ / WRITE-t nem használják gyakran, így testzárlat lehet. Ez az LCD-t a legnagyobb kontrasztú és olvasási módba helyezi. Csak az ENABLE és RS csapokat kell vezérelnünk, hogy a karaktereket és az adatokat ennek megfelelően küldhessük el.
Az LCD-hez kapcsolódó csatlakozások az alábbiak:
PIN1 vagy VSS a földre
PIN2 vagy VDD vagy VCC + 5v teljesítményig
PIN3 vagy VEE földelés (a legjobb kontrasztot nyújtja a kezdőknek)
PIN4 vagy RS (Register Selection) az uC PD6-jához
PIN5 vagy RW (olvasás / írás) a földre (az LCD-t olvasási módba állítja, megkönnyíti a kommunikációt a felhasználó számára)
PIN6 vagy E (engedélyezés) az uC PD5-ére
PIN7 vagy D0 - PB0 az uC-nél
PIN8 vagy D1 - PB1 az uC-nél
PIN9 vagy D2 - PB2 az uC-től
Az uC PIN10 vagy D3 - PB3
PIN11 vagy D4 - PB4 az uC-nél
PIN12 vagy D5 - PB5 az uC-től
PIN13 vagy D6 - PB6 az uC-től
PIN14 vagy D7 - PB7 az uC-től
Az áramkörben látható, hogy 8 bites kommunikációt (D0-D7) használtunk, de ez nem kötelező, és használhatunk 4 bites kommunikációt (D4-D7), de a 4 bites kommunikációs programmal egy kicsit bonyolultabbá válik. Tehát, amint a fenti táblázat mutatja, 10 érintkezõ LCD-t csatlakoztatunk a vezérlõhöz, amelyben 8 érintkezõ adat és 2 érintkezõ a vezérléshez.
Az ultrahangos érzékelő négy tűs készülék, PIN1-VCC vagy + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- FÖLD. A kioldócsap az a hely, ahol megadjuk az érzékelőnek, hogy mérje meg a távolságot. Az echo kimeneti tű, ahol a távolságot impulzusszélesség formájában kapjuk meg. Az itt található echo pin külső megszakítási forrásként a vezérlőhöz csatlakozik. Tehát a jel kimenetének szélessége érdekében az érzékelő visszhangcsapját INT0-hoz (0 megszakítás) vagy PD2-hez kell csatlakoztatni.
1. Indítsa el az érzékelőt a legalább 12uS kioldócsapjának meghúzásával.
2. Amint a visszhang magas lesz, külső megszakítást kapunk, és elindítunk egy számlálót (számláló engedélyezését) az ISR-ben (Interrupt Service Routine), amelyet közvetlenül egy megszakítás kiváltása után hajtunk végre.
3. Miután az echo ismét alacsony szintre süllyed, megszakítás keletkezik, ezúttal leállítjuk a számlálót (letiltjuk a számlálót).
4. Tehát az echo pin magas vagy alacsony impulzusához elindítottunk egy számlálót, és leállítottuk. Ez a számláló frissül a memóriába a távolság megszerzése érdekében, mivel a visszhang szélessége megvan a számlálásban.
5. A memóriában további számításokat fogunk végezni, hogy cm-ben megkapjuk a távolságot
6. A távolság megjelenik a 16x2 LCD kijelzőn.
A fenti szolgáltatások beállításához a következő regisztereket állítjuk be:
A fenti három regisztert ennek megfelelően kell beállítani a beállítás működéséhez, és röviden megvitatjuk őket, KÉK (INT0): ezt a bitet magasra kell állítani a külső megszakítás 0 engedélyezéséhez, miután ezt a csapot beállítottuk, megérezzük a logikai változásokat a PIND2 csapnál.
BARNA (ISC00, ISC01): ezt a két bitet a PD2 megfelelő logikai változásához igazítják, amelyet megszakításnak kell tekinteni.
Tehát, mint korábban mondtuk, megszakításra van szükségünk a számlálás megkezdéséhez és leállításához. Tehát az ISC00-at egyként állítjuk be, és megszakítást kapunk, amikor az INT0-nál logikai LOW to HIGH logika van; újabb megszakítás, amikor logika van HIGH to LOW.
RED (CS10): Ez a bit egyszerűen a számláló engedélyezésére és letiltására szolgál. Bár más CS10, CS12 bitekkel együtt működik. Itt nem végezünk előméretezést, ezért nem kell aggódnunk miattuk.
Néhány fontos dolog, amire emlékezni kell itt:
Az ATMEGA32A belső óráját használjuk, amely 1MHz. Itt nincs előskálázás, nem a mérkőzés megszakítás generálásának rutinját hasonlítjuk össze, tehát nincsenek összetett regiszterbeállítások.
A számlálás utáni számlálási értéket a 16 bites TCNT1 regiszter tárolja.
Ellenőrizze ezt a projektet az arduino segítségével: Távolságmérés az Arduino segítségével
Programozási magyarázat
A távolságmérő érzékelő működését lépésről lépésre magyarázza az alábbi C program.
#include // fejléc az adatáramlás vezérlésének engedélyezéséhez a csapok felett #define F_CPU 1000000 // megmondja a vezérlő kristály frekvenciáját