Configuración del PWM
El CH552 es un microcontrolador USB que ofrece versatilidad en las Entradas/Salidas, incluida la capacidad de generar señales PWM. En este ejemplo, se te guiará a través de la configuración del CH552 para generar señales PWM con una frecuencia y ciclo de trabajo específicos.
Conceptos Básicos
La Modulación de Ancho de Pulso (PWM) es una técnica utilizada para controlar la potencia entregada a un dispositivo. Se logra variando la duración de una señal digital de alta frecuencia, controlando así la cantidad de potencia entregada al dispositivo. Esto es útil en diversas aplicaciones, como el control de motores, ajuste de brillo de LED y generación de señales analógicas.
Uso del proyecto
Uso por Entorno
Puedes acceder al código de ejemplo utilizando la siguiente ruta:
File -> Examples -> Unit_SketchLab_Advance -> PWM.ino
Uso por Descarga del Código
- Descarga el archivo haciendo clic en el siguiente enlace:
- Dentro de la carpeta CH552-PWM existe un archivo que lleva por nombre
CH552-PWM.ino
abre el archivo con Arduino IDE.
Configura el entorno con las siguientes especificaciones:
- Reloj: 16 MHz.
- Método de carga: USB.
- Ajuste de carga a: "USER CODE w/ 266B USB ram".
Compilar y correr un programa
Carga un programa ingresando al modo de BOOT (cargador de arranque). Desconecte el cable USB, presione el botón BOOT en la tarjeta de desarrollo y luego vuelve a conectar a la PC.
Presione cargar codigo y espere hasta que muestre el mensaje Resetok.
A continuación, se describe el funcionamiento del código para generar señales PWM:
Al abrir el IDE, este despliega dos archivos. Dado que Arduino actúa simplemente como un compilador, la estructura del código presentado experimentará cambios al ser procesado. Por lo tanto, se sugiere abrir el proyecto completo utilizando un editor de código preferido.
En este contexto, se recomienda el uso de Visual Studio Code. El primer archivo corresponde a una interfaz de compilación. Este entorno de desarrollo proporciona una visión integral del proyecto, permitiendo un manejo más eficiente y una comprensión más profunda de la estructura del código.
#ifndef USER_USB_RAM
#error "This firmware needs to be compiled with a USER USB setting"
#endif
unsigned char _sdcc_external_startup (void) __nonbanked {
return 0;
}
El segundo abre el código que permite hacer la función deseada:
Este código incluye funciones para cambiar la señal PWM y un bucle principal que realiza transiciones suaves.
#include <stdio.h>
#include "src/config.h"
#include "src/system.h"
#include "src/gpio.h"
#include "src/delay.h"
#include "src/pwm.h"
#define MIN_COUNTER 10
#define MAX_COUNTER 254
#define STEP_SIZE 10
void change_pwm(int hex_value)
{
PWM_write(PIN_PWM, hex_value);
}
void main(void)
{
PWM_set_freq(1000);
PIN_output(PIN_PWM);
PWM_start(PIN_PWM);
PWM_write(PIN_PWM, 0);
CLK_config();
DLY_ms(5);
while (1)
{
for (int i = MIN_COUNTER; i < MAX_COUNTER; i+=STEP_SIZE)
{
change_pwm(i);
DLY_ms(10);
}
for (int i = MAX_COUNTER; i > MIN_COUNTER; i-=STEP_SIZE)
{
change_pwm(i);
DLY_ms(10);
}
}
}
El código proporciona una implementación práctica de PWM utilizando el microcontrolador CH552 y el entorno de desarrollo Arduino IDE. Se ha incorporado un bucle principal que ejecuta transiciones suaves en la salida PWM, lo cual resulta aplicable en diversas situaciones prácticas. Entre estas aplicaciones, se destacan el control de motores para lograr movimientos suaves y el ajuste gradual de la intensidad luminosa de una fuente de luz.
De manera predeterminada, la tarjeta de desarrollo del CH552 cuenta con un LED conectado al pin P3.4
, y la configuración específica se encuentra en el archivo scr\config.h
.
// Pin definitions
#define PIN_BUZZER P33 // buzzer pin
#define PIN_SDA P31 // I2C SDA
#define PIN_SCL P30 // I2C SCL
#define PIN_ADC P11 // pin used as ADC input<--
#define PIN_PWM P34 // PWM pin -->
#define PIN_BUTTON P15 // button pin
#define PIN_BUTTON2 P32 // button pin
#define PIN_BUT_START P16 // button pin
Resultado
⌨️ con ❤️ por UNIT-Electronics 😊