- Què és un motor de corrent continu?
- Components necessaris
- Esquema de connexions
- Programació Atmega16 per al control de motors CC
Els motors de corrent continu són els motors més utilitzats. Aquests motors es poden trobar gairebé a tot arreu, des de petits projectes fins a robòtica avançada. Prèviament, hem interfaçat el motor de corrent continu amb molts altres microcontroladors com Arduino, Raspberry pi i l’hem utilitzat en molts projectes robotitzats. Avui aprenem a controlar el motor de corrent continu amb el microcontrolador AVR Atmega16. Però abans d’anar endavant sabem més sobre el motor de corrent continu.
Què és un motor de corrent continu?
El motor de corrent continu és un dispositiu que transforma l’energia elèctrica en energia mecànica. Concretament, un motor de corrent continu utilitza corrent continu per convertir l’energia elèctrica en energia mecànica. El principi bàsic del motor és la interacció entre el camp magnètic i el corrent per produir una força dins del motor que ajuda el motor a girar. Així, quan el corrent elèctric es fa passar per una bobina en un camp magnètic, es genera una força magnètica que produeix un parell resultant en el moviment del motor. La direcció del motor es controla invertint el corrent. També es pot variar la seva velocitat variant la tensió subministrada. Com que els microcontroladors tenen pins PWM, es pot utilitzar per controlar la velocitat del motor.
En aquest tutorial, es demostrarà el funcionament del motor de corrent continu amb Atmega16. El controlador del motor L293D s'utilitzarà per invertir la direcció del corrent i, per tant, la direcció del moviment. El controlador del motor L293D utilitza la configuració del circuit H-Bridge que genera la corrent necessària al motor. Per seleccionar la direcció del motor s’utilitzen dos polsadors. Un del polsador s’utilitza per seleccionar la rotació del rellotge i l’altre per seleccionar el funcionament anti-rellotge del motor de corrent continu.

Components necessaris
- Motor de corrent continu (5V)
- Controlador de motor L293D
- CI de microcontrolador Atmega16
- Oscil·lador de vidre de 16 MHz
- Dos condensadors 100nF
- Dos condensadors de 22pF
- Polsador
- Jumper Wires
- Taula de pa
- USBASP v2.0
- Led (qualsevol color)
Esquema de connexions

Programació Atmega16 per al control de motors CC
Aquí l'Atmega16 es programa mitjançant USBASP i Atmel Studio7.0. Si no sabeu com programar Atmega16 mitjançant USBASP, visiteu l'enllaç. El programa complet es dóna al final del projecte, només cal que pengeu el programa a Atmega16 i utilitzeu els dos botons de pressió per girar el motor de CC en sentit horari i antihorari.El motor de corrent continu es connecta mitjançant un controlador de motor L293D. El motor de CC girarà en dues direccions quan es prem el botó respectiu. El polsador d’un s’utilitzarà per girar el motor de corrent continu en direcció Clock Wise i l’altre polsador s’utilitzarà per girar el motor de corrent continu en sentit contrari al rellotge. En primer lloc, definiu la freqüència de la CPU del microcontrolador i incloeu totes les biblioteques necessàries.
#define F_CPU 16000000UL #include #include
A continuació, utilitzeu una variable per fer un seguiment de l'estat del botó premut. Aquesta variable s'utilitzarà per definir la direcció del motor.
int i;
Seleccioneu el mode d'entrada / sortida de GPIO mitjançant el registre de direcció de dades. Inicialment, reduïu la sortida del passador del motor per evitar l’arrencada del motor sense prémer el botó.
DDRA = 03; PORTA & = ~ (1 << 1); PORTA & = ~ (1 << 0);
Comprovar si 1 st es pressiona el polsador connectat a Porta4 de ATmega16 i emmagatzemar l'estat de el botó polsador a la variable.
if (! bit_is_clear (PINA, 4)) { i = 1; PORTA & = ~ (1 << 1); _delay_ms (1000); }
De la mateixa manera, comproveu si es prem el 2n polsador connectat a PORTA5 d'Atmega16 i deseu l'estat del polsador en variable.
else if (! bit_is_clear (PINA, 5)) { i = 2; PORTA & = ~ (1 << 0); _delay_ms (1000); }
Si l'estat de la 1 st botó és cert, llavors girar motor de corrent continu en sentit de les agulles de l'rellotge i si l'estat de la segona polsador és cert, llavors girar motor DC en anti-agulles de el rellotge.
if (i == 1) { PORTA - = (1 << 0); PORTA & = ~ (1 << 1); } else if (i == 2) { PORTA - = (1 << 1); PORTA & = ~ (1 << 0); }
Podeu connectar els pins del motor a qualsevol pin GPIO en funció del GPIO utilitzat. També és important utilitzar el controlador de motor IC per disminuir la càrrega del microcontrolador, ja que els microcontroladors no són capaços de proporcionar el corrent necessari per fer funcionar motors de corrent continu. Per obtenir més informació i altres projectes basats en motors de corrent continu, visiteu l'enllaç donat.

A continuació es mostra el codi complet i el vídeo de demostració.
