Codice Arduino e video per il controller per servomotori PCA9685 a 16 canali e 12 bit V1

Codice Arduino e video per il controller per servomotori PCA9685 a 16 canali e 12 bit V1

In questo tutorial esploreremo come utilizzare il controller per servomotori PCA9685 a 16 canali e 12 bit di NXP Semiconductor. Questo modulo consente di controllare fino a 16 servomotori o di regolare l'intensità di un banco di LED con precisione utilizzando la modulazione di larghezza d'impulso (PWM). Al termine di questo tutorial avrai una configurazione funzionante in grado di controllare più servomotori singolarmente o contemporaneamente.

PCA9685 module-0

Per chiarire ulteriormente il contenuto del tutorial, ti invito a guardare il video di accompagnamento (nel video alle 00:00) per una dimostrazione visiva della configurazione e del processo di codifica.

Hardware spiegato

Il modulo PCA9685 è una scheda compatta che può controllare più servomotori tramite comunicazione I2C. Dispone di 16 canali, consentendo di collegare fino a 16 servomotori, ciascuno con il proprio segnale di controllo. Il modulo funziona con alimentazione a 5V ed è progettato per gestire segnali PWM, essenziali per controllare con precisione la posizione dei servomotori.

La scheda include pin dedicati per l'alimentazione (VCC), la massa (GND) e la comunicazione (SDA e SCL). Il pin SDA viene utilizzato per la trasmissione dei dati, mentre il pin SCL è il segnale di clock, entrambi collegati rispettivamente ai pin analogici A4 e A5 dell'Arduino. Questa configurazione garantisce una comunicazione affidabile tra l'Arduino e il modulo PCA9685.

Dettagli della scheda tecnica

ProduttoreNXP Semiconductor
Numero di partePCA9685
Tensione logica/I/Oda 3,3 V a 5,5 V
Tensione di alimentazioneda 2.3 V a 5.5 V
Corrente di uscita (per canale)25 mA max
Corrente di picco (per canale)100 mA massimo
Linee guida sulla frequenza PWMDa 24 Hz a 1,6 kHz
Soglie logiche di ingresso0.3 V (basso) / 0.7 V (alto)
Caduta di tensione / RDS(on)/ saturazione0,5 V max
Limiti termicida -40 °C a 125 °C
PacchettoHTSSOP-28
Note / variantiControllore PWM a 16 canali

  • Assicurati di avere un'alimentazione a 5 V con corrente sufficiente (1 A consigliata).
  • Non alimentare i servomotori direttamente dall'Arduino per evitare danni.
  • Usare i pin I2C corretti: SDA su A4 e SCL su A5.
  • Adatta i valori della larghezza d'impulso ai tuoi servomotori specifici.
  • Controllare il cablaggio per la polarità corretta: GND, VCC e segnale.
  • Considera l'uso di dissipatori di calore per applicazioni ad alta corrente.

Istruzioni di cablaggio

Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors

Per collegare il PCA9685 al tuo Arduino, inizia collegando alimentazione e massa. Collega il pin VCC del PCA9685 all'uscita 5V dell'Arduino. Poi collega il pin GND del PCA9685 al GND dell'Arduino. Successivamente, collega il pin SDA del PCA9685 al pin A4 dell'Arduino e il pin SCL al pin A5.

Per i servomotori, collega il filo del segnale al canale corrispondente sul PCA9685 (ad es., CH0 per il primo servo), il filo di alimentazione a un'alimentazione separata (poiché i servomotori potrebbero richiedere più corrente di quella che l'Arduino può fornire) e il filo di massa alla massa comune condivisa con il PCA9685. Assicurati che i fili di segnale, alimentazione e massa siano collegati correttamente per evitare di danneggiare i componenti.

Esempi di codice e guida passo passo

Nella sezione di configurazione del codice, inizializziamo il modulo PCA9685 conpwm.begin()e impostare la frequenza PWM conpwm.setPWMFreq(60);. Questo imposta la frequenza di comunicazione per i servomotori.

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");
  pwm.begin();
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

All'interno del ciclo, controlliamo i servomotori impostando i valori PWM corrispondenti agli angoli desiderati. La funzioneangleToPulse(int ang)Mappa l'angolo alla larghezza d'impulso appropriata, essenziale per il posizionamento accurato del servomotore.

void loop() {
  for( int angle =0; angle<181; angle +=20){
    delay(500);
    pwm.setPWM(0, 0, angleToPulse(angle) );
  }
}

Infine, la funzioneangleToPulse(int ang)converte l'angolo in larghezza dell'impulso usando i valori minimo e massimo di durata dell'impulso definiti. Questo ti permette di controllare facilmente la posizione del servo in base all'angolo che vuoi ottenere.

int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
}

Dimostrazione / Cosa aspettarsi

Una volta che tutto è collegato correttamente e il codice è stato caricato, dovresti vedere il servo muoversi attraverso gli angoli specificati con incrementi di 20 gradi. Se il servo non si comporta come previsto, controlla i collegamenti per verificare che siano corretti e assicurati che l'alimentazione sia adeguata (nel video a 12:30).

Marcatori temporali del video

  • 00:00- Introduzione al PCA9685
  • 02:30- Istruzioni per il cablaggio
  • 05:00- Analisi del codice
  • 10:15- Dimostrazione del controllo del servomotore
  • 12:30- Risoluzione dei problemi comuni

Immagini

PCA9685 module-0
PCA9685 module-0
PCA9685 module-1
PCA9685 module-1
PCA9685 module-2
PCA9685 module-2
PCA9685 module-3
PCA9685 module-3
PCA9685 module
PCA9685 module
Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors
36-Resources for this sketch
Lingua: C++
37-PCA6985 16-channel 12-bit servo controller, simple code
Lingua: C++
Copia!

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Nessun file disponibile.