Con respecto a mi programa, es un programa que hace algunos cálculos y luego genera un voltaje basado en el resultado usando función analogWrite. Sin embargo, mi problema es que hice mi programación basándome en la idea errónea de que la función analogWrite a través de PWM genera un voltaje analógico, donde de hecho solo «simula» el voltaje analógico.
Aquí están las partes relevantes de mi código:
int pwmOutput = 11; int pwm = 0; void compareNewOldVoltageYes(void) { if(pv_Vnew > pv_Vold && pwm != 255) { ++pwm; //increasing value } else if(pwm != 0) { --pwm; //decreasing } } void compareNewOldVoltageNo(void) { if(pv_Vnew > pv_Vold && pwm != 0) { --pwm; } else if(pwm != 255) { ++pwm; } } void loop() { reading(); PowerCalculation(); if(pv_NewP > pv_OldP) { compareNewOldVoltageYes(); } else { compareNewOldVoltageNo(); } analogWrite(pwmOutput, pwm); //analogWrite float displayPWMvolt = pwm * 0.0196; Serial.print("Output Voltage: "); Serial.print(displayPWMvolt); Serial.println(" V"); pv_OldP = pv_NewP; Serial.print("Previous Power: "); Serial.print(pv_OldP); Serial.println(" W"); }
En cuanto a los circuitos, el pin de salida 11 se conecta a una resistencia de 1 ohmio y luego a GND. (Donde medí el voltaje) Estoy usando la placa Arduino Uno.
ACTUALIZACIÓN :
Como se dijo en los comentarios de @DatHa, pwm no emite voltaje. ¿Hay alguna manera de generar voltaje como se dijo, sin cambiar la placa?
Comentarios
- PD La escritura analógica usa PWM y NO produce un voltaje analógico.
- @DatHa ¿eso significa que no se puede hacer de esta manera? ¿Existe otra función para generar voltaje analógico?
- Consulte la respuesta de @Russell en arduino.stackexchange.com/questions/10041/…
- @dpw No ' creo que eso funcione ya que mi programa tiene que conectarse a una carga electrónica a través de su programación externa y controlarlo usando 0-5V.
- PWM genera un voltaje específico, o yo ' soy un pirata en el año de nuestro Señor 1734. Puede ' t supere un valor de 8 bits, y ' siempre hay alguna inexactitud al leerlo.
Responder
Básicamente tienes tres opciones:
- Cambiar a un Arduino Due que tiene un DAC incorporado que genera un voltaje real.
- Agregue un chip DAC externo (como el MCP4821 / 2) para crear el voltaje para usted
- Use un filtro de paso bajo (red RC) en un pin PWM.
De las tres opciones, suelo utilizar un MCP4 822 ya que ofrece los mejores resultados y no cuesta tanto como usar un Due.
Comentarios
- Gracias. La opción 2 suena muy bien, pero debido a limitaciones de tiempo, seguí adelante con la opción 3 y obtuve los resultados que quería.
- o use un R-2R ladder como un " pobre ' s DAC "
- @AndreHolzner Cuento una escalera R-2R igual que un chip DAC pero con demasiados cables para que sea práctica en un Arduino promedio.
- @Majenko Solo quería agregar que existen " potenciómetros digitales " o " digipots " que son prácticamente escaleras R-2R dentro de un chip DIP-8. Son más baratos que los DAC. (Por ejemplo, X9C103)
- @FilipFranik Excepto que ' no son escaleras R-2R. Son ' solo una cadena de resistencias con un FET conectado a cada conexión entre resistencias. Solo hay R. Muchas R de todos modos. Sí, si lo escribe con los dos extremos del potenciómetro a VCC y GND, obtiene una especie de DAC, pero sufre el mismo tipo de problemas de impedancia que un potenciómetro real. Proporciona un par de resistencias, mientras que un DAC proporciona un voltaje.
Respuesta
A 5 V, un 1 La resistencia de ohmios intentará hundir 1A y superar con creces las especificaciones de 40mA. Utilice al menos una resistencia de 5 / 0.040 = 125 ohmios para proteger su pin. Y si coloca el capacitor a entre su resistencia y tierra, el circuito RC del capacitor suavizará el PWM en un voltaje analógico.
Pruebe la respuesta @russell sugerida con una resistencia de 47K y un condensador de 1uF, obtendrá un voltaje analógico en la unión para usar con su carga electrónica.
Respuesta
Hasta donde yo sé, los Arduinos tienen ADC (convertidores analógicos a digitales) pero no tienen DAC (convertidores digitales a analógicos). Por lo tanto, no puede generar un voltaje establecido desde ningún pin basado en un valor digital.
Comentarios
- Los Arduinos basados en ARM generalmente tienen al menos un DAC canal.
Respuesta
NO .. No hay forma de obtener un voltaje analógico del Arduino. Lo mejor que puede hacer es usar Arduino como un convertidor de voltaje Buck en modo lineal o boost usando un regulador de voltaje, un inductor y el transistor mosfet. Es posible que también necesite utilizar un Mega o Dulorme que proporcione una frecuencia PWM distinta a la estándar de 50o Hz.
Mucha suerte
Respuesta
No hay una forma directa.
Además de @Majenko
Vía alternativa: puede usar un puente H como L293d para proporcionar un nivel continuo.Muchos circuitos inversores de bricolaje utilizan esta técnica.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS