Bygga din egen strömförsörjning batteri (5 / 7 steg)
Steg 5: kod!
Nu när vi har all analog elektronik listat ut, kan vi titta på programmering systemet. För att styra den boost kretsen, måste vi tillämpa en modulerad (PWM) signal till MOSFET'S gate stift. Denna enkla: en signal som går hög (5V) och sedan låg (0V) på en uppsättning frekvens. För att styra den boost krets utspänning, måste vi ändra hur länge MOSFET är på eller av för. Detta kallas intermittensen som du kan läsa mer om från SparkFun.
Så låt oss börja genom att definiera våra variabler. Detta kommer överst på skissen:
#include "TimerOne.h" //include biblioteket måste vi skapa PWM-signal
dubbel tull = 512; Starta intermittensen halvvägs mellan 0 och 1024, aka 50% intermittens
dubbel feedback; den variabel som berättar den faktiska spänningen
dubbla setVoltage; spänningen användaren vill
dubbla potten; håller värde av potentiometer innan det blir översatt till användaren föredrog spänning
Nu när vi har våra globala variabler som definierats, kan skriva vad som händer när skissen körs första gången:
void setup()
{
Serial.BEGIN(9600); initiera seriell bildskärmen för felsökning
pinMode (13, OUTPUT); Detta är den PIN-kod som styr MOSFET, dess en utgång
pinMode (A5, indata); feedback input, låter oss veta vad spänningen är för närvarande på
pinMode (A4, indata); input från potentiometern som anger Rekommenderad spänningen
Timer1.Initialize(100); initiera timer1 på våra ange frekvens
Timer1.PWM (9, 512); setup pwm på stift 9, månadskapacitet på 50%
Timer1.attachInterrupt(callback); behövs för pwm signalen att arbeta
}
Detta gör att vi oss pin 13 för signal kontrollera MOSFET, och använder analog stift 5 och 4 för att feedback och potentiometer respektive. Det gör också den första installationen för timer1 biblioteket. Timer1 biblioteket kräver också en funktion som kallas "callback":
void callback() {
digitalWrite (10, digitalRead(10) ^ 1);
}
Du behöver inte förstå denna funktion. Se bara till att kopiera den till din kod (men utanför någon annan funktion).
Nu kan komma till roligt delen. De viktigaste loop, kontrollera MOSFET:
void loop()
{
kruka = analogRead(A4); få ställning som potentiometern
setVoltage = map(pot,0,1024,118,205); funktionen karta för att få värde mellan 11.8V och 20.5V, detta gör att vissa felmarginal
setVoltage = setVoltage/10. eftersom värdet är mellan 118 och 205, men vi vill ha det som 11,8 och 20,5, dividera med 10
Serial.println(setVoltage); skriva ut spänning att seriell övervaka, bra för felsökning
feedback = analogRead (A5) * 11.11 * 5/1024; Läs i den faktiska spänningen, är den matematiska delen att redovisa spänningsavdelaren och arduino's konvertering till ett tal mellan 0 och 1024
om (feedback < setVoltage & & tull < 850) tull + = 1; om den faktiska spänningen är lägre än vad vi vill att det ska vara, sedan öka intermittensen för att få oss upp till där vi vill
annars om (feedback > setVoltage & & tull > 50) tull + = -1; om dess större än vi vill ha, sänka intermittensen att komma till önskad spänning
Timer1.setPwmDuty (9, tull). ställa in denna nya duty cycle preferens
}
Denna del av koden läser i potentiometern och faktiska utspänningen. Baserat på denna information, Arduino antingen ökar eller minska duty cycle signalen kommer att MOSFET. Detta kommer att öka eller minska den tillverkade spänningen. Denna del av koden är i void slingan så det kan kontinuerligt kontrollera potentiometer värdet. Arduino skiss kod är kopplad.