Faire un convertisseur boost microcontrôleur à base (4 / 5 étapes)

Étape 4: Code de microcontrôleur

J’ai mis mon travail code place sur Github.  Il comporte quelques pièces :

Ces #defines et déclarations const effectuer des calculs de compilation afin que le code n’a besoin que de faire des comparaisons simples uint8_t plutôt que virgule flottante qui n’est pas réalisable dans un microcontrôleur.  À l’aide de const encourage au compilateur d’effectuer le calcul au moment de la compilation et forces le type du résultat 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 / VRÉF ;

Ceux-ci définissent certaines macros utilitaire utile afin que le code est plus facile à suivre :

#define DUTY_CYCLE_REG OCR0B

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

La fonction principale a une phase initiale d’installation où il se trouve sur différents périphériques que nous aurons besoin :

int main (void) {}
/ * Valeur A7 en tant que sortie.  (Nécessaire pour le PWM). */
DDRA | = _BV(DD7) ;
PORTA = 0 ;

/ * Let alimentation stabiliser... * /
_delay_ms(500) ;

/*
* Configurer le Timer0 comme un PWM rapide.  Il sera
* - tourner sur la broche de sortie au début de chaque cycle
* - éteindre quand la valeur de frappe DUTY_CYCLE_REG
* - envelopper à 0 quand il frappe OCR0A
*/
TCCR0A = _BV(COM0B1) | _BV(WGM01) | _BV(WGM00) ;
OCR0A = PWM_RESOLUTION ;
/ * Démarre avec le cycle d’utilisation de 40 % et d’une rampe éviter les surcharges. */
DUTY_CYCLE_REG = (uint8_t)(PWM_RESOLUTION * 0.40) ;
/ * Définir source d’horloge Timer0 être oscillateur principal. Cela permet à la minuterie. */
TCCR0B = _BV(CS00) | _BV(WGM02) ;

/*
* Allumez l’ADC,
* - Utilisez ref de tension interne.
* - configurer ADC0 comme notre source
* - gauche-ajustez le résultat, 8-bits est suffisant pour nous
* - désactiver la mémoire tampon d’entrée numérique sur la broche
* - activez le service ADC.
*/
ADMUX = / * REF = * / _BV(REFS1) | / * ENTRÉE = * / 0 ;
ADCSRA | = / * PRÉDIVISEUR = 16 = 2 ^ * / 4 ;
ADCSRB | = / * RÉGLAGE GAUCHE * / _BV(ADLAR) ;
DDRA & = ~ _BV(DD0) ;
DIDR0 | = _BV(ADC0D) ;
ADC_ENABLE() ;
_delay_ms(1) ;

Ensuite, il boucle simplement, lecture de la valeur analogique du potentiomètre et en le comparant à sa cible :

tandis que (1) {}
/ * Attendez le Timer0 déborder... * /
loop_until_bit_is_set (TIFR0, TOV0) ;
/ * Fin de notre OFF période, devrait être tension crête... * /
TIFR0 | = _BV(TOV0) ;  / * Effacer l’indicateur. */

/ * Vérifier la tension de sortie. */
ADC_START_CONVERSION() ;
loop_until_bit_is_clear (ADCSRA, ADSC) ;
uint8_t adc_result = ADCH ;

Si (adc_result < DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG < MAX_PWM_LEVEL) {}
DUTY_CYCLE_REG ++ ;
}
ElseIf (adc_result > DESIRED_ADC_RESULT & &
DUTY_CYCLE_REG > MIN_PWM_LEVEL) {}
DUTY_CYCLE_REG--;
}
}
}

Articles Liés

Faire des applications interactives microcontrôleur en Minutes

Faire des applications interactives microcontrôleur en Minutes

Puceron du Board est une pré-production opensource microcontrôleur basé sur la série de Texas Instruments MSP430F2200 de microcontrôleurs qui intègre une interface d'affichage alphanumérique, commutateurs de navigation et un puissant système de génér
Groovin ' Grover : Une marionnette microcontrôleur à base

Groovin ' Grover : Une marionnette microcontrôleur à base

Grover Groovin ' est une marionnette manipulée par quatre servos de passe-temps et un contrôleur de servo microcontrôleur à base de Pololu Maestro. Vous pouvez contrôler chacun des membres de Grover indépendamment et lui faire à pied, vague et plus d
Microcontrôleur base chargeur de batterie intelligent

Microcontrôleur base chargeur de batterie intelligent

Le circuit de ce que vous êtes sur le point de voir est un chargeur de batterie intelligent basé sur ATMEGA8A avec auto coupé. Différents paramètres sont affichés via un écran LCD au cours des États de charge différent. En outre, le circuit fera sono
Microcontrôleur basé Locker de mot de passe

Microcontrôleur basé Locker de mot de passe

Bonjour tout le monde, l'objectif de cette instructables est d'apprendre comment faire un simple casier pour votre chambre, ou quoi que ce soit qui doivent être sans danger.Je l'ai fait sur une carte non-brasage, mais il y a le PCB si vous voulez fai
Base de microcontrôleurs régulateur d’intensité automatique de réverbères

Base de microcontrôleurs régulateur d’intensité automatique de réverbères

Régulateur d'intensité automatique de microcontrôleurs basés du projet de lampadaires est conçu à l'aide de microcontrôleur pic16F877A automatiquement contrôle intensité de réverbères. Il peut également allumer et éteindre automatiquement les lumière
Quel microcontrôleur pour votre mode électronique ?

Quel microcontrôleur pour votre mode électronique ?

Ce qui la mode manque ? « Microcontrôleurs » je réponds toujours - et c'est vrai ! Il rend vos vêtements tellement plus intéressant, interactif et communicatif, dès que vous y ajoutez quelques renseignement.Mais ceux qui sont sur le marché ?J'ai comm
Module sans fil Radio fréquence à l’aide de microcontrôleur PIC.

Module sans fil Radio fréquence à l’aide de microcontrôleur PIC.

C'est un microcontrôleur basé projet de bricolage électronique. Le nom de Module RF sans fil à l'aide de microcontrôleur PIC. Le module RF est un petit circuit électronique utilisé pour transmettre, recevoir, ou ondes radio transceive sur l'un d'un c
Projet de microcontrôleur Arduino

Projet de microcontrôleur Arduino

projet piloté par microprocesseurComme vous le savez notre site repose sur le Circuit de projet électronique Simple. Mais pour atteindre des performances supérieures, (projet de niveau ingénieur) et de haute qualité de sortie à battre les concurrents
Convertisseur boost 555Timer

Convertisseur boost 555Timer

j'ai essayé de faire un convertisseur boost depuis très longtemps. Au début j'ai pensé qu'il serait facile, syntoniser une fréquence, ajouter des inductances, fets, couvercles et de fait. mais c'était vraiment difficile à faire. Il a stimulé la tensi
Convertisseur Boost Ne555

Convertisseur Boost Ne555

j'ai essayé de faire un convertisseur boost depuis très longtemps. Au début j'ai pensé qu'il serait facile, syntoniser une fréquence, ajouter des inductances, fets, couvercles et de fait. mais c'était vraiment difficile à faire. Il bosted la tension,
Comment faire des écrans personnalisés pour vos microcontrôleurs

Comment faire des écrans personnalisés pour vos microcontrôleurs

Microcontrôleurs comme Arduinos sont un excellent moyen de contrôler vos projets électronique personnalisé. Mais il faut toujours un moyen de connecter les composants externes à la Commission de microcontrôleur. Cavalier des fils peut travailler pour
Convertisseur pur sinus à l’aide de microcontrôleur pic

Convertisseur pur sinus à l’aide de microcontrôleur pic

Convertisseur pur sinus à l'aide de microcontrôleur pic est conçu dans ce projet. Noyau de ferrite ou sinusoïdal pur chopper basé est conçu dans ce projet. Il y a deux parties principales de ce projet1.convertisseur DC DC à l'aide de push pull topolo
Faire un adaptateur de carte de test pour votre Microcontrôleur AVR

Faire un adaptateur de carte de test pour votre Microcontrôleur AVR

si vous voulez jouer avec des microcontrôleurs vous savez cette agitation : vous souhaitez tester une partie d'un programme et vous devez d'abord au fil de l'uC sur le plateau de pain complètement.Pas avec ces pièces très pratiques en plus !Ce sont d
Comment faire pour lire binaire/hexadécimal molette avec un microcontrôleur AVR

Comment faire pour lire binaire/hexadécimal molette avec un microcontrôleur AVR

cette instructable va vous montrer comment lire le numéro sur un pushwheel binaire ou molette commutateur à l'aide de LED ou un microcontrôleur AVR (j'utilise un ATmega328p mais cela peut être adapté à n'importe quel AVR ou probablement un autre micr