banner
Centro notizie
Servizio eccezionale

Uno che mi è mancato: il driver led riproposto per 16 servi

Dec 04, 2023

Stavo guardando l'elettronica dietro il piccolo cane robot Petoi (Giusto) e ho notato un chip di cui non ero a conoscenza prima, il PCA9685 di NXP.

Analizzando più a fondo, ho notato che Adafruit lo utilizza anche per creare i classici impulsi da 1,0 – 2,0 ms che indicano ai servi per hobby dove posizionarsi.

Ha un ingresso I2C e può creare fino a 16 canali pwm: che dispositivo pratico.

NXP lo ha creato per controllare i LED rossi, verdi, blu e ambra nella retroilluminazione a quattro colori per i display.

PCA9685 di NXP, che mostra uno dei suoi 16 canali putput PWM

Ogni PWM è a 12 bit, quindi 4.096 passi (sono possibili anche 0% e 100%) e tutti i canali condividono una frequenza base programmabile tra 24 Hz e 1,5 kHz (l'oscillatore interno è ~ 25 MHz e fino a 50 MHz possono essere applicati esternamente).

Per inciso, le uscite possono essere impostate su open-drain (5,5 Vmax) o totem-pole. La capacità è di 10 mA sorgente e 25 mA dissipatore.

È necessaria un'alimentazione compresa tra 2,3 e 5,5 V e gli ingressi tollerano 5,5 V.

Non ho idea di quale anima intelligente abbia deciso per prima che questo sarebbe diventato una sorgente di segnale per i servi (forse Adafruit?) – ma che bella idea – 16 servi controllati tramite un singolo bus I2C – che può funzionare a 1 MHz.

Ogni uscita riceve due registri a 12 bit, nominalmente denominati on-time e off-time, ma in realtà interagiscono con un intervallo di tempo fisso di 4.096 conteggi in un modo più complesso di quanto suggeriscono i loro nomi per dare il controllo della fase relativa anche tra tutti i canali. come orario di accensione e spegnimento: inizia dal capitolo 7.3.3 nella scheda tecnica PCA9685 per tenere la mente confusa per un po'.

Bit separati impostano ciascun canale completamente disattivato o completamente attivato ed esiste un modo per attivare o disattivare tutti i canali insieme con un comando globale. Ogni uscita ha anche il proprio bit di inversione di uscita.

La frequenza di uscita è impostata da un prescaler a 8 bit e produce una frequenza di 25 MHz/4096/prescaler, sebbene, per ragioni che mi piacerebbe sapere, non può essere impostata sotto la divisione per quattro, quindi impostazioni di ÷1, ÷2 o ÷3 vengono automaticamente sostituiti con ÷4. ÷5 e superiori sono tutti possibili. Per impostazione predefinita produce ~200Hz.

Fortunatamente per il resto di noi, AdaFruit ha creato una libreria Arduino per controllare il chip come servoazionamento multicanale – dobbiamo ringraziare Limor Fried per così tante buone librerie Arduino – e ha qualcosa di simile anche per CircuitPython e Python.

A proposito, se sei interessato al cane robot Peroi Bittle, trovalo qui. Ha essenzialmente l'elettronica Arduino: una scheda Arduino-esk personalizzata con periferiche adatte.

GiustoPCA9685 di NXP, che mostra uno dei suoi 16 canali putput PWMSteve Bush