Estoy tratando de obtener trenes de pulso estables al ajustar los ciclos de trabajo con una placa Arduino Uno. En mi proyecto real, necesito usar 4 pines de salida PWM ajustables a una frecuencia fija de 25 kHz para controlar cuatro motores de CC controlados por pwm.
Pero para señalar el problema con mayor facilidad, quiero hacer mi pregunta con una configuración fácil y un código corto fácil.
Digamos que el objetivo es variar el ciclo de trabajo de PWM de los pulsos con una frecuencia fija. Se puede usar un potenciómetro para variar el voltaje de entrada en el pin A3 que se ajusta al ciclo de trabajo del pin 9 de PWM. La configuración simple se ilustra a continuación:
Paraexplicarelproblemadeunamaneraclara,megustaríamostrarleunpardecódigossimplesygrabacionescortasdevideodesdelapantalladealcance.
AquíestáelcódigoqueajustalosciclosdetrabajodelaslecturasdelpotencímetroenA3:
voidsetup(){pinMode(9,OUTPUT);}voidloop(){intval=analogRead(A3);//readthevaluefromthepotentiometerfloatvolt=(5.0*val)/1023;//convertthevaluetovoltageval=255*(volt/5);//scalethevoltageforpwmduty-cycleanalogWrite(9,val);}
YconestecódigocargadoenlauC,acontinuaciónsemuestraelregistrodevideoparalasalida:
Como se ve en el alcance, los pulsos parpadean. No son estables. Por cierto, el problema no está relacionado con la salida de poti, ya que también probé una salida fija de 3.3V con un int int. Me parece que sucede cada vez que se actualiza analogWrite.
Y aquí hay otro código donde las funciones analogRead y analogWrite están todavía continuamente activas en el bucle. La única diferencia esta vez, el analogWrite tiene un valor fijo aquí como 24:
void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
int val = analogRead(A3); //read the value from the potentiometer
float volt =(5.0 * val) / 1023; //convert the value to voltage
val = 255 * (volt / 5); //scale the voltage for pwm duty-cycle
analogWrite(9, 24);
}
Y ahora con este subido, a continuación se muestra el registro de video para la nueva salida:
Como se ve en el alcance, los pulsos son extremadamente estables.
Necesito controlar los motores de CC con una alta precisión. Antes de esto, hice un circuito analógico simple con 555 y un comparador, pero para algunas funciones adicionales necesitaba usar un uC.
Pero ahora me di cuenta de este problema y pasé demasiadas horas para ver si otras bibliotecas tendrían una mejor solución. No pude encontrar ninguna. Encontré el siguiente video de un chico que escribió una biblioteca: enlace pero el mismo problema ocurre con su biblioteca también .
¿Se trata de un problema conocido y hay una solución? Y me alegraría mucho encontrar una solución o alguna sugerencia.
Editar:
El problema fue que el Arduino se suministra con la salida USB de la computadora portátil. Revisé el potenciómetro y los pines de 3.3 V con acoplamiento de CA y esto es lo que obtuve:
Arduino ADC es de 10 bits, que es 5000/1024 = 4.8mV. Lo que significa que es sensible para cada 4.5mV. En mi caso, la fluctuación de potencia causó a veces una diferencia de alrededor de 15 mV.
Lo intenté con una fuente de alimentación no USB de 9V del conector de barril de potencia de Arduino, el problema se resolvió. Gracias a Anklon por su intuición.