Gracias al auge de la iluminación LED han salido al mercado circuitos integrados capaces de generar varias salidas PWM. La mayoría de ellos son escalables permitiendo generar múltiples señales con un único bus de datos.
Por ejemplo el TLC5940, que cuenta con 16 salidas de 12 bits de resolución (4096 pasos). El problema que encontramos con este integrado es que cada una de las salidas tiene un delay de 20ns con respecto a la anterior (Pag. 14), así entre la salida 0 y la 15 hay 300ns de delay.
Otro integrado interesante es el PCA9685 que, al igual que el anterior, dispone de 16 salidas de 12 bits de resolución, y a diferencia del anterior, son sincrónicas. A demás este integrado se controla mediante el bus de datos I2C. El único problema que tiene es que la frecuencia máxima de señal utilizando el oscilador interno (25MHz) es de 1KHz. Usando un oscilador externo de 50MHz (máximo permitido), obtendríamos una frecuencia de 12KHz aproximadamente (Pag. 13).
Hay otro de la misma familia que el anterior, se trata del PCA9635. Este cuenta con 16 salidas de 8 bits de resolución (256 pasos), son sincrónicas y con una frecuencia de 97KHz.
Para la prueba de hoy he comprado el segundo (PCA9685), y usando el oscilador interno, a una frecuencia de 1KHz he obtenido buenos resultados, lástima del zumbido audible que produce esta frecuencia en el motor.
Por ejemplo el TLC5940, que cuenta con 16 salidas de 12 bits de resolución (4096 pasos). El problema que encontramos con este integrado es que cada una de las salidas tiene un delay de 20ns con respecto a la anterior (Pag. 14), así entre la salida 0 y la 15 hay 300ns de delay.
Otro integrado interesante es el PCA9685 que, al igual que el anterior, dispone de 16 salidas de 12 bits de resolución, y a diferencia del anterior, son sincrónicas. A demás este integrado se controla mediante el bus de datos I2C. El único problema que tiene es que la frecuencia máxima de señal utilizando el oscilador interno (25MHz) es de 1KHz. Usando un oscilador externo de 50MHz (máximo permitido), obtendríamos una frecuencia de 12KHz aproximadamente (Pag. 13).
50Mhz / 4096 = 12207Hz
Hay otro de la misma familia que el anterior, se trata del PCA9635. Este cuenta con 16 salidas de 8 bits de resolución (256 pasos), son sincrónicas y con una frecuencia de 97KHz.
Para la prueba de hoy he comprado el segundo (PCA9685), y usando el oscilador interno, a una frecuencia de 1KHz he obtenido buenos resultados, lástima del zumbido audible que produce esta frecuencia en el motor.
With the rise of LED lighting, have arrived to market integrated circuits capable of generating several PWM outputs. Most of them are scalable allowing multiple signals on a single data bus.
For example TLC5940, which has 16 outputs 12-bit resolution (4096 steps). The problem we found with this chip is that each output has a delay of 20ns respect to previous output (p. 14), and there is 300ns delay between outputs 0 and 15.
Another interesting IC is PCA9685 which, as the previous one, has 16 outputs 12-bits resolution, but the outputs are synchronous. This integrated is controlled by I2C data bus. The only problem I have is that the maximum signal frequency using the internal oscillator (25MHz) is 1KHz. Using a 50MHz external oscillator (maximum allowed), we can obtain a frequency of about 12KHz (p. 13).
Another of the same family as above, it's PCA9635. It has 16 outputs 8-bit resolution (256 steps), are synchronous with a frequency of 97KHz.
For testing today I bought the second one (PCA9685), and using the internal oscillator at a frequency of 1kHz I had good results, shame about the audible hum frequency produced by motor.
For example TLC5940, which has 16 outputs 12-bit resolution (4096 steps). The problem we found with this chip is that each output has a delay of 20ns respect to previous output (p. 14), and there is 300ns delay between outputs 0 and 15.
Another interesting IC is PCA9685 which, as the previous one, has 16 outputs 12-bits resolution, but the outputs are synchronous. This integrated is controlled by I2C data bus. The only problem I have is that the maximum signal frequency using the internal oscillator (25MHz) is 1KHz. Using a 50MHz external oscillator (maximum allowed), we can obtain a frequency of about 12KHz (p. 13).
50Mhz / 4096 = 12207Hz
Another of the same family as above, it's PCA9635. It has 16 outputs 8-bit resolution (256 steps), are synchronous with a frequency of 97KHz.
For testing today I bought the second one (PCA9685), and using the internal oscillator at a frequency of 1kHz I had good results, shame about the audible hum frequency produced by motor.
La verdad, pensaba que costaría más soldar los pins del encapsulado TSSOP28, pero no ha sido complicado, internet está lleno de manuales de cómo hacerlo. Aquí hay algunos interesantes de Sparkfun:
Surface Mount Soldering Tutorials:
https://www.sparkfun.com/tutorials/category/2
El siguiente esquema muestra la conexión entre PCA9685 y Arduino Nano. He usado también 2 transistores Darlington BD679 y la fuente de alimentación de Märklin Mini-Club. El potenciómetro de la fuente hay que ponerlo al máximo hacia la derecha, el conector rojo es el positivo y el marrón el negativo.
Surface Mount Soldering Tutorials:
https://www.sparkfun.com/tutorials/category/2
El siguiente esquema muestra la conexión entre PCA9685 y Arduino Nano. He usado también 2 transistores Darlington BD679 y la fuente de alimentación de Märklin Mini-Club. El potenciómetro de la fuente hay que ponerlo al máximo hacia la derecha, el conector rojo es el positivo y el marrón el negativo.
Actually, I thought it would be hard to solder TSSOP28 package pins, but it was not complicated, internet is full of how-to manuals. Here's an interesting one from Sparkfun:
Surface Mount Soldering Tutorials
https://www.sparkfun.com/tutorials/96
The following scheme shows the connections between PCA9685 and Arduino Nano. I used also 2 Darlington transistors BD679 and a Märklin Mini-Club power supply. The supply potentiometer must be put to maximum clockwise, the red connector is the positive and brown is the negative.
Surface Mount Soldering Tutorials
https://www.sparkfun.com/tutorials/96
The following scheme shows the connections between PCA9685 and Arduino Nano. I used also 2 Darlington transistors BD679 and a Märklin Mini-Club power supply. The supply potentiometer must be put to maximum clockwise, the red connector is the positive and brown is the negative.
#include <Wire.h> #define MODE1 0x00 #define MODE2 0x01 #define LED0 0x06 #define LED_SIZE 0x04 #define PRE_SCALE 0xFE byte _address = B01000000; void setup() { Wire.begin(); SetReg(MODE1, B00001001); // Sleep SetReg(PRE_SCALE, 0); // Prescale. Minimum is 3 (Pag. 24) SetReg(MODE1, B00000001); // Reset SetReg(MODE1, B10100001); // Auto-Increment SetReg(MODE2, B00000100); // Totem Pole for(int i=0; i<16; i++) SetPwm(i, 700); } void loop() {} void SetReg(byte reg, byte data) { Wire.beginTransmission(_address); // Address Wire.write(reg); // Register Wire.write(data); // Data Wire.endTransmission(); } void SetPwm(int led, unsigned int pwm) { Wire.beginTransmission(_address); // Address Wire.write(LED0 + (led * LED_SIZE)); // Output Wire.write(0); // LEDn_ON_L Wire.write(0); // LEDn_ON_H Wire.write(pwm); // LEDn_OFF_L Wire.write(pwm>>8); // LEDn_OFF_H Wire.endTransmission(); }
Las flechas señalan los puntos de aislamiento
Arrows indicates the isolation points
|
Descargas:
Downloads:
ArduinoPCA9685.zip
Enlaces:
Links:
TLC5940 (EN): http://www.ti.com/lit/ds/symlink/tlc5940.pdf
PCA9685 (EN): http://www.nxp.com/documents/data_sheet/PCA9685.pdf
PCA9635 (EN): http://www.nxp.com/documents/data_sheet/PCA9635.pdf
I2C (ES): http://es.wikipedia.org/wiki/I2C
I2C (EN): http://en.wikipedia.org/wiki/I%C2%B2C
Surface Mount Soldering Tutorials (EN): https://www.sparkfun.com/tutorials/category/2