Paso 5: código!
Ahora que tenemos toda la electrónica analógica averiguada, podemos ver el sistema de programación. Para controlar el circuito de boost, hay que aplicar una señal pulso de ancho modulado (PWM) para perno de puerta del MOSFET. Este simple significa una señal que va alto (5V) y luego bajo (0V) a una frecuencia de juego. Para controlar el voltaje de la salida del circuito de impulso, necesitamos cambiar cuánto el MOSFET está activado o desactivado para. Esto se conoce como el ciclo de trabajo que se puede aprender más acerca de SparkFun.
Que permite comenzar por definir nuestras variables. Esto viene en la parte superior del bosquejo:
#include "TimerOne.h" //include the library we need to create the PWM signal double duty = 512; //start the duty cycle halfway between 0 and 1024, aka 50% duty cycle double feedback; //the variable that tells us the actual voltage double setVoltage; //the voltage the user wants double pot; //holds value of potentiometer before it gets translated into user preferred voltage
Ahora que ya tenemos nuestras variables globales definidas, vamos a escribir lo que sucede cuando el bosquejo primero ejecuta:
void setup() { Serial.begin(9600); //initialize the serial monitor for debugging pinMode(13, OUTPUT); //this is the pin that controls the MOSFET, its an output pinMode(A5, INPUT); //the feedback input, lets us know what the voltage is currently at pinMode(A4, INPUT); //the input from the potentiometer that sets the preferred voltage Timer1.initialize(100); // initialize timer1 at our set frequency Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle Timer1.attachInterrupt(callback); // needed for the pwm signal to work }
Esto nos permitirá a nosotros pin 13 para la señal de control de lo MOSFET y uso analógicos pines 5 y 4 para la retroalimentación y potenciómetro de control respectivamente. También realiza la configuración inicial de la biblioteca de timer1. La biblioteca de timer1 requiere también una función llamada 'callback':
void callback(){ digitalWrite(10, digitalRead(10) ^ 1); }
No necesitas comprender esta función. Asegúrese de copiarlo en el código (pero fuera de cualquier función).
Ahora permite llega a la diversión parte. El bucle principal, controlar el MOSFET:
void loop() { pot = analogRead(A4); //get the position of the potentiometer setVoltage = map(pot,0,1024,118,205); //use the map function to get the value between 11.8V and 20.5V, this allows some margin of error setVoltage = setVoltage/10; //since the value is between 118 and 205, but we want it as 11.8 and 20.5, divide by 10 Serial.println(setVoltage); //print voltage to serial monitor, good for debugging feedback = analogRead(A5)*11.11*5/1024; //read in the actual voltage, the math part is to account for the voltage divider and the arduino's conversion to a number between 0 and 1024 if(feedback < setVoltage && duty < 850) duty += 1; //if the actual voltage is less than what we want it to be, then increase the duty cycle to get us up to where we want else if(feedback > setVoltage && duty > 50) duty += -1; //if its greater than we want it to be, lower the duty cycle to get down to the desired voltage Timer1.setPwmDuty(9, duty); //set this new duty cycle preference }
Esta sección del código se lee en el potenciómetro y la tensión de salida real. Basado en esta información, el Arduino aumenta o disminuye la señal de ciclo de deber a lo MOSFET. Esto aumentar o disminuir el voltaje de salida. Esta sección de código es el bucle vacío continuamente puede comprobar el valor del potenciómetro. Se adjunta el código del sketch de Arduino.