Tartalomjegyzék:

INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával: 5 lépés
INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával: 5 lépés

Videó: INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával: 5 lépés

Videó: INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával: 5 lépés
Videó: IR remote controlled vehicle robot with ATmega32 2024, Július
Anonim
INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával
INFRA VÖRÖS TÁVIRÁNYÍTOTT ROBOKAR AVR (ATMEGA32) MCU használatával

Ez a PROJEKT egy infravörös (IR) távirányítású RoboCar tervezését és megvalósítását írja le, amely különféle automatizált, pilóta nélküli vezérlő alkalmazásokhoz használható. Távirányítású RoboCar-t terveztem (bal-jobb/elöl-hátul mozgás). A teljes rendszer mikrokontrollerre (Atmega32) épül, amely intelligensebbé és könnyen módosíthatóvá teszi a vezérlőrendszert más alkalmazásokhoz. Lehetővé teszi a felhasználó számára a RoboCar kezelését vagy vezérlését, valamint a hálózati kapcsoló működtetését körülbelül 5 méter távolságból.

Kulcsszavak: IR dekóder, AVR (Atmega32) mikrokontroller, TV távirányító, vezeték nélküli kommunikáció

_

1. lépés: IntraRed kommunikáció

IntraRed kommunikáció
IntraRed kommunikáció

Az IR kommunikáció elve:

a) IR átvitel

Az IR LED jeladója az áramkörében, amely infravörös fényt bocsát ki minden kapott elektromos impulzusra. Ez az impulzus a távirányító gombjának megnyomásakor keletkezik, ezzel befejezve az áramkört, torzítást biztosítva a LED -nek. Az előfeszített LED 940 nm hullámhosszú fényt bocsát ki impulzusok sorozataként, a gomb megnyomásának megfelelően. Mivel azonban az infravörös LED mellett sok más infravörös fényforrás, például mi, emberek, izzók, nap stb., Az átvitt információk zavarhatók. Erre a problémára a moduláció a megoldás. Az átvitt jelet 38 KHz (vagy bármely más, 36 és 46 KHz közötti frekvencia) vivőfrekvenciával modulálják. Az IR LED ezen a frekvencián oszcillál az impulzus időtartamára. Az információ vagy a fényjel impulzusszélesség modulált, és a 38 KHz -es frekvencia tartalmazza. Az infravörös átvitel az elektromágneses sugárzási tartományban lévő energiára vonatkozik, a látható fénynél hosszabb, de a rádióhullámoknál rövidebb hullámhosszon. Ennek megfelelően az infravörös frekvencia magasabb, mint a mikrohullámoké, de alacsonyabb, mint a látható fényé. A tudósok az infravörös sugárzás (IR) spektrumát három régióra osztják. A hullámhosszakat mikronban (szimbolizálva µ, ahol 1 µ = 10-6 méter) vagy nanométerben (rövidítve nm, ahol 1 nm = 10-9 méter = 0,001 5) határozzák meg. A közeli infravörös sáv a láthatóhoz legközelebb eső hullámhossztartományban tartalmaz energiát, körülbelül 0,750 és 1,300 5 között (750-1300 nm). A köztes IR -sáv (más néven középső IR -sáv) az 1.300 és 3.000 5 közötti (1300-3000 nm) tartományú energiából áll. A távoli IR -sáv 2000 és 14 000 5 között van (3000 nm és 1,4000 x 104 nm között).

b) IR vétel

A vevőegység egy fotóérzékelőből áll, amely fénykibocsátáskor elektromos jelet ad ki. Az érzékelő kimenetét keskeny sávú szűrővel szűrjük, amely elveti az összes frekvenciát a vivőfrekvencia alatt vagy felett (ebben az esetben 38 KHz). A szűrt kimenetet ezután a megfelelő eszköz kapja meg, például egy mikrokontroller vagy egy mikroprocesszor, amely olyan eszközöket vezérel, mint egy számítógép vagy egy robot. A szűrők kimenete az oszcilloszkóphoz is csatlakoztatható az impulzusok leolvasásához.

Az IR alkalmazásai:

Az infravörös technológiát számos vezeték nélküli kommunikációs, megfigyelési és vezérlési alkalmazásban használják. Íme néhány példa:

· Otthoni szórakoztató távirányító dobozok

· Vezeték nélküli (helyi hálózatok)

· Kapcsolatok notebook számítógépek és asztali számítógépek között

· Vezeték nélküli modem

· Behatolásjelzők

· Mozgásérzékelők

· Tűzérzékelők

· Éjjellátó rendszerek

· Orvosi diagnosztikai berendezés

· Rakétairányító rendszerek

· Geológiai megfigyelő eszközök

Az infravörös adatok egyik eszközről a másikra történő továbbítását néha sugárzásnak nevezik.

2. lépés: IR érzékelő és NEC protokoll Fromat

IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat
IR érzékelő és NEC protokoll Fromat

IR érzékelők (1. ábra)

TSOP1738, SFH-5110-38 (38 kHz)

TSOP érzékelők Jellemzők:

  • Az előerősítő és a fényérzékelő egy csomagban található
  • Belső szűrő a PCM frekvenciához
  • Javított árnyékolás az elektromos mező zavaraival szemben
  • TTL és CMOS kompatibilitás
  • Kimenet aktív alacsony Alacsony energiafogyasztás
  • Magas immunitás a környezeti fény ellen
  • Folyamatos adatátvitel lehetséges

NEC protokoll:

A NEC IR átviteli protokoll az üzenetbitek impulzus távolság kódolását használja. Minden impulzus sorozat 562,5 µs hosszú, 38 kHz (26,3 µs) vivőfrekvenciával. A logikai bitek továbbítása a következőképpen történik (2. ábra):

  • Logikai "0" - 562,5 µs impulzus tört, majd 562,5 µs tér, teljes átviteli idővel 1,125 ms
  • Logikai '1' - 562,5 µs impulzus tört, majd 1,6875 ms tér, teljes átviteli idővel 2,25 ms

A hordozó impulzus 21 ciklusból áll 38 kHz -en. Az impulzusok jel/tér aránya általában 1: 4, hogy csökkentse az áramfogyasztást:

(3. ábra)

Minden kódsorozat 9 ms -os impulzussal kezdődik, az úgynevezett AGC impulzus. Ezt 4,5 ms csend követi:

(4. ábra)

Az adatok ezután 32 bitből, egy 16 bites címből és egy 16 bites parancsból állnak, az átvitel sorrendjében (balról jobbra):

(5. ábra)

A négy bájtnyi adatbit mindegyike először küldi el a legkevésbé szignifikáns bitet. Az 1. ábra egy NEC IR átviteli keret formátumát szemlélteti 00h (00000000b) címre és ADh parancsra (10101101b).

Az üzenetkeret továbbításához összesen 67,5 ms szükséges. 27 ms -ra van szüksége a 16 bit cím (cím + inverz) és a 16 parancsparancs (parancs + inverz) továbbításához.

(6. ábra)

A keret továbbításához szükséges idő:

A cím 16 bitje (cím + inverz) 27 ms -ot igényel az átviteli időhöz. A parancs 16 bitje (parancs + inverz) pedig 27 ms -ot is. mert (cím + cím inverz) vagy (parancs + parancs inverz) mindig tartalmaz 8 '0 -t és 8' 1 -et, így (8 * 1,125 ms) + (8 * 2,25 ms) == 27 ms. e szerint a keret továbbításához szükséges teljes idő (9ms +4,5ms +27ms +27ms) = 67,5 ms.

ISMÉTLŐKÓDOK: Ha a távirányító gombját lenyomva tartja, ismétlődő kódot ad ki, általában körülbelül 40 ms -tal az üzenet végét jelző impulzus tört után. Az ismétlődő kód továbbküldése 108 ms -os időközönként történik, amíg a kulcs végül elengedésre kerül. Az ismétlődő kód az alábbiakból áll, sorrendben:

  • 9 ms -os vezető impulzus tört ki
  • 2,25 ms -os hely
  • 562,5 µs impulzus tört a tér végének (és így az átvitt ismétlődő kód végének) jelzésére.

(7. ábra)

Késleltetés számítása (1 ms):

Óra frekvencia = 11,0592 Mhz

Gépciklus = 12

Késleltetés = 1 ms

TimerValue = 65536 - ((Delay * ClockFreq)/Machine Cycle) = 65536 - ((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

3. lépés: Az egyenáramú motor vezérlése az L293D használatával

DC motorvezérlés az L293D használatával
DC motorvezérlés az L293D használatával

DC motor

Az egyenáramú motor az elektromos energiát mechanikai energiává alakítja, amely számos hasznos feladat elvégzésére használható. Olyan mechanikus mozgást képes előállítani, mint a RoboCar előre -hátra/Visszajelzése. Az egyenáramú motorok különböző besorolásúak, például 6V és 12V. Két vezetéke vagy csapja van. Megfordíthatjuk a forgásirányt a bemenet polaritásának megfordításával.

Itt az L293D -t részesítjük előnyben, mivel a 600 mA -es teljesítmény jó kis DC -motorok meghajtásához, és a védő diódák magukban az IC -ben vannak. Az egyes csapok leírása a következő: Tűk engedélyezése: Ezek a sz. 1 és a sz. 9. Tű sz. Az 1 az 1-es és 2-es Half-H meghajtó engedélyezésére szolgál (H-híd a bal oldalon). Tű sz. A 9 a 3-as és 4-es H-híd meghajtójának engedélyezésére szolgál (H-híd a jobb oldalon).

A koncepció egyszerű, ha egy adott H hidat szeretne használni, akkor magas logikát kell adnia a megfelelő engedélyező csapokhoz, valamint az IC tápellátásához. Ez a csap is használható a motor fordulatszámának szabályozására PWM technikával. Csatlakoztassa az 5V -os tápellátáshoz. VCC2 (8. tüske): Tápellátás a motorhoz. Húzzon rá +ve feszültséget a motor névleges értékének megfelelően. Ha a motorját 12 V -os feszültséggel szeretné hajtani, akkor 12 V -os feszültséget használjon erre a csapra.

Lehetőség van arra is, hogy a motort közvetlenül akkumulátorral vezessük, kivéve az áramkör áramellátását. Csak csatlakoztassa az akkumulátor +ve kivezetését a VCC2 tűhöz, és tegye közösvé mindkét akkumulátor GND -jét. (A MAX feszültség ezen a tűn 36V, mint az adatlapja). GND (4., 5., 12., 13. láb): Csatlakoztassa őket az áramkör általános GND -jéhez. Bemenetek (2., 7., 10., 15. láb):

Ezek olyan bemeneti csapok, amelyeken keresztül a vezérlőjeleket mikrokontrollerek vagy más áramkörök/IC -k adják. Például, ha a 2 -es tűn (az első fél H meghajtó bemenete) 1 -es logikát adunk (5V), akkor VCC2 -vel egyenlő feszültséget kapunk az első fél H meghajtó megfelelő kimeneti tűjén, azaz a sz. 3. Hasonlóan a Logic esetében 0 (0V) a 2 -es tűn, 0V a 3 -as tűn. Kimenetek (3 -as, 6 -os, 11 -es, 14 -es érintkezők): kimenetek. A bemeneti jel szerint a kimeneti jel érkezik.

Motoros mozgások A B

-----------------------------------------------------------------------------------------

…………… Stop: Alacsony: Alacsony

…… Óramutató járásával megegyező irányban: Alacsony: Magas

Az óramutató járásával ellentétes irányban: Magas: Alacsony

……………. Állj: Magas: Magas

4. lépés: A motorvezérlő és az infravörös érzékelő áramköri diagramjai

A motorvezérlő és az IR érzékelő áramköri diagramjai
A motorvezérlő és az IR érzékelő áramköri diagramjai
A motorvezérlő és az IR érzékelő áramköri diagramjai
A motorvezérlő és az IR érzékelő áramköri diagramjai
A motorvezérlő és az IR érzékelő áramköri diagramjai
A motorvezérlő és az IR érzékelő áramköri diagramjai

Az ATmega32 egy kis teljesítményű, 8 bites CMOS mikrokontroller, amely az AVR továbbfejlesztett RISCarchitecture-jén alapul. A hatékony utasítások végrehajtásával egyetlen órajel alatt az ATmega32 1 MIPS / MHz -es teljesítményt ér el, lehetővé téve a rendszer tervezőjének, hogy optimalizálja az energiafogyasztást a feldolgozási sebességhez képest.

Az AVR mag gazdag utasításkészletet és 32 általános célú munkaregisztert tartalmaz. Mind a 32 regiszter közvetlenül kapcsolódik az aritmetikai logikai egységhez (ALU), lehetővé téve két független regiszter elérését egyetlen utasításban, egy óra alatt végrehajtva. Az így kapott architektúra kódhatékonyabb, miközben akár tízszer gyorsabb teljesítményt ér el, mint a hagyományos CISC mikrovezérlők.

Az ATmega32 a következő funkciókat kínálja:

  • 32 kbyte rendszerben programozható flash program memória olvasás közben írás közben,
  • 1024 bájt EEPROM, 2 bájtos SRAM,
  • 32 általános célú I/O vonal,
  • 32 általános célú munkaregiszter,
  • JTAG felület a Boundaryscan számára,
  • On-chip hibakeresési támogatás és programozás, három rugalmas időzítő/számláló összehasonlítási módokkal, belső és külső megszakítások, soros programozható USART, bájtorientált kétvezetékes soros interfész, 8 csatornás,
  • 10 bites ADC opcionális differenciál bemeneti fokozatgal, programozható erősítéssel (csak TQFP csomag),
  • programozható Watchdog Timer belső oszcillátorral,
  • egy SPI soros port, és
  • hat szoftverrel választható energiatakarékos mód.

    • A készenléti mód leállítja a CPU -t, miközben engedélyezi az USART -ot,
    • Kétvezetékes interfész, A/D átalakító,
    • SRAM,
    • Időzítő/számlálók,
    • SPI port, és
    • megszakítja a rendszert a működés folytatásához.
    • A Power-down mód elmenti a regiszter tartalmát, de lefagyasztja az oszcillátort, letiltva az összes többi chip funkciót a következő külső megszakításig vagy hardver-visszaállításig.
    • Energiatakarékos módban az aszinkron időzítő továbbra is fut, lehetővé téve a felhasználó számára az időzítő alapjának fenntartását, amíg az eszköz többi része alszik.
    • Az ADC zajcsökkentő mód leállítja a CPU -t és az összes I/O modult, kivéve az aszinkron időzítőt és az ADC -t, hogy minimálisra csökkentse a kapcsolási zajt az ADC átalakítások során
    • Készenléti állapotban a kristály/rezonátor oszcillátor működik, miközben a készülék többi része alszik. Ez nagyon gyors indítást tesz lehetővé alacsony energiafogyasztással kombinálva.
    • Kiterjesztett készenléti üzemmódban mind a fő oszcillátor, mind az aszinkron időzítő tovább fut.

Az összes kapcsolódó áramkör itt található, és a főáramkör (atmega32) is adott.

5. lépés: Avr programok

Avr programok
Avr programok
Avr programok
Avr programok

1. "Távoli érzékelő" esetén:

#befoglalni #befoglalni

#include "remote.h"

// Globálok illékony unsigned int Time; // Fő időzítő, 10us -ban tárolja az időt, // Frissítette az ISR (TIMER0_COMP) illékony előjel nélküli karakter BitNo; // A következő BIT illékony, előjel nélküli karaktere ByteNo; // Az aktuális bájt poz

illékony, alá nem írt karakter IrData [4]; // Az Ir Packet négy adatbájtja

illékony, alá nem írt char PrevCmd; // Ismétlésre használják

// Az ismétléshez használt változók csak egy gomb bizonyos ideig történő lenyomása után kezdődnek

illékony, alá nem írt karakter Ismétlés; // 1 = igen 0 = nincs illékony előjel nélküli karakter RCount; // Ismétlés

illékony szén QFront = -1, QEnd = -1;

illékony, alá nem írt karakterállapot; // Fogadó állapota

illékony, alá nem írt karakter Edge; // A megszakítás széle [RISING = 1 OR FALLING = 0]

illékony, előjel nélküli int stop;

/************************************************* ******************************************** / /*FUNCTIONSSTARTS* / / ************************************************ *********************************************

void RemoteInit () {

char i; (i = 0; i <4; i ++) esetén IrData = 0;

stop = 0; Állapot = IR_VALIDATE_LEAD_HIGH; Szél = 0; Ismétlés = 0;

// Beállítási időzítő1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Összehasonlítási érték beállítása

unsigned char GetRemoteCmd (char wait) {unsigned char cmd;

if (várj) míg (QFront ==-1); else if (QFront ==-1) return (RC_NONE);

cmd = IrCmdQ [QFront];

ha (QFront == QEnd) QFront = QEnd = -1; else {ha (QFront == (QMAX-1)) QFront = 0; más QFront ++; }

return cmd;

}

2. fő ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Végtelen hurok az aktív IR-érzékelőhöz {

cmd = GetRemoteCmd (1);

kapcsoló (cmd) {

xx eset: {// BOT Előrelép // Ch+ btn forwardmotor ();

szünet; // Mindkét motor előrefelé

}

………………………………………………….

………………………………………………….

………………………………………………….

alapértelmezett: PORTC = 0x00; break; // A bal és a jobb motor is leáll}

}

}/*Fő vége*/

……………………………………………………………………………………………………………………

// Alapmodell, de használhatom PWM módban.

//…………………………………………….. Érezd jól magad……………………………………………………//

Ajánlott: