Consumo de una entrada/salida PWM

Hola!

Bueno, no soy tan nuevo en arduino pero aún tengo varias cosas que aprender y sobre todo muchas dudas :smiley:

He estado trabajando en un control de ventiladores PWM, hasta ahi no he tenido problemas. El detalle viene cuando quiero controlar mas de un ventilador. Tengo entendido que las salidas de arduino proporcionan un máximo de 40 mA, entonces aquí viene mi principal duda:

¿Cual es el consumo (en mA) de una entrada de control PWM en general?
Si no es estandar, ¿Hay alguna forma de calcularlo?
Y si es casi lo mismo que el maximo de una salida del arduino, ¿Podrían darme sugerencias de como hacer para amplificar o aumentar el amperaje maximo soportado?

Se me había ocurrido usar la salida PWM del arduino que uso actualmente para los 6 ventiladores que quiero controlar, pero antes de quemar el arduino xD, hice una busqueda superficial y no encontré nada que me ayudase :confused:

Espero puedan ayudarme o o aclararme la duda. Saludos a todos!

La salida no entrega mas de 40mA.

Lo que quieras comandar requiere de un transistor para manejar la potencia que quieres controlar.

El foro esta lleno de respuestas de este tipo.

Como mencioné, ya tengo entendido que una salida de arduino no soporta mas de 40mA, y bueno ya suponía que sería necesario un amplificador.

Pero mi real cuestion es sobre cuanto es el consumo (mA) de la entrada PWM de un ventilador o cualquier dispositivo que se controle por PWM. No se si es un valor universal, si tiene un mínimo y un máximo dependiendo del ancho de pulso, o si siempre va a usar el amperaje maximo del emisor de la señal PWM (Que en este caso seria el arduino)

He seguido buscando pero no veo que alguien hable de ese dato específico, es algo que quisiera saber, tal vez para los que son electrónicos sea algo que es banal pero para mí, que no lo soy, no lo es :frowning:

El consumo (mA) depende da la carga (ventilador).

Te recomiendo ver las especificaciones del ventilador o alimentar el ventilador con la tension nominal y medir la corriente. Supongo sera de 5V ?

PWM no son mas que pulsos HIGH / LOW donde varias el tiempo de duracion de cada estado en un ciclo, lo que resulta en que prendes y apagas el ventilador muy rapido (490 Hz).

Dependiendo de si pones la otra patilla del ventilador en 5V o GND sera un HIGH o LOW el que prende el ventilador y en ese intante la corriente maxima es 40 mA.

Saludos, Kike_GL

lucho_0159:
No se si es un valor universal, si tiene un mínimo y un máximo dependiendo del ancho de pulso, o si siempre va a usar el amperaje maximo del emisor de la señal PWM

Para voltajes alternantes (y también la intensidad de corriente), siempre existe el valor "pico a pico" y el RMS (promedio).

En cargas resistivas (que producen luz y/o calor a partir de la electricidad), la ley de Ohm es completamente aplicable; en otras palabras, cuando el voltaje oscila en onda cuadrada (o PWM), la intensidad de corriente también lo hace. Al ser así, es en los momentos en que se aplica voltaje a la salida ("pico" más alto) donde, dependiendo de la carga, podría peligrar si excede los 40 mA.

En cargas inductivas (que producen movimiento o campos magnéticos a partir de la electricidad) es un poco más complicado. Los inductores (bobinas) tienen la característica de resistir el cambio a la intensidad de corriente; lo que, para PWM, se traduce en una oscilación un tanto desfasada respecto al voltaje, y una tendencia a convertirse en onda senoidal (dependiendo de la inductancia de la carga y la frecuencia de conmutación). Sin embargo, el "pico" máximo sigue siendo el mismo que en cargas resistivas; por lo tanto, el riesgo es el mismo (o peor si se olvida del "diodo flyback").
De hecho, controlar motores con Arduino prácticamente siempre se debe hacer con transistor.

Ahora, esta cuestión de las ondas sólo es visible mediante un osciloscopio; sin embargo, los multímetros son tan lentos que solo muestran el RMS, cuyo valor efectivamente se ve afectado por la forma de onda.
Por ejemplo: si a la salida de 5v se le aplica PWM con un ciclo de trabajo del 50%, el multímetro marca 2.5 mientras que el osciloscopio muestra una onda cuadrada que va de 0 a 5.
Por si no lo has notado, el RMS (medición del multímetro) en una onda cuadrada se calcula por RMS = Vmax * ct, donde ct es el ciclo de trabajo (0% = 0, 100% = 1, entonces toma un valor entre 0 y 1) y Vmax es el voltaje pico (en ejemplo anterior, sería de 5).

Moraleja: siempre usar transistor para controlar motores; y que la intensidad de corriente (voltaje también) medida depende del instrumento (RMS vs pico real).
Los componentes electrónicos sufren más por picos que por promedios.

Ante todo muchas gracias por sus respuestas, siempre hay algo que aprender :smiley:

Ahora, creo que no me he explcado del todo bien, error mío.

Cuando mencioné que estaba buscando controlar ventiladores, me refería a los que se usan en la PC, los de 12V (hay 2 tipos, los de 3 y 4 cables, estos ultimos son PWM, y son los que estoy controlando).

Uso una fuente de PC de 600W Reales que tengo por ahi para alimentar mis proyectos, la linea de 5V alimenta mi arduino, y con la linea de 12V alimento el (o "los" en un futuro, espero) ventiladores.

Como sabrán, los ventiladores PWM, cuando se les conecta a 12V funcionan a su maxima velocidad (cosa que ocurre con los que no son PWM tambien, ahora que lo pienso), pero el 4to cable (negro) de estos ventiladores me permite controlar su velocidad mediante una señal PWM de 25Khz según lo que dicen las especificaciones estandar, por lo que me las arreglé para generar esa señal con arduino trasteando un poco los Timers.

El diagrama sería algo así:


| |---------Cable Blanco (GND) ----> a GND de Fuente
| |---------Cable Rojo (VCC 12V) ----> a 12V de Fuente
| |---------Cable Amarillo (Sensor RPM) ----> sin uso (por ahora)
|____|---------Cable Negro (Entrada PWM) ----> a Arduino

Y bueno, variando el ancho de pulso de mi señal de 25khz, he llegado a controlar la velocidad de mi ventilador :D.

Se me ocurrió entonces usar esa misma salida para controlar mas ventiladores (unos cuantos mas que tengo por ahí), asi que finalmente, he aquí donde me estanqué.

No sé cual es el consumo de la entrada PWM (Cable Negro) del ventilador, no se y tampoco se me ha ocurrido como calcularlo, y tomando en cuenta el amperaje máximo de una e/s de arduino (40mA), no se si sea seguro conectarle mas ventiladores. Ese es el motivo de mi pregunta inicial.

Lucario448:
sin embargo, los multímetros son tan lentos que solo muestran el RMS, cuyo valor efectivamente se ve afectado por la forma de onda.

Si lo he notado, pues al tratar de usarlo como amperímetro conectandolo en serie para ver si obtenía cuanta corriente circulaba, la señal PWM nunca llegaba al ventilador :confused: .

Lucario448:
De hecho, controlar motores con Arduino prácticamente siempre se debe hacer con transistor.

Creo yo (por favor corrígeme si me equivoco) que al alimentar el ventilador directamente desde mi fuente de PC no es necesario usar un transistor, dado que dentro del control interno del ventilador el circuito que recibe la señal PWM ya tiene uno para manejar las RPM del mismo (o eso es lo que leí).

Entonces, volviendo a mi pregunta original. ¿Hay algún valor conocido de consumo de la entrada PWM de mi ventilador o, por ejemplo, de la entrada PWM de un servo para arduino (Es a lo que me refería con "cualquier dispositivo que se controle por PWM")? ¿O alguna forma de calcularlo?

PD: Si, según el criterio de ustedes, la respuesta ya estaba en lo que me escribieron, y no la he entendido, diganmelo y desisto de arduino :frowning:

Ahora te entiendo.

  1. Conecta una resistencia pull-up de 10K del RPM a +5V
  2. PWM de tu ventilador requiere 25 KHz y el Arduino UNO usa 490 Hz para PWM.

Así que lo único que tienes que hacer es varias dicha frecuencia, aquí ejemplos

Saludos, Kike_GL

Creo yo (por favor corrígeme si me equivoco) que al alimentar el ventilador directamente desde mi fuente de PC no es necesario usar un transistor, dado que dentro del control interno del ventilador el circuito que recibe la señal PWM ya tiene uno para manejar las RPM del mismo (o eso es lo que leí).

El ventilador lo alimentas con tu fuente de PC pero el control del mismo no puede ser con la salida directa del Arduino, por dos razones. El pin de arduino entrega 40mA a 5V y tu ventilador require 12V a mas de 40mA seguramente.

surbyte:
La salida no entrega mas de 40mA.
Lo que quieras comandar requiere de un transistor para manejar la potencia que quieres controlar.
El foro esta lleno de respuestas de este tipo.

como veo que no leíste mi respuesta, en el post#1 ya te dije que esta consulta se hecho muchas veces y que se requiere un transitor. No le des vuelta.
Debes usar un transistor MOSFET y según su elección controlara 1 o tantos ventiladores de PC como quieras.

Aparentemente se requiere una frecuencia PWM de entre 800 ~ 2550 rpm.
Y eso es para evitar que hagan ruido.

Si vas al buscador y escribes: mosfet fan o mosfet ventilador o fan controller vas a tener muchas sugerencias y códigos que te servirán.

lucho_0159:
¿Hay algún valor conocido de consumo de la entrada PWM de mi ventilador o, por ejemplo, de la entrada PWM de un servo para arduino (Es a lo que me refería con "cualquier dispositivo que se controle por PWM")? ¿O alguna forma de calcularlo?

Calcularlo no es muy relevante. Cuando hablamos de entradas de señal, usualmente son de muy alta impedancia; siguen requiriendo un voltaje, pero la intensidad de esa corriente suele ser tan baja como 1 mA o incluso menos (en el rango de los microamperios).
Tendrás que alimentar la misma señal en una cantidad descomunal de ventiladores para requerir un transistor. Podrías medirla en un multímetro, pero no obtendrás la intensidad pico en una señal conmutada (RMS); eso solo con un osciloscopio. Las entradas de señal cuentan como carga resistiva.

Si los ventiladores son así como dices, entonces la parte del transistor y todo eso entonces ya la tiene el propio ventilador. Evidentemente van a ser alimentados por fuente externa; pero recuerda que tanto Arduino como dicha fuente, deben compartir tierra.

Generar un PWM a 25 KHz, es más fácil con TimerOne; de hecho hay un ejemplo para justamente tu aplicación.

lucho_0159:
PD: Si, según el criterio de ustedes, la respuesta ya estaba en lo que me escribieron, y no la he entendido, diganmelo y desisto de arduino :frowning:

Creo que yo sí te entiendo; entonces no seré yo quién te desmotive :wink: