- Què és un servomotor?
- Interconnexió de servomotors amb microcontroladors:
- Programació del servomotor amb microcontrolador PIC PF877A:
- Esquema de connexions:
- Simulació i configuració de maquinari:
Aquest és el nostre 11è tutorial sobre l' aprenentatge de microcontroladors PIC mitjançant MPLAB i XC8. En aquest tutorial aprendrem com controlar el servomotor amb el microcontrolador PIC. Si ja heu treballat amb servomotors, podeu saltar-vos la primera meitat d'aquest tutorial, però si no sou el propi servomotor, continueu llegint.
Fins ara, hem tractat molts tutorials bàsics com LED parpellejant amb PIC, temporitzadors en PIC, interfície LCD, interfície de 7 segments, ADC mitjançant PIC, etc. Si sou un principiant absolut, visiteu la llista completa de tutorials PIC aquí i començar a aprendre.
Al nostre tutorial anterior vam aprendre a generar senyals PWM mitjançant el microcontrolador PIC, els senyals es van generar en funció del valor llegit des del potenciòmetre. Si heu entès tots els programes, Enhorabona, ja heu codificat un motor Servo. SÍ, els servomotors responen als senyals PWM (que creem amb temporitzadors aquí), en aquest tutorial aprendrem per què i com. Simularem i construirem la configuració de maquinari per a aquest projecte i podeu trobar el vídeo detallat al final d’aquest tutorial.
Què és un servomotor?
Un Servomotor és un tipus d’actuador (majoritàriament circular) que permet el control angular. Hi ha molts tipus de servomotors disponibles, però en aquest tutorial anem a concentrar-nos en els servomotors hobby que es mostren a continuació.

Els servos hobby són populars perquè són el mètode econòmic de control del moviment. Proporcionen una solució per a la majoria de les necessitats de R / C i aficionats a la robòtica. També eliminen la necessitat de dissenyar a mida un sistema de control per a cada aplicació.
La majoria dels servomotors hobby tenen un àngel rotacional de 0 a 180 °, però també podeu obtenir un servo motor de 360 ° si us interessa. Aquest tutorial utilitza un servomotor de 0 a 180 °. Hi ha dos tipus de servomotors basats en l’engranatge, un és el servomotor d’engranatges de plàstic i l’altre és el servomotor engranatge metàl·lic. L’engranatge metàl·lic s’utilitza en llocs on el motor té més desgast, però només té un preu elevat.
Els servomotors estan classificats en kg / cm (quilograms per centímetre). La majoria dels servomotors hobby tenen una potència de 3 kg / cm o 6 kg / cm o 12 kg / cm. Aquest kg / cm us indica el pes que pot elevar el vostre servomotor a una distància determinada. Per exemple: un servomotor de 6 kg / cm hauria de poder aixecar 6 kg si la càrrega està suspesa a 1 cm de distància de l’eix del motor, com més gran sigui la distància menor serà la capacitat de càrrega del pes. Apreneu aquí els conceptes bàsics del servomotor.
Interconnexió de servomotors amb microcontroladors:
Interfacer servomotors hobby amb MCU és molt fàcil. Els servos tenen tres cables que en surten. Dels quals dos s'utilitzaran per al subministrament (positiu i negatiu) i un per al senyal que s'ha d'enviar des de la MCU. En aquest tutorial utilitzarem un servomotor MG995 Metal Gear, que s'utilitza més habitualment per a bots humanoides de cotxes RC, etc. La imatge de MG995 es mostra a continuació:


La codificació del color del vostre servomotor pot variar, per tant, comproveu la vostra fitxa tècnica respectiva.
Tots els servomotors funcionen directament amb els rails d’alimentació de + 5V, però hem de tenir precaució en la quantitat de corrent que consumiria el motor, si teniu previst utilitzar més de dos servomotors, s’hauria de dissenyar un escut servo adequat. En aquest tutorial, simplement utilitzarem un servomotor per mostrar com programar la nostra PIC MCU per controlar el motor. Consulteu els enllaços següents per connectar el Servo Motor amb un altre Microcontrolador:
- Interfície de servomotor amb microcontrolador 8051
- Control de servomotor mitjançant Arduino
- Tutorial de servomotor de Raspberry Pi
- Servomotor amb microcontrolador AVR
Programació del servomotor amb microcontrolador PIC PF877A:
Abans de poder començar a programar el servomotor, hem de saber quin tipus de senyal s’envia per controlar el servomotor. Hauríem de programar l’MCU per enviar senyals PWM al cable de senyal del motor Servo. Hi ha un circuit de control a l’interior del servomotor que llegeix el cicle de treball del senyal PWM i situa l’eix dels servomotors al lloc respectiu tal com es mostra a la imatge següent

Cada servomotor funciona amb freqüències PWM diferents (la freqüència més comuna és de 50 Hz que s’utilitza en aquest tutorial), així que obteniu el full de dades del vostre motor per comprovar el període PWM en què funciona el vostre servomotor.
A continuació es mostren els detalls del senyal PWM del nostre Tower pro MG995.

D’això podem concloure que el nostre motor funciona amb un període PWM de 20 ms (50 Hz). Per tant, la freqüència del nostre senyal PWM s’ha d’establir a 50Hz. La freqüència del PWM que havíem establert en el nostre tutorial anterior era de 5 KHz, fent servir el mateix no ens ajudarà aquí.
Però, aquí tenim un problema. El PIC16F877A no pot generar senyals PWM de baixa freqüència mitjançant el mòdul CCP. Segons el full de dades, el valor més baix possible que es pot establir per a la freqüència PWM és de 1,2 KHz. Per tant, hem d’abandonar la idea d’utilitzar el mòdul CCP i trobar una manera de crear els nostres propis senyals PWM.
Per tant, en aquest tutorial utilitzarem el mòdul temporitzador per generar els senyals PWM amb una freqüència de 50Hz i variarem el seu cicle de treball per controlar l’àngel del servomotor. Si no coneixeu els temporitzadors o els ADC amb PIC, torneu a aquest tutorial, ja que saltaré la majoria de les coses, ja que ja les hem tractat.
Inicialitzem el nostre mòdul Temporitzador amb un precalador de 32 i el desbordem per cada 1us. Segons el nostre full de dades, el PWM només hauria de tenir un període de 20 ms. Per tant, el temps d’aturada i de descans junts hauria de ser exactament igual a 20 ms.
OPTION_REG = 0b00000100; // Temporitzador0 amb freq extern i 32 com a prescaler TMR0 = 251; // Carregueu el valor de temps per 1us delayValue només pot estar entre 0-256 TMR0IE = 1; // Activa el bit d’interrupció del temporitzador al registre PIE1 GIE = 1; // Activa la interrupció global PEIE = 1; // Activeu la interrupció perifèrica
Per tant, dins de la nostra funció de rutina d’interrupcions, activem el pin RB0 durant el temps especificat i el desactivem durant el temps de fresat (20 ms - on_time). El valor del temps puntual es pot especificar mitjançant el mòdul Potentiometer i ADC. La interrupció es mostra a continuació.
oid interrupt timer_isr () {if (TMR0IF == 1) // El temporitzador s’ha desbordat {TMR0 = 252; / * Carregueu el valor del temporitzador, (Nota: Timervalue té 101 insta de 100, ja que el TImer0 necessita dos cicles d’instruccions per començar a incrementar TMR0 * / TMR0IF = 0; // Esborra el compte de banderes d’interrupció del temporitzador ++;} si (compte> = on_time) { RB0 = 1; // complementa el valor per parpellejar els LED} if (count> = (on_time + (200-on_time)) {RB0 = 0; count = 0;}}
Dins del nostre temps de bucle que acabem de llegir el valor de l'potenciòmetre mitjançant l'ús de la lliçó ADC i actualitzar el temps de connexió de l'PWM utilitzant el valor de lectura.
mentre que (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
D’aquesta manera hem creat un senyal PWM que té un període de 20 ms i un cicle de treball variable que es pot configurar mitjançant un potenciòmetre. A continuació, es mostra el codi complet a la secció de codis.
Ara, comprovem la sortida mitjançant la simulació de proteus i procedim al nostre maquinari.
Esquema de connexions:
Si ja heu trobat el tutorial de PWM, els esquemes d'aquest tutorial seran els mateixos, tret del qual afegirem un servomotor en lloc de la llum LED.

Simulació i configuració de maquinari:
Amb l’ajut de la simulació Proteus podem verificar el senyal PWM mitjançant un oscil·loscopi i també comprovar l’àngel giratori del motor Servo. A continuació es mostren poques instantànies de la simulació, on es pot notar que l’àngel giratori del servomotor i el cicle de treball PWM canvien en funció del potenciòmetre. Consulteu a continuació el vídeo complet, de rotació en diferents PWM, al final.


Com podem veure, l’àngel de rotació del servo canvia en funció del valor del potenciòmetre. Ara anem a la configuració del maquinari.
A la configuració del maquinari acabem d’eliminar la placa LED i afegir el motor Servo tal com es mostra als esquemes anteriors.
El maquinari es mostra a la imatge següent:

El vídeo següent mostra com reacciona el servomotor a les diverses posicions del potenciòmetre.
Això és!! Hem interfaçat un servomotor amb un microcontrolador PIC, ara podeu utilitzar la vostra pròpia creativitat i descobrir-ne les aplicacions. Hi ha molts projectes que fan servir un servomotor.
