- Ce este un motor DC?
- Componente necesare
- Diagrama circuitului
- Programare Atmega16 pentru control motor DC
Motoarele de curent continuu sunt cele mai utilizate motoare. Aceste motoare pot fi găsite aproape peste tot, de la proiecte mici la robotică avansată. Am interfațat anterior DC Motor cu multe alte microcontrolere precum Arduino, Raspberry pi și l-am folosit în multe proiecte robotizate. Astăzi învățăm să controlăm motorul de curent continuu cu microcontrolerul AVR Atmega16. Dar înainte de a merge mai departe, să aflăm mai multe despre motorul de curent continuu.
Ce este un motor DC?
Motorul DC este un dispozitiv care transformă energia electrică în energie mecanică. Mai exact, un motor DC utilizează curent continuu pentru a converti energia electrică în energie mecanică. Principiul de bază al motorului este interacțiunea dintre câmpul magnetic și curent pentru a produce o forță în interiorul motorului care ajută motorul să se rotească. Deci, atunci când curentul electric este trecut printr-o bobină într-un câmp magnetic, se generează o forță magnetică care produce un cuplu rezultând în mișcarea motorului. Direcția motorului este controlată prin inversarea curentului. De asemenea, viteza sa poate fi variată prin variația tensiunii furnizate. Deoarece microcontrolerele au pini PWM, poate fi folosit pentru a controla viteza motorului.
În acest tutorial, funcționarea motorului continuu va fi demonstrată cu Atmega16. Șoferul motorului L293D va fi utilizat pentru a inversa direcția curentului, astfel direcția de mișcare. Driverul motorului L293D folosește configurația circuitului H-Bridge care transmite curentul necesar motorului. Două butoane sunt utilizate pentru a selecta direcția motorului. Unul dintre butoane este utilizat pentru a selecta rotația în sens orar, iar celălalt este utilizat pentru a selecta funcționarea anti-ceas a motorului de curent continuu.
Componente necesare
- Motor DC (5V)
- Driver motor L293D
- IC microcontroler Atmega16
- Oscilator de cristal de 16 MHz
- Două condensatoare 100nF
- Două condensatoare de 22pF
- Apasa butonul
- Sârme jumper
- Breadboard
- USBASP v2.0
- Led (orice culoare)
Diagrama circuitului
Programare Atmega16 pentru control motor DC
Aici Atmega16 este programat folosind USBASP și Atmel Studio7.0. Dacă nu știți cum să programați Atmega16 utilizând USBASP, accesați linkul. Programul complet este dat la sfârșitul proiectului, trebuie doar să încărcați programul în Atmega16 și să utilizați cele două butoane Push pentru a roti motorul DC în sensul acelor de ceasornic și în sens invers acelor de ceasornic.Motorul continuu este interfațat utilizând driverul motorului L293D. Motorul de curent continuu se va roti în două direcții atunci când butonul respectiv este apăsat. Butonul cu o singură apăsare va fi utilizat pentru a roti motorul DC în direcția Clock Wise și celălalt buton va fi folosit pentru a roti motorul CC în direcția contorului. În primul rând, definiți frecvența CPU a microcontrolerului și includeți toate bibliotecile necesare.
#define F_CPU 16000000UL #include #include
Apoi, utilizați o variabilă pentru a urmări starea butonului apăsat. Această variabilă va fi utilizată pentru a defini direcția motorului.
int i;
Selectați modul de intrare / ieșire al GPIO utilizând registrul de direcție a datelor. Inițial, faceți ieșirea pinului motorului cât mai mică pentru a evita pornirea motorului fără a apăsa butonul.
DDRA = 03; PORTA & = ~ (1 << 1); PORTA & = ~ (1 << 0);
Verificați dacă este apăsat primul buton conectat la PORTA4 al Atmega16 și stocați starea butonului în variabilă.
if (! bit_is_clear (PINA, 4)) { i = 1; PORTA & = ~ (1 << 1); _delay_ms (1000); }
În mod similar, verificați dacă al doilea buton este apăsat conectat la PORTA5 al Atmega16 și stocați starea butonului în variabilă.
else if (! bit_is_clear (PINA, 5)) { i = 2; PORTA & = ~ (1 << 0); _delay_ms (1000); }
În cazul în care starea de 1 st butonul este adevărat, apoi se rotesc cu motor de curent continuu în direcția ceas înțelept și dacă starea de - al doilea buton de împingere este adevărat, atunci roti motor de curent continuu în anti-ceas înțelept.
if (i == 1) { PORTA - = (1 << 0); PORTA & = ~ (1 << 1); } else if (i == 2) { PORTA - = (1 << 1); PORTA & = ~ (1 << 0); }
Puteți conecta pinii motorului la orice pin GPIO în funcție de GPIO-ul utilizat. De asemenea, este important să utilizați Motor Driver IC pentru a reduce sarcina microcontrolerului, deoarece microcontrolerele nu sunt capabile să furnizeze curentul necesar pentru a rula motoarele de curent continuu. Pentru mai multe detalii și alte proiecte bazate pe motoare de curent continuu, vă rugăm să vizitați linkul dat.
Codul complet și videoclipul demonstrativ sunt prezentate mai jos.