Taula de continguts:

Microcontrolador AVR. Modulació d'amplada de pols. Controlador de intensitat de llum LED i motor de CC: 6 passos
Microcontrolador AVR. Modulació d'amplada de pols. Controlador de intensitat de llum LED i motor de CC: 6 passos

Vídeo: Microcontrolador AVR. Modulació d'amplada de pols. Controlador de intensitat de llum LED i motor de CC: 6 passos

Vídeo: Microcontrolador AVR. Modulació d'amplada de pols. Controlador de intensitat de llum LED i motor de CC: 6 passos
Vídeo: Internet de las Cosas. Curso Introductorio a IoT. Parte 2: Hardware IoT. Parte2.3 Controladores 2024, Desembre
Anonim
Image
Image

Hola a tothom!

La modulació d'amplada de pols (PWM) és una tècnica molt comuna en telecomunicacions i control de potència. s'utilitza habitualment per controlar la potència alimentada a un dispositiu elèctric, ja sigui un motor, un LED, altaveus, etc. És bàsicament una tècnica de modulació, en què l'amplada del pols portador varia segons el senyal de missatge analògic..

Fem un circuit elèctric senzill per controlar la velocitat de rotació del motor de CC en funció de la intensitat de la llum. Utilitzarem funcions de resistència depenent de la llum i microcontroladors AVR com ara Conversió analògica a digital per mesurar la intensitat de la llum. També utilitzarem el mòdul de controlador de motor H-Bridge dual-L298N. Normalment s’utilitza per controlar la velocitat i la direcció dels motors, però es pot utilitzar per a altres projectes, com ara la brillantor de determinats projectes d’il·luminació. A més, hem afegit un botó al nostre circuit per alternar el sentit de gir del motor.

Pas 1: descripció

Descripció
Descripció
Descripció
Descripció

Tots i cadascun dels cossos d’aquest món tenen certa inèrcia. El motor gira sempre que s’encén. Tan bon punt estigui apagat, tendirà a aturar-se. Però no s’atura immediatament, triga un temps. Però abans que s'aturi completament, es torna a engegar. Així comença a moure’s. Però, fins i tot ara, triga un temps a assolir la seva màxima velocitat. Però abans que passi, està apagat, etc. Per tant, l’efecte general d’aquesta acció és que el motor gira contínuament, però a una velocitat inferior.

La modulació d’amplada de pols (PWM) és una tècnica de commutació d’alimentació relativament recent per proporcionar quantitats intermèdies d’energia elèctrica entre els nivells totalment activats i totalment apagats. Normalment, els polsos digitals tenen el mateix període d’activació i apagat, però en algunes situacions necessitem que el pols digital tingui més / menys temps / temps d’aturada. En la tècnica PWM, creem impulsos digitals amb una quantitat desigual d'estat d'encesa i apagat per obtenir els valors de voltatge intermedis necessaris.

El cicle de treball es defineix pel percentatge de durada d’alta tensió en un impuls digital complet. Es pot calcular mitjançant:

% de cicle de treball = T activat / T (període de temps) x 100

Prenguem una declaració de problema. Hem de generar un senyal PWM de 50 Hz amb un cicle de treball del 45%.

Freqüència = 50 Hz

Període de temps, T = T (activat) + T (apagat) = 1/50 = 0,02 s = 20 ms

Cicle de treball = 45%

Així, resolent segons l’equació donada anteriorment, obtenim

T (activada) = 9 ms

T (apagat) = 11 ms

Pas 2: temporitzadors AVR: mode PWM

Temporitzadors AVR: mode PWM
Temporitzadors AVR: mode PWM
Temporitzadors AVR: mode PWM
Temporitzadors AVR: mode PWM

Per fer PWM, AVR conté maquinari independent. En utilitzar-ho, la CPU indica al maquinari que produeixi PWM d’un cicle de treball concret. L'ATmega328 té 6 sortides PWM, 2 es troben al temporitzador / comptador0 (8 bits), 2 es troben al temporitzador / comptador1 (16 bits) i 2 es troben al temporitzador / comptador2 (8 bits). Timer / Counter0 és el dispositiu PWM més senzill de l’ATmega328. El temporitzador / comptador0 pot funcionar en 3 modes:

  • PWM ràpid
  • PWM de fase i freqüència corregits
  • PWM de fase corregit

cadascun d'aquests modes pot ser invertit o no invertit.

Inicialitzeu el temporitzador0 en mode PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - configureu WGM: PWM ràpid

TCCR0A | = (1 << COM0A1) | (1 << COM0B1): configura el mode de sortida de comparació A, B

TCCR0B | = (1 << CS02): configureu el temporitzador amb un prescaler = 256

Pas 3: mesura de la intensitat de la llum: ADC i LDR

Mesura de la intensitat de la llum: ADC i LDR
Mesura de la intensitat de la llum: ADC i LDR
Mesura de la intensitat de la llum: ADC i LDR
Mesura de la intensitat de la llum: ADC i LDR
Mesura de la intensitat de la llum: ADC i LDR
Mesura de la intensitat de la llum: ADC i LDR

El Light Dependent Resistor (LDR) és un transductor que canvia la seva resistència quan la llum cau sobre la seva superfície.

Els LDR estan fets de materials semiconductors per permetre'ls tenir les seves propietats sensibles a la llum. Aquests LDR o FOTO RESISTORS funcionen segons el principi de la "conductivitat fotogràfica". Ara bé, el que diu aquest principi és quan la llum cau sobre la superfície del LDR (en aquest cas) augmenta la conductància de l’element o, en altres paraules, la resistència del LDR disminueix quan la llum cau sobre la superfície del LDR. Aquesta propietat de la disminució de la resistència per al LDR s’aconsegueix perquè és una propietat del material semiconductor utilitzat a la superfície. Els LDR s’utilitzen la majoria de vegades per detectar la presència de llum o per mesurar la intensitat de la llum.

Per transferir informació contínua externa (informació analògica) a un sistema digital / informàtic, hem de convertir-la en valors sencers (digitals). Aquest tipus de conversió es realitza mitjançant convertidor analògic a digital (ADC). El procés de conversió d’un valor analògic en valor digital es coneix com Conversió analògica a digital. En resum, els senyals analògics són senyals del món real que ens envolten com el so i la llum.

Els senyals digitals són equivalents analògics en format digital o numèric que són ben entesos per sistemes digitals com els microcontroladors. L’ADC és un maquinari d’aquest tipus que mesura els senyals analògics i produeix un equivalent digital del mateix senyal. Els microcontroladors AVR tenen instal·lació ADC integrada per convertir el voltatge analògic en un enter. AVR el converteix en un nombre de 10 bits del rang 0 a 1023.

Utilitzem conversió analògica a digital del nivell de voltatge del circuit divisor amb LDR per mesurar la intensitat de la llum.

Inicialitzar ADC:

TADCSRA | = (1 << ADEN) - Activa ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0): configureu el precalificador ADC = 128

ADMUX = (1 << REFS0): configuració de la referència de tensió = AVCC; - Configura el canal d’entrada = ADC0

Mireu el vídeo amb una descripció detallada del microcontrolador ADC AVR: microcontrolador AVR. Mesura de la intensitat de la llum. ADC i LDR

Pas 4: controlador de motor de CC i mòdul de controlador de motor de pont H doble-L298N

Controlador de motor CC i mòdul de controlador de motor de pont H doble-L298N
Controlador de motor CC i mòdul de controlador de motor de pont H doble-L298N
Controlador de motor CC i mòdul de controlador de motor de pont H doble-L298N
Controlador de motor CC i mòdul de controlador de motor de pont H doble-L298N
Controlador de motor de CC i mòdul de controlador de motor de pont H doble-L298N
Controlador de motor de CC i mòdul de controlador de motor de pont H doble-L298N

Utilitzem controladors de motor de corrent continu perquè els microcontroladors no són capaços d’enviar corrent no superior a 100 miliamperis en general. Els microcontroladors són intel·ligents però no forts; aquest mòdul afegirà alguns músculs als microcontroladors per conduir motors de corrent continu d'alta potència. Pot controlar 2 motors de CC de forma simultània fins a 2 amperis cadascun o un motor pas a pas. Podem controlar la velocitat mitjançant PWM i també la seva direcció de rotació dels motors. A més, s’utilitza per conduir la brillantor de la cinta LED.

Descripció del pin:

Port OUT1 i OUT2, que serveix per connectar el motor de corrent continu. OUT3 i OUT4 per connectar cinta LED.

ENA i ENB són pins d'habilitació: en connectar ENA a alta (+ 5V), permet els ports OUT1 i OUT2.

Si connecteu el pin ENA a low (GND), desactiva OUT1 i OUT2. De la mateixa manera, per a ENB i OUT3 i OUT4.

IN1 a IN4 són els pins d'entrada que es connectaran a l'AVR.

Si IN1-alt (+ 5V), IN2-baix (GND), OUT1 gira alt i OUT2 gira baix, de manera que podem accionar el motor.

Si IN3-alt (+ 5V), IN4-baix (GND), el OUT4 es torna alt i OUT3 es torna baix, per tant, la llum de cinta LED està encesa.

Si voleu invertir la direcció de rotació del motor, inverteu la polaritat IN1 i IN2, de manera similar per a IN3 i IN4.

En aplicar el senyal PWM a ENA i ENB podeu controlar la velocitat dels motors en dos ports de sortida diferents.

El tauler pot acceptar nominalment de 7V a 12V.

Saltadors: hi ha tres passadors; Jumper 1: si el vostre motor necessita un subministrament superior a 12V, heu de desconnectar el Jumper 1 i aplicar la tensió desitjada (màxim 35V) al terminal de 12V. Porteu una altra font i entrada de 5V al terminal de 5V. Sí, heu d'introduir 5V si heu d'aplicar més de 12V (quan se suprimeix el pont 1).

L’entrada de 5V serveix per al funcionament correcte de l’IC, ja que en treure el pont es desactivarà el regulador incorporat de 5V i es protegirà d’un voltatge d’entrada més alt del terminal de 12V.

El terminal de 5V actua com a sortida si el vostre subministrament oscil·la entre 7V i 12V i actua com a entrada si apliqueu més de 12V i se suprimeix el pont.

Jumper 2 i Jumper 3: si elimineu aquests dos ponts, heu d'introduir el senyal d'activació i desactivació del microcontrolador, la majoria dels usuaris prefereixen eliminar els dos ponts i aplicar el senyal del microcontrolador.

Si manteniu els dos ponts, sempre estarà habilitat OUT1 a OUT4. Recordeu el pont ENA per a OUT1 i OUT2. Jumper ENB per OUT3 i OUT4.

Pas 5: Escriure codi per a un programa a C. Penjar fitxers HEX a la memòria flash del microcontrolador

Escriptura i creació de l'aplicació de microcontrolador AVR en codi C mitjançant la plataforma de desenvolupament integrat - Atmel Studio.

#ifndef F_CPU # define F_CPU 16000000UL // indicant la freqüència de cristall del controlador (16 MHz AVR ATMega328P) #endif

#include // header per habilitar el control de flux de dades sobre pins. Defineix pins, ports, etc. #include // header per habilitar la funció de retard al programa

#define BUTTON1 2 // commutador de botó connectat al port B pin 2 #define DEBOUNCE_TIME 25 // temps per esperar mentre es desactiva el botó #define LOCK_INPUT_TIME 300 // temps per esperar després de prémer un botó

// Temporitzador0, PWM Inicialització void timer0_init () {// configura el temporitzador OC0A, pin OC0B en mode de commutació i mode CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // configurar el temporitzador amb prescaler = 256 TCCR0B | = (1 << CS02); // inicialitzar el comptador TCNT0 = 0; // inicialitzar el valor de comparació OCR0A = 0; }

// ADC Initialization void ADC_init () {// Habilita ADC, mostreig freq = osc_freq / 128 estableix el precalificador al valor màxim, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Seleccioneu Voltage Reference (AVCC)

// Estat del commutador de botó sense signar button_state () {

/ * es prem el botó quan el bit BUTTON1 bit és buit * /

if (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

if (! (PINB & (1 <

}

retorn 0;

}

// Ports Initialization void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - INTERRUPTOR DE BUTTON PORTB DIRECTE = 0b00010110;

DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Estableix tots els pins de PORTC que el desactivi. }

// Aquesta funció llegeix el valor de la conversió analògica a digital. uint16_t get_LightLevel () {_delay_ms (10); // Espereu un temps fins que el canal obtingui ADCSRA seleccionat | = (1 << ADSC); // Inicieu la conversió ADC configurant el bit ADSC. Escriviu 1 a ADSC

mentre que (ADCSRA & (1 << ADSC)); // Espereu a que finalitzi la conversió

// ADSC torna a ser 0 fins llavors, executa el bucle contínuament _delay_ms (10); retorn (ADC); // Torneu el resultat de 10 bits

}

// Aquesta funció torna a assignar un número d'un interval (0-1023) a un altre (0-100). uint32_t map (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

int main (buit)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicialització ADC

mentre que (1)

{i1 = mapa (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // Estableix la comparació de sortida del registre del canal A OCR0B = 100-i1; // Estableix la comparació de sortida del registre del canal B (invertit)

if (button_state ()) // Si es prem el botó, canvieu l'estat i el retard del LED durant 300 ms (#define LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // alternant l'estat actual del pin IN1. PORTB ^ = (1 << 1); // canviant l'estat actual del pin IN2. Invertiu la direcció de rotació del motor

PORTB ^ = (1 << 3); // alternant l'estat actual del pin IN3. PORTB ^ = (1 << 4); // canviant l'estat actual del pin IN4. La cinta LED està apagada / engegada. _delay_ms (LOCK_INPUT_TIME); }}; retorn (0); }

La programació s'ha completat. A continuació, es crea i es compila el codi del projecte en un fitxer hexadecimal.

Carregant el fitxer HEX a la memòria flash del microcontrolador: escriviu l'ordre a la finestra d'indicador DOS:

avrdude –c [nom del programador] –p m328p –u –U flash: w: [nom del fitxer hexadecimal]

En el meu cas és:

avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex

Aquesta ordre escriu un fitxer hexadecimal a la memòria del microcontrolador. Mireu el vídeo amb una descripció detallada de la gravació de memòria flash del microcontrolador: gravació de memòria flash del microcontrolador …

D'acord! Ara, el microcontrolador funciona d’acord amb les instruccions del nostre programa. Ho comprovem!

Pas 6: el circuit elèctric

El circuit elèctric
El circuit elèctric
El circuit elèctric
El circuit elèctric

Connecteu els components segons el diagrama esquemàtic.

Recomanat: