Tabla de contenido:

Microcontrolador AVR. Modulación de ancho de pulso. Сontroller of DC Motor and LED Light Intensity .: 6 pasos
Microcontrolador AVR. Modulación de ancho de pulso. Сontroller of DC Motor and LED Light Intensity .: 6 pasos

Video: Microcontrolador AVR. Modulación de ancho de pulso. Сontroller of DC Motor and LED Light Intensity .: 6 pasos

Video: Microcontrolador AVR. Modulación de ancho de pulso. Сontroller of DC Motor and LED Light Intensity .: 6 pasos
Video: PWM con PIC (Modulación por Ancho de Pulso) ☑️ CCS C (PIC C) # 026 2024, Mes de julio
Anonim
Image
Image

¡Hola, todos!

La modulación de ancho de pulso (PWM) es una técnica muy común en telecomunicaciones y control de potencia. Se usa comúnmente para controlar la energía que se alimenta a un dispositivo eléctrico, ya sea un motor, un LED, altavoces, etc. Es básicamente una técnica de modulación, en la que el ancho del pulso portador se varía de acuerdo con la señal de mensaje analógica..

Hacemos un circuito eléctrico simple para controlar la velocidad de rotación del motor de CC en función de la intensidad de la luz. Vamos a utilizar la resistencia dependiente de la luz y las funciones del microcontrolador AVR, como la conversión analógica a digital, para medir la intensidad de la luz. También vamos a utilizar el módulo de controlador de motor de puente doble H-L298N. Por lo general, se usa para controlar la velocidad y la dirección de los motores, pero se puede usar para otros proyectos, como impulsar el brillo de ciertos proyectos de iluminación. Además, agregamos un botón a nuestro circuito para alternar la dirección de rotación del motor.

Paso 1: descripción

Descripción
Descripción
Descripción
Descripción

Todos y cada uno de los cuerpos de este mundo tienen cierta inercia. El motor gira siempre que se enciende. Tan pronto como se apague, tenderá a detenerse. Pero no se detiene de inmediato, lleva algo de tiempo. Pero antes de que se detenga por completo, ¡se enciende de nuevo! Así comienza a moverse. Pero incluso ahora, lleva algún tiempo alcanzar su máxima velocidad. Pero antes de que suceda, se apaga y así sucesivamente. Por lo tanto, el efecto general de esta acción es que el motor gira continuamente, pero a una velocidad menor.

La modulación de ancho de pulso (PWM) es una técnica de conmutación de energía relativamente reciente para proporcionar cantidades intermedias de energía eléctrica entre los niveles de encendido y apagado total. Por lo general, los pulsos digitales tienen el mismo período de tiempo de encendido y apagado, pero en algunas situaciones necesitamos que el pulso digital tenga más / menos tiempo de encendido / apagado. En la técnica PWM, creamos pulsos digitales con una cantidad desigual de estado de encendido y apagado para obtener los valores de voltaje intermedio requeridos.

El ciclo de trabajo se define por el porcentaje de duración de alto voltaje en un pulso digital completo. Puede calcularse mediante:

% del ciclo de trabajo = T on / T (período de tiempo) x 100

Tomemos una declaración de problema. Necesitamos generar una señal PWM de 50 Hz con un ciclo de trabajo del 45%.

Frecuencia = 50 Hz

Período de tiempo, T = T (encendido) + T (apagado) = 1/50 = 0.02 s = 20 ms

Ciclo de trabajo = 45%

Por lo tanto, resolviendo de acuerdo con la ecuación dada anteriormente, obtenemos

T (encendido) = 9 ms

T (apagado) = 11 ms

Paso 2: Temporizadores AVR - Modo PWM

Temporizadores AVR - Modo PWM
Temporizadores AVR - Modo PWM
Temporizadores AVR - Modo PWM
Temporizadores AVR - Modo PWM

¡Para hacer PWM, AVR contiene hardware separado! Al usar esto, la CPU le indica al hardware que produzca PWM de un ciclo de trabajo particular. El ATmega328 tiene 6 salidas PWM, 2 están ubicadas en el temporizador / contador 0 (8 bits), 2 están ubicadas en el temporizador / contador 1 (16 bits) y 2 están ubicadas en el temporizador / contador 2 (8 bits). Timer / Counter0 es el dispositivo PWM más simple del ATmega328. Timer / Counter0 puede ejecutarse en 3 modos:

  • PWM rápido
  • PWM con corrección de fase y frecuencia
  • PWM con corrección de fase

cada uno de estos modos puede invertirse o no invertirse.

Inicialice Timer0 en modo PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - configurar WGM: Fast PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - configurar el modo de salida de comparación A, B

TCCR0B | = (1 << CS02) - configurar temporizador con preescalador = 256

Paso 3: Medición de la intensidad de la luz: ADC y LDR

Medición de la intensidad de la luz: ADC y LDR
Medición de la intensidad de la luz: ADC y LDR
Medición de la intensidad de la luz: ADC y LDR
Medición de la intensidad de la luz: ADC y LDR
Medición de la intensidad de la luz: ADC y LDR
Medición de la intensidad de la luz: ADC y LDR

La resistencia dependiente de la luz (LDR) es un transductor que cambia su resistencia cuando la luz incide sobre su superficie cambia.

Los LDR están hechos de materiales semiconductores para permitirles tener sus propiedades sensibles a la luz. Estos LDR o FOTO RESISTENCIAS funcionan según el principio de "Fotoconductividad". Ahora bien, lo que dice este principio es que siempre que la luz incide sobre la superficie del LDR (en este caso) aumenta la conductancia del elemento o, en otras palabras, la resistencia del LDR disminuye cuando la luz incide sobre la superficie del LDR. Esta propiedad de disminución de la resistencia para el LDR se logra porque es una propiedad del material semiconductor utilizado en la superficie. Los LDR se utilizan la mayoría de las veces para detectar la presencia de luz o para medir la intensidad de la luz.

Para transferir información continua externa (información analógica) a un sistema digital / informático, debemos convertirlos en valores enteros (digitales). Este tipo de conversión se lleva a cabo mediante un convertidor analógico a digital (ADC). El proceso de convertir un valor analógico en un valor digital se conoce como conversión analógica a digital. En resumen, las señales analógicas son señales del mundo real que nos rodean, como el sonido y la luz.

Las señales digitales son equivalentes analógicos en formato digital o numérico que son bien entendidos por sistemas digitales como microcontroladores. ADC es uno de esos equipos que mide señales analógicas y produce un equivalente digital de la misma señal. Los microcontroladores AVR tienen una función ADC incorporada para convertir el voltaje analógico en un número entero. AVR lo convierte en un número de 10 bits de rango 0 a 1023.

Usamos conversión analógica a digital del nivel de voltaje del circuito divisor con LDR para medir la intensidad de la luz.

Inicializar ADC:

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

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - configurar el prescaler ADC = 128

ADMUX = (1 << REFS0) - configurar referencia de voltaje = AVCC; - configurar el canal de entrada = ADC0

Mire el video con una descripción detallada del microcontrolador ADC AVR: Microcontrolador AVR. Medición de la intensidad de la luz. ADC y LDR

Paso 4: Motor de CC del controlador y módulo de controlador de motor de puente H dual-L298N

Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N
Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N
Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N
Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N
Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N
Controlador de motor de CC y módulo de controlador de motor de puente doble H-L298N

Usamos controladores de motor de CC porque los microcontroladores no son capaces de entregar una corriente que no supere los 100 miliamperios en general. Los microcontroladores son inteligentes pero no fuertes; Este módulo agregará algunos músculos a los microcontroladores para impulsar motores de CC de alta potencia. Puede controlar 2 motores de CC simultáneamente de hasta 2 amperios cada uno o un motor paso a paso. Podemos controlar la velocidad usando PWM y también su dirección de rotación de los motores. Además, se utiliza para impulsar el brillo de la cinta LED.

Descripción del pin:

Puerto OUT1 y OUT2, que es para conectar el motor de CC. OUT3 y OUT4 para conectar cinta LED.

ENA y ENB son pines de habilitación: al conectar ENA a alto (+ 5V) habilita el puerto OUT1 y OUT2.

Si conecta el pin ENA a bajo (GND), deshabilita OUT1 y OUT2. Del mismo modo, para ENB y OUT3 y OUT4.

IN1 a IN4 son los pines de entrada que se conectarán al AVR.

Si IN1-alto (+ 5V), IN2-bajo (GND), OUT1 se vuelve alto y OUT2 se vuelve bajo, por lo que podemos conducir el motor.

Si IN3-alto (+ 5V), IN4-bajo (GND), OUT4 se pone alto y OUT3 se vuelve bajo, por lo que la luz de la cinta LED está encendida.

Si desea invertir la dirección de rotación del motor, simplemente invierta la polaridad IN1 e IN2, de manera similar para IN3 e IN4.

Al aplicar la señal PWM a ENA y ENB, puede controlar la velocidad de los motores en dos puertos de salida diferentes.

La placa puede aceptar de 7V a 12V nominalmente.

Puentes: hay tres pines de puente; Puente 1: Si su motor necesita más de 12 V, debe desconectar el puente 1 y aplicar el voltaje deseado (máximo 35 V) en el terminal de 12 V. Traiga otro suministro de 5V y entrada en el terminal de 5V. Sí, debe ingresar 5 V si necesita aplicar más de 12 V (cuando se quita el puente 1).

La entrada de 5 V es para el funcionamiento adecuado del circuito integrado, ya que quitar el puente desactivará el regulador de 5 V incorporado y lo protegerá de un voltaje de entrada más alto del terminal de 12 V.

El terminal de 5V actúa como salida si su suministro está entre 7V y 12V y actúa como entrada si aplica más de 12V y se quita el puente.

Puente 2 y Puente 3: Si quita estos dos puentes, debe ingresar la señal de habilitación y deshabilitación del microcontrolador, la mayoría de los usuarios prefieren quitar los dos puentes y aplicar la señal del microcontrolador.

Si mantiene los dos puentes, la OUT1 a la OUT4 estarán siempre habilitadas. Recuerde el puente ENA para OUT1 y OUT2. Puente ENB para OUT3 y OUT4.

Paso 5: Escribir código para un programa en C. Cargar archivo HEX en la memoria flash del microcontrolador

Escribiendo y construyendo la aplicación del microcontrolador AVR en Código C usando la Plataforma de Desarrollo Integrada - Atmel Studio.

#ifndef F_CPU # define F_CPU 16000000UL // indicando la frecuencia del cristal del controlador (AVR de 16 MHz ATMega328P) #endif

#include // encabezado para permitir el control del flujo de datos sobre los pines. Define pines, puertos, etc. #incluye // encabezado para habilitar la función de retardo en el programa

#define BUTTON1 2 // interruptor de botón conectado al puerto B pin 2 #define DEBOUNCE_TIME 25 // tiempo de espera mientras el botón "elimina el rebote" #define LOCK_INPUT_TIME 300 // tiempo de espera después de presionar un botón

// Timer0, PWM Initialization void timer0_init () {// configurar el temporizador OC0A, pin OC0B en modo de alternancia y modo CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // configurar temporizador con prescaler = 256 TCCR0B | = (1 << CS02); // inicializar el contador TCNT0 = 0; // inicializar el valor de comparación OCR0A = 0; }

// Inicialización de ADC void ADC_init () {// Habilitar ADC, frecuencia de muestreo = osc_freq / 128 establece el preescalador al valor máximo, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Seleccionar referencia de voltaje (AVCC)

// Estado de cambio de botón unsigned char button_state () {

/ * el botón se presiona cuando el bit BUTTON1 está borrado * /

si (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

si (! (PINB & (1 <

}

return 0;

}

// Inicialización de puertos void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - PUERTO DIRECTO DE INTERRUPTOR DE BOTONES B = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Establece todos los pines de PORTC bajo, lo que lo apaga. }

// Esta función lee el valor de la conversión de analógico a digital. uint16_t get_LightLevel () {_delay_ms (10); // Espere un tiempo para que el canal sea seleccionado ADCSRA | = (1 << ADSC); // Inicie la conversión ADC configurando el bit ADSC. Escribir 1 en ADSC

while (ADCSRA & (1 << ADSC)); // Espere a que se complete la conversión

// ADSC vuelve a ser 0 hasta entonces, ejecuta el bucle continuamente _delay_ms (10); retorno (ADC); // Devuelve el resultado de 10 bits

}

// Esta función vuelve a mapear un número de un rango (0-1023) a otro (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 (vacío)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicialización ADC

mientras (1)

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

OCR0A = i1; // Establecer el canal de registro de comparación de salida A OCR0B = 100-i1; // Establecer el canal de registro de comparación de salida B (invertido)

if (button_state ()) // Si se presiona el botón, alternar el estado de los LED y retrasar 300ms (#define LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // alternar el estado actual del pin IN1. PORTB ^ = (1 << 1); // alternar el estado actual del pin IN2. Invertir la dirección de rotación del motor

PORTB ^ = (1 << 3); // alternar el estado actual del pin IN3. PORTB ^ = (1 << 4); // alternar el estado actual del pin IN4. La cinta LED está apagada / encendida. _delay_ms (LOCK_INPUT_TIME); }}; return (0); }

La programación está completa. A continuación, construyendo y compilando el código del proyecto en un archivo hexadecimal.

Carga del archivo HEX en la memoria flash del microcontrolador: escriba en la ventana del símbolo del sistema de DOS el comando:

avrdude –c [nombre del programador] –p m328p –u –U flash: w: [nombre de su archivo hexadecimal]

En mi caso es:

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

Este comando escribe un archivo hexadecimal en la memoria del microcontrolador. Vea el video con una descripción detallada de la grabación de la memoria flash del microcontrolador: Grabación de la memoria flash del microcontrolador …

¡OK! Ahora, el microcontrolador funciona de acuerdo con las instrucciones de nuestro programa. ¡Vamos a ver!

Paso 6: el circuito eléctrico

El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico

Conecte los componentes de acuerdo con el diagrama esquemático.

Recomendado: