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.
¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. El alumnado entra con un código de clase.
¿Primera vez en LabsLand? Crea tu cuenta de docente
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
Muchos dispositivos necesitan niveles entre apagado y encendido: luces regulables, indicadores de color, motores, zumbadores y otras salidas que deben sentirse ajustables. En esta lección, PWM te permite controlar brillo e intensidad de color, y después conectar esa salida visible a un control analógico en vivo.
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.
De Pot. pot1 a los canales PWM RGB
El recorrido usa solo Pot. pot1 en PC_0 y las tres salidas RGB. El diagrama
muestra las interfaces; tus TODO todavía determinan el ciclo y la escritura real.
¿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, una por estado RGB impreso. Porcentajes r/g/b impresos son los tres ciclos de trabajo tras r=, g= y b=; Salida observada es el color/brillo de cámara. La tabla puede mostrar filas adicionales: deja totalmente vacías las que no uses. Si un color se ve poco, elige parcialmente o no en vez de adivinar.
Tabla de evidencia RGB fija
Completa los tres estados impresos. Deja vacías las filas adicionales no usadas.
| Estado impreso | Rojo impreso % | Verde impreso % | Azul impreso % | 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.Completa TODO 1 para mapear la lectura analógica 0.0-1.0 al mismo rango PWM 0.0-1.0.
Completa TODO 2 para escribir el valor mapeado en el canal rojo.
Guarda, compila y carga. Es la compilación prevista 2 de 2.
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 reading = pot.read();
// TODO 1: sustituye 0.0f por el mapeo de lectura a duty.
float duty = 0.0f;
int percent = (int)(duty * 100.0f);
// TODO 2: sustituye 0.0f por la variable duty mapeada.
red.write(0.0f);
printf("red_percent=%d\n", percent);
ThisThread::sleep_for(500ms);
}
}
Completa exactamente los tres casos: posiciones baja, media y alta. Porcentaje serie es el entero tras red_percent= y tiene unidad %; Brillo observado es una valoración amplia de cámara, no una medida numérica; Visibilidad de cámara indica la claridad de la evidencia. Deja totalmente vacías las filas adicionales no usadas.
Tabla de evidencia PWM con potenciómetro
Completa las filas baja, media y alta después de ejecutar el programa con TODO resueltos. Deja vacías las filas adicionales.
| Posición del potenciómetro | Porcentaje serie % | Brillo observado | Visibilidad de cámara |
|---|---|---|---|
Compara tus filas baja, media y alta. Indica en orden los tres porcentajes impresos y si el brillo rojo visible siguió la misma tendencia de menor a mayor.
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.
Convierte esta vista previa en una sesión de clase real
Activa LabsLand Teach para usar esta lección con tus estudiantes. La primera vez que actives Teach, podrás realizar una sesión de clase sin costo.
¿Primera vez en LabsLand? Crea tu cuenta de docente