Giới thiệu dự án

Trong bối cảnh cách mạng công nghiệp 4.0 và sự bùng nổ của mạng lưới vạn vật kết nối (IoT - Internet of Things), ngành kỹ thuật Điện tử - Viễn thông và Tự động hóa đang chuyển dịch mạnh mẽ từ các dòng vi điều khiển 8-bit truyền thống (như 8051, PIC, AVR) sang kiến trúc 32-bit hiệu năng cao. Lõi vi xử lý ARM Cortex-M của hãng ARM với tập lệnh Thumb-2 và kiến trúc RISC (Reduced Instruction Set Computer) đã trở thành tiêu chuẩn công nghiệp thống trị toàn cầu, chiếm hơn 65% thị phần chip nhúng thương mại.

Tuy nhiên, tại các cơ sở đào tạo đại học, việc tiếp cận thực hành với dòng vi điều khiển 32-bit như STM32 của STMicroelectronics còn gặp nhiều rào cản:

  • Các bo mạch phát triển chính hãng (STM32 Nucleo, STM32 Discovery) có giá thành cao, chưa tối ưu hóa cho các bài thí nghiệm cơ bản gắn liền chương trình đào tạo.
  • Các bo mạch giá rẻ (như STM32 Blue Pill) lại quá tối giản, đòi hỏi sinh viên phải cắm nối dây thủ công qua breadboard với hàng loạt module rời rạc, dẫn đến tỷ lệ lỗi phần cứng cao (lỏng dây tiếp xúc, nhiễu tín hiệu, cắm nhầm nguồn gây cháy IC).
  • Thiếu các kit giáo cụ trực quan tích hợp "All-in-One" bao gồm cả ngoại vi hiển thị, nhập liệu, cảm biến và kết nối không dây IoT.

Đồ án tốt nghiệp “Thiết Kế Chế Tạo Kit Phát Triển Sử Dụng STM32” được thực hiện bởi sinh viên Nguyễn Khắc Hiển dưới sự hướng dẫn của ThS. Nguyễn Mạnh Hùng tại Khoa Công nghệ Điện tử - Thông tin, Trường Đại học Mở Hà Nội nhằm giải quyết triệt để bài toán trên.

Mục tiêu dự án:

  1. Thiết kế phần cứng hoàn chỉnh: Xây dựng bo mạch PCB 2 lớp tích hợp vi điều khiển trung tâm STM32F103C8T6 cùng hệ thống module ngoại vi đa dạng: hiển thị (LED đơn, LED 7 đoạn, LCD 16x2), nhập liệu (phím đơn, ma trận phím 4x4), cảm biến (DS18B20/DHT11), nhận dạng RFID (RC522) và giao tiếp không dây (ESP8266).
  2. Phát triển hệ thống nguồn và chuẩn nạp ổn định: Thiết kế mạch nguồn hạ áp LDO 3.3V/1A chống nhiễu, tích hợp cổng nạp và gỡ lỗi chuẩn SWD (Serial Wire Debug) tương thích mạch nạp ST-Link V2.
  3. Xây dựng thư viện và firmware mẫu: Thiết kế thuật toán điều khiển và viết chương trình mẫu (C/C++) cho từng khối ngoại vi, làm giáo cụ trực quan hỗ trợ sinh viên học tập môn Vi điều khiển và Hệ thống nhúng.

Phạm vi và giới hạn đề tài:

  • Trọng tâm phần cứng: Sử dụng chip STM32F103C8T6 (64KB Flash, 20KB SRAM, tần số 72MHz) đóng gói LQFP48.
  • Phần mềm: Thiết kế sơ đồ nguyên lý và layout PCB trên phần mềm Altium Designer; lập trình điều khiển trên môi trường Keil C/STM32CubeIDE kết hợp cấu hình STM32CubeMX.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Để định vị kiến trúc phần cứng tối ưu, đề tài tiến hành phân tích và so sánh giải pháp thiết kế với các nền tảng phát triển phổ biến trên thị trường:

Tiêu chí so sánh Kit STM32 Đa Năng (Đồ án) Bo mạch STM32 Blue Pill Bo mạch Arduino Uno R3 Bo mạch STM32 Nucleo-F103RB
Vi điều khiển STM32F103C8T6 (32-bit ARM Cortex-M3) STM32F103C8T6 (32-bit ARM Cortex-M3) ATmega328P (8-bit AVR) STM32F103RBT6 (32-bit ARM Cortex-M3)
Tần số xung nhịp (Clock) 72 MHz (HSE 8MHz qua PLL) 72 MHz 16 MHz 72 MHz
Bộ nhớ Flash / RAM 64 KB / 20 KB 64 KB / 20 KB 32 KB / 2 KB 128 KB / 20 KB
Ngoại vi tích hợp sẵn LCD 16x2, 4-Digit 7-Seg, Keypad 4x4, ESP8266, RC522, Sensor Không có (chỉ có 1 LED PC13) Không có (chỉ có 1 LED Pin 13) Không có (chỉ có 1 nút nhấn, 1 LED)
Giao tiếp mở rộng Header GPIO, I2C, SPI, UART, CAN, USB Header chân thô Arduino Uno Shield Arduino Uno Rev3 Shield, Morpho
Mạch nạp tích hợp Cổng cắm SWD 4 chân ST-Link V2 Chân cắm SWD rời Tích hợp USB-UART ATmega16U2 Tích hợp ST-LINK/V2-1 trên bo
Chi phí chế tạo / sở hữu ~250.000 VNĐ (tự sản xuất) ~45.000 VNĐ (chưa kèm module) ~120.000 VNĐ (chưa kèm module) ~450.000 - 600.000 VNĐ
Tính tiện dụng đào tạo Cực cao, không cần cắm dây rời rạc Thấp, dễ lỏng dây breadboard Trung bình, hạn chế xử lý 32-bit Cao, nhưng thiếu ngoại vi trực quan

Ma trận ưu tiên yêu cầu kỹ thuật (MoSCoW)

  • Must have (Bắt buộc): Khối vi điều khiển STM32F103C8T6 tối thiểu 72MHz; khối nguồn LDO LM1117-3.3V cấp dòng tối thiểu 800mA; cổng nạp SWD; khối LED đơn, LED 7 thanh 4 số quét đa công (multiplexing), LCD 16x2; giao tiếp UART module WiFi ESP8266 và SPI module RFID RC522.
  • Should have (Nên có): Chân giao tiếp I2C PCF8574 mở rộng LCD; khối cảm biến nhiệt độ DHT11/DS18B20; nút bấm đơn có mạch lọc chống rung; mạch cấp xung RTC LSE 32.768kHz kèm chân pin VBAT.
  • Could have (Có thể có): Transceiver giao tiếp CAN Bus (TJA1050) và USB Device 2.0 Full-speed.
  • Won't have (Không triển khai trong giai đoạn này): Cổng nạp trực tiếp qua USB Type-C tích hợp chip nạp DAP-Link trên cùng mạch in.

Thiết kế hệ thống

Kiến trúc tổng thể bo mạch (Architecture Design)

Hệ thống được module hóa thành các khối chức năng kết nối với vi xử lý thông qua hệ thống Bus nội bộ và các chân GPIO chuyên dụng:

+-----------------------------------------------------------------------------------+
|                                KIT PHÁT TRIỂN STM32                               |
|                                                                                   |
|  +------------------------+      +-------------------+      +------------------+  |
|  |     KHỐI NGUỒN         |      |  KHỐI MẠCH NẠP    |      |  KHỐI TẠO XUNG   |  |
|  |  Jack DC 5V/1A Adapter |      |  Cổng 4 chân SWD  |      |  - HSE: 8.00 MHz |  |
|  |  IC LDO LM1117-3.3V    |      |  (GND, SWCLK,     |      |  - LSE: 32.768kHz|  |
|  |  Cụm tụ lọc 100uF/100nF|      |   SWDIO, 3V3)     |      |  - Pin CMOS VBAT |  |
|  +-----------+------------+      +---------+---------+      +--------+---------+  |
|              |                             |                         |            |
|              +-----------------------------+-------------------------+            |
|                                            |                                      |
|                             +--------------v---------------+                      |
|                             |  KHỐI VI XỬ LÝ TRUNG TÂM     |                      |
|                             |  MCU: STM32F103C8T6 (LQFP48) |                      |
|                             |  Core ARM Cortex-M3 @ 72MHz  |                      |
|                             |  64KB Flash, 20KB SRAM       |                      |
|                             |  DMA, NVIC, SysTick, MPU     |                      |
|                             +--------------+---------------+                      |
|                                            |                                      |
|        +-------------------+---------------+-------------------+                  |
|        |                   |               |                   |                  |
|  +-----v-----+       +-----v-----+   +-----v-----+       +-----v-----+            |
|  | KHỐI NHẬP |       | KHỐI HIỂN |   | KHỐI CẢM  |       | KHỐI KẾT  |            |
|  |   LIỆU    |       |    THỊ    |   |   BIẾN    |       |   NỐI     |            |
|  | - 4 Phím  |       | - 8 LED   |   | - DS18B20 |       | - ESP8266 |            |
|  |   đơn     |       |   đơn     |   |   1-Wire  |       |   (UART)  |            |
|  | - Keypad  |       | - 4-Digit |   | - DHT11   |       | - RC522   |            |
|  |   4x4     |       |   7-Seg   |   |   (GPIO)  |       |   (SPI)   |            |
|  |   Matrix  |       | - LCD16x2 |   |           |       | - PCF8574 |            |
|  |           |       |   (4-bit/ |   |           |       |   (I2C)   |            |
|  |           |       |    I2C)   |   |           |       |           |            |
|  +-----------+       +-----------+   +-----------+       +-----------+            |
+-----------------------------------------------------------------------------------+

Ngân sách công suất và thiết kế khối nguồn (Power Budget)

Việc cấp nguồn ổn định là yếu tố sống còn cho vi điều khiển ARM và các module RF. Bảng tính toán dòng tiêu thụ cực đại:

$$\sum I_{max} = I_{MCU} + I_{ESP8266} + I_{RC522} + I_{LED} + I_{7Seg} + I_{LCD} + I_{Sensor} \approx 600\mu\text{A} + 320\text{mA} + 26\text{mA} + 40\text{mA} + 100\text{mA} + 20\text{mA} + 3.5\text{mA} = 509.5\text{mA}$$

Thiết kế sử dụng IC ổn áp tuyến tính LDO LM1117-3.3V (gói SOT-223) cung cấp dòng danh định tối đa $1.0\text{A}$, điện áp đầu vào $5\text{V DC}$ từ Adapter:

  • Khả năng cấp dòng dư thừa: $\frac{1000\text{mA} - 510\text{mA}}{1000\text{mA}} \times 100% = 49%$, đảm bảo IC không bị quá nhiệt.
  • Mạch lọc nguồn sử dụng tụ hóa $100\mu\text{F}/16\text{V}$ ở đầu vào/đầu ra kết hợp cụm tụ gốm $100\text{nF}$ đặt sát từng chân $V_{DD}/V_{DDA}$ của MCU để triệt tiêu nhiễu tần số cao.

Phân bổ xung nhịp hệ thống (System Clock Tree)

  • Nguồn xung chính: Thạch anh ngoài (HSE) $8\text{ MHz}$, kết nối qua 2 tụ bù $22\text{pF}$ vào chân OSC_INOSC_OUT. Mạch nhân tần số PLL (Phase-Locked Loop) nhân 9 lần đưa tần số hệ thống SYSCLK lên mức cực đại $72\text{ MHz}$.
  • Bus AHB (Advanced High-performance Bus) và Bus APB2 (Advanced Peripheral Bus 2) hoạt động ở $72\text{ MHz}$. Bus APB1 qua bộ chia 2 hoạt động ở $36\text{ MHz}$.
  • Nguồn xung phụ: Thạch anh ngoài tần số thấp (LSE) $32.768\text{ kHz}$ cấp riêng cho bộ định thời gian thực RTC (Real-Time Clock), duy trì đếm giờ qua chân pin dự phòng VBAT.

Methodology

Dự án áp dụng phương pháp phát triển lặp kết hợp mô hình chữ V (V-Model Hardware/Firmware Development):

  1. Thiết kế phần cứng: Vẽ Schematic -> Lập bảng Netlist -> Định tuyến PCB (Layout 2 lớp, phủ mát Mass Polygon Plane trên Altium Designer) -> Kiểm tra quy chuẩn DRC (Design Rule Check) -> Xuất file Gerber gia công mạch in -> Hàn linh kiện dán (SMD) và linh kiện cắm (THT).
  2. Phát triển Firmware: Xây dựng cấu trúc phần mềm phân tầng (HAL - Hardware Abstraction Layer / CMSIS Core), cấu hình thanh ghi ngoại vi và xây dựng driver độc lập cho từng module.
  3. Kiểm thử tích hợp (System Integration Testing): Đo kiểm điện áp tĩnh -> Nạp chương trình Blink LED cơ bản qua cổng SWD -> Kiểm tra quét LED 7 đoạn và LCD -> Kiểm tra truyền nhận không dây SPI/UART.

Implementation và kết quả

Development process

Sơ đồ ánh xạ chân phần cứng (Hardware Pinout Mapping)

Các chân I/O của STM32F103C8T6 được quy hoạch khoa học nhằm tránh xung đột tài nguyên ngoại vi:

Module ngoại vi Chân STM32 Chế độ cấu hình GPIO / Ngoại vi Chức năng chi tiết
Gỡ lỗi & Nạp PA13, PA14 Alternate Function (SWD) SWDIO, SWCLK kết nối ST-Link V2
8 LED đơn PB0 $\rightarrow$ PB7 GPIO_Output_PP (Push-Pull) Điều khiển bật/tắt 8 LED logic tích cực mức 0
LED 7 đoạn (Data) PA0 $\rightarrow$ PA7 GPIO_Output_PP Xuất mã 8 thanh $A, B, C, D, E, F, G, D_p$
LED 7 đoạn (Control) PB12 $\rightarrow$ PB15 GPIO_Output_PP Kích chọn transistor quét Anode chung LED 1 $\rightarrow$ LED 4
LCD 16x2 (4-bit Mode) PA4 $\rightarrow$ PA7, PB12 $\rightarrow$ PB14 GPIO_Output_PP Dữ liệu DB4..DB7, Chân điều khiển RS, RW, EN
Ma trận phím 4x4 PA11, PA12, PA14, PA15, PB4 $\rightarrow$ PB7 Input Pull-Up / Output OD Quét hàng (Rows) và đọc cột (Columns)
Module ESP8266 PA9, PA10 USART1 (TX/RX) @ 115200 bps Giao tiếp tập lệnh AT Command qua Wi-Fi
Module RFID RC522 PA5, PA6, PA7, PB1, PB10 SPI1 (SCK, MISO, MOSI) + GPIO (NSS, RST) Đọc ghi thẻ tần số 13.56 MHz
Cảm biến DS18B20 PA1 GPIO_Output_OD (Open-Drain) Giao thức truyền thông 1-Wire chuẩn

Kỹ thuật quét LED 7 đoạn 4 số Anode chung sử dụng Hardware Timer

Hiện tượng lưu ảnh của mắt người ($T_{persist} \approx 25\text{ms}$, tương đương 40 hình/giây) được khai thác để hiển thị đồng thời 4 chữ số. Hệ thống chia thời gian quét cho 4 LED: $4T < 25\text{ms} \rightarrow T < 6.25\text{ms}$. Dự án sử dụng Timer 2 tạo ngắt định kỳ chính xác $T = 1.0\text{ms}$ (tần số quét tổng hợp $f = 250\text{Hz}$), loại bỏ hoàn toàn hiện tượng nhấp nháy hoặc bóng mờ (ghosting).

/**
  * @brief  Cấu hình Timer 2 và ngắt quét LED 7 đoạn 4 số
  * @param  SystemCoreClock = 72MHz
  */
#include "stm32f10x.h"

// Bảng mã 7 thanh Anode chung (0: Sáng, 1: Tắt) cho các số từ 0 - 9
const uint8_t LED7_HEX[] = {
    0xC0, // 0: 1100 0000
    0xF9, // 1: 1111 1001
    0xA4, // 2: 1010 0100
    0xB0, // 3: 1011 0000
    0x99, // 4: 1001 1001
    0x92, // 5: 1001 0010
    0x82, // 6: 1000 0010
    0xF8, // 7: 1111 1000
    0x80, // 8: 1000 0000
    0x90  // 9: 1001 0000
};

volatile uint16_t g_DisplayNumber = 2021; // Số cần hiển thị
volatile uint8_t  g_DigitScanIndex = 0;

void TIM2_IRQHandler(void) {
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

        // 1. Tắt nguồn cấp toàn bộ 4 LED (Kéo PB12..PB15 lên mức HIGH - Anode chung)
        GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);

        // 2. Tách số và xuất mã ra PORTA (PA0..PA7)
        uint8_t digitVal = 0;
        switch(g_DigitScanIndex) {
            case 0: // Hàng đơn vị
                digitVal = g_DisplayNumber % 10;
                GPIO_Write(GPIOA, (GPIOA->ODR & 0xFF00) | LED7_HEX[digitVal]);
                GPIO_ResetBits(GPIOB, GPIO_Pin_12); // Bật LED 1
                break;
            case 1: // Hàng chục
                digitVal = (g_DisplayNumber / 10) % 10;
                GPIO_Write(GPIOA, (GPIOA->ODR & 0xFF00) | LED7_HEX[digitVal]);
                GPIO_ResetBits(GPIOB, GPIO_Pin_13); // Bật LED 2
                break;
            case 2: // Hàng trăm
                digitVal = (g_DisplayNumber / 100) % 10;
                GPIO_Write(GPIOA, (GPIOA->ODR & 0xFF00) | LED7_HEX[digitVal]);
                GPIO_ResetBits(GPIOB, GPIO_Pin_14); // Bật LED 3
                break;
            case 3: // Hàng nghìn
                digitVal = (g_DisplayNumber / 1000) % 10;
                GPIO_Write(GPIOA, (GPIOA->ODR & 0xFF00) | LED7_HEX[digitVal]);
                GPIO_ResetBits(GPIOB, GPIO_Pin_15); // Bật LED 4
                break;
        }

        // Chuyển chỉ số quét chữ số tiếp theo
        g_DigitScanIndex = (g_DigitScanIndex + 1) % 4;
    }
}

Trình điều khiển LCD 16x2 Chế độ 4-bit (Driver Implementation)

Giao tiếp 4-bit giúp tiết kiệm 4 chân GPIO của vi điều khiển, dữ liệu mỗi byte được truyền qua 2 lần (Nibble cao trước, Nibble thấp sau) với xung kích hoạt Enable chân EN (PB14):

/**
  * @brief  Gửi 1 Nibble (4-bit) và tạo xung chốt dữ liệu trên chân EN
  */
void LCD_SendNibble(uint8_t nibble) {
    // Xuất 4 bit ra PA4..PA7
    GPIOA->ODR = (GPIOA->ODR & 0xFF0F) | ((nibble & 0x0F) << 4);
    
    // Tạo sườn xung High -> Low trên chân EN (PB14)
    GPIO_SetBits(GPIOB, GPIO_Pin_14);
    for(volatile int i = 0; i < 500; i++); // Delay ~10us
    GPIO_ResetBits(GPIOB, GPIO_Pin_14);
    for(volatile int i = 0; i < 500; i++);
}

void LCD_WriteCommand(uint8_t cmd) {
    GPIO_ResetBits(GPIOB, GPIO_Pin_12); // RS = 0: Ghi Command
    GPIO_ResetBits(GPIOB, GPIO_Pin_13); // RW = 0: Ghi
    LCD_SendNibble(cmd >> 4);           // Gửi 4 bit cao
    LCD_SendNibble(cmd & 0x0F);         // Gửi 4 bit thấp
}

void LCD_WriteData(uint8_t data) {
    GPIO_SetBits(GPIOB, GPIO_Pin_12);   // RS = 1: Ghi Dữ liệu
    GPIO_ResetBits(GPIOB, GPIO_Pin_13); // RW = 0: Ghi
    LCD_SendNibble(data >> 4);          // Gửi 4 bit cao
    LCD_SendNibble(data & 0x0F);        // Gửi 4 bit thấp
}

Testing và validation

Quá trình kiểm thử được tiến hành trên mô hình vật lý thực tế qua 4 bài test tiêu chuẩn:

  1. Đo kiểm nguồn động (Dynamic Load Test):
    • Sử dụng máy hiện sóng (Oscilloscope) kiểm tra điện áp $3.3\text{V}$ khi module ESP8266 phát gói tin dữ liệu công suất đỉnh (dòng điện vọt lên $320\text{mA}$).
    • Kết quả: Độ sụt áp cực đại $\Delta V = 45\text{mV}$ ($1.36% < 5%$ cho phép), hệ thống không bị reset đột ngột do sụt áp vi điều khiển (Brown-out Reset).
  2. Độ ổn định quét hiển thị (Display Refresh Benchmark):
    • Tần số Timer 2 ngắt $1.0\text{ms} \pm 0.002\text{ms}$. Tần số quét hiển thị 4 số LED 7 đoạn đạt $250\text{Hz}$, màn hình sáng đều, không phát sinh bóng mờ giữa các chữ số liền kề.
  3. Tỷ lệ nhận dạng RFID RC522 (Throughput & Accuracy):
    • Khoảng cách đọc thẻ Mifare 1K ổn định trong dải $0 - 4.5\text{cm}$. Thời gian phản hồi nhận dạng UID của thẻ qua giao thức SPI ($f_{SCK} = 4.5\text{MHz}$) đạt dưới $12\text{ms}$, tỷ lệ nhận diện thành công $100%$ trong 100 lần quẹt thẻ liên tục.
  4. Độ ổn định truyền dữ liệu Wi-Fi ESP8266:
    • Tốc độ UART1 đạt $115200\text{ bps}$, tỷ lệ mất gói tin (Packet Loss) khi gửi dữ liệu đo nhiệt độ độ ẩm lên Web Server đạt $0%$ trong điều kiện phòng thí nghiệm.

Kết quả đạt được

Bo mạch kit phát triển STM32 đa năng hoàn thiện sở hữu các thông số kỹ thuật thực tế:

  • Kích thước PCB: $140\text{mm} \times 100\text{mm}$, tiêu chuẩn mạch in 2 lớp, phủ xanh chống oxy hóa, phủ thiếc đường hàn pad linh kiện.
  • Tích hợp ngoại vi đầy đủ: Hoàn thiện 100% các khối mạch chức năng: Khối nguồn LM1117-3.3V, Khối xử lý trung tâm STM32F103C8T6, Khối LED đơn (8 LED), Khối LED 7 đoạn (4 số), Khối LCD 16x2, Khối Keypad 4x4 + 4 phím đơn, Khối cảm biến DS18B20/DHT11, Khối Wi-Fi ESP8266, Khối RFID RC522.
  • Tài liệu hướng dẫn: Xây dựng đầy đủ tài liệu hướng dẫn thực hành và 8 bài code mẫu chuẩn hóa giúp sinh viên dễ dàng tiếp cận lập trình từ cơ bản (GPIO, Timer, ADC) đến nâng cao (I2C, SPI, UART, IoT).

Đổi mới và đóng góp

  1. Thiết kế tích hợp All-in-One giảm thiểu 85% lỗi phần cứng trong thực hành: Khác với việc sử dụng module rời nối dây cắm cồng kềnh, kit phát triển tích hợp sẵn các đường mạch tối ưu trên PCB 2 lớp. Sinh viên chỉ cần tập trung vào tư duy thuật toán và lập trình phần mềm thay vì mất hàng giờ sửa lỗi do lỏng dây cắm breadboard.
  2. Cầu nối giáo dục chuyển đổi từ 8-bit sang 32-bit ARM: Đồ án mang lại giải pháp giáo cụ trực quan giá thành thấp, giúp sinh viên làm quen trực tiếp với kiến trúc ARM Cortex-M3 (hệ thống Bus Matrix phân quyền Round-Robin, khối quản lý ngắt lồng nhau NVIC, bộ điều khiển DMA truy cập bộ nhớ trực tiếp không qua CPU).
  3. Mở đường cho các ứng dụng IoT và nhận dạng thông minh: Việc tích hợp sẵn module Wi-Fi ESP8266 và module RFID RC522 giúp kit phát triển không chỉ dừng lại ở mức học vi điều khiển cơ bản mà có thể trực tiếp triển khai thành các đồ án chuyên sâu như: Trạm quan trắc môi trường IoT, Hệ thống điểm danh sinh viên thông minh, Khóa cửa bảo mật RFID.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  1. Giáo cụ đào tạo tại các trường Đại học và Cao đẳng:
    • Dùng làm kit thí nghiệm chính thức cho các môn học: Vi xử lý - Vi điều khiển, Kỹ thuật lập trình nhúng, Thiết kế hệ thống IoT.
  2. Mô hình trạm quan trắc môi trường thông minh (Smart Environmental Monitoring):
    • Vi điều khiển đọc dữ liệu nhiệt độ, độ ẩm từ cảm biến DHT11/DS18B20.
    • Hiển thị giá trị tức thời lên màn hình LCD 16x2 và LED 7 đoạn.
    • Đóng gói dữ liệu và gửi qua giao tiếp UART tới module ESP8266 để đẩy dữ liệu lên Dashboard IoT (ThingSpeak/Blynk/Server riêng) qua giao thức HTTP/MQTT.
  3. Hệ thống kiểm soát ra vào và điểm danh tự động (Access Control System):
    • Quét mã thẻ sinh viên qua khối RFID RC522 giao tiếp SPI.
    • Xử lý mã UID, so sánh với cơ sở dữ liệu và hiển thị kết quả chấp thuận/từ chối lên LCD và chuông báo.

Phân tích chi phí chế tạo (BOM - Bill of Materials)

Linh kiện chính Mã hiệu / Quy cách Số lượng Đơn giá ước tính (VNĐ)
Vi điều khiển trung tâm STM32F103C8T6 (LQFP48) 01 45.000
IC ổn áp nguồn LM1117-3.3V (SOT-223) 01 5.000
Màn hình LCD LCD 16x02 kèm header 01 30.000
LED 7 đoạn 4 số Anode chung 0.56 inch 01 12.000
Module Wi-Fi ESP8266 ESP-01 01 35.000
Module RFID RC522 13.56MHz kèm thẻ 01 40.000
Cảm biến nhiệt độ DS18B20 / DHT11 01 20.000
Mạch in PCB 2 lớp FR4 tiêu chuẩn gia công 01 35.000
Linh kiện thụ động (R, C, Jack, Nút bấm) Hàng chuẩn công nghiệp 01 bộ 25.000
Tổng chi phí chế tạo 01 bộ kit ~247.000 VNĐ

Đánh giá ROI: Với mức chi phí chỉ bằng khoảng $50%$ so với việc mua lẻ từng module cùng bo mạch Nucleo chính hãng, việc tự chế tạo kit hàng loạt cho các phòng thực hành mang lại hiệu quả kinh tế cao và khả năng tự chủ thiết bị đào tạo.


Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Mạch in sử dụng các module cắm ngoài (dạng socket cắm cho ESP8266 và RC522) thay vì hàn trực tiếp chip RF lên bo mạch, khiến kích thước kit còn tương đối lớn ($140\text{mm} \times 100\text{mm}$).
  • Chưa tích hợp sẵn IC chuyển đổi USB-to-UART (như CP2102 hay CH340) trên cùng bo mạch; người dùng vẫn cần kết nối thêm mạch nạp rời ST-Link V2 hoặc module USB-Serial để in log dữ liệu lên máy tính.

Hướng phát triển

  1. Nâng cấp phần cứng thế hệ 2.0: Tích hợp IC nạp mã nguồn mở (CMSIS-DAP / DAP-Link) và IC cầu nối USB-UART trên cùng bo mạch qua cổng giao tiếp chuẩn USB Type-C hiện đại.
  2. Nâng cấp dòng vi điều khiển: Chuyển đổi vi xử lý lên dòng STM32F401/F411 (lõi ARM Cortex-M4 có bộ tính toán dấu phẩy động FPU, xung nhịp lên đến $100\text{MHz}$) phục vụ các bài toán xử lý tín hiệu số DSP nâng cao.
  3. Mở rộng chuẩn giao tiếp công nghiệp: Bổ sung IC Transceiver cách ly quang cho chuẩn mạng CAN Bus (ISO 11898) và RS-485 Modbus RTU nhằm phục vụ nghiên cứu tự động hóa nhà máy.

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Điện tử, Viễn thông, Tự động hóa, CNTT: Nắm vững nền tảng kiến trúc phần cứng 32-bit, hiểu sâu về cấu hình thanh ghi ngoại vi (Clock Tree, Interrupt, DMA) và thành thạo kỹ năng lập trình hệ thống nhúng/IoT.
  • Giảng viên và Cơ sở đào tạo: Sở hữu bộ giáo cụ thực hành trực quan, đồng bộ, chuẩn hóa bài giảng, giảm thiểu chi phí bảo trì phòng lab và sự cố thiết bị.
  • Kỹ sư phát triển sản phẩm nhúng (Embedded R&D): Sử dụng kit như một bo mạch kiểm thử nhanh (Rapid Prototyping Board) để đánh giá thuật toán và kiểm tra tính khả thi trước khi thiết kế sản phẩm thương mại.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng máy tính và công cụ phần mềm để lập trình cho kit là gì?

Hệ thống yêu cầu máy tính chạy hệ điều hành Windows 10/11 hoặc Linux. Về phần mềm: Sử dụng STM32CubeMX (cấu hình chân và tạo mã khởi tạo), trình biên dịch Keil C MDK-ARM hoặc STM32CubeIDE, kết hợp phần mềm STM32 ST-LINK Utility để nạp file Hex/Bin qua mạch nạp ST-Link V2.

2. Kit STM32 này có thể cấp nguồn từ cổng USB máy tính được không?

Có. Hệ thống có thể nhận nguồn $5\text{V}$ trực tiếp từ cổng USB thông qua cáp chuyển đổi hoặc Adapter nguồn DC rời $5\text{V}/1\text{A} - 2\text{A}$. IC LM1117-3.3V trên mạch sẽ tự động chuyển đổi điện áp xuống $3.3\text{V}$ ổn định cho toàn hệ thống.

3. Có thể dùng môi trường Arduino IDE để lập trình cho kit phát triển này không?

Hoàn toàn được. Bằng cách cài đặt thêm gói board package STM32Duino (dựa trên bộ nhân mã nguồn mở của ST), người dùng có thể viết code và sử dụng toàn bộ thư viện phong phú của cộng đồng Arduino trên phần cứng STM32F103C8T6 của kit.

4. Khi module ESP8266 hoạt động, kit có bị treo do sụt áp không?

Không. Nhờ thiết kế cụm tụ lọc nguồn dung lượng lớn ($100\mu\text{F}$ song song $100\text{nF}$) ngay sát chân cấp nguồn của ESP8266 kết hợp IC nguồn LM1117 có khả năng cấp dòng định mức lên tới $1000\text{mA}$, dòng điện luôn được bù tức thời trong các chu kỳ phát sóng RF công suất cao ($320\text{mA}$).

5. Bo mạch có hỗ trợ nạp chương trình trực tiếp qua cổng giao tiếp UART (Bootloader) không?

Có. Trên mạch đã bố trí sẵn cụm jumper cấu hình chế độ nạp BOOT0BOOT1. Khi kéo BOOT0 = 1BOOT1 = 0, vi điều khiển sẽ chuyển sang chế độ nạp System Memory (sử dụng cổng USART1 kết nối module nạp USB-TTL) mà không bắt buộc phải có mạch nạp ST-Link.


Kết luận

Đồ án “Thiết Kế Chế Tạo Kit Phát Triển Sử Dụng STM32” của sinh viên Nguyễn Khắc Hiển đã hoàn thành xuất sắc các mục tiêu đề ra từ lý thuyết đến thực nghiệm chế tạo sản phẩm vật lý. Bo mạch không chỉ làm chủ hoàn toàn quy trình thiết kế phần cứng chuẩn công nghiệp với phần mềm Altium Designer mà còn giải quyết triệt để bài toán đồng bộ hóa giữa phần cứng và phần mềm điều khiển nhúng 32-bit.

Sự kết hợp hoàn hảo giữa hiệu năng mạnh mẽ của lõi ARM Cortex-M3, kiến trúc phần cứng tích hợp đa ngoại vi và chi phí chế tạo tối ưu đã tạo nên một giáo cụ học tập trực quan, giàu tính ứng dụng, đóng góp thiết thực vào việc nâng cao chất lượng đào tạo kỹ thuật nhúng và IoT tại Việt Nam.