Teach Remote lab lessons

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.

  • STM32 Nucleo (Mbed)
  • 60 min
  • Ensino médio / formação técnica introdutória em eletrônica
  • Português (Brasil)
  • Embedded systems
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Learning Outcomes

  • Usar Mbed PwmOut para 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.

1

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

Caminho do sinal do potenciômetro pot1 em PC0, passando por AnalogIn e PwmOut write(duty), até as saídas RGB PA8, PA9 e PA10.

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.

2

Teste níveis RGB fixos

22 min

  1. Abra o laboratório STM32 Mbed CodeIDE.

  2. Abra main.cpp.

  3. Substitua o arquivo pelo programa abaixo.

  4. Salve, compile e faça upload.

  5. Assista ao console e à câmera juntos.

  6. Observe os três estados de brilho/cor.

  7. 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?
3

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.

  1. Substitua main.cpp pelo programa abaixo.

  2. Complete TODO 1 para que duty mapeie a leitura analógica de 0,0-1,0 para o mesmo intervalo de 0,0-1,0 PWM.

  3. Complete TODO 2 para que o valor mapeado seja gravado no canal vermelho.

  4. Salve, compile e faça upload. Esta é a compilação planejada 2 de 2.

  5. Mova o controle deslizante Pot. pot1 lentamente.

  6. 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.

4

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.