- Hvad er en servomotor?
- Interfacing servomotorer med mikrokontroller:
- Programmering af servomotor med PICF877A PIC-mikrocontroller:
- Kredsløbsdiagram:
- Simulation og hardwareopsætning:
Dette er vores 11. tutorial om indlæring af PIC-mikrocontrollere ved hjælp af MPLAB og XC8. I denne vejledning lærer vi, hvordan du styrer servomotor med PIC Microcontroller. Hvis du allerede har arbejdet med Servomotorer, kan du springe over den første halvdel af denne vejledning, men hvis du ikke er ny på selve servomotoren, skal du fortsætte med at læse.
Indtil nu har vi dækket mange grundlæggende tutorials som LED blinker med PIC, Timere i PIC, interface LCD, interface 7-segment, ADC ved hjælp af PIC osv. Hvis du er en absolut nybegynder, så besøg den komplette liste over PIC-tutorials her og begynde at lære.
I vores tidligere tutorial lærte vi, hvordan man genererer PWM-signaler ved hjælp af PIC Microcontroller, signalerne blev genereret baseret på den værdi, der blev aflæst fra potentiometeret. Hvis du har forstået alle programmer, så, Tillykke, du har allerede kodet til en Servomotor også. JA, Servomotorer reagerer på PWM-signalerne (som vi opretter ved hjælp af timere her), vi lærer hvorfor og hvordan i denne vejledning. Vi simulerer og bygger hardwareopsætningen til dette projekt, og du kan finde den detaljerede video i slutningen af denne vejledning.
Hvad er en servomotor?
En servomotor er en type aktuator (for det meste cirkulær), der tillader vinkelkontrol. Der er mange typer servomotorer tilgængelige, men lad os i denne vejledning koncentrere os om hobby servomotorer vist nedenfor.
Hobby servoer er populære, fordi de er den billige metode til bevægelseskontrol. De leverer en hyldeløsning til de fleste af R / C og robothobbyisters behov. De fjerner også behovet for at skræddersy design af et kontrolsystem til hver applikation.
De fleste hobbymotorer har en rotationsvinkel på 0-180 °, men du kan også få 360 ° servomotor, hvis du er interesseret. Denne tutorial bruger en 0- 180 ° servomotor. Der er to typer servomotorer baseret på gearet, den ene er plastgear servomotor og den anden er metalgear servomotor. Metaludstyr bruges på steder, hvor motoren udsættes for mere slitage, men det kommer kun til en høj pris.
Servomotorer er klassificeret i kg / cm (kilogram per centimeter) De fleste hobby servomotorer er klassificeret til 3 kg / cm eller 6 kg / cm eller 12 kg / cm. Dette kg / cm fortæller dig, hvor meget vægt din servomotor kan løfte på en bestemt afstand. For eksempel: En 6 kg / cm servomotor skal være i stand til at løfte 6 kg, hvis lasten hænges 1 cm væk fra motorakslen, jo større afstand desto mindre er vægtens bæreevne. Lær her det grundlæggende i servomotor.
Interfacing servomotorer med mikrokontroller:
Interfacing hobby Servomotorer med MCU er meget let. Servoer har tre ledninger, der kommer ud af dem. Heraf to vil blive brugt til forsyning (positiv og negativ) og en vil blive brugt til signalet, der skal sendes fra MCU. I denne vejledning bruger vi en MG995 Metal Gear Servomotor, der mest bruges til RC-biler, humanoide bots osv. Billedet af MG995 er vist nedenfor:
Farvekodningen af din servomotor kan variere, og tjek derfor for dit respektive datablad.
Alle servomotorer arbejder direkte med dine + 5V forsyningsskinner, men vi skal være forsigtige med den mængde strøm, motoren bruger, hvis du planlægger at bruge mere end to servomotorer, skal der designes et ordentligt servoskjold. I denne vejledning bruger vi simpelthen en servomotor til at vise, hvordan vi programmerer vores PIC MCU til at styre motoren. Tjek nedenstående links for at interfacere servomotor med anden mikrocontroller:
- Servomotor grænseflade med 8051 mikrokontroller
- Servomotor kontrol ved hjælp af Arduino
- Raspberry Pi Servomotorvejledning
- Servomotor med AVR-mikrocontroller
Programmering af servomotor med PICF877A PIC-mikrocontroller:
Før vi kan begynde at programmere for Servomotoren, skal vi vide, hvilken type signal der skal sendes til styring af Servomotoren. Vi skal programmere MCU'en til at sende PWM-signaler til servomotorens signalkabel. Der er et kontrolkredsløb inde i servomotoren, der læser PWM-signalets driftscyklus og placerer servomotorakslen på det respektive sted som vist på billedet nedenfor
Hver servomotor fungerer på forskellige PWM-frekvenser (den mest almindelige frekvens er 50 Hz, som bruges i denne vejledning), så få databladet til din motor for at kontrollere, hvilken PWM-periode din servomotor fungerer.
Detaljerne om PWM-signalet til vores Tower pro MG995 er vist nedenfor.
Ud fra dette kan vi konkludere, at vores motor fungerer med en PWM-periode på 20 ms (50Hz). Så frekvensen af vores PWM-signal skal indstilles til 50Hz. Frekvensen af PWM, som vi havde indstillet i vores forrige tutorial, var 5 KHz, ved at bruge det samme hjælper os ikke her.
Men vi har et problem her. Den PIC16F877A kan ikke generere lavfrekvente PWM signaler ved hjælp af CCP-modulet. Ifølge databladet er den lavest mulige værdi, der kan indstilles til PWM-frekvensen, 1,2 KHz. Så vi er nødt til at droppe ideen om at bruge CCP-modul og finde en måde at lave vores egne PWM-signaler på.
Derfor bruger vi i denne vejledning timermodulet til at generere PWM-signaler med 50Hz frekvens og variere deres arbejdscyklus for at kontrollere servomotorens engel. Hvis du er nybegynder med timere eller ADC med PIC, skal du falde tilbage til denne vejledning, fordi jeg vil springe over de fleste ting, da vi allerede har dækket dem der.
Vi initialiserer vores Timer-modul med en prescaler på 32 og får det til at løbe for hver 1us. I henhold til vores datablad skal PWM kun have en periode på 20 ms. Så vores tid til og fra tid sammen skal være nøjagtigt lig med 20 ms.
OPTION_REG = 0b00000100; // Timer0 med ekstern freq og 32 som prescaler TMR0 = 251; // Indlæs tidsværdien for 1us delayValue kan være mellem 0-256 kun TMR0IE = 1; // Aktivér timerinterruptbit i PIE1-registeret GIE = 1; // Aktiver Global Interrupt PEIE = 1; // Aktivér den perifere afbrydelse
Så inden i vores afbrydelsesrutinefunktion tænder vi stiften RB0 i det angivne tidsrum og slukker den for reametiden (20ms - on_time). Værdien af tiden kan specificeres ved hjælp af Potentiometer og ADC-modulet. Afbrydelsen er vist nedenfor.
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer er overløb {TMR0 = 252; / * Indlæs timerværdien, (Bemærk: Timerværdi er 101 insta af 100, da TImer0 har brug for to instruktionscyklusser for at begynde at forøge TMR0 * / TMR0IF = 0; // Ryd timer afbryde flagantal ++;} hvis (count> = on_time) { RB0 = 1; // supplerer værdien for at blinke lysdioderne} hvis (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Inden i vores mens sløjfe læser vi bare værdien af potentiometer ved hjælp af ADC-modulet og opdaterer tiden til PWM ved hjælp af læseværdien.
mens (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_værdi); }
På denne måde har vi oprettet et PWM-signal, hvis periode er 20 ms og har en variabel driftscyklus, som kan indstilles ved hjælp af et potentiometer. Komplet kode er angivet nedenfor i kodeafsnittet.
Lad os nu kontrollere output ved hjælp af proteus-simulering og gå videre til vores hardware.
Kredsløbsdiagram:
Hvis du allerede er stødt på PWM-tutorialen, vil skemaerne i denne tutorial være de samme, bortset fra hvilke vi tilføjer en servomotor i stedet for LED-lyset.
Simulation og hardwareopsætning:
Ved hjælp af Proteus-simulering kan vi verificere PWM-signalet ved hjælp af et oscilloskop og også kontrollere servomotorens roterende vinkel. Få øjebliksbilleder af simuleringen er vist nedenfor, hvor servomotorens roterende engel og PWM-driftscyklus kan bemærkes for at blive ændret baseret på potentiometeret. Tjek yderligere den fulde video, af rotation ved forskellige PWM, i slutningen.
Som vi kan se, bliver servodrejningsenglen ændret baseret på potentiometerværdien. Lad os nu gå videre til vores hardwareopsætning.
I hardwareopsætningen har vi netop fjernet LED-kortet og tilføjet Servomotoren som vist i skemaerne ovenfor.
Hardware vises på billedet nedenfor:
Den Videoen nedenfor viser, hvordan servomotor reagerer på de forskellige positioner af potentiometeret.
Det er det!! Vi har interfacet en servomotor med en PIC Microcontroller, nu kan du bruge din egen kreativitet og finde ud af applikationer til dette. Der er mange projekter derude, der bruger en servomotor.