Maken van een microcontroller gebaseerde boost converter (4 / 5 stap)

Stap 4: Microcontroller code

Ik heb mijn werken code omhoog op Github.  Het heeft een paar onderdelen:

Deze #defines en const verklaringen doen compile-time berekeningen, zodat de code alleen moet doen eenvoudige uint8_t vergelijkingen in plaats van zwevende punt dat niet haalbaar in een microcontroller is.  Met behulp van const moedigt de compiler om te doen de berekening tijdens het compileren en dwingt het type van het resultaat aan 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;

Deze definiëren sommige nuttig utility macro's, zodat de code eenvoudiger te volgen is:

#define DUTY_CYCLE_REG OCR0B

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

De belangrijkste functie heeft een eerste installatiefase waar blijkt op de verschillende randapparatuur die we nodig hebben:

int main(void) {}
/ * A7 stellen als een uitvoerapparaat.  (Nodig voor PWM.) */
DDRA | = _BV(DD7);
PORTA = 0;

/ * Ingangsvermogen stabiliseren... laat * /
_delay_ms(500);

/*
* Configureren Timer0 als een snelle PWM.  Het zal
* - inschakelen van de pin van de uitvoer aan het begin van elke cyclus
* - zwenking op vandoor wanneer de waarde DUTY_CYCLE_REG hits
* -, beschikken over regelterugloop 0 als het hits OCR0A
*/
TCCR0A = _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);
OCR0A = PWM_RESOLUTION;
/ * Start met 40% taakcyclus en oprit te vermijden inrush. */
DUTY_CYCLE_REG = (uint8_t)(PWM_RESOLUTION * 0.40);
/ * Stel Timer0 klokbron als belangrijkste oscillator. Hierdoor wordt de timer. */
TCCR0B = _BV(CS00) | _BV(WGM02);

/*
* Zet de ADC,
* - interne spanning ref gebruiken.
* - ADC0 als onze bron configureren
* - links-aanpassen van het resultaat, 8 bits is genoeg voor ons
* - uitschakelen van digitale invoerbuffer op pin
* - inschakelen van de ADC.
*/
ADMUX = / * REF = * / _BV(REFS1) | / * INPUT = * / 0;
ADCSRA | = / * PRESCALER = 16 = 2 ^ * / 4;
ADCSRB | = / * LINKS-AANPASSEN * / _BV(ADLAR);
DDRA & = ~ _BV(DD0);
DIDR0 | = _BV(ADC0D);
ADC_ENABLE();
_delay_ms(1);

Vervolgens loops het gewoon, het lezen van de analoge waarde van de potentiometer en vergelijken met haar doelstelling:

terwijl (1) {}
/ * Wachten op de Timer0 om overloop... * /
loop_until_bit_is_set (TIFR0, TOV0);
/ * Einde van onze OFF periode moet piek spanning... * /
TIFR0 | = _BV(TOV0);  / * De markering wissen. */

/ * De uitgangsspanning controleren. */
ADC_START_CONVERSION();
loop_until_bit_is_clear (ADCSRA, ADSC);
uint8_t adc_result = ADCH;

Als (adc_result < DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG < MAX_PWM_LEVEL) {}
DUTY_CYCLE_REG ++;
}
anders als (adc_result > DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG > MIN_PWM_LEVEL) {}
DUTY_CYCLE_REG--;
}
}
}

Gerelateerde Artikelen

Maken van een weerstand gebaseerd toetsenbord & Interface met Arduino!

Maken van een weerstand gebaseerd toetsenbord & Interface met Arduino!

Hoi allemaal!Ik voorkeur altijd weerstand scheidingslijn/ladder gebaseerd toetsenborden over matrix toetsenborden. Als je slim, alles wat je nodig hebt is een analoge poort van uw microcontroller met zoveel knoppen als u wilt. Tuurlijk, het vereist e
Maken van een zwembad Robo-Snake

Maken van een zwembad Robo-Snake

Sneel is de naam van mijn slang / aal zwemmen robot. Dit is de documentatie van de hardware, software en mechanische ontwerp van Sneel_003.urethaan flex tubing, microcontrollers, Zigbee draadloze radio, slangklemmen, draden, servomotoren, titanium se
Maken van een eenvoudige knop Wireless

Maken van een eenvoudige knop Wireless

Ah, de alomtegenwoordige Staples "Easy Button."  Er zijn andere grote-dome-knoppen, maar de nietjes knop heeft het onderscheid van het niet nodig een panel te worden gemonteerd.  Het heeft gewoon een mooie platte voet.  Dus waarom niet vrij het
Maken van een spel in Kladblok en nog veel veel meer

Maken van een spel in Kladblok en nog veel veel meer

Dit is mijn eerste instructable. Zo hebt u please suggesties commentaar. Laat aan de slag!Als we alle het woord Kladblok horen denken we aan sommige saai nutteloos toepassingen te noteren van spullen. Goed Kladblok is veel meer dan dat.. We kunnen co
Maken van een SMD-Reflow-Oven

Maken van een SMD-Reflow-Oven

Ik heb al vele jaren een elektronica-hobbyist en hebben altijd geplakt met via-hole onderdelen bij het maken van een project. Maar naarmate de tijd vordert, niet alleen zijn meer en meer onderdelen zijn alleen beschikbaar in SMD (surface mount appara
Maken van een vriendschap vinden van E-Textile Monster Hoodie met Neopixels

Maken van een vriendschap vinden van E-Textile Monster Hoodie met Neopixels

Kreeg om warm te houden deze winter, en wat een betere manier om dat te doen dan om meer vrienden te knuffelen met de besneeuwde maanden te vinden. De Monster hoodie vindt al de vrienden die u nodig hebt door hen met zijn gevoelige paw touchpads test
Maken van een bankje voeding voornamelijk uit gerecyclede onderdelen

Maken van een bankje voeding voornamelijk uit gerecyclede onderdelen

Dit instructable zal u tonen hoe te maken van een zeer goede bank vermogen leveren met behulp van hoofdzakelijk gerecycleerd onderdelen. Dit is het echt de "mark II", kunt u zien "mark I" hier.Toen ik klaar mijn eerste bank voeding ik
Maken van een semi-modulaire Perfboard Arduino

Maken van een semi-modulaire Perfboard Arduino

Dit instructable zal een overzicht van de noodzakelijke stappen voor het maken van een functionele, modulaire, nog enigszins minimale, maar betrouwbare, Arduino-kloon. Het is mijn eerste instructable, dus genieten van!Wanneer ik uiteengezet te bouwen
Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Enkele van mijn projecten in het verleden hebben problemen als gevolg van een slechte digitale pin. Als dit ooit aan u gebeurde heeft, dan weet je hoe frustrerend het kan zijn. De meeste mensen de eerste reactie is dat er iets mis is met de code. Als
Groovin' Grover: Een Microcontroller gebaseerde marionet

Groovin' Grover: Een Microcontroller gebaseerde marionet

Kolkende Grover is een marionet, gemanipuleerd door vier hobby servo's en een Pololu Maestro microcontroller gebaseerde servo controller. U kunt elk van Grover's ledematen onafhankelijk controle en maken hem lopen, Golf en meeste onderhoudend - maken
Maken van een Live USB te starten vanaf een USB drive

Maken van een Live USB te starten vanaf een USB drive

Een Live USB laat je uitvoert van een besturingssysteem op een USB-drive, dus u kunt proberen een besturingssysteem zonder een partitie, of voeren een favoriete transactie met u, of hebben een emergency back-up voor het geval uw computer vastloopt.In
Maken van een bruidstaart

Maken van een bruidstaart

gezien ik heb nogal wat bruidstaarten, mijn verschuilen op het samenstellen van dit instructable is enigszins beschamend. Het maken van een bruidstaart is leuk, saaie, pijnlijke, spannende, vermoeiend en iets dat je met trots vullen zal, of het nu vo
Maken van een korset

Maken van een korset

er gaat niets boven een korset om u te geven dat perfecte zandloper figuur, of je het of niet hebt!  Dit instructable ziet u de bouw van een fundamentele uitgebeend korset van start tot finish.  Ik ga niet in detail treden over patroon maken, maar ee
Maken van een eenvoudig Operating System

Maken van een eenvoudig Operating System

Ooit wilde maken van een besturingssysteem? Ooit afgenomen om te weten hoe de opdrachtregel besturingssystemen werken? Alles is hier!Dus we make a basic Operating System in C#, maak je geen zorgen, als u weet zelfs sommige basis van c++ of java, zult