banner
Centro de notícias
Excelente serviço

Um que perdi: driver de led reaproveitado para 16 servos

Dec 04, 2023

Eu estava olhando para a eletrônica por trás do pequeno robô cão Petoi (certo), e notei um chip que eu não conhecia antes, o PCA9685 da NXP.

Em uma análise mais profunda, percebi que Adafruit também o usa para criar os pulsos clássicos de 1,0 a 2,0 ms que informam aos servos de hobby onde se posicionar.

Ele possui uma entrada I2C e pode criar até 16 canais pwm – que dispositivo prático.

A NXP o criou para controlar leds vermelhos, verdes, azuis e âmbar em retroiluminação de quatro cores para displays.

PCA9685 da NXP, mostrando um de seus 16 canais de saída PWM

Cada PWM tem 12 bits, portanto 4.096 passos (0% e 100% também são possíveis), e todos os canais compartilham uma frequência base programável entre 24 Hz e 1,5 kHz (o oscilador interno é de ~ 25 MHz e até 50 MHz pode ser aplicado externamente).

Além disso, as saídas podem ser configuradas para dreno aberto (5,5 Vmáx.) ou totem. A capacidade é fonte de 10mA e dissipador de 25mA.

A alimentação é necessária entre 2,3 e 5,5 V e as entradas são tolerantes a 5,5 V.

Não tenho ideia de qual alma inteligente decidiu primeiro que isso daria uma fonte de sinal para servos (talvez Adafruit?) – mas que boa ideia – 16 servos controlados através de um único barramento I2C – que pode funcionar a 1MHz.

Cada saída recebe dois registros de 12 bits, nominalmente chamados de on-time e off-time, mas na verdade eles interagem com um período de tempo fixo de 4.096 contados de uma forma mais complexa do que seus nomes sugerem para dar controle da fase relativa entre todos os canais também. como horário de ligar e desligar - comece no capítulo 7.3.3 da folha de dados do PCA9685 para ficar confuso por um tempo.

Bits separados ativam ou desativam totalmente cada canal e existe uma maneira de ativar ou desativar todos os canais junto com um comando global. Cada saída também possui seu próprio bit de inversão de saída.

A frequência de saída é definida por um pré-scaler de 8 bits e produz uma frequência de 25MHz/4096/prescaler, embora, por razões que eu adoraria saber, não possa ser definida abaixo da divisão por quatro, portanto, configurações de ÷1, ÷2 ou ÷3 são automaticamente substituídos por ÷4. ÷5 e superiores são possíveis. O padrão é produzir ~200Hz.

Felizmente para o resto de nós, AdaFruit criou uma biblioteca Arduino para controlar o chip como um servo driver multicanal - devemos agradecer a Limor Fried por tantas boas bibliotecas Arduino - e tem algo semelhante para CircuitPython e Python também.

Aliás, se você estiver interessado no cão-robô Peroi Bittle, encontre-o aqui. Basicamente, ele possui componentes eletrônicos Arduino – uma placa Arduino-esk personalizada com periféricos adequados.

certoPCA9685 da NXP, mostrando um de seus 16 canais de saída PWMSteve Bush