Teach Pelajaran dengan makmal jarak jauh

Pelajaran Teach

STM32 Mbed CodeIDE (6/8): PWM kecerahan dan kawalan RGB

Pelajar menggunakan Mbed PwmOut untuk mengawal tahap kecerahan LED dan warna RGB, kemudian merekodkan cara kitaran tugas mengubah output papan sebenar.

  • STM32 Nucleo (Mbed)
  • 60 min
  • Elektronik vokasional menengah atas / pengenalan
  • ms-MY
  • Embedded systems
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Hasil pembelajaran

  • Gunakan Mbed PwmOut untuk mengawal kecerahan output.

  • Hubungkaitkan kitaran tugas dengan kecerahan yang boleh dilihat atau keseimbangan warna.

  • Gunakan input analog untuk mengawal output PWM.

Pratonton aktiviti pelajar

Kandungan aktiviti

Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.

1

Kitaran tugas

8 min

Banyak peranti memerlukan tahap antara mati dan hidup: lampu boleh dimalapkan, penunjuk warna, motor, buzzer dan output lain yang sepatutnya boleh dilaraskan. Dalam pelajaran ini, PWM membolehkan anda mengawal kecerahan dan keamatan warna, kemudian menyambungkan output yang boleh dilihat itu kepada kawalan analog langsung.

Mbed menggunakan PwmOut untuk PWM pin:

PwmOut red(PA_8);
red.period_ms(2);
red.write(0.25f);

PwmOut red(PA_8) mencipta objek output PWM Mbed. period_ms(2) menetapkan tempoh corak denyutan berulang, manakala write(0.25f) menetapkan bahagian setiap kitaran yang hidup. Dengan menggunakan tempoh yang sama bagi saluran merah, hijau dan biru, ketiga-tiganya berfungsi sebagai satu output warna RGB yang diselaraskan.

write() mengambil kitaran tugas dari 0.0 hingga 1.0:

- 0.0f: sentiasa dimatikan
- 0.25f: hidup selama 25 peratus daripada setiap kitaran
- 1.0f: sentiasa hidup

Pelajaran ini menggunakan pin RGB PWM PA_8, PA_9 dan PA_10.

Ia juga menggunakan PC_0 sebagai pin kawalan analog pada separuh kedua pelajaran. Dalam UI makmal, PC_0 ialah peluncur Pot. pot1. Ini berbeza daripada pelajaran 5, yang menggunakan PC_1 / Pot. pot2.

Daripada Pot. pot1 kepada saluran RGB PWM

Laluan isyarat daripada potensiometer pot1 pada PC0 melalui AnalogIn dan nilai kitaran tugas PwmOut kepada output RGB PA8, PA9 dan PA10.

Laluan hanya menggunakan Pot. pot1 pada PC_0 dan tiga output RGB. Gambar rajah
menunjukkan antara muka; TODO anda masih menentukan nilai kitaran tugas sebenar yang akan ditulis.

Manakah yang sepatutnya kelihatan lebih cerah pada saluran LED yang sama: kitaran tugas 0.20 atau kitaran tugas 0.80? Terangkan dalam satu ayat.

2

Uji tahap RGB tetap

22 min

  1. Buka makmal STM32 Mbed CodeIDE.

  2. Buka main.cpp.

  3. Gantikan fail dengan program di bawah.

  4. Simpan, kompil dan muat naik.

  5. Tonton konsol dan kamera bersama-sama.

  6. Perhatikan tiga keadaan kecerahan/warna.

  7. Catat perkara yang berubah antara merah rendah, warna campuran dan biru tinggi.

#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);
    }
}

Isi tiga baris, satu setiap keadaan RGB yang dicetak. Peratusan bercetak bermaksud tiga peratusan kitaran tugas yang ditunjukkan selepas r=, g= dan b=; Output yang diperhatikan ialah warna/kecerahan kamera. Jadual mungkin memaparkan baris tambahan: biarkan baris yang tidak digunakan kosong sepenuhnya. Jika warna halus, pilih sebahagiannya atau tidak daripada meneka.

Jadual bukti tetapan RGB

Lengkapkan tiga keadaan bercetak. Biarkan baris tambahan yang tidak digunakan kosong.

Keadaan bercetak Bercetak merah % Hijau bercetak % Biru bercetak % Output diperhatikan Jangkaan sepadan?
3

Gunakan potensiometer sebagai kawalan kecerahan

22 min

Sekarang gabungkan input analog dan output PWM. Potensiometer mengawal kitaran tugas saluran merah. Peratusan bersiri ialah bukti terkuat jika pendedahan kamera menyukarkan perbezaan kecerahan yang kecil.

  1. Gantikan main.cpp dengan program di bawah.

  2. Lengkapkan TODO 1 supaya duty memetakan bacaan analog 0.0-1.0 kepada julat 0.0-1.0 PWM yang sama.

  3. Lengkapkan TODO 2 supaya nilai yang dipetakan ditulis pada saluran merah.

  4. Simpan, kompil dan muat naik. Ini ialah kitaran 2 daripada 2 yang dirancang.

  5. Gerakkan peluncur Pot. pot1 perlahan-lahan.

  6. Catatkan bacaan rendah, pertengahan dan tinggi dengan output yang boleh dilihat.

#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: gantikan 0.0f dengan pemetaan analog-ke-tugas.
        float duty = 0.0f;
        int percent = (int)(duty * 100.0f);

        // TODO 2: gantikan 0.0f dengan pembolehubah tugas yang dipetakan.
        red.write(0.0f);
        printf("red_percent=%d\n", percent);

        ThisThread::sleep_for(500ms);
    }
}

Isikan tepat tiga kes yang diperlukan: kedudukan potensiometer rendah, tengah dan tinggi. Peratus bersiri ialah integer selepas red_percent= dan mempunyai unit %; Kecerahan yang diperhatikan ialah penilaian umum melalui kamera, bukan ukuran angka; Keterlihatan merekodkan sama ada bukti kamera jelas. Biarkan mana-mana baris tambahan yang tidak digunakan kosong sepenuhnya.

Jadual bukti PWM potensiometer

Lengkapkan baris rendah, tengah dan tinggi selepas program TODO dijalankan. Biarkan baris tambahan yang tidak digunakan kosong.

Kedudukan potensiometer Peratus bersiri % Kecerahan diperhatikan Keterlihatan kamera

Bandingkan baris rendah, tengah dan tinggi anda. Nyatakan tiga peratusan yang dicetak mengikut tertib dan sama ada kecerahan merah yang kelihatan mengikuti aliran rendah ke tinggi yang sama.

4

Serahkan kod anda

8 min

Lampirkan main.cpp akhir anda yang disimpan

Klik Semak fail yang disimpan, sahkan bahawa main.cpp mengandungi versi PWM yang dikawal potensiometer, kemudian klik Lampirkan kod yang disimpan. Selepas kod dilampirkan, klik Serah serahan di bahagian bawah aktiviti.