- Hva er en servomotor?
- Grensesnitt servomotorer med mikrokontrollere:
- Programmering av servomotor med PICF877A PIC-mikrokontroller:
- Kretsdiagram:
- Simulering og maskinvareoppsett:
Dette er vår 11. opplæring om å lære PIC-mikrokontrollere ved hjelp av MPLAB og XC8. I denne opplæringen lærer vi hvordan du styrer servomotor med PIC Microcontroller. Hvis du allerede har jobbet med Servomotorer, kan du hoppe over første halvdel av denne opplæringen, men hvis du ikke er servomotor selv, fortsett å lese.
Til nå har vi dekket mange grunnleggende opplæringsprogrammer som LED blinker med PIC, Timere i PIC, grensesnitt LCD, grensesnitt 7-segment, ADC ved hjelp av PIC etc. Hvis du er en absolutt nybegynner, kan du gå til den komplette listen over PIC-veiledninger her og begynn å lære.
I vår forrige opplæring lærte vi hvordan vi kan generere PWM-signaler ved hjelp av PIC Microcontroller, signalene ble generert basert på verdien som ble lest fra potensiometeret. Hvis du har forstått alle programmene, Gratulerer, du har allerede kodet for en Servomotor også. JA, Servomotorer reagerer på PWM-signalene (som vi lager ved hjelp av timere her), vi vil lære hvorfor og hvordan i denne opplæringen. Vi vil simulere og bygge maskinvareoppsettet for dette prosjektet, og du kan finne den detaljerte videoen på slutten av denne veiledningen.
Hva er en servomotor?
En servomotor er en type aktuator (for det meste sirkulær) som tillater vinkelkontroll. Det er mange typer servomotorer tilgjengelig, men i denne opplæringen kan vi konsentrere oss om hobby servomotorene vist nedenfor.
Hobby servoer er populære fordi de er den billige metoden for bevegelseskontroll. De gir en hylleløsning for de fleste av R / C og robothobbyistens behov. De eliminerer også behovet for å skreddersy et kontrollsystem for hver applikasjon.
De fleste hobbymotorer har en rotasjonsengel på 0 - 180 °, men du kan også få 360 ° servomotor hvis du er interessert. Denne opplæringen bruker en 0- 180 ° servomotor. Det er to typer servomotorer basert på giret, den ene er servostyringen av plastgir og den andre er servostyringen av metall. Metallutstyr brukes på steder der motoren utsettes for mer slitasje, men det kommer bare til en høy pris.
Servomotorer er vurdert i kg / cm (kilogram per centimeter). De fleste hobby servomotorer er vurdert til 3 kg / cm eller 6 kg / cm eller 12 kg / cm. Denne kg / cm forteller deg hvor mye vekt servomotoren din kan løfte på en bestemt avstand. For eksempel: En 6 kg / cm servomotor skal kunne løfte 6 kg hvis lasten henges 1 cm fra motorakselen, jo større avstand desto mindre vektkapasitet. Lær her det grunnleggende om servomotor.
Grensesnitt servomotorer med mikrokontrollere:
Grensesnitt hobby servomotorer med MCU er veldig enkelt. Servoer har tre ledninger som kommer ut av dem. Av hvilke to vil bli brukt til forsyning (positiv og negativ) og en vil bli brukt til signalet som skal sendes fra MCU. I denne opplæringen bruker vi en MG995 servomotor av metallutstyr som er mest brukt for RC-biler med humanoide bots osv. Bildet av MG995 er vist nedenfor:
Fargekodingen til servomotoren din kan variere, og sjekk derfor det aktuelle databladet.
Alle servomotorer fungerer direkte med + 5V forsyningsskinnene dine, men vi må være forsiktige med hvor mye strøm motoren vil forbruke. Hvis du planlegger å bruke mer enn to servomotorer, bør det utformes et riktig servoskjold. I denne opplæringen vil vi bare bruke en servomotor for å vise hvordan vi programmerer PIC MCU til å kontrollere motoren. Sjekk koblingene nedenfor for å koble servomotor til annen mikrokontroller:
- Servomotor grensesnitt med 8051 mikrokontroller
- Servomotorstyring ved hjelp av Arduino
- Raspberry Pi Servomotoropplæring
- Servomotor med AVR-mikrokontroller
Programmering av servomotor med PICF877A PIC-mikrokontroller:
Før vi kan begynne å programmere for Servomotoren, bør vi vite hvilken type signal som skal sendes for å kontrollere Servomotoren. Vi bør programmere MCU for å sende PWM-signaler til signalledningen til servomotoren. Det er en kontrollkrets inni servomotoren som leser PWM-signalets driftssyklus og posisjonerer servomotorakselen på det respektive stedet som vist på bildet nedenfor
Hver servomotor opererer på forskjellige PWM-frekvenser (den vanligste frekvensen er 50 Hz som brukes i denne opplæringen), så få databladet til motoren din for å sjekke hvilken PWM-periode Servomotoren fungerer.
Detaljene på PWM-signalet for Tower pro MG995 er vist nedenfor.
Fra dette kan vi konkludere med at motoren vår fungerer med en PWM-periode på 20 ms (50Hz). Så frekvensen til PWM-signalet vårt bør settes til 50Hz. Frekvensen av PWM som vi hadde satt i vår forrige opplæring var 5 KHz, og det samme hjelper oss ikke her.
Men vi har et problem her. Den PIC16F877A kan ikke generere lavfrekvente PWM-signaler ved hjelp av CCP-modulen. I følge databladet er den lavest mulige verdien som kan stilles inn for PWM-frekvensen 1,2 KHz. Så vi må droppe ideen om å bruke CCP-modulen og finne en måte å lage våre egne PWM-signaler på.
Derfor vil vi i denne opplæringen bruke timermodulen til å generere PWM-signaler med 50Hz frekvens og variere driftssyklusen for å kontrollere servomotorens engel. Hvis du er nybegynner for tidtakere eller ADC med PIC, kan du falle tilbake til denne opplæringen, fordi jeg vil hoppe over det meste siden vi allerede har dekket dem der.
Vi initialiserer Timer-modulen med en prescaler på 32 og får den til å flyte over hver 1us. I følge databladet vårt skal PWM bare ha en periode på 20 ms. Så vår tid og fritid sammen bør være nøyaktig lik 20ms.
OPTION_REG = 0b00000100; // Timer0 med ekstern freq og 32 som prescaler TMR0 = 251; // Last tidsverdien for 1us delayValue kan være mellom 0-256 bare TMR0IE = 1; // Aktiver tidsavbruddsbit i PIE1-registeret GIE = 1; // Aktiver Global Interrupt PEIE = 1; // Aktiver perifer avbrudd
Så inne i vår avbrytende rutinefunksjon slår vi på pinnen RB0 i den angitte tiden og slår den av i romingstiden (20ms - on_time). Verdien av tiden kan spesifiseres ved hjelp av potensiometeret og ADC-modulen. Avbruddet er vist nedenfor.
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer har overfylt {TMR0 = 252; / * Last tidtakerverdien, (Merk: Tidsverdien er 101 innstilt på 100 da TImer0 trenger to instruksjonssykluser for å begynne å øke TMR0 * / TMR0IF = 0; // Clear timer interrupt flag count ++;} if (count> = on_time) { RB0 = 1; // utfyll verdien for å blinke LED-lampene} hvis (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Inne i mens sløyfen leser vi bare verdien av potensiometeret ved å bruke ADC-modulen og oppdaterer tiden for PWM ved hjelp av leseverdien.
mens (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_verdi); }
På denne måten har vi opprettet et PWM-signal som har en periode på 20 ms og har en variabel driftssyklus som kan stilles inn ved hjelp av et potensiometer. Komplett kode er gitt nedenfor i kodeseksjonen.
La oss nå bekrefte utdataene ved hjelp av proteus-simulering og fortsette til maskinvaren vår.
Kretsdiagram:
Hvis du allerede har kommet over PWM-opplæringen, vil skjemaene i denne opplæringen være de samme, bortsett fra at vi skal legge til en servomotor i stedet for LED-lyset.
Simulering og maskinvareoppsett:
Ved hjelp av Proteus-simulering kan vi verifisere PWM-signalet ved hjelp av et oscilloskop og også sjekke den roterende engelen til Servomotoren. Få stillbilder av simuleringen er vist nedenfor, der den roterende engelen til servomotoren og PWM-driftssyklusen kan bli lagt merke til for å bli endret basert på potensiometeret. Videre sjekk Full Video, av rotasjon ved forskjellige PWM, på slutten.
Som vi kan se, blir servorotasjonsengelen endret basert på potensiometerverdien. La oss nå gå videre til maskinvareoppsettet.
I maskinvareoppsettet har vi nettopp fjernet LED-kortet og lagt til Servomotoren som vist i skjemaene ovenfor.
Maskinvaren er vist på bildet nedenfor:
Den video nedenfor viser hvordan servomotoren reagerer på de forskjellige posisjoner av potensiometeret.
Det er det!! Vi har koblet en servomotor til en PIC Microcontroller, nå kan du bruke din egen kreativitet og finne ut applikasjoner for dette. Det er mange prosjekter der ute som bruker en servomotor.