Teach lesson
STM32 Mbed CodeIDE (6/8): controle de brilho por PWM e RGB
Os estudantes usam Mbed PwmOut para controlar o brilho de LEDs e os níveis de cor RGB, depois registram como o ciclo de trabalho altera a saída da placa real.
New to LabsLand? Create your teacher account
Learning Outcomes
Usar Mbed
PwmOutpara controlar o brilho de uma saída.Relacionar o ciclo de trabalho ao brilho visível ou ao equilíbrio de cores.
Usar uma entrada analógica para controlar a saída PWM.
Student activity preview
Activity Content
Preview only. In a class session, students can fill in responses and submit their work to the teacher.
Ciclo de trabalho
8 min
Muitos dispositivos precisam de níveis entre ligado e desligado: luzes reguláveis, indicadores coloridos, motores, campainhas e outras saídas que devem ser ajustáveis. Nesta lição, PWM permite controlar o brilho e a intensidade da cor e, em seguida, conectar essa saída visível a um controle analógico ao vivo.
O Mbed usa PwmOut nos pinos PWM:
PwmOut red(PA_8);
red.period_ms(2);
red.write(0.25f);
PwmOut red(PA_8) cria um objeto de saída PWM do Mbed. period_ms(2) define a frequência de repetição dos pulsos e write(0.25f) define a fração de cada período em que a saída fica ativa. Em um LED RGB, usar o mesmo período nos canais vermelho, verde e azul permite coordenar as cores.
write() leva um ciclo de trabalho de 0,0 a 1,0:
- 0.0f: sempre desativado
- 0.25f: ativado para 25 por cento de cada ciclo
- 1.0f: sempre ligado
Esta lição usa os pinos RGB PWM PA_8, PA_9 e PA_10.
Ele também usa PC_0 como pino de controle analógico na segunda metade da lição. Na IU do laboratório, PC_0 é o controle deslizante Pot. pot1. Isso é diferente da lição 5, que usou PC_1 / Pot. pot2.
De Pot. pot1 aos canais PWM RGB
O caminho usa apenas Pot. pot1 em PC_0 e as três saídas RGB. O diagrama
mostra as interfaces; seus TODOs ainda determinam o valor real de duty e a chamada write().
O que deve parecer mais brilhante no mesmo canal LED: ciclo de trabalho 0,20 ou ciclo de trabalho 0,80? Explique em uma frase.
Teste níveis RGB fixos
22 min
Abra o laboratório STM32 Mbed CodeIDE.
Abra
main.cpp.Substitua o arquivo pelo programa abaixo.
Salve, compile e faça upload.
Assista ao console e à câmera juntos.
Observe os três estados de brilho/cor.
Registre o que mudou entre vermelho baixo, cor mista e 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);
}
}
Preencha três linhas, uma por estado RGB impresso. Porcentagens impressas significa as três porcentagens do ciclo de trabalho mostradas após r=, g= e b=; A saída observada é a cor/brilho da câmera. A tabela pode exibir linhas extras: deixe as linhas não utilizadas completamente em branco. Se uma cor for sutil, escolha parcialmente ou não em vez de adivinhar.
Tabela de evidências RGB fixa
Conclua os três estados impressos. Deixe as linhas extras não utilizadas em branco.
| Estado impresso | Vermelho impresso % | Verde impresso % | Azul impresso % | Saída observada | Expectativa correspondente? |
|---|---|---|---|---|---|
Use o potenciômetro como controle de brilho
22 min
Agora combine a entrada analógica e a saída PWM. O potenciômetro controla o ciclo de trabalho do canal vermelho. A porcentagem serial é a evidência mais forte se a exposição da câmera torna o brilho sutil.
Substitua
main.cpppelo programa abaixo.Complete TODO 1 para que
dutymapeie a leitura analógica de 0,0-1,0 para o mesmo intervalo de 0,0-1,0 PWM.Complete TODO 2 para que o valor mapeado seja gravado no canal vermelho.
Salve, compile e faça upload. Esta é a compilação planejada 2 de 2.
Mova o controle deslizante
Pot. pot1lentamente.Grave leituras baixas, médias e altas com a saída visível.
#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: substitua 0.0f pelo mapeamento da leitura analógica para duty.
float duty = 0.0f;
int percent = (int)(duty * 100.0f);
// TODO 2: substitua 0.0f pela variável duty calculada.
red.write(0.0f);
printf("red_percent=%d\n", percent);
ThisThread::sleep_for(500ms);
}
}
Preencha exatamente os três casos exigidos: posições baixa, média e alta do potenciômetro. Porcentagem serial é o número inteiro após red_percent= e tem unidade %; Brilho observado é uma avaliação ampla pela câmera, não uma medida numérica; Visibilidade registra se a evidência da câmera estava clara. Deixe todas as linhas extras totalmente em branco.
Tabela de evidências PWM
Conclua as linhas inferior, intermediária e superior após a execução do programa TODO. Deixe as linhas extras não utilizadas em branco.
| Posição do potenciômetro | Porcentagem serial % | Brilho observado | Visibilidade da câmera |
|---|---|---|---|
Compare suas linhas inferior, intermediária e superior. Indique as três porcentagens impressas em ordem e se o brilho vermelho visível seguiu a mesma tendência de baixo para alto.
Envie seu código
8 min
Anexe seu main.cpp final salvo
Clique em Verificar arquivos salvos, confirme que main.cpp contém a versão PWM controlada pelo potenciômetro e clique em Anexar código salvo. Depois, clique em Enviar atividade na parte inferior.