Teach Pelajaran dengan makmal jarak jauh

Pelajaran Teach

STM32 Mbed CodeIDE (8/8): projek akhir pengawal bersepadu

Pelajar menggabungkan input analog, input butang, output RGB/LED status dan bukti bersiri untuk membina pengawal STM32 bersepadu yang ringkas.

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

Hasil pembelajaran

  • Gabungkan input analog, input butang, output RGB PWM, status LED dan bukti bersiri dalam satu pengawal.

  • Gunakan matriks ujian untuk membuktikan tingkah laku pengawal satu keadaan pada satu masa.

  • Terangkan bagaimana kod, output bersiri dan bukti makmal yang boleh dilihat menyokong tuntutan pengawal.

Pratonton aktiviti pelajar

Kandungan aktiviti

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

1

Keperluan pengawal

12 min

Sistem terbenam menjadi berguna apabila beberapa fungsi asas bekerjasama: membaca aras, menentukan keadaan, menunjukkan amaran visual dan mencetak bukti yang mencukupi untuk mengesahkan hasilnya.

Pengawal menggunakan satu potensiometer untuk mensimulasikan tekanan dalam tangki penerima dan satu butang untuk mengesahkan penggera. Dalam pemasangan sebenar, pemancar tekanan yang ditentukur dan perlindungan bertaraf keselamatan diperlukan; pengawal latihan ini hanya digunakan untuk mempraktikkan logik petunjuk dan pengesahan.

Peta perkakasan yang digunakan oleh pengawal permulaan:

- PC_1 ialah input tekanan simulasi, dikawal oleh peluncur Pot. pot2.
- PC_5 ialah input butang pengesahan penggera, dikawal oleh butang B1.
- PA_8, PA_9 dan PA_10 ialah saluran RGB PWM.
- PB_13 ialah LED status hijau yang aktif-rendah.

Input, pengawal dan output bukti

Seni bina pengawal dengan potensiometer pot2 pada PC1 dan butang B1 pada PC5 sebagai input; pengawal memacu PWM RGB pada PA8 hingga PA10, LED status pada PB13 dan bukti bersiri.

Baca peta ini sebagai satu set objek Mbed yang berfungsi bersama: AnalogIn membaca aras, DigitalIn membaca butang pengesahan, PwmOut memacu saluran RGB dan DigitalOut memacu LED status. Tujuan utama projek akhir ini ialah menghubungkan komponen API tersebut menjadi satu pengawal yang mudah dibaca.

Tingkah laku yang diperlukan ialah:

- Aras di bawah 40%: keluaran RGB hijau, LED status padam, bukti bersiri seperti
percent=25 level=SAFE ack=0.
- Aras 40% hingga 69%: keluaran RGB kuning, LED status padam, bukti bersiri seperti
percent=55 level=WARNING ack=0.
- Aras 70% atau lebih tinggi dengan butang dilepaskan: keluaran RGB merah, LED status
berkelip, bukti bersiri seperti percent=80 level=CRITICAL ack=0. Perhatikan keadaan ini
sekurang-kurangnya dua saat sebelum merekodkan keadaan ini; kira ia sebagai berkelip
hanya jika status LED dihidupkan dan dimatikan berulang kali.
- Aras 70% atau lebih tinggi selepas butang ditekan sekali: keluaran RGB biru,
LED status padam, bukti bersiri seperti percent=80 level=CRITICAL ack=1.
Melepaskan butang tidak membatalkan pengakuan selagi aras
kekal kritikal.

Butang pengesahan tidak mengurangkan tekanan atau menjadikan keadaan kritikal selamat. Ia hanya mengunci petunjuk tempatan supaya pengendali boleh menunjukkan bahawa penggera telah diperhatikan; level=CRITICAL mesti kekal dalam bukti bersiri. Selak ini padam secara automatik selepas tekanan simulasi jatuh di bawah ambang kritikal.

Mulakan kedua-dua kes dengan selak yang dikosongkan, kemudian tekan butang. Jawab dalam
format berikut:

1. 69% | level=... | ack=...
2. 70% | level=... | ack=...
3. Explanation: ...

Dalam penjelasan, nyatakan mengapa kesamaan pada 70% mengubah kedua-dua cawangan dan
sama ada pengakuan boleh dikunci oleh selak.

2

Jalankan pengawal permulaan

30 min

  1. Buka makmal STM32 Mbed CodeIDE.

  2. Buka main.cpp.

  3. Gantikan fail dengan pengawal di bawah.

  4. Lengkapkan TODO 1 dengan ungkapan butang aktif-rendah dan TODO 2 dengan keputusan ambang julat amaran.

  5. Sebelum mengkompil atau memerhati papan, isi empat sel Tindak balas dijangka dalam jadual ujian daripada keperluan di atas.

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

  7. Gunakan Pot. pot2 untuk menetapkan tahap tekanan selamat, amaran dan kritikal.

  8. Dalam tahap kritikal, biarkan butang dilepaskan dahulu selama dua saat. Kemudian tekan dan lepaskannya; sahkan bahawa ack=1 kekal untuk sekurang-kurangnya dua baris bersiri kemudian.

  9. Rakam satu baris bagi setiap keadaan, termasuk baris bersiri penuh.

  10. Turunkan paras di bawah 70% dan sahkan bahawa selak ditetapkan semula kepada ack=0 sebelum selesai.

#include "mbed.h"

AnalogIn level_control(PC_1);
DigitalIn acknowledge_button(PC_5, PullUp);

PwmOut rgb_red(PA_8);
PwmOut rgb_green(PA_9);
PwmOut rgb_blue(PA_10);

DigitalOut status_led(PB_13, 1);

constexpr int warning_threshold_percent = 40;
constexpr int critical_threshold_percent = 70;

void status_on() {
    status_led = 0;
}

void status_off() {
    status_led = 1;
}

void set_rgb(float red, float green, float blue) {
    rgb_red.write(red);
    rgb_green.write(green);
    rgb_blue.write(blue);
}

void show_safe() {
    set_rgb(0.0f, 0.7f, 0.0f);
    status_off();
}

void show_warning() {
    set_rgb(0.7f, 0.5f, 0.0f);
    status_off();
}

void show_critical(bool acknowledged) {
    if (acknowledged) {
        set_rgb(0.0f, 0.0f, 0.8f);
        status_off();
    } else {
        set_rgb(0.9f, 0.0f, 0.0f);
        status_led = !status_led.read();
    }
}

int main() {
    rgb_red.period_ms(2);
    rgb_green.period_ms(2);
    rgb_blue.period_ms(2);

    printf("Integrated controller start\n");

    bool acknowledged = false;

    while (true) {
        float reading = level_control.read();
        int percent = (int)(reading * 100.0f);
// TODO 1: gantikan false dengan ungkapan butang aktif-rendah.
        bool button_pressed = false;

        if (percent < critical_threshold_percent) {
            acknowledged = false;
        } else if (button_pressed) {
            acknowledged = true;
        }

        if (percent < warning_threshold_percent) {
            show_safe();
            printf("percent=%d level=SAFE ack=%d\n",
                   percent,
                   acknowledged);
        // TODO 2: gantikan false dengan ujian ambang julat WARNING.
        } else if (false) {
            show_warning();
            printf("percent=%d level=WARNING ack=%d\n",
                   percent,
                   acknowledged);
        } else {
            show_critical(acknowledged);
            printf("percent=%d level=CRITICAL ack=%d\n",
                   percent,
                   acknowledged);
        }

        ThisThread::sleep_for(500ms);
    }
}

Sediakan dan isi jadual dalam dua peringkat. Sebelum mengkompil, pilih setiap Kes ujian, tentukan tindakan butang dan tulis Tindak balas dijangka sebagai warna RGB serta gelagat LED status. Semasa ujian langsung, masukkan peratusan tekanan integer sebenar, tindak balas visual dan baris bersiri penuh. Peratusan itu mensimulasikan output pemancar; ia bukan tekanan dalam bar. Bagi keadaan kritikal yang belum diakui, tulis berkelip hanya selepas memerhati sekurang-kurangnya dua saat. Bagi keadaan kritikal yang telah diakui, tekan dan lepaskan butang lalu rakam baris kemudian yang menunjukkan ack=1 masih kekal. Biarkan baris tambahan yang tidak digunakan kosong sepenuhnya.

Jadual ujian pengawal empat keadaan

Sebelum menguji, isikan tindak balas dijangka bagi keempat-empat keadaan. Semasa ujian, tambahkan input sebenar, tindak balas visual dan bukti bersiri penuh. Biarkan baris tambahan yang tidak digunakan kosong.

Kes ujian Input tekanan sebenar % Tindakan butang Jangkaan respons Tindak balas boleh dilihat Bukti bersiri

Selepas mengakui keadaan kritikal, salin satu baris lengkap yang dicetak selepas melepaskan B1 yang masih menunjukkan level=CRITICAL ack=1. Kemudian turunkan tahap di bawah 70% dan salin baris lengkap pertama yang menunjukkan ack=0. Nyatakan bagaimana dua garisan membuktikan selak dan keadaan tetapannya.

Pilih baris ujian terkuat anda. Petik keadaan input dan baris bersiri daripada baris itu, kemudian terangkan cara output RGB dan status LED sepadan dengan keperluan.

3

Tingkatkan pengawal

15 min

Pengawal di atas ialah titik permulaan. Pilih satu penambahbaikan, laksanakannya dalam main.cpp, kemudian simpan, kompil, muat naik dan uji dalam senario penggera tangki penerima. Pelan tanpa pelaksanaan kod tidak mencukupi.

Pilih satu peningkatan terhad:

- Pilihan ambang: tukar hanya critical_threshold_percent kepada nilai daripada
72% hingga 80%. Pilih satu nilai ujian tetap antara 70% dan ambang baharu anda,
jadi input yang sama bertukar cawangan selepas pengeditan anda.
- Pilihan aras sangat tinggi: tambahkan cabang VERY_HIGH untuk nilai 90% atau lebih,
sejurus sebelum cawangan kritikal biasa. Gunakan petunjuk RGB magenta,
pastikan LED status menyala tetap dan hasilkan bukti bersiri level=VERY_HIGH.
Gunakan 95% dengan butang dilepaskan untuk ujian sebelum/selepas, kemudian semak 80%
sekali untuk mengesahkan bahawa tingkah laku kritikal biasa masih berfungsi.

Sebelum mengedit, jawab dengan baris ini:

1. Pilihan dipilih: ambang / aras sangat tinggi
2. Lokasi kod tepat yang akan saya ubah: ...
3. Input dan tindakan butang yang akan saya ulang sebelum dan selepas: ...
4. Untuk pilihan aras sangat tinggi sahaja: Semakan regresi 80%: ...

Gunakan baris pengawal permulaan yang sepadan sebagai bukti sebelum. Laksanakan perubahan, simpan, kompil dan muat naik; ini ialah kitaran 2 daripada 2 yang dirancang. Uji tindakan input/butang yang sama sekali lagi untuk bukti selepas. Rakam baris bersiri lengkap dan gelagat RGB/LED status yang boleh dilihat bagi kedua-dua versi. Jika anda memilih pilihan aras sangat tinggi, jalankan semakan regresi tambahan pada 80% dan laporkannya dalam penjelasan akhir.

Bukti penambahbaikan sebelum dan selepas

Gunakan input terkawal yang sama untuk sebelum dan selepas. Biarkan baris tambahan yang tidak digunakan kosong.

Versi Input tekanan terkawal % Keadaan butang terkawal Status kompilasi/muat naik Baris bersiri penuh Hasil RGB/status yang kelihatan

Nyatakan perubahan kod yang tepat, kemudian bandingkan baris bersiri sebelum dan selepas serta hasil yang boleh dilihat. Katakan sama ada bukti mengesahkan peningkatan yang dimaksudkan. Untuk laluan yang sangat tinggi, laporkan juga sama ada semakan regresi 80% masih menghasilkan tingkah laku kritikal biasa.

4

Serahkan kod anda

8 min

Lampirkan main.cpp akhir anda yang disimpan

Klik Semak fail yang disimpan, sahkan bahawa main.cpp mengandungi pengawal akhir yang anda uji, kemudian klik Lampirkan kod yang disimpan. Selepas kod dilampirkan, klik Serah serahan di bahagian bawah aktiviti.