เรียนรู้และฝึกทดลองไปกับบอร์ดไมโครคอนโทรเลอร์ STM32 Nucleo จากค่าย STMicroelectronics (ตอนที่ 3 ทดลองใช้งานขา ADC บนบอร์ด Nucleo)

เรียนรู้และฝึกทดลองไปกับบอร์ดไมโครคอนโทรเลอร์ STM32 Nucleo

จากค่าย STMicroelectronics

(ตอนที่ 3 ทดลองใช้งานขา ADC บนบอร์ด Nucleo)

 ในบทความนี้เป็นการทดลองใช้งานขา ADC (Analog to Digital Converter) บนบอร์ด Nucleo รับสัญญาณอนาล็อกได้ตั้งแต่ 0 ถึง 3.3 โวลต์ ความละเอียด 12 บิต จำนวน 10 ช่อง โดยในการทดลองนี้อ่านค่าสัญญาณอนาล็อก จากตัวต้านทานปรับค่าได้ผ่านขา A0 ถ้าแรงดันของสัญญาณอยู่ในช่วงที่กำหนดไว้ ให้โปรแกรมแสดงผลผ่านหลอด LED ทั้ง 3 ดวง (ค่า R ที่ใช้ต่อร่วม 330 Ohm) ดังภาพ

  ภาพเปรียบสัญญาณอนาล็อกและดิจิตอลจะเห็นได้ว่า สัญญาณดิจิตอลมีเพียง 2 ระดับ คือ 1 (High) หรือ 0 (Low) แตกต่างจากสัญญาณอนาล็อกที่ระดับสัญญาณมีขนาดไม่คงที่

เมื่อต่อวงจรบนบอร์ดทดลองเข้ากับ Nucleo ได้ดังภาพ

          จากนั้นเข้าไปที่หน้าเว็บ Compiler ของ mbed สร้างไฟล์โปรแกรม main.cpp และ อิมพอร์ตไลบรารี่พื้นฐานของ mbed เข้ามา จากนั้นเขียนโค้ดโปรแกรมในไฟล์ main.cpp

โค้ดโปรแกรมดังนี้

#include "mbed.h"
 
DigitalOut led_red (D2);
DigitalOut led_green (D3);
DigitalOut led_blue (D4);
 
AnalogIn analog_ch_0(A0);
float value_ain_0 = 0.0f ;
 
int main()
{
 
    while(1) {
        value_ain_0 = analog_ch_0.read();
        value_ain_0  = value_ain_0 *3.3f;
 
        if ((value_ain_0 >= 0.0f) && (value_ain_0 < 1.0f)) {
            led_red = 1;
            led_green = 1;
            led_blue= 1;
        } else if ((value_ain_0 >= 1.0f) && (value_ain_0 < 2.0f)) {
            led_red = 0;
            led_green = 1;
            led_blue= 1;
        } else if ((value_ain_0 >= 2.0f) && (value_ain_0 < 3.0f)) {
            led_red = 0;
            led_green = 0;
            led_blue= 1;
        } else if (value_ain_0 >=  2.0f) {
            led_red = 0;
            led_green = 0;
            led_blue= 0;
        }
 
        wait_ms(100); // 100 ms
 
    } //End while()
} //End main()

จากโค้ดโปรแกรมจะเห็นได้ว่า

#include "mbed.h"
 
DigitalOut led_red (D2);
DigitalOut led_green (D3);
DigitalOut led_blue (D4);
 
AnalogIn analog_ch_0(A0);
float value_ain_0 = 0.0f;

กำหนดขาสัญญาณ D2 D3 D4 เป็น Output ใช้ชื่อ led_red led_green led_blue และกำหนดขา ADC ที่ขา A0 ใช้ชื่อ analog_ch_0 กำหนดตัวแปรชนิด float ชื่อ value_ain_0 สำหรับรับค่าที่อ่านได้จากขา ADC

while(1) {
        value_ain_0 = analog_ch_0.read();
        value_ain_0  = value_ain_0 *3.3f;
 
        if ((value_ain_0 >= 0.0f) && (value_ain_0 < 1.0f)) {
            led_red = 1;
            led_green = 1;
            led_blue= 1;
        } else if ((value_ain_0 >= 1.0f) && (value_ain_0 < 2.0f)) {
            led_red = 0;
            led_green = 1;
            led_blue= 1;
        } else if ((value_ain_0 >= 2.0f) && (value_ain_0 < 3.0f)) {
            led_red = 0;
            led_green = 0;
            led_blue= 1;
        } else if (value_ain_0 >=  2.0f) {
            led_red = 0;
            led_green = 0;
            led_blue= 0;
        }
 
        wait_ms(100); // 100 ms
 
    } //End while()

ให้โปรแกรมวนอ่านค่าสัญญาณอนาล็อกจากขา A0 ผ่านการใช้คำสั่ง .read(); เก็บค่าไว้ในตัวแปร value_ain_0 โดยค่าที่ได้อยู่ระหว่าง 0.0 ถึง 1.0 คูณด้วย 3.3 เพื่อแปลงเป็นค่าแรงดัน ถ้าตัวแปร value_ain_0
– อยู่ในช่วงมากกว่า 0.0 V ถึงน้อยกว่า 1.0 V ให้ LED ทั้ง 3 ดวงดับ
– อยู่ในช่วงมากกว่าหรือเท่ากับ 1.0 V ถึงน้อยกว่า 2.0 V ให้ LED สีแดงสว่างเพียงดวงเดียว
– อยู่ในช่วงมากกว่าหรือเท่ากับ 2.0 V ถึงน้อยกว่า 3.0 V ให้ LED สีแดงและเขียวสว่าง
– อยู่ในช่วงมากกว่าหรือเท่ากับ 3.0 V ให้ทั้ง 3 ดวงสว่าง

สามารถดูข้อมูล และตัวอย่างการใช้งานเพิ่มเติมได้จาก http://developer.mbed.org/handbook/AnalogIn

 จากนั้นทดลองใช้งานโปรแกรมโดยกดปุ่ม Compile All เพื่อสั่งให้คอมไพล์โปรแกรมและดาวน์โหลดโปรแกรมจากเว็บลงมา