- Wat is een DC-motor?
- Componenten vereist
- Schakelschema
- Programmering Atmega16 voor DC-motorbesturing
Gelijkstroommotoren zijn de meest gebruikte motoren. Deze motoren zijn bijna overal te vinden, van kleine projecten tot geavanceerde robotica. We hebben eerder DC-motor gekoppeld aan veel andere microcontrollers zoals Arduino, Raspberry pi en deze in veel robotprojecten gebruikt. Vandaag leren we DC-motor te besturen met AVR Microcontroller Atmega16. Maar voordat we verder gaan, laten we meer weten over de DC-motor.
Wat is een DC-motor?
DC-motor is een apparaat dat elektrische energie omzet in mechanische energie. Concreet gebruikt een DC-motor gelijkstroom om elektrische energie om te zetten in mechanische energie. Het basisprincipe van de motor is de interactie tussen het magnetische veld en de stroom om een kracht in de motor te produceren die de motor helpt te draaien. Dus wanneer de elektrische stroom door een spoel in een magnetisch veld wordt geleid, wordt een magnetische kracht gegenereerd die een koppel produceert dat resulteert in de beweging van de motor. De richting van de motor wordt geregeld door de stroom om te keren. Ook de snelheid kan worden gevarieerd door de geleverde spanning te variëren. Omdat microcontrollers PWM-pinnen hebben, kan deze worden gebruikt om de motorsnelheid te regelen.
In deze tutorial wordt de werking van de DC-motor gedemonstreerd met Atmega16. De L293D-motordriver wordt gebruikt om de richting van de stroom en dus de bewegingsrichting om te keren. De L293D-motordriver maakt gebruik van een H-Bridge-circuitconfiguratie die de vereiste stroom naar de motor stuurt. Twee drukknoppen worden gebruikt om de motorrichting te selecteren. Een van de drukknoppen wordt gebruikt om de rotatie met de klok mee te selecteren en de andere wordt gebruikt om de antiklokwerking van de DC-motor te selecteren.
Componenten vereist
- Gelijkstroommotor (5V)
- L293D-motorstuurprogramma
- Atmega16 Microcontroller IC
- 16Mhz kristaloscillator
- Twee 100nF condensatoren
- Twee 22pF condensatoren
- Druk op de knop
- Doorverbindingsdraden
- Breadboard
- USBASP v2.0
- Led (elke kleur)
Schakelschema
Programmering Atmega16 voor DC-motorbesturing
Hier wordt de Atmega16 geprogrammeerd met behulp van USBASP en Atmel Studio7.0. Als u niet weet hoe u Atmega16 moet programmeren met USBASP, bezoek dan de link. Het complete programma wordt aan het einde van het project gegeven, upload het programma in Atmega16 en gebruik de twee drukknoppen om de DC-motor met de klok mee en tegen de klok in te draaien.De DC-motor is gekoppeld met behulp van de L293D-motordriver. De gelijkstroommotor zal in twee richtingen draaien wanneer de betreffende drukknop wordt ingedrukt. De ene drukknop wordt gebruikt om de gelijkstroommotor in de richting van de klok mee te draaien en de andere drukknop wordt gebruikt om de gelijkstroommotor tegen de klok in te draaien. Definieer eerst de CPU-frequentie van de microcontroller en neem alle benodigde bibliotheken op.
#define F_CPU 16000000UL #include #include
Gebruik vervolgens een variabele om de status van de drukknop ingedrukt te houden. Deze variabele wordt gebruikt om de motorrichting te bepalen.
int ik;
Selecteer de invoer- / uitvoermodus van GPIO met behulp van het gegevensrichtingsregister. Maak in eerste instantie de uitgang van de motorpen zo laag om te voorkomen dat de motor wordt gestart zonder op de drukknop te drukken.
DDRA = 03; PORTA & = ~ (1 << 1); PORTA & = ~ (1 << 0);
Controleer of de 1 e drukknop is ingedrukt verbonden met PORTA4 van Atmega16 en sla de status van de drukknop op in variabel.
if (! bit_is_clear (PINA, 4)) { i = 1; PORTA & = ~ (1 << 1); _delay_ms (1000); }
Controleer op dezelfde manier of de 2 e drukknop is ingedrukt die is aangesloten op PORTA5 van Atmega16 en sla de status van de drukknop op in variabele.
anders if (! bit_is_clear (PINA, 5)) { i = 2; PORTA & = ~ (1 << 0); _delay_ms (1000); }
Als de status van de 1 ste knop waar draai gelijkstroommotor in wijzerzin richting en als de status van de tweede drukknop waar draai DC motor tegen de klok.
if (i == 1) { PORTA - = (1 << 0); PORTA & = ~ (1 << 1); } else if (i == 2) { PORTA - = (1 << 1); PORTA & = ~ (1 << 0); }
U kunt motorpennen op elke GPIO-pen aansluiten, afhankelijk van de gebruikte GPIO. Het is ook belangrijk om Motor Driver IC te gebruiken om de belasting van de microcontroller te verminderen, aangezien microcontrollers niet in staat zijn om de vereiste stroom te leveren om DC-motoren te laten draaien. Bezoek de gegeven link voor meer informatie en andere projecten op basis van DC-motoren.
Volledige code en demonstratievideo worden hieronder gegeven.