Lección Teach
STM32 Mbed CodeIDE (6/8): brillo PWM y control RGB
El alumnado usa PwmOut de Mbed para controlar brillo de LEDs y niveles RGB, y registra cómo el ciclo de trabajo cambia la salida real de la placa.
Resultados de aprendizaje
Usar
PwmOutde Mbed para controlar brillo de salida.Relacionar ciclo de trabajo con brillo visible o balance de color.
Usar entrada analógica para controlar salida PWM.
Vista previa de la actividad del estudiante
Contenido de la actividad
Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.
Ciclo de trabajo
8 min
Mbed usa PwmOut para pines PWM:
PwmOut red(PA_8);
red.period_ms(2);
red.write(0.25f);
PwmOut red(PA_8) crea un objeto de salida PWM de Mbed. period_ms(2) fija cada cuánto se repite el patrón de pulsos, y write(0.25f) fija qué parte de cada repetición está encendida. Para un LED RGB, usar el mismo periodo en rojo, verde y azul hace que los canales se comporten como una salida de color coordinada.
write() recibe un ciclo de trabajo de 0.0 a 1.0:
- 0.0f: siempre apagado
- 0.25f: encendido durante el 25 por ciento de cada ciclo
- 1.0f: siempre encendido
Esta lección usa los pines PWM RGB PA_8, PA_9 y PA_10.
También usa PC_0 como pin de control analógico en la segunda mitad de la lección. En la interfaz del laboratorio, PC_0 es el deslizador Pot. pot1. Es distinto de la lección 5, que usaba PC_1 / Pot. pot2.
Mapa de pines PWM y potenciómetro
El mismo detalle de esquema es útil aquí: POT1 corresponde a PC_0, y los canales del LED RGB corresponden a PA_8, PA_9 y PA_10.
¿Qué debería verse más brillante en el mismo canal LED: ciclo de trabajo 0.20 o ciclo de trabajo 0.80? Explícalo en una frase.
Probar niveles RGB fijos
22 min
Abre el laboratorio STM32 Mbed CodeIDE.
Abre
main.cpp.Reemplaza el archivo con el programa siguiente.
Guarda, compila y carga.
Observa la consola y la cámara a la vez.
Observa los tres estados de brillo/color.
Registra qué cambió entre rojo bajo, color mezclado y azul alto.
#include "mbed.h"
PwmOut red(PA_8);
PwmOut green(PA_9);
PwmOut blue(PA_10);
void set_rgb(float r, float g, float b) {
red.write(r);
green.write(g);
blue.write(b);
}
int main() {
red.period_ms(2);
green.period_ms(2);
blue.period_ms(2);
printf("PWM RGB fixed levels start\n");
while (true) {
set_rgb(0.20f, 0.00f, 0.00f);
printf("state=low_red r=20 g=0 b=0\n");
ThisThread::sleep_for(2000ms);
set_rgb(0.20f, 0.50f, 0.10f);
printf("state=mixed r=20 g=50 b=10\n");
ThisThread::sleep_for(2000ms);
set_rgb(0.00f, 0.00f, 0.80f);
printf("state=high_blue r=0 g=0 b=80\n");
ThisThread::sleep_for(2000ms);
}
}
Rellena tres filas de tabla, una por cada estado RGB impreso. Copia la etiqueta de estado y los porcentajes impresos; después describe el color o brillo visible que observaste. Si la cámara hace que un color sea sutil, escríbelo en ¿Coincidió con lo esperado? en vez de adivinar.
Tabla de evidencia RGB fija
| Estado impreso | Porcentajes impresos | Salida observada | ¿Coincidió con lo esperado? |
|---|---|---|---|
Usar el potenciómetro como control de brillo
22 min
Ahora combina entrada analógica y salida PWM. El potenciómetro controla el ciclo de trabajo del canal rojo. El porcentaje serie es tu evidencia más fuerte si la exposición de la cámara hace que el brillo sea sutil.
Reemplaza
main.cppcon el programa siguiente.Guarda, compila y carga.
Mueve despacio el deslizador
Pot. pot1.Registra lecturas baja, media y alta con la salida visible.
#include "mbed.h"
AnalogIn pot(PC_0);
PwmOut red(PA_8);
PwmOut green(PA_9);
PwmOut blue(PA_10);
int main() {
red.period_ms(2);
green.period_ms(2);
blue.period_ms(2);
green.write(0.0f);
blue.write(0.0f);
printf("Potentiometer controlled PWM start\n");
while (true) {
float duty = pot.read();
int percent = (int)(duty * 100.0f);
red.write(duty);
printf("red_percent=%d\n", percent);
ThisThread::sleep_for(500ms);
}
}
Rellena tres filas para posiciones baja, media y alta del potenciómetro. Copia el porcentaje impreso y describe cómo cambió el brillo rojo. Si la exposición de la cámara dificulta juzgar el brillo, copia igualmente el porcentaje y escribe "cámara poco clara" en Nota.
Tabla de evidencia PWM con potenciómetro
| Posición del potenciómetro | Porcentaje serie | Brillo observado | Nota |
|---|---|---|---|
Usa una fila de tu tabla para explicar cómo la entrada analógica controló la salida PWM. Incluye la posición del potenciómetro, el porcentaje impreso y el brillo observado.
Enviar tu código
8 min
Adjunta tu main.cpp final guardado
Pulsa Comprobar archivos guardados, confirma que main.cpp contiene la versión PWM controlada por potenciómetro y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.