el mòdul controlador PCA9685 per Arduino i altres plataformes és una solució àmpliament utilitzada quan cal controlar diversos dispositius que operen amb senyals PWM. Encara que inicialment va ser concebut per controlar LEDs, la seva versatilitat ha permès que també sigui una opció freqüent per al control de servos. Aquest xip és extremadament popular en projectes de robòtica i automatització per la capacitat de controlar múltiples dispositius amb precisió i simplicitat.
Aquest article no només us mostrarà com utilitzar el PCA9685 en combinació amb Arduino i altres microcontroladors, sinó que també detallarà cadascun dels aspectes tècnics que necessites conèixer per aprofitar al màxim aquest component. Ho explicarem tot des de com connectar-ho fins com manejar llibreries de codi perquè puguis controlar els teus motors i servos amb total facilitat.
Què és el PCA9685 i per què es fa servir?

El PCA9685 és un controlador PWM (Pulse Width Modulation) dissenyat per gestionar fins a 16 sortides, ideal per controlar llums LED i servomotors. Es comunica mitjançant el bus I2C, cosa que significa que únicament necessita dues pins per connectar-se a un microcontrolador com Arduino o Raspberry Pi. A través de l'ús d'adreces específiques, fins i tot pots connectar fins a 62 d'aquests mòduls al mateix bus I2C, aconseguint controlar prop de 992 sortides PWM. Això ho converteix en una opció molt potent per a projectes que requereixin gestionar molts dispositius de forma coordinada.
L'ús més estès del PCA9685 és en projectes on cal un senyal PWM. Un exemple clar és el control de servos, els quals es manegen a partir de senyals de PWM. A més, el controlador té una precisió de 12 bits de, el que us permet generar senyals molt fins, amb freqüència ajustable fins a un màxim de 1600 Hz.
Característiques i avantatges del PCA9685
Una de les principals avantatges de l' PCA9685 és que treu la càrrega del microcontrolador quant a la generació constant de senyals PWM. Això és especialment útil en projectes que impliquen el control de molts dispositius, ja que permet que el processador principal s'enfoca en altres tasques.
- 16 canals independents: Cadascun dels 16 canals pot emetre un senyal PWM independent, la qual cosa permet controlar dispositius com servos, motors i llums LED.
- Control I2C: El PCA9685 utilitza una interfície I2C per comunicar-se amb el controlador principal (Arduino, Raspberry Pi, etc.), i només requereix dos cables per a la comunicació (SDA i SCL).
- Múltiples mòduls en un sol bus: Es poden connectar fins a 62 mòduls PCA9685 al mateix bus I2C, aconseguint controlar fins a 992 sortides PWM.
- Freqüència ajustable: Suporta freqüències de fins a 1600 Hz, encara que per al control de servos típics s'usa una freqüència de 50-60 Hz.
Connexió entre Arduino i PCA9685

La connexió entre el mòdul PCA9685 i un Arduino és senzilla, i es fa mitjançant els pins I2C (SCL i SDA) i els pins d'alimentació. A la taula següent s'especifiquen les connexions típiques per a diversos models d'Arduino:
| Pin PCA9685 | Arduino Uno/Nano | Arduino Mega | Arduino Leonardo |
|---|---|---|---|
| GND | GND | GND | GND |
| 5V | 5V | 5V | 5V |
| SCL | A5 | 21 | 3 |
| SDA | A4 | 20 | 2 |
En aquesta configuració, els pins A4 i A5 o els seus equivalents a la plataforma corresponent, es connecten als pins SDA (dades) i SCL (rellotge) del mòdul PCA9685. A més, és important comptar amb una font d'alimentació externa adequada per als servomotors, especialment si estàs connectant múltiples servos, ja que l'Arduino no proporciona prou corrent per manejar-los correctament.
Es recomana fer servir una font de 5V per alimentar els servos, i assegura't de connectar adequadament els pins d'alimentació. Si uses més de 16 servos, també es recomana soldar un condensador de 1000uF a la placa per estabilitzar l'alimentació.
Configuració al codi
Per poder gestionar les sortides PWM del PCA9685, s'utilitza una llibreria desenvolupada per Adafruit. Pots descarregar-la des de seva pàgina de GitHub. Aquí us mostrem un exemple bàsic per configurar el mòdul i moure un servo:
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(); void setup() { servos.begin(); servos.setPWMFreq(60); // Configura la frecuencia PWM a 60Hz } void loop() { servos.setPWM(0, 0, 172); // Mueve el servo del canal 0 a la posición 0 grados delay(1000); servos.setPWM(0, 0, 565); // Mueve el servo a la posición 180 grados delay(1000); }
Aquest simple codi realitza un moviment d'escombrada al servo connectat al canal 0, portant-lo de 0 graus a 180 graus lentament. Pots fer servir la funció setPWM() per controlar cadascuna de les sortides del PCA9685 de manera independent.
Movent diversos servos alhora
Una de les grans avantatges de l' PCA9685 és que et permet controlar diversos servos simultàniament. A continuació us mostrem com podeu moure diversos servomotors a diferents posicions dins del mateix cicle de codi:
void loop() { setServo(0, 30); setServo(2, 90); setServo(4, 180); delay(1000); } void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, 172, 565); servos.setPWM(n_servo, 0, duty); }
En aquest cas, definim una funció anomenada setServe que rep com a paràmetres el nombre de servo i el seu angle, calculant l'amplada de pols apropiada i movent-ho a la posició desitjada. Així podràs controlar fàcilment diversos canals.
Com ajustar els límits per a diferents servos
No tots els servos tenen el mateix rang de valors per als angles de 0° a 180°. En alguns casos, haureu d'ajustar aquests valors de manera personalitzada. A continuació et mostrem com pots fer aquests ajustaments per a diferents servos:
unsigned int pos0[16]= {172, 256, 246, 246, 246, 172, 246, 200}; unsigned int pos180[16]= {565, 492, 492, 492, 492, 565, 492, 550}; void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, pos0[n_servo], pos180[n_servo]); servos.setPWM(n_servo, 0, duty); }
Aquest codi permet ajustar els valors de mínim i màxim per a cada servo connectat al PCA9685, la qual cosa serà summament útil si uses servos amb diferents intervals de senyal.
Amb tot això al cap, ja tens tot el necessari per configurar, connectar i codificar el teu primer projecte utilitzant el PCA9685. Ja sigui que estiguis treballant en un robot amb múltiples graus de llibertat, o necessitis controlar molts dispositius en paral·lel, aquest mòdul et permetrà fer-ho de manera eficient i precisa.
Ja sigui que estiguis treballant amb servos o sortides PWM, el PCA9685 facilita enormement el control de fins a 16 canals utilitzant només dues pins del teu microcontrolador. Amb una mica dexperiència i un bon codi, pots crear aplicacions molt potents sense sobrecarregar el processador principal.