Göra en mikrokontroller-baserade uppsving omvandlare (4 / 5 steg)

Steg 4: Microcontroller kod

Jag har satt min arbetande koden upp på Github. Den har några delar:

Dessa #defines och const förklaringar gör kompilering beräkningar så att koden endast behöver göra enkla uint8_t jämförelser snarare än flyttal som inte är genomförbara i en mikrokontroller. Med hjälp av const uppmuntrar kompilatorn att göra beräkningen vid kompileringen och tvingar typ av resultatet till uint8_t.

#define PWM_FREQ 62500
#define PWM_RESOLUTION (F_CPU / PWM_FREQ)
#define MIN_DUTY_CYCLE 0,40
#define MAX_DUTY_CYCLE 0,80
CONST uint8_t MIN_PWM_LEVEL = PWM_RESOLUTION * MIN_DUTY_CYCLE;
CONST uint8_t MAX_PWM_LEVEL = PWM_RESOLUTION * MAX_DUTY_CYCLE;

#define VREF 1.1
#define DESIRED_VOUT 20,0
#define DIVIDER_RATIO 30,0
#define DESIRED_ADC_IN_V (DESIRED_VOUT / DIVIDER_RATIO)

CONST uint8_t DESIRED_ADC_RESULT = 255 * DESIRED_ADC_IN_V / VREF;

Detta definierar vissa nyttig nytta makron så att koden är lättare att följa:

#define DUTY_CYCLE_REG OCR0B

#define ADC_ENABLE() (ADCSRA | = _BV(ADEN))
#define ADC_START_CONVERSION() (ADCSRA | = _BV(ADSC))

Den huvudsakliga funktionen har en inledande installationsfasen där det visar på de olika kringutrustning som vi behöver:

int main(void) {
/ * Ange A7 som en utgång. (Behövs för PWM.) */
DDRA | = _BV(DD7);
PORTA = 0;

/ * Låt ineffekt stabilisera... * /
_delay_ms(500);

/*
* Konfigurera Timer0 som en snabb PWM. Det kommer att
* - Aktivera utgångsstiftet i början av varje cykel
* - stänga av när värdet träffar DUTY_CYCLE_REG
* - wrap till 0 när den träffar OCR0A
*/
TCCR0A = _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);
OCR0A = PWM_RESOLUTION;
/ * Börja med 40% intermittens och ramp för att undvika översvämning. */
DUTY_CYCLE_REG = (uint8_t)(PWM_RESOLUTION * 0.40);
/ * Ange Timer0 klocka källa vara huvudsakliga oscillator. Detta gör att timern. */
TCCR0B = _BV(CS00) | _BV(WGM02);

/*
* Slå på ADC,
* - använda inre spänning ref.
* - Konfigurera ADC0 som vår källa
* - vänster-justera resultatet, 8 bitar är nog för oss
* - Inaktivera digital indatabufferten på stift
* - aktiverar ADC.
*/
ADMUX = / * REF = * / _BV(REFS1) | / * INPUT = * / 0;
ADCSRA | = / * PRESCALER = 16 = 2 ^ * / 4;
ADCSRB | = / * VÄNSTER-JUSTERA * / _BV(ADLAR);
DDRA & = ~ _BV(DD0);
DIDR0 | = _BV(ADC0D);
ADC_ENABLE();
_delay_ms(1);

Då loopar det helt enkelt, läsning av värdet för analoga från potentiometer och jämföra den med sitt mål:

samtidigt (1) {
/ * Vänta Timer0 att svämma över... * /
loop_until_bit_is_set (TIFR0, TOV0);
/ * Slutet av våra OFF period, bör vara toppspänning... * /
TIFR0 | = _BV(TOV0); / * Avmarkera flaggan. */

/ * Kontrollera utspänningen. */
ADC_START_CONVERSION();
loop_until_bit_is_clear (ADCSRA, ADSC);
uint8_t adc_result = ADCH;

om (adc_result < DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG < MAX_PWM_LEVEL) {
DUTY_CYCLE_REG ++;
}
annars om (adc_result > DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG > MIN_PWM_LEVEL) {
DUTY_CYCLE_REG--;
}
}
}

Se Steg
Relaterade Ämnen

8051 mikrokontroller baserade dubbelriktad besöksräknare

detta är en enkel kopplingsschemat för dubbelriktad besöksräknare använda 8051 mikrokontroller som hjälper till att räkna antalet människor som kommer till eller lämnar ett rum och visar den totala räkningen på styrelsen. Det är till stor hjälp i vår...

DIY uppsving omvandlare || Hur att öka DC-spänning effektivt

I detta projekt kommer jag visa dig en effektiv och gemensamma sätt att intensifiera DC-spänningar. Jag kommer även visa hur lätt det kan vara att bygga en boost omvandlare med hjälp av en ATtiny85. Låt oss komma igång!Steg 1: Titta på videon!Videon...

DC-DC HV uppsving omvandlare

Steg 1: Drift och elektronik Intro Hur fungerar en Boost omvandlare?Grundläggande principen:En boost omvandlare fungerar i två etapper, på och av. I ON scenen växeln Semi-conductive bedriver och ström byggs upp i induktor producerar enelektromagnetis...

DC uppsving omvandlare

min första avsikt var att designa en DC-spänning uppsving omvandlare konvertera 3vdc till 5vdc så att jag kunde driva min iPod eller någon annan enhet som kräver 5 volt att debitera. Jag läste om svängningen kretsar och boost omvandlare kretsar och k...

Designa en Step-Up DC till DC uppsving omvandlare

En Step-Up converter är kan stimulera en låg inspänning, säger 1,5 V till en mycket högre spänning som, 5 V. Eftersom makten måste bevaras, samtidigt öka spänningen, utgångsström sänks. Vi tar en titt på de steg följt av alla nödvändiga beräkningar a...

DIY AVR mikrokontroller baserade temperaturövervakning och styrsystem

AVR mikrokontroller baserade Tempereringsaggregatet, använder det LM35 temperaturgivare för mätning av temperatur och 16 x 2 LCD används för att Visa temperaturen börvärde, värmare Status och aktuell temperatur, det kontrollerar temperatur genom att...

Groovin' Grover: En mikrokontroller-baserade marionett

Groovin' Grover är en marionett som manipuleras av fyra hobby servon och en Pololu Maestro mikrokontroller-baserade servo controller. Du kan styra var och en av GroVers lemmar självständigt och göra honom promenad, våg och mest underhållande - göra h...

Mikrokontroller baserade smarta batteriladdare

Kretsen vad du kommer att se en smart batteriladdare baseras på ATMEGA8A med auto avskurna. Olika parametrar visas via en LCD under olika laddning stater. Kretsen kommer också göra ljud via en Summer efter laddning.Jag byggde i princip laddaren för a...

Ne555 uppsving omvandlare

jag har försökt att göra en boost omvandlare från en riktigt lång tid. Först trodde jag det skulle vara lätt, ratta en frekvens, lägga induktorer, fETsna, mössor, och gjort. men det var verkligen svårt att göra det. Det bosted spänningen men när jag...

Arduino-baserad byta spänningsregulatorer

DC till DC omvandlare används effektivt konvertera DC-spänningar. De har en verkningsgrad på upp till 95% vilket gör dem användbara för LED strips, CYKELLYSEN, batteriladdare och solar powered enheter. En spänningsomvandlare kräver en PWM källa som e...

Mobiltelefon-baserade Remote Controller för vattenpump

Besvär i växling på en pump installerad i en avlägset liggande lantgård är ett vanligt problem för många. En hel del kretsar har utvecklats för att lösa detta problem. De flesta av dem är dyra och mikrokontroller-baserade. Här presenterar vi en mobil...

GSM baserade brandlarm

GSM, mikrokontroller baserade upptäckande och SMS Alert system, det använder LM35 temperaturgivare och MQ2 för rök fjärranalys och 16 x 2 LCD används till att Visa temperaturen och röker nivå, över gränsen börvärden ligger inne i programmet kan du än...

InPace - en Arduino baserad GPS-data logga fitness armband med bluetooth och en iOS app

InPace är en Arduino baserat fitness armband, med åtföljande iOS ansökan, som kan ge levande feedback på hur användaren pacing sig under en springa, gå eller cykla rutten. Det spår GPS lokaliseringarna och aktuella tider att jämföra användare nuvaran...

Växla läge Altoids iPOD laddare med 3 "AA" batterier

målet med detta projekt var att bygga en effektiv Altoids tin iPod (firewire) laddare som körs på 3 (uppladdningsbara) "AA" batterier. Projektet började som ett samarbete med Sky på PCB design och konstruktion, och jag på krets och firmware. Som...

3D kroppen för små obemannade markfordon

Detta chassi small gjordes att använda med nRover styrelse som jag ritade, men det går att använda med Arduino Uno eftersom båda styrelser har samma storlek och fixering hål.Den bärande tanken var att göra ett chassi multipurpose, byggt en rad efterf...

En enkel förare för VFD displayer

VFD displayer har ersatts av den nya skärm tekniken idag.Men kvaliteten på display, en VFD ger är oslagbar.Du kan hitta en i din bil, DVD, radio, Casette spelare, etc...Dessutom finns maj typer av VFD display moduler tillgängliga på marknaden.Detta i...

Arduino-ning Lego Technic gå Kart

Projektet började som en strävan att hitta ett sätt att kombinera Lego Technic chassi byggnad med billiga råvaror elektronik till motorize och fjärrkontroll användarvänlighet det. Jag undervisar robotics workshop och jag behövde en Lego-baserad platt...

$20 bärbara Raspberry Pi spelkonsol

Det finns massor av hallon Pi retro spel emulatorer runt på internet, men de flesta är ganska dyra. Med den nya $5 Raspberry Pi noll, i detta Instructable jag ska visa dig drivs hur man bygger ett helt bärbar batteri Retro spel Emulator för $20.För a...

Semi-auto Longshot 2

några av er som läser detta kanske minns min sista cigarett, det fanns vissa problem med designen och jag bestämde mig att skrota pneumatiska bulten alldeles för mitt andra försök. Jag har ärligt talat ingen aning hur mycket sista longshot kostar, ja...