Control de Microcontroladores con Dimmer y Timers
Control de Microcontroladores con Dimmer y Timers
Facultad de Ingeniería
Estudiantes:
Adair Téllez Aviles
Axel Aarón Reséndiz Linares
Expedientes:
298497
292726
Materia: Microcontroladores
Timers (Captura/Comparación).
Fecha: 19-09-2023
Microcontroladores
Introducción
Respecto a la implementación, se debe deben de tener en cuenta ciertos conceptos, los cuales son Módulo
Dimmer De Luz Ac Control Potencia 1 Canal el cual te permite agregar control de voltaje AC y un timer, el
cual se ejecuta cada cierto periodo de tiempo, el cual realiza una serie de procesos cuando se le indica.
El timer es un objeto que tiene como funcionalidad ejecutar una función o bloque de código cada cierto
tiempo. Esto tiene muchas aplicaciones ya que no depende de la acción por parte de usuario para ejecutar
cierto código.vi
EL módulo Dimmer de Luz AC y de Potencia AC de 1 canales, te permite agregar control de voltaje AC para
aplicaciones de control de iluminación de lámparas incandescentes o control de potencia en resistencias
calefactoras para control de temperatura, también se puede utilizar para controlar motores de AC
universales, que contienen algunos bombas, ventiladores y taladros.
El módulo puede trabajar con un nivel de alimentación de 5 o 3.3V por los que es compatible con
microcontroladores de 3.3V y 5V (como arduino uno, mega, nodemcu, etc) .vii
La práctica consistió en utilizar el módulo Dimmer para capturar el cruce por cero de la señal eléctrica,
posteriormente al ya tener capturado el cruce por cero, se muestra el porcentaje de luminosidad o de
velocidad según sea el caso, esto al presionar un push button.
Objetivo
Realizar un código, en el software STM32CubeIDE, capaz de mostrar en una pantalla la intensidad de
iluminación de un foco o la velocidad de un motor AC, esto se deberá de realizar con ayuda del cruce por
cero de la señal, para que así se comience el conteo, lo anterior mencionado deberá de activarse con un
push button, finalmente realizar la simulación correspondiente en Proteus para la tarjeta STM32F103C8T6
y finalmente implementarlo en la tarjeta STM32G031K8.
Metodología
• Se crean los caracteres especiales en la matriz de 5x8, en esta práctica se crearon caracteres
especiales relacionados a tildes.
Caracteres
especiales
• Guardar los caracteres especiales en memoria para después ser utilizados.
iii. Configuración de pines: Debido a que el microcontrolador utilizado el STM32G031K8, no tiene los
pines de propósito general utilizados en simulación en el puerto A, se realizó el ajuste para que los
pines que sirvan como salida sean los del puerto B, de igual forma se hace uso de dos pines del
puerto A que servirán como entradas, para la configuración de los pines se hace uso del manual del
microcontrolador iii(Capítulo 9), dicha configuración puede ser modificada de acuerdo al uso que se
dará a las entradas o salidas de propósito general.
iv. Simulación: La simulación se realizará en el software Proteus, debido a que es posible cargar el
archivo hexadecimal generado por el entorno de desarrollo y poder simular las instrucciones, el
microcontrolador utilizado en la implementación física no se encuentra en Proteus, por lo que se
simula utilizando el microcontrolador STM32F103C8T6, es importante mencionar que se deberá de
realizar los ajustes necesarios en el código, principalmente el encendido del microcontrolador y el
ajuste de los pines de propósito general, esta información puede ser consultada en el manual de
referencia.iv
v. Resultados: Se deberá de comparar los resultados obtenidos en simulación con los obtenidos de
manera experimental con la finalidad de discutir estos resultados y establecer si el desarrollo de la
práctica fue el correcto.
Respecto al proceso que se realiza dentro de la implementación, se muestra el siguiente diagrama de flujo,
cabe señalar que se debió de hacer dos implementaciones, uno con el microcontrolador STM32F103C8T6
y otro con el STM32G031K8, esto debido a que no se encuentran los componentes necesarios en proteus
para realizar la simulación correspondiente.
Microcontroladores
• No debera de contener errores para que pueda ser cargado a la tarjeta STM32F103C8T6.
Compilacion del
codigo
Carga del
codigo a la •De esta manera podremos corroborar que funciona de la manera adecuada.
tarjeta
Implementar en
•Deberemos de repetir los pasos anteriores para la tarjeta STM32G031K8.
microcontrolador
STM32G031K8
Modo de entrada
00: Modo analógico
01: Entrada flotante
10: Entrada con pull-up / pull-down
11: Reservado
Tabla 1 Configuración de pines.
Microcontroladores
Modo de salida
00: Salida de propósito general Push-pull
01: Salida de propósito general Open-
drain
10: Salida con función alterna Push-pull
11: Salida con función alteran Open-
drain
Tabla 2 Configuración de pines.
Modo
00: Modo entrada
01: Modo salida, velocidad máxima
10MHz
10: Modo salida, velocidad máxima 2MHz
11: Modo salida, velocidad máxima
50MHz
Tabla 3 Configuración de pines.
La forma para identificar si se trata de una entrada o salida de propósito general y su configuración, es
revisar el valor de defecto, para este microcontrolador el valor por defecto es un 4 en cada pin de todos los
puertos, por lo que se construye la Tabla 4.
CNF MODE
0 1 0 0
Tabla 4 Valor de reset en entradas/salidas de propósito general.
Es posible observar de la Tabla 4, que el valor hexadecimal corresponde a un 4, primero se observa las
columnas de mode y se observa que esta en modo entrada, después se revisa la Tabla 2 (correspondiente
a entrada) que se encuentra en configuración entrada flotante, se busca que los pines funcionen como
salidas push-pull a una velocidad de 50MHz, que en valor hexadecimal corresponde a un 3, por lo que se
configuran estos pines. Este mismo procedimiento es usado para la configuración de los pines que
funcionaran como entradas de propósito general, la siguiente tabla muestra a detalle los pines utilizados del
microcontrolador.
Una vez realizado el código se genera un archivo en el software de simulación Proteus y se realizan las
conexiones (Figura 3), cabe señalar que esta simulación solo es para mostrar como se hacen las
conexiones, esto cuando no se cuenta con el módulo Dimmer.
Microcontroladores
Al no tener la certeza de que funcionaba el código, se procedió a llevarlo de manera experimental con la
tarjeta STM32F103C8T6, para ello utilizamos la Tabla 5, para realizar las conexiones.
Con el circuito anterior se experimento para corroborar que funcionaba de la manera esperada, pues como
se mencionó anteriormente proteus no cuenta con los elementos necesarios para llevarla a cabo.
Microcontroladores
Tras el haber obtenido el resultado esperado, se realizaron las modificaciones correspondientes al código
para adaptarse al microcontrolador de gama baja STM32G031K8.
La primera modificación que se realizó fue que se utilizó los pines del puerto B como salidas a la pantalla
LCD (esto debido a que el puerto B no cuenta con los mismos pines que el microcontrolador usado en
simulación), tres pines del puerto A se usaron como entradas y un pin se utilizó como salida la selección de
pines del microcontrolador se detalla en la siguiente tabla.
Se utiliza el manual de referencia de este microcontrolador para realizar las modificaciones necesarias (el
código con las modificaciones se puede observar en los Anexos) para posteriormente cargar el código al
microcontrolador.
Microcontroladores
Como se observa en la Figura 5, se realizó una prueba de luminosidad en un foco, donde se observa que
esta encendido el foco, esto se hace al presionar el push button.
Si se observa mas detalladamente la Figura 5, se nota que hay dos osciloscopios conectados, en la Figura
6 y 7 se muestran mas de cerca las imágenes, donde el osciloscopio izquierdo no está mostrando el cruce
por cero de nuestra señal y el osciloscopio derecho nos muestra la señal de salida de nuestro
microcontrolador, donde se nota que porcentaje de luminosidad cuenta, si se contara con el 100% de
luminosidad la señal mostrada debería de ser una sinusoidal pura.
Microcontroladores
Finalmente se cumplió con el objetivo, el cual era el control de luminosidad de un foco o velocidad de un
motor, cabe señalar que se realizaron las pruebas en un motor AC y se corroboro que se puede hacer el
mismo funcionamiento, solo que se reportan datos del foco ya que es más fácil de visualizar el cambio con
luminosidad que con velocidad del motor.
Microcontroladores
Conclusiones individuales
Anexos
delay();
GPIOB->ODR &=~0x2;
}
void wdat(char dato){
GPIOB->ODR &=~0x2;
GPIOB->ODR |=0x1;
GPIOB->ODR=(dato&0xF0)|(GPIOB->ODR&0x0F);
GPIOB->ODR |=0x2;
delay();
GPIOB->ODR &=~0x2;
GPIOB->ODR=(dato<<4&0xF0)|(GPIOB->ODR&0x0F);
GPIOB->ODR |=0x2;
delay();
GPIOB->ODR &=~0x2;
}
void init_lcd(void){
uint32_t i;
RCC->APBENR1 |=0x10000000; //habilitacion de puertos
while(!(RCC->APBENR1 &0x10000000));
RCC->IOPENR |= 0x3;
while(!(RCC->IOPENR &0x3));
GPIOB->MODER &=~0xAAAA;
uint32_t i;
Microcontroladores
int main(void){
init_lcd();
RCC->APBENR1 |= 0x10000001;
while(!(RCC->APBENR1&0x10000001));
RCC->APBENR2 |= 0x800;
RCC->IOPENR |= 0x1;
while(!(RCC->IOPENR&0x1));
GPIOA->MODER &=~0xF0F;
GPIOA->MODER |=0x100;
GPIOA->PUPDR |=0xA;
TIM2->CCMR1 |=0x68;
TIM2->CCER |=0x1;
TIM2->PSC=15;
TIM2->ARR=9999;
TIM2->CR1 |= 0x1;
wcom(0x80);
wdat('L');
wdat('u');
wdat('m');
wdat('i');
wdat('n');
wdat('o');
wdat('s');
wdat('i');
wdat('d');
wdat('a');
wdat('d');
wdat(0x91);
wdat('3');
wdat('5');
wdat('%');
while(1)//ciclo infinito
{
if(GPIOA->IDR &0x1)
{
Microcontroladores
while(GPIOA->IDR&0X2);
while(!(GPIOA->IDR&0X2))
{
TIM2->CNT=0;
}
while(TIM2->CNT<6500);
GPIOA->ODR|=0X10;
for(i=0; i<100; i++);
GPIOA->ODR&=~0X10;
}
}
}
#include "lcd.h"
/*
* port A bit LCD
* 7 dato 7
* 6 dato 6
* 5 dato 5
* 4 dato 4
* 1 E
* 0 RS
*/
void delay(void){
int i;
for(i=0;i<20;i++);//50us
}
GPIOA->ODR |=0x2;
delay();
GPIOA->ODR &=~0x2;
}
void wdat(char dato){
GPIOA->ODR &=~0x2;
GPIOA->ODR |=0x1;
GPIOA->ODR=(dato&0xF0)|(GPIOA->ODR&0x0F);
GPIOA->ODR |=0x2;
delay();
GPIOA->ODR &=~0x2;
GPIOA->ODR=(dato<<4&0xF0)|(GPIOA->ODR&0x0F);
GPIOA->ODR |=0x2;
delay();
GPIOA->ODR &=~0x2;
}
void init_lcd(void){
uint32_t i;
RCC->APB2ENR |=0x1C; //habilitacion de puertos
while(!(RCC->APB2ENR &=0x1C));
GPIOA->CRL = 0x33334433;
wcom(0x01);//clear
for(i=0;i<800;i++);//2ms
wcom(0x06);//entry mode
}
int main(void){
init_lcd();
RCC->APB2ENR |=0x5;
while(!(RCC->APB2ENR&0x5));
RCC->APB1ENR |=0x10000003;
while(!(RCC->APB1ENR&0x10000003));
//---------------------------------------
GPIOB->CRL &=~0x444;
GPIOB->CRL |=0x2488;
//---------------------------------------
TIM3->CR2 |=0x80;
TIM3->CCMR1 |=0x70;
TIM3->CCER |=0x1;
TIM3->PSC =7;
TIM3->ARR = 8333;
TIM3->CR1 = 0x1;
//
wcom(0x80);
wdat('v');
wdat('e');
wdat('l');
wdat('o');
wdat('c');
wdat('i');
wdat('d');
wdat('a');
wdat('d');
wdat('7');
wdat('5');
Microcontroladores
uint16_t i;
while(1){
if(GPIOB->IDR&0X1)
{
while(GPIOB->IDR&0X2);
while(!(GPIOB->IDR&0X2))
{
TIM3->CNT=0;
}
GPIOB->ODR|=0X8;
while(TIM3->CNT<3125);
GPIOB->ODR&=~0X8;
}
else
for(i=0; i<0x36; i++)
GPIOB->ODR &=~0x4;
}
}
Anexo 3. Video timer 1.
https://youtu.be/lIfy9-Tckj4
Anexo 4. Video timer 2.
https://youtu.be/zkU64VnGcco
Bibliografía
i
Puertos de entrada/salida de propósito general (GPIO). (2019, junio 13). Github.io. https://logys.github.io/eleckia/docs/perifericos/gpio/gpio/
ii
Noviello, C. (2016). Mastering STM32: A Step-by-step Guide to the Most Complete ARM Cortex-M Platform, using a Free and Powerful Development
Environment Based on Eclipse and GCC.
iii
Mecafenix, I. (2017, mayo 22). Que es una pantalla LCD y para qué sirve. Ingeniería Mecafenix.
https://www.ingmecafenix.com/electronica/componentes/lcd/
iv
(S/f). Reference manual STM32G031K8. Recuperado el 4 de septiembre de 2023, de https://www.st.com/en/microcontrollers-
microprocessors/stm32g031k8.html
v
(S/f-b). Reference manual STM32F103C8T6. Recuperado el 4 de septiembre de 2023, de https://www.st.com/en/microcontrollers-
microprocessors/stm32f103/documentation.html
Microcontroladores
vi
Módulo Dimmer De Luz Ac Control Potencia 1 Canal. (s/f). Com.mx. Recuperado el 18 de septiembre de 2023, de
https://jelelectronica.mercadoshops.com.mx/MLM-713591569-modulo-dimmer-de-luz-ac-control-potencia-1-canal-_JM
vii
Timers. (2010, abril 24). Programación Orientada a Objetos 2. https://objetos2.wordpress.com/2010/04/24/timers-2/