- PWM (modulació de l'amplada de pols):
- Servomotor i PWM:
- Components necessaris:
- Esquema de connexions:
- Explicació de treball i programació:
Raspberry Pi és una placa basada en processadors d'arquitectura ARM dissenyada per a enginyers electrònics i aficionats. El PI és ara una de les plataformes de desenvolupament de projectes amb més confiança. Amb una velocitat de processador més alta i 1 GB de RAM, el PI es pot utilitzar per a molts projectes de gran perfil com el processament d’imatges i Internet de les coses.
Per fer qualsevol projecte de gran perfil, cal entendre les funcions bàsiques de PI. Cobrirem totes les funcionalitats bàsiques de Raspberry Pi en aquests tutorials. A cada tutorial parlarem d'una de les funcions de PI. Al final d'aquesta sèrie de tutorials de Raspberry Pi, podreu fer projectes de gran perfil vosaltres mateixos. Consulteu els tutorials següents:
- Introducció a Raspberry Pi
- Configuració de Raspberry Pi
- LED intermitent
- Interfície de botons Raspberry Pi
- Generació Raspberry Pi PWM
- Control del motor de corrent continu mitjançant Raspberry Pi
- Control del motor pas a pas amb Raspberry Pi
- Interfacing Shift Register amb Raspberry Pi
- Tutorial ADC de Raspberry Pi
En aquest tutorial controlarem el Servo Motor amb Raspberry Pi. Abans d’anar al servo parlem de PWM perquè el concepte de controlar Servo Motor neix.
PWM (modulació de l'amplada de pols):
Abans hem parlat de PWM moltes vegades a: Modulació d'amplada de pols amb ATmega32, PWM amb Arduino Uno, PWM amb IC de temporitzador 555 i PWM amb Arduino Due. PWM significa "Modulació de l'amplada de pols". El PWM és un mètode utilitzat per obtenir tensió variable d'una font d'alimentació estable. Per a una millor comprensió de PWM, considereu el circuit següent,

A la figura anterior, si l'interruptor es tanca contínuament durant un període de temps, el LED estarà "ENCENDUT" durant aquest temps contínuament. Si l’interruptor es tanca durant mig segon i s’obre durant el següent segon, el LED només s’encendrà durant la primera meitat del segon. Ara, la proporció per a la qual el LED està encès durant el temps total s’anomena cicle de treball i es pot calcular de la següent manera:
Cicle de treball = Temps d’activació / (Temps d’encès + Temps d’APAGAT)
Cicle de treball = (0,5 / (0,5 + 0,5)) = 50%
Per tant, la tensió de sortida mitjana serà del 50% de la tensió de la bateria.
A mesura que augmentem la velocitat d’ACTIVACIÓ i APAGAT a un nivell, veurem que el LED queda atenuat en lloc d’estar encès i apagat. Això es deu al fet que els nostres ulls no poden captar clarament freqüències superiors a 25Hz. Penseu en el cicle de 100 ms, el LED està apagat durant 30 ms i ON durant 70 ms. Tindrem un 70% de tensió estable a la sortida, de manera que el LED brillarà contínuament amb un 70% d’intensitat.
La relació de tasques va de 0 a 100. "0" significa que està completament DESACTIVAT i que "100" està completament ACTIVAT. Aquesta relació de treball és molt important per al servomotor. La posició del servomotor està sent determinada per aquesta relació de treball. Comproveu això per demostrar PWM amb LED i Raspberry Pi.
Servomotor i PWM:
Un servomotor és una combinació de motor de corrent continu, sistema de control de posició i engranatges. Els servos tenen moltes aplicacions al món modern i, amb això, estan disponibles en diferents formes i mides. Utilitzarem SG90 servo motor en aquest tutorial, és un dels més populars i més barat. SG90 és un servo de 180 graus. Així, amb aquest servo podem situar l’eix de 0 a 180 graus.
Un Servo Motor té principalment tres cables, un per a tensió positiva, un altre per a terra i un darrer per a configuració de posició. El cable vermell està connectat a l’alimentació, el cable marró a terra i el cable groc (o BLANC) al senyal.


Al servo, tenim un sistema de control que pren el senyal PWM del pin de senyal. Descodifica el senyal i obté la relació de treball. Després, compara la relació amb els valors de posicions predefinits. Si hi ha una diferència en els valors, ajusta la posició del servo en conseqüència. Per tant, la posició de l’eix del servomotor es basa en la relació de treball del senyal PWM al pin del senyal.
La freqüència del senyal PWM (Pulse Width Modulated) pot variar en funció del tipus de servomotor. Per a SG90 la freqüència del senyal PWM és de 50Hz. Per esbrinar la freqüència d’operació del vostre servo, consulteu el full de dades d’aquest model en concret. Per tant, un cop seleccionada la freqüència, l’altra cosa important aquí és la RELACIÓ DE DEURE del senyal PWM.
La taula següent mostra la posició del servo per a aquesta relació de treball en particular. Podeu obtenir qualsevol angle intermedi triant el valor en conseqüència. Així doncs, per a 45º de servo, la relació de treball ha de ser del 5% o del 5%.
|
POSICIÓ |
RELACIÓ DE DEURE |
|
0º |
2.5 |
|
90º |
7.5 |
|
180º |
12.5 |
Abans d’ entreconnectar el servo motor amb el Raspberry Pi, podeu provar el vostre servo amb l’ajut d’aquest circuit de verificació del motor servo. Consulteu també els nostres projectes Servo següents:
- Control de servomotor mitjançant Arduino
- Control de servomotor amb Arduino Due
- Interfície de servomotor amb microcontrolador 8051
- Control de servomotor mitjançant MATLAB
- Control del servomotor mitjançant sensor Flex
- Control de posició servo amb pes (sensor de força)
Components necessaris:
Aquí fem servir Raspberry Pi 2 Model B amb Raspbian Jessie OS. Tots els requisits bàsics de maquinari i programari s’han comentat prèviament. Podeu consultar-los a la introducció de Raspberry Pi, a part d’això que necessitem:
- Pins de connexió
- Condensador de 1000uF
- Servomotor SG90
- Taula de pa
Esquema de connexions:

A1000µF s'ha de connectar a través del rail d'alimentació de + 5V, en cas contrari, el PI es podria apagar aleatòriament mentre es controla el servo.
Explicació de treball i programació:
Un cop tot estigui connectat segons el diagrama del circuit, podem activar el PI per escriure el programa en PYHTON.
Parlarem de poques ordres que farem servir al programa PYHTON, Importarem un fitxer GPIO de la biblioteca, la funció següent ens permet programar pins GPIO de PI. També estem canviant el nom de "GPIO" per "IO", de manera que al programa sempre que vulguem referir-nos als pins GPIO utilitzarem la paraula "IO".
importar RPi.GPIO com a IO
De vegades, quan els pins GPIO, que estem intentant utilitzar, poden estar fent algunes altres funcions. En aquest cas, rebrem avisos mentre executem el programa. L'ordre següent indica al PI que ignori les advertències i que continuï amb el programa.
IO.setwarnings (fals)
Podem referir els pins GPIO de PI, ja sigui pel número de pin a bord o pel seu número de funció. Igual que el "PIN 29" al tauler és "GPIO5". Així doncs, aquí expliquem que aquí representarem el passador per "29" o "5".
IO.setmode (IO.BCM)
Estem configurant PIN39 o GPIO19 com a pin de sortida. Obtenirem la sortida PWM d’aquest pin.
IO.setup (19, IO.OUT)
Després de configurar el pin de sortida, hem de configurar el pin com a pin de sortida PWM, p = IO.PWM (canal de sortida, freqüència del senyal PWM)
L'ordre anterior és per configurar el canal i també per configurar la freqüència del canal ”. 'p' aquí és una variable que pot ser qualsevol cosa. Estem utilitzant GPIO19 com a “canal de sortida” de PWM. "Freqüència del senyal PWM" escollirem 50, ja que la freqüència de treball SG90 és de 50Hz.
L'ordre següent s'utilitza per iniciar la generació de senyals PWM. " DUTYCYCLE " serveix per establir la proporció "Activa" com s'ha explicat anteriorment, p.start (DUTICLE)
L'ordre de sota s'utilitza com a bucle per sempre, amb aquesta ordre les instruccions dins d'aquest bucle s'executaran contínuament.
Mentre que 1:
Aquí el programa per controlar el Servo mitjançant Raspberry Pi proporciona un senyal PWM a GPIO19. La relació de treball del senyal PWM es canvia entre tres valors durant tres segons. Així doncs, per cada segon el Servo gira a una posició determinada per la relació de treball. El servo gira contínuament a 0º, 90º i 180º en tres segons.
