Medición de PWM en Arduino

Primero que nada me presento, soy nuevo en la electrónica y estoy aprendiendo a usar arduino. El asunto es que en esta práctica estamos haciendo un calentador sencillo que consiste en calentar una resistencia de 8ohms con una fuente de 12v usando los puertos PWM y hacer que imprima cuanto le estamos poniendo.

El problema es que al hacer la lectura me marca el PWM en rangos muy altos, es decir, debe estar entre 0 y 255 y el lector me marca arriba de 300 y la resistencia ni se calienta. Estuve investigando ejemplos y me encontré con este diagrama:


Y descubrí que es la conexión que tenia (sin los diodos) una pata de la resistencia al positivo de 12v y la otra al transistor, entonces pensé en si la programación estaría mal.

Código:
#include <LiquidCrystal_I2C.h>;

int R = 9;
LiquidCrystal_I2C lcd(0x27,16,2);


void setup() 
{ 
Serial.begin(9600); 
pinMode(R, OUTPUT);

// CANTIDAD DE PWM
  analogWrite(R, 100);
} 

void loop()
{
int PWM = analogRead(R);

  lcd.begin(16,2);
  lcd.print("PWM= ");
  lcd.print(PWM);
  delay(2000);
}

Que opinan? ...
 

Adjuntos

  • res.JPG
    res.JPG
    29.4 KB · Visitas: 19
Última edición:
Cuando utilizas la función analogWrite() solo podes variar el dutycle, ya que la frecuencia es fija la que depende del modelo de arduino.
Por otro lado una señal PWM, no es una señal analógica, es un tren de pulsos que se utiliza para controlar por ejemplo la velocidad de un motor DC, tambien integrando los pulsos puede transformarse en una señal analógica, pero lo que sale del pin del micro es una señal digital que varia entre 0V y 5V
por lo tanto no se puede leer con analogRead() ya que esta solo lee las salidas analógicas, si quieres leer las salidas pwm, primero debes integrarlas y luego ingresarlas en un pin analógico para podes ser leidas con la función analogRead().

lee estohttps://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix3

y estohttps://www.arduino.cc/en/Tutorial/PWM
 
Entonces tengo que crear otra variable para que lea la salida, y la salida seria cambiarla a digitalRead, no? es que no me ha quedado claro como ponerlo en el código
 
no, directamente lee el registro que estas escribiendo, digitalRead no puede aplicar por que pones el pin en modo Compare al usar PWM, si usas digitalRead la API cambia el pin a entrada y desactiva la salida, lo que leerás será el retorno por la resistencia en 0. Tienes 2 opciones, una es definir una variable que cargara tu PWM y la otra es investigar que MCU usas en tu Arduino y leer la hoja de datos para poder leer directamente el registro de comparación.
 
Primero que nada me presento, soy nuevo en la electrónica y estoy aprendiendo a usar arduino. El asunto es que en esta práctica estamos haciendo un calentador sencillo que consiste en calentar una resistencia de 8ohms con una fuente de 12v usando los puertos PWM y hacer que imprima cuanto le estamos poniendo.

El problema es que al hacer la lectura me marca el PWM en rangos muy altos, es decir, debe estar entre 0 y 255 y el lector me marca arriba de 300 y la resistencia ni se calienta. Estuve investigando ejemplos y me encontré con este diagrama:


Y descubrí que es la conexión que tenia (sin los diodos) una pata de la resistencia al positivo de 12v y la otra al transistor, entonces pensé en si la programación estaría mal.

Código:
#include <LiquidCrystal_I2C.h>;

int R = 9;
LiquidCrystal_I2C lcd(0x27,16,2);


void setup() 
{ 
Serial.begin(9600); 
pinMode(R, OUTPUT);

// CANTIDAD DE PWM
  analogWrite(R, 100);
} 

void loop()
{
int PWM = analogRead(R);

  lcd.begin(16,2);
  lcd.print("PWM= ");
  lcd.print(PWM);
  delay(2000);
}

Que opinan? ...

Confundes el tocino con la velocidad.
Las entradas analógicas son analógicas, las salidas "analógicas" no lo son, son PWM como bien indicas tu mismo, una lectura analógica de una salida digital da "a saber que", por otro lado escribes en el pin digital 9 y lees el pin ananlógico 9 que no son el mismo pin, luego estás leyendo a "saber que" de nuevo .

Todo esto está en la documentación del arduino, pero como no la leemos...


Si ya sabes que la salida es 100 porque has escrito 100 ¿Que necesidad tienes de leer nada si ya sabes que es 100?
¿Esperas leer algo en la base del transistor como la potencia de salida o algo así?

Si la resistencia no calienta... mira a ver.
P=U·I y luego aplicas la proporción multiplicando por 100/255 y te saldrá la potencia real que estás aplicando ahora.
Supongo que has unido las masas de la fuente de potencia y la del arduino, si no lo has hecho obviamente no va nada.
 
Última edición:
Atrás
Arriba