Está en la página 1de 13

Índice de Contenido

1. Objetivos 3

2. Marco Teórico 3

3. Marco Conceptual 5

4. Desarrollo 7

4.1. Parte A 7

4.1.1. Simulación 7

4.2. Parte B 8

4.2.1. Simulación 10

4.3. Parte C 10

4.3.1. Simulación 12

4.4. Parte D 12

5. Análisis de Resultados y Conclusiones. 14

6. Aportaciones, Sugerencias, Etc. 14

7. Otros puntos adicionales que el alumno considere necesario agregar. 15

8. Bibliografía y Referencias Impresas (en formato digital).15

Anexo 16

Índice de Figuras

Figura 1 Ciclo de trabajo 3

Figura 2 Mezcla de colores 4

Figura 3 Ejemplo de mezcla de colores 4

Figura 4 Ánodo y cátodo común 6

Figura 5 Simulación Parte A 8

Figura 6 Señal obtenida en el osciloscopio Parte B 9

Figura 7 Circuito físico Parte B 10

Figura 8 Señal obtenida en el osciloscopio y circuito físico Parte B 10

Figura 9 Circuito físico Parte C 12

Figura 10 Simulación Parte C 12


Figura 11 Circuito físico Parte D 13

Figura 12 Simulación Parte D 14

Objetivos

Concepto de Modulación por Ancho de Pulso PWM para configuración del


microcontrolador ATMEGA328P y RP2040.
Configuración de registros del microcontrolador ATMEGA328P y RP2040.
Empleo de Aplicación del PWM con los microcontroladores ATMEGA328P y
RP2040 en IE.

Marco Teórico

Ciclo de trabajo
Utilizareoms el concepto de ciclo de trabajo (duty cycle) para describir
específicamente el porcentaje de tiempo que una señal digital se encuentra en un
estado alto en un intervalo o período de tiempo. Este período es el inverso de la
frecuencia de la forma de onda. Si una señal digital pasa la mitad del tiempo
encendido y la otra mitad apagada, diríamos que la señal digital tiene un ciclo de
trabajo del 50% y se asemeja a una onda cuadrada ideal.

Figura 1 Ciclo de trabajo

Si el ciclo de trabajo es de un 100%, sería lo mismo que si ajustáramos la tensión


de salida a 5 voltios (alto) constante. Con un ciclo de trabajo en un 0%, sería lo
mismo que conectáramos la señal a tierra (GND).
[Escriba aquí]
En un LED RGB (color rojo, verde, azul), puedes controlar la intensidad de luz de
los tres colores que desees mediante la modulación por ancho de pulsos.
Ejemplos
Puedes controlar el brillo de un LED ajustando el ciclo de trabajo de la señal que
se conectara a dicho LED.

Figura 2 Mezcla de colores

Si los tres colores se encuentran controlados por el mismo porcentaje de ciclos de


trabajo PWM, el resultado será una luz blanca. Igualmente, si mezclamos los
colores azul y verde, obtendremos en el LED un color verde azulado. Como
ejemplo más complejo, aumenta el ciclo de trabajo en un 100% para el color rojo,
un ciclo de trabajo del 50% para el color verde y un 0% para el color azul, con esta
configuración conseguirás un color anaranjado.

Figura 3 Ejemplo de
mezcla de colores

[Escriba aquí]
Salidas Analógicas (PWM) en Arduino
Arduino implementa por hardware salidas PWM en varios de sus pines, los cuales
aparecen identificados en la serigrafía de la placa con el símbolo “~” junto al
número del pin. También podemos emular señales PWM por software, sin
embargo, esto generará una carga de trabajo adicional para el procesador.
En Arduino Uno, disponemos de 6 salidas PWM de 8bits en los pines 3, 5, 6, 9, 10
y 11.
En Arduino Mega disponemos de 15 salidas PWM de 8bis en los pines 2 a 13 y 44
a 46
Arduino Due cuenta con 13 salidas PWM de 8bits en los pins 2 a 13. Además, esta
placa incorpora dos salidas analogicas discretizadas (DAC) con resolución de
12bits (4096 niveles)
Una resolución de 8bits en una salida PWM significa que tenemos 256 niveles. Es
decir, indicamos el Duty cycle mediante un número de 0 a 255.

Frecuencia del PWM


La frecuencia de cada PWM depende de las características del temporizador al
que está conectado, y de un registro de preescalado, que divide el tiempo por un
número entero.
La frecuencia de los PWM se puede modificar cambiando el preescalado de los
Timer correspondientes.
En el Arduino Uno, se disponen de tres temporizadores.
Timer0, con una frecuencia de 62500Hz, y preescalados de 1, 8, 64, 256 y 1024.
Timer1, con una frecuencia de 31250Hz, y preescalados de 1, 8, 64, 256, y 1024.
Timer2, con una frecuencia de 31250Hz, y preescalados de 1, 8, 32, 64, 128, 256,
y 1024.
Arduino Mega añade tres temporizadores más
Timer3, 4 y 5, con una frecuencia de 31250Hz, y preescalados de 1, 8, 64, 256,
and 1024.
La frecuencia estándar para las salidas PWM en Arduino Uno es de 490Hz para
todos los pines, excepto para el 5 y 6 cuya frecuencia es de 980Hz. En cuanto a
Arduino Mega, la frecuencia estándar es de 490Hz para todos los pines, excepto
para el 4 y 13 cuya frecuencia es de 980Hz.

[Escriba aquí]
El uso de los Timer no es exclusivo de las salidas PWM, si no que es compartido
con otras funciones. Emplear funciones que requieren el uso de estos Timer
supondrá que no podremos emplear de forma simultánea alguno de los pines
PWM.

Marco Conceptual

¿Qué es la modulación por ancho de pulso (PWM)?


La modulación de ancho de pulso, o PWM, es una técnica para obtener resultados
analógicos utilizando dispositivos digitales. El control digital se utiliza para crear
una onda cuadrada, una señal que cambia entre encendido y apagado. En una
tarjeta como Arduino, este patrón de encendido y apagado puede simular voltajes
entre Vcc de la placa (p. ej., 5 V en UNO, 3,3 V en una placa MKR) y apagado (0
voltios) al modificar el periodo de tiempo que pasa la señal encendida respecto del
tiempo que la señal pasa apagada.
Una señal pulsada (PWM) es suficiente para emular una señal analógica en
muchas aplicaciones. Por ejemplo, podemos variar la intensidad luminosa en un
LED mediante un PWM. El LED realmente se enciende y apaga varias veces por
segundo, pero este parpadeo es tan rápido que el ojo no lo aprecia. El efecto
global percibido es que el LED brilla con menor intensidad.
Otro ejemplo, al variar la velocidad de un motor DC con un PWM, en la mayoría de
los casos la inercia del motor se encargará de que el efecto del PWM sea
despreciable.
¿Qué es un LED RGB?
Un LED (Light Emitting Diode) es un diodo emisor de luz, dispositivo capaz de
producir luz cuando circula por él una corriente eléctrica. Típicamente son
fabricados para un color en específico, donde el voltaje necesario para alimentarlo
variará del color y de la potencia capaz de emitir. Un LED RGB (por sus siglas en
inglés, Red, Green, Blue), es capaz de generar colores rojo, verde y azul.
Internamente contiene los tres diodos emisores de luz diseñados para emitir los
tres colores.
El LED RGB, a diferencia de los LEDs normales, contiene cuatro patitas (pines),
donde una es para el LED rojo, otra para el verde y otra para el azul. El pin
restante, será para una conexión en común con los tres diodos, y podrá ser de dos
tipos, ánodo común o cátodo común.

Internamente veríamos lo siguiente:

[Escriba aquí]
Figura 4 Ánodo y cátodo común

Desarrollo

Material y equipo utilizado


1 Computadora
1 Software Arduino IDE y Thonny.
1 Tarjeta Arduino Uno y RP2040 (KIT Microcontrolador).

Parte A

Para este programa se tiene un dip switch de 8 posiciones con el cual podemos
cambiar las posiciones con las que cuenta para que el ancho de pulso se
modifique ya sea aumentando o disminuyendo. El código que hará este trabajo
está diseñado en el software de Arduino ID. Este código solo se pidió que fuera
simulado sin hacerlo físicamente.
#include  <avr/io.h>

int  main() {

DDRB = 0xFF;      // Puerto B como salida

PORTD = 0xFF;     // Resistores de Pull-Up en el puerto D

                  // el Puerto D por default es entrada

TCCR2A = 0x83;    // PWM rápido, en modo No Invertido y sin  

TCCR2B = 0x81;    // pre-escalador

  while(1) {

    OCR2A = PIND; // El ancho de pulso lo determina el puerto D

[Escriba aquí]
  }

Simulación

Figura 5 Simulación Parte A

Parte B

Para este programa se tiene dos botones pulsadores con los cuales podemos
cambiar el ancho de pulso, haciendo que se modifique ya sea aumentando o
disminuyendo, pero al ser muy pequeño el cambio no es notorio y el led se
encuentra parpadeando. El código que hará este trabajo está diseñado en el
software de Arduino ID.
#include <avr/io.h>

#include <util/delay.h>

int main(void){

    DDRB |= (1<<PB1);

    DDRD &= ~((1<<PD2) | (1<<PD3));

    TCCR1A=0b10000011;    //Configura PWM en modo fase corregida 10b

    TCCR1B=0b00000001;    //Sin pre-escalador

    TCNT1 =0b00000000;    //No se modifica

[Escriba aquí]
    OCR1A=500;              //Inicializar el TOP en cero

    while(1){              //Ciclo infinito

      if ( (PIND &(1<<PD2))== 0 ) {     //Si el boton 1 esta activado

       OCR1A=OCR1A+10;                 //Incrementar la modulación

       delay(10);

    }

    if ( (PIND &(1<<PD3)) == 0 ) {       //Si el boton 2 esta activado

      OCR1A=OCR1A-10;                  //Decrementar la modulacion

      delay(10);

    }

  }

Figura 6 Señal obtenida en el osciloscopio Parte B

[Escriba aquí]
Simulación

Figura 8 Señal obtenida en el osciloscopio y circuito físico Parte B


Parte C

Para este programa se conecta un solo led el cual es multicolor y estará


cambiando de diferentes colores. El código que hará este trabajo está diseñado en
el software de Arduino ID.
int ValorADC1;        //Variable para la Converción del ADC

int ValorADC2;

int ValorADC3;

[Escriba aquí]
int TermBPWM1=9;

int TermGPWM2=10;

int TermRPWM3=11;

void setup() {

  // put your setup code here, to run once:

   pinMode(TermBPWM1,OUTPUT);

   pinMode(TermGPWM2,OUTPUT);

   pinMode(TermRPWM3,OUTPUT);

void loop() {

 Display_MultiRGB(random(256),random(256),random(256));

 delay(500);

void Display_MultiRGB(int rojo,int verde, int azul){

     analogWrite(TermBPWM1, constrain(azul,0,255));

     analogWrite(TermGPWM2, constrain(verde,0,255));

     analogWrite(TermRPWM3, constrain(rojo,0,255));

Figura 9 Circuito físico Parte C

[Escriba aquí]
Simulación

Figura 10 Simulación Parte C

Parte D

Para este programa se tienen 3 colores de led que son azul, verde y rojo. Con
ayuda de los 3 potenciómetros que se encuentran en la tabla fuimos variando
cada uno de ellos para que pudiera salir una mezcla de colores. El código que
hará este trabajo está diseñado en el software de Arduino ID.
int ValorADC1;        //Variable para la Converción del ADC

int ValorADC2;

int ValorADC3;

int TermBPWM1=9;

int TermGPWM2=10;

int TermRPWM3=11;

void setup() {

  // put your setup code here, to run once:

   pinMode(TermBPWM1,OUTPUT);

   pinMode(TermGPWM2,OUTPUT);

   pinMode(TermRPWM3,OUTPUT);

void loop() {

  ValorADC1= analogRead(A1);

[Escriba aquí]
  ValorADC2= analogRead(A2);

  ValorADC3= analogRead(A3);

 Display_MultiRGB(ValorADC3,ValorADC2,ValorADC1);

 delay(500);

void Display_MultiRGB(int rojo,int verde, int azul){

     analogWrite(TermBPWM1, constrain(azul,0,255));

     analogWrite(TermGPWM2, constrain(verde,0,255));

     analogWrite(TermRPWM3, constrain(rojo,0,255));

Figura 11 Circuito físico Parte D

[Escriba aquí]
Figura 12 Simulación Parte D
[Escriba aquí]

También podría gustarte