Étape 5 : Code !
Maintenant que nous avons tous l’électronique analogique figuré dehors, nous pouvons regarder le système de programmation. Pour contrôler le circuit de boost, il faut appliquer un signal de pulse width modulation (PWM) à la broche gate du MOSFET. Ce simple : un signal qui va haut (5V) et puis plus bas (0V) à une fréquence définie. Pour contrôler la tension de sortie du circuit de l’élan, nous devons changer combien de temps le MOSFET est activée ou désactivée pour. Ceci est dénommé le cycle qui vous pouvez en apprendre plus sur de SparkFun.
Permet donc commencer par définir nos variables. Cela vient en haut de l’esquisse :
#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
Maintenant que nous avons nos variables globales définies, permet d’écrire que se passe-t-il lorsque l’esquisse exécute d’abord :
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 }
Cela nous permettra de nous épingler 13 pour le signal contrôlant le MOSFET et utiliser des broches analogiques 5 et 4 pour le contrôle de rétroaction et potentiomètre respectivement. Il fait aussi de la configuration initiale pour la bibliothèque de timer1. La bibliothèque de timer1 nécessite également une fonction appelée « callback » :
void callback(){ digitalWrite(10, digitalRead(10) ^ 1); }
Vous n’avez pas besoin de comprendre cette fonction. Assurez-vous simplement de le copier dans votre code (mais en dehors de toute autre fonction).
Maintenant permet d’obtenir à l’amusement partie. La boucle principale, contrôlant le 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 }
Cette section du code se lit dans le potentiomètre et la tension de sortie réelle. Basé sur cette information, l’Arduino soit augmente ou diminue le signal de cycle de service allant vers le MOSFET. Cela augmentera ou diminuera la tension de sortie. Cette disposition du code est dans la boucle Sub donc il peut vérifier en permanence la valeur du potentiomètre. Le code de sketch Arduino est attaché.