Turinys:

INFRA RAUDONOJO NUOTOLINIO VALDOMOJO ROBOKARO, NAUDOJANT AVR (ATMEGA32) MCU: 5 žingsniai
INFRA RAUDONOJO NUOTOLINIO VALDOMOJO ROBOKARO, NAUDOJANT AVR (ATMEGA32) MCU: 5 žingsniai

Video: INFRA RAUDONOJO NUOTOLINIO VALDOMOJO ROBOKARO, NAUDOJANT AVR (ATMEGA32) MCU: 5 žingsniai

Video: INFRA RAUDONOJO NUOTOLINIO VALDOMOJO ROBOKARO, NAUDOJANT AVR (ATMEGA32) MCU: 5 žingsniai
Video: ДОБАВИТЬ IR BLASTER В ТЕЛЕФОН 2024, Liepa
Anonim
INFRA RAUDONOJO NUOTOLINIO VALDYMO ROBOKARAS, NAUDOJANT AVR (ATMEGA32) MCU
INFRA RAUDONOJO NUOTOLINIO VALDYMO ROBOKARAS, NAUDOJANT AVR (ATMEGA32) MCU

Šis PROJEKTAS apibūdina infraraudonųjų spindulių (IR) nuotolinio valdymo „RoboCar“, kuris gali būti naudojamas įvairioms automatizuotoms nepilotuojamoms valdymo programoms, dizainą ir įgyvendinimą. Sukūriau nuotoliniu būdu valdomą „RoboCar“(judesys kairėn į dešinę/priekis atgal). Visa sistema yra pagrįsta mikrovaldikliu („Atmega32“), todėl valdymo sistema yra protingesnė ir lengvai modifikuojama kitoms programoms. Tai leidžia vartotojui valdyti arba valdyti „RoboCar“ir valdyti maitinimo jungiklį iš maždaug 5 metrų.

Raktažodžiai: IR dekoderis, AVR („Atmega32“) mikrovaldiklis, televizoriaus nuotolinio valdymo pultas, belaidis ryšys

_

1 žingsnis: „IntraRed“bendravimas

IntraRed komunikacija
IntraRed komunikacija

IR ryšio principas:

a) IR perdavimas

Infraraudonųjų spindulių šviesos diodo siųstuvas savo grandinėje, kuris skleidžia infraraudonąją šviesą kiekvienam jam suteiktam elektros impulsui. Šis impulsas sugeneruojamas paspaudus nuotolinio valdymo pulto mygtuką, taip užbaigiant grandinę, suteikiant šviesos diodui šališkumą. Šviesos diodas, esant įstrižai, skleidžia 940 nm bangos ilgio šviesą kaip impulsų serija, atitinkanti paspaustą mygtuką. Tačiau kartu su IR šviesos diodais daugelis kitų infraraudonųjų spindulių šaltinių, tokių kaip mes, žmonės, lemputės, saulė ir kt., Gali trukdyti perduodamai informacijai. Šios problemos sprendimas yra moduliacija. Perduodamas signalas moduliuojamas naudojant 38 KHz (arba bet kurį kitą 36–46 KHz dažnio) nešiklio dažnį. IR šviesos diodas yra skirtas šiam dažniui svyruoti visą impulsą. Informacija arba šviesos signalai yra moduliuojami pulso pločiu ir yra 38 KHz dažnyje. Infraraudonųjų spindulių perdavimas reiškia energiją elektromagnetinės spinduliuotės spektro srityje, kurios bangos ilgis yra ilgesnis nei matomos šviesos, bet trumpesnis nei radijo bangų. Atitinkamai infraraudonųjų spindulių dažnis yra didesnis nei mikrobangų, bet mažesnis nei matomos šviesos. Mokslininkai infraraudonųjų spindulių (IR) spektrą skirsto į tris regionus. Bangų ilgiai nurodyti mikronais (simbolizuojami µ, kur 1 µ = 10–6 metrai) arba nanometrais (sutrumpintai nm, kur 1 nm = 10–9 metrai = 0,001 5). Artimoje IR juostoje yra energijos, esančios arčiausiai matomų bangų ilgių, nuo maždaug 0,750 iki 1,300 5 (nuo 750 iki 1300 nm). Tarpinę IR juostą (dar vadinamą vidurine IR juosta) sudaro 1300–3000 5 (1300–3000 nm) diapazono energija. Tolimoji IR juosta tęsiasi nuo 2 000 iki 14 000 5 (nuo 3000 nm iki 1,4000 x 104 nm).

b) IR priėmimas

Imtuvą sudaro foto detektorius, kuris sukuria išėjimo elektrinį signalą, kai į jį patenka šviesa. Detektoriaus išvestis filtruojama naudojant siauros juostos filtrą, kuris pašalina visus dažnius, esančius žemiau arba virš nešlio dažnio (šiuo atveju 38 KHz). Filtruota išvestis perduodama tinkamam įrenginiui, pavyzdžiui, mikrovaldikliui arba mikroprocesoriui, kuris valdo tokius įrenginius kaip kompiuteris ar robotas. Filtrų išvestis taip pat gali būti prijungta prie osciloskopo impulsams nuskaityti.

IR taikymas:

Infraraudonieji spinduliai naudojami įvairiose belaidžio ryšio, stebėjimo ir valdymo programose. Štai keletas pavyzdžių:

· Namų pramogų nuotolinio valdymo dėžutės

· Belaidis (vietiniai tinklai)

· Nešiojamųjų ir stalinių kompiuterių sąsajos

· Belaidis modemas

· Įsibrovimo detektoriai

· Judesio detektoriai

· Gaisro jutikliai

· Naktinio matymo sistemos

· Medicininė diagnostinė įranga

· Raketų valdymo sistemos

· Geologinio stebėjimo prietaisai

IR duomenų perdavimas iš vieno įrenginio į kitą kartais vadinamas spinduliuote.

2 žingsnis: IR jutiklis ir NEC protokolas Fromat

IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat
IR jutiklis ir NEC protokolas Fromat

IR jutikliai (1 pav.)

TSOP1738, SFH-5110-38 (38 kHz)

TSOP jutikliai Savybės:

  • Pirminis stiprintuvas ir nuotraukų detektorius yra vienoje pakuotėje
  • Vidinis PCM dažnio filtras
  • Patobulinta apsauga nuo elektros lauko trikdžių
  • TTL ir CMOS suderinamumas
  • Išėjimas aktyvus mažas Mažos energijos sąnaudos
  • Aukštas atsparumas aplinkos šviesai
  • Galimas nuolatinis duomenų perdavimas

NEC protokolas:

NEC IR perdavimo protokolas naudoja pranešimo bitų pulso atstumo kodavimą. Kiekvienas impulsų pliūpsnis yra 562,5 µs ilgio, esant 38 kHz (26,3 µs) nešiklio dažniui. Loginiai bitai perduodami taip (2 pav.):

  • Loginis „0“- 562,5 µs impulsų pliūpsnis, po kurio eina 562,5 µs erdvė, o bendras perdavimo laikas yra 1,125 ms
  • Loginis „1“- 562,5 µs impulsų pliūpsnis, po kurio eina 1,6875 ms erdvė, o bendras perdavimo laikas - 2,25 ms

Nešiklio impulsą sudaro 21 ciklas 38 kHz dažniu. Paprastai impulsų žymės ir erdvės santykis yra 1: 4, kad būtų sumažintas dabartinis sunaudojimas:

(3 pav.)

Kiekviena kodo seka prasideda 9 ms impulsu, žinomu kaip AGC impulsas. Po to 4,5 sekundės tyla:

(4 pav.)

Tada duomenys susideda iš 32 bitų, 16 bitų adreso, po kurio seka 16 bitų komanda, rodoma jų perdavimo tvarka (iš kairės į dešinę):

(5 pav.)

Keturi baitai duomenų bitų pirmiausia siunčiami mažiausiai reikšmingi bitai. 1 paveiksle pavaizduotas NEC IR perdavimo rėmo formatas, skirtas 00h (00000000b) adresui ir ADh komandai (10101101b).

Pranešimo rėmeliui perduoti iš viso reikia 67,5 ms. Tam reikia 27 ms, kad būtų galima perduoti 16 adreso bitų (adresas + atvirkštinis) ir 16 komandos bitų (komanda + atvirkštinė).

(6 pav.)

Rėmelio perdavimui reikalingas laikas:

16 bitų adresui (adresas + atvirkštinis) perduoti reikia 27 ms. O 16 bitų komandai (komandai + atvirkštinei) taip pat reikia 27 ms. nes (adresas + adresas atvirkštinis) arba (komanda + komanda atvirkštinė) visada turės 8 '0 ir 8' 1, taigi (8 * 1,125 ms) + (8 * 2,25 ms) == 27 ms. pagal šį bendrą kadro perdavimo laiką reikia (9ms +4,5ms +27ms +27ms) = 67,5 ms.

PAKARTOTINIAI KODAI: Jei nuotolinio valdymo pulto klavišas laikomas nuspaustas, bus išduotas pakartotinis kodas, paprastai apie 40 ms po pulso pliūpsnio, reiškiančio pranešimo pabaigą. Pakartotinis kodas ir toliau bus siunčiamas 108 ms intervalu, kol raktas bus galutinai atleistas. Pakartotinį kodą sudaro tokia tvarka:

  • 9 ms priekinis pulsas
  • 2,25 ms vietos
  • 562,5 µs impulsas sprogo, kad pažymėtų erdvės pabaigą (taigi ir perduoto kartojimo kodo pabaigą).

(7 pav.)

Delsos skaičiavimas (1ms):

Laikrodžio dažnis = 11,0592 Mhz

Mašinos ciklas = 12

Delsimas = 1 ms

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

= 65536 - 921 = 0xFC67

3 žingsnis: nuolatinės srovės variklio valdymas naudojant L293D

Nuolatinės srovės variklio valdymas naudojant L293D
Nuolatinės srovės variklio valdymas naudojant L293D

DC variklis

Nuolatinės srovės variklis elektros energiją paverčia mechanine energija, kuri gali būti naudojama daugeliui naudingų darbų. Jis gali sukelti mechaninį judėjimą, pvz., „Pirmyn/atgal“, „RoboCar“. Nuolatinės srovės varikliai yra įvairių kategorijų, tokių kaip 6V ir 12V. Jame yra du laidai arba kaiščiai. Sukimosi kryptį galime pakeisti, pakeisdami įvesties poliškumą.

Čia mes teikiame pirmenybę L293D, nes 600 mA srovė tinka mažiems nuolatinės srovės varikliams varyti, o apsaugos diodai yra įtraukti į patį IC. Kiekvieno kaiščio aprašymas yra toks: Įgalinti kaiščius: tai yra kaištis Nr. 1 ir kaištis Nr. 9. Smeigtukas Nr. 1 naudojamas įjungti Half-H tvarkyklę 1 ir 2 (H tiltas kairėje pusėje). Smeigtukas Nr. 9 naudojamas H ir tiltelio 3 ir 4 vairuotojams įjungti (H tiltas dešinėje pusėje).

Koncepcija paprasta, jei norite naudoti tam tikrą H tiltą, turite pateikti aukštą logiką atitinkamiems įjungimo kaiščiams kartu su maitinimo šaltiniu IC. Šis kaištis taip pat gali būti naudojamas valdyti variklio greitį naudojant PWM techniką. VCC1 (16 kaištis): maitinimo kaištis. Prijunkite jį prie 5 V maitinimo šaltinio. VCC2 (8 kaištis): variklio maitinimo šaltinis. Įtraukite į jį +ve įtampą pagal variklio vertę. Jei norite variklį varyti 12 V įtampa, naudokite 12 V ant šio kaiščio.

Taip pat galima variklį varyti tiesiai ant akumuliatoriaus, išskyrus tą, kuris naudojamas elektros tiekimui į grandinę. Tiesiog prijunkite +akumuliatoriaus gnybtą prie VCC2 kaiščio ir bendrai naudokite abiejų baterijų GND. (MAX įtampa šiame kaištyje yra 36 V, kaip nurodyta jos duomenų lape). GND (4, 5, 12, 13 kaiščiai): prijunkite juos prie bendros grandinės GND. Įvestys (2, 7, 10, 15 kaiščiai):

Tai yra įvesties kaiščiai, per kuriuos valdymo signalai perduodami iš mikrovaldiklių ar kitų grandinių/IC. Pvz., Jei ant kaiščio 2 (1 pusės H tvarkyklės įvestis) pateikiame 1 logiką (5 V), mes gausime VCC2 įtampą, atitinkančią 1 pusės H tvarkyklės atitinkamą išvesties kaištį, ty kaištį Nr. 3. Panašiai logikai 0 (0V) 2 kaištyje, 0V 3 kaištyje. Išėjimai (3, 6, 11, 14 kaiščiai): išvesties kaiščiai. Pagal įvesties signalą ateina išėjimo signalas.

Variklio judesiai A B

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

…………… Stop: Žemas: žemas

…… Pagal laikrodžio rodyklę: žemas: aukštas

Prieš laikrodžio rodyklę: aukštas: žemas

……………. Sustoti: aukštai: aukštai

4 žingsnis: variklio tvarkyklės ir IR jutiklio grandinės schemos

Variklio tvarkyklės ir IR jutiklio grandinės schemos
Variklio tvarkyklės ir IR jutiklio grandinės schemos
Variklio tvarkyklės ir IR jutiklio grandinės schemos
Variklio tvarkyklės ir IR jutiklio grandinės schemos
Variklio tvarkyklės ir IR jutiklio grandinės schemos
Variklio tvarkyklės ir IR jutiklio grandinės schemos

ATmega32 yra mažos galios 8 bitų CMOS mikrovaldiklis, pagrįstas AVR patobulinta RISCarchitecture. Vykdydamas galingas instrukcijas per vieną laikrodžio ciklą, „ATmega32“pasiekia pralaidumą, artėjantį prie 1 MIPS per MHz, todėl sistemos dizaineris gali optimizuoti energijos suvartojimą, palyginti su apdorojimo greičiu.

AVR šerdis sujungia turtingą instrukcijų rinkinį su 32 bendrosios paskirties darbo registrais. Visi 32 registrai yra tiesiogiai prijungti prie aritmetinės logikos bloko (ALU), leidžiantys pasiekti du nepriklausomus registrus vienoje instrukcijoje, vykdomoje per vieną laikrodžio ciklą. Gauta architektūra yra veiksmingesnė kodo atveju, tuo tarpu pasiekiama iki dešimties kartų spartesnė nei įprastų CISC mikrovaldiklių.

„ATmega32“siūlo šias funkcijas:

  • 32 kbba programuojamos „Flash“programos atminties su skaitymo ir rašymo galimybėmis,
  • 1024 baitų EEPROM, 2K baitų SRAM,
  • 32 bendrosios paskirties įvesties/išvesties linijos,
  • 32 bendrosios paskirties darbo registrai,
  • „Boundaryscan“JTAG sąsaja,
  • „On-chip“derinimo palaikymas ir programavimas, trys lankstūs laikmačiai/skaitikliai su palyginimo režimais, vidiniai ir išoriniai pertraukimai, serijinis programuojamas USART, baitų orientuota dviejų laidų nuosekli sąsaja, 8 kanalų,
  • 10 bitų ADC su pasirenkamu diferencinės įvesties etapu su programuojamu stiprinimu (tik TQFP paketas),
  • programuojamas sargybos laikmatis su vidiniu osciliatoriumi,
  • SPI nuoseklųjį prievadą ir
  • šeši programinės įrangos pasirenkami energijos taupymo režimai.

    • Laukimo režimas sustabdo procesorių ir leidžia USART,
    • Dviejų laidų sąsaja, A/D keitiklis,
    • SRAM,
    • Laikmatis/skaitikliai,
    • SPI prievadas ir
    • nutraukti sistemos veikimą.
    • Išjungimo režimas išsaugo registro turinį, tačiau užšaldo osciliatorių, išjungdamas visas kitas lusto funkcijas iki kito išorinio pertraukimo arba aparatinės įrangos atstatymo.
    • Energijos taupymo režimu asinchroninis laikmatis ir toliau veikia, todėl vartotojas gali išlaikyti laikmačio bazę, kol likęs įrenginys miega.
    • ADC triukšmo mažinimo režimas sustabdo procesorių ir visus įvesties/išvesties modulius, išskyrus asinchroninį laikmatį ir ADC, kad būtų sumažintas perjungimo triukšmas ADC konversijų metu
    • Budėjimo režimu veikia krištolo/rezonatoriaus osciliatorius, o likęs įrenginys miega. Tai leidžia labai greitai paleisti kartu su mažomis energijos sąnaudomis.
    • Išplėstinio budėjimo režimu ir toliau veikia pagrindinis generatorius ir asinchroninis laikmatis.

Čia pateikiamos visos susijusios grandinės, taip pat pateikiama pagrindinė grandinė (atmega32).

5 žingsnis: Avr programos

Avr programos
Avr programos
Avr programos
Avr programos

1. „Nuotolinio jutiklio“atveju:

#įtraukti #įtraukti

#include "remote.h"

// Globals volatile unsigned int Time; // Pagrindinis laikmatis, saugo laiką 10us, // Atnaujino ISR (TIMER0_COMP) nepastovus nepasirašytas simbolis BitNo; // Pos of next BIT nepastovus nepasirašytas char ByteNo; // dabartinio baito poz

nepastovus nepasirašytas anglis IrData [4]; // Keturi duomenų baitai Ir paketo // 2 baitų adresas 2 baitų Duomenys nepastovus nepasirašytas simbolis IrCmdQ [QMAX]; // Galutinė komanda gauta (buferis)

nepastovus nepasirašytas anglis PrevCmd; // Naudojamas kartojimui

// Kintamieji, naudojami pradėti kartoti tik tam tikrą laiką paspaudus klavišą

nepastovus nepasirašytas ženklas Pakartokite; // 1 = taip 0 = nėra nepastovios nepasirašytos char RCount; // Pakartokite skaičiavimą

lakiųjų anglių QFront = -1, QEnd = -1;

nepastovi nepasirašyta anglies būsena; // Imtuvo būsena

nepastovus nepasirašytas char Edge; // Pertraukos kraštas [RISING = 1 OR FALLING = 0]

nepastovus neparašytas int stop;

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

void RemoteInit () {

char i; (i = 0; i <4; i ++) IrData = 0;

stop = 0; Būsena = IR_VALIDATE_LEAD_HIGH; Briauna = 0; Pakartokite = 0;

// Sąrankos laikmatis1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Nustatykite palyginimo vertę

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

if (palaukti), kol (QFront ==-1); else if (QFront ==-1) return (RC_NONE);

cmd = IrCmdQ [QFront];

jei (QFront == QEnd) QFront = QEnd = -1; else {if (QFront == (QMAX-1)) QFront = 0; dar QFront ++; }

grįžti cmd;

}

2. pagrindinis ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Begalinė kilpa į aktyvų IR jutiklį {

cmd = „GetRemoteCmd“(1);

jungiklis (cmd) {

atvejis xx: {// BOT Juda į priekį // Ch+ btn forwardmotor ();

pertrauka; // Abu varikliai į priekį

}

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

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

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

numatytasis: PORTC = 0x00; pertrauka; // Kairysis ir dešinysis varikliai sustoja}

}

}/*Pagrindo pabaiga*/

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

// Tai pagrindinis modelis, bet galiu jį naudoti PWM režimu.

//…………………………………………….. Pasilinksmink……………………………………………………//

Rekomenduojamas: