Giới thiệu dự án

Trong tiến trình phát triển của kỹ thuật tự động hóa và điện tử ứng dụng cuối thế kỷ 20 – đầu thế kỷ 21, việc chuyển dịch từ các hệ thống điều khiển logic nối cứng (relay, mạch số rời rạc TTL/CMOS) sang các hệ thống vi điều khiển khả trình là xu hướng tất yếu. Các ngành công nghiệp, giáo dục và dân dụng đòi hỏi các thiết bị điều khiển mang tính tổng thể, nhỏ gọn, tiêu thụ ít năng lượng và dễ dàng thay đổi thuật toán hoạt động mà không cần can thiệp vào cấu trúc phần cứng.

Trong môi trường học đường, nhà máy xí nghiệp và các cơ quan hành chính, việc quản lý thời gian biểu và báo giờ làm việc, học tập đóng vai trò quyết định đến tính kỷ luật và hiệu suất lao động. Các giải pháp truyền thống dựa trên đồng hồ cơ học hoặc chuông bấm thủ công bộc lộ nhiều điểm yếu: độ sai lệch lớn theo thời gian, phụ thuộc hoàn toàn vào thao tác con người dẫn đến tình trạng báo trễ hoặc quên báo giờ. Mặt khác, các mạch đồng hồ số sử dụng IC rời rạc (như họ 74xx, 40xx) đòi hỏi số lượng linh kiện lớn, mối hàn phức tạp, tỷ lệ lỗi phần cứng cao và hoàn toàn không có khả năng tùy biến các mốc giờ báo chuông tự động.

Đồ án "Ứng dụng vi điều khiển 8951 thiết kế đồng hồ số báo giờ tự động" do sinh viên Trần Quang Vũ và Thi Công Lớn thực hiện (dưới sự hướng dẫn của ThS. Trần Văn Trọng tại Khoa Điện – Điện tử, Trường Đại học Sư phạm Kỹ thuật TP.HCM) giải quyết trọn vẹn bài toán tích hợp hệ thống nhúng điều khiển thời gian thực và tự động hóa cảnh báo.

Mục tiêu của dự án:

  1. Nghiên cứu cấu trúc phần cứng và tập lệnh kiến trúc MCS-51: Khảo sát sâu về cấu trúc bộ nhớ RAM/ROM, các thanh ghi chức năng đặc biệt (SFR), hệ thống ngắt (Interrupts), bộ định thời/bộ đếm (Timer/Counter 0 và 1) và cổng nối tiếp của vi điều khiển 8-bit AT89C51.
  2. Thiết kế phần cứng hệ thống đồng hồ số: Xây dựng sơ đồ nguyên lý gồm khối vi điều khiển trung tâm (AT89C51), mạch tạo xung dao động thạch anh 12MHz, mạch tự động Reset khi cấp nguồn (Power-on Reset) kết hợp phím bấm tay, khối quét 6 LED 7 đoạn hiển thị Giờ - Phút - Giây, khối bàn phím chức năng và khối công suất đóng ngắt Relay chuông báo 220VAC.
  3. Thiết kế và thi công mạch in (PCB): Ứng dụng phần mềm chuyên dụng CAD EAGLE để layout sơ đồ nguyên lý, vẽ mạch in 2 lớp và tiến hành lắp ráp, hàn nối linh kiện phần cứng hoàn chỉnh.
  4. Xây dựng phần mềm điều khiển bằng Assembly (Hợp ngữ 8051): Lập trình module hóa với các giải thuật định thời 10ms chính xác bằng Timer 0 Mode 1 (16-bit), xử lý ngắt ngoài (INT0/INT1) chống dội phím (debounce), thuật toán giải mã mã BCD sang mã LED 7 đoạn Anode chung, thuật toán quét LED đa công (multiplexing) và module so sánh trùng khớp thời gian để kích hoạt tải ngoài.
  5. Đo đạc, thử nghiệm và đánh giá hệ thống: Đảm bảo hệ thống vận hành liên tục 24/7 với sai số tích lũy dưới 1 giây/ngày, mạch kích relay ổn định không gây sụt áp vi điều khiển.

Phạm vi nghiên cứu tập trung vào việc khai thác tối đa tài nguyên nội chip của dòng AT89C51 (4KB Flash ROM, 128 Bytes RAM nội, 2 Timer 16-bit, 5 nguồn ngắt) để tối ưu giá thành BOM (Bill of Materials), hạn chế tối đa việc mở rộng bộ nhớ ngoài nhằm đơn giản hóa cấu trúc mạch.


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

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

Trước khi vi điều khiển trở nên phổ biến, các giải pháp đo đếm và hiển thị thời gian số chủ yếu dựa trên mạch số logic kinh điển hoặc các hệ thống vi xử lý mở rộng phức tạp.

Tiêu chí kỹ thuật / Kinh tế Mạch số rời rạc (TTL/CMOS họ 74xx, 40xx) Hệ vi xử lý tổng quát (Z80 / Intel 8085 / 8086) Hệ vi điều khiển đơn chip (Atmel AT89C51)
Số lượng linh kiện Rất lớn (>15 IC: 7490, 7447, 7408, 555...) Lớn (CPU + ROM 2764 + RAM 6264 + 8255 + 8253) Cực tiểu (1 IC điều khiển trung tâm + linh kiện phụ trợ)
Kích thước bo mạch & Độ phức tạp PCB Cồng kềnh, hàng trăm đường dây nối Phức tạp, bus địa chỉ/dữ liệu tách rời dễ nhiễu Gọn gàng, layout đơn giản trên bo mạch 1-2 lớp
Khả năng tùy biến tính năng Cố định, phải đi lại dây phần cứng Khả trình bằng phần mềm Khả trình linh hoạt, nạp lại chương trình qua Flash
Tính năng báo chuông tự động Rất khó thực hiện (cần ma trận diode/so sánh số) Lập trình được nhưng lãng phí tài nguyên Xử lý hoàn toàn bằng thuật toán so sánh trong RAM
Công suất tiêu thụ Cao (dòng tĩnh của nhiều IC cộng dồn) Trung bình - Cao Thấp (< 100mW ở tần số 12MHz, có chế độ Idle/Power Down)
Chi phí sản xuất (BOM) Đắt do số lượng linh kiện và công lắp ráp Rất đắt (nhiều chip ngoại vi và socket) Tối ưu, giá thành chỉ bằng 30-40% hệ vi xử lý

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must Have (Bắt buộc phải có):
    • Đếm thời gian thực chính xác: Giờ (00–23), Phút (00–59), Giây (00–59).
    • Hiển thị trực quan qua 6 LED 7 đoạn Anode chung với phương pháp quét tần số cao (>50Hz/LED) chống rung mắt.
    • Chức năng chỉnh giờ, chỉnh phút trực tiếp qua các nút bấm bên ngoài có xử lý chống rung cơ khí.
    • Tự động đóng ngắt tiếp điểm Relay điều khiển chuông điện 220VAC khi thời gian trùng với mốc cài đặt.
  • Should Have (Nên có):
    • Khả năng lưu trữ giá trị cài đặt báo chuông trong vùng nhớ RAM nội an toàn.
    • Mạch Reset tự động (Power-on Reset) ổn định với hằng số thời gian RC đảm bảo VĐK khởi động tin cậy.
  • Could Have (Có thể mở rộng):
    • Cài đặt nhiều mốc chuông khác nhau trong một ngày (theo tiết học hoặc ca làm việc).
    • Chế độ tự động tắt chuông sau một khoảng thời gian ấn định (ví dụ: 1-5 giây).
  • Won't Have (Chưa thực hiện trong phạm vi đồ án này):
    • Duy trì đếm giờ khi mất điện lưới bằng Real-time Clock (RTC DS1307) và pin backup.
    • Giao tiếp đồng bộ dữ liệu qua máy tính qua cổng nối tiếp RS232.

Thiết kế hệ thống

Cấu trúc phần cứng và sơ đồ nguyên lý

Kiến trúc phần cứng được chia làm 5 khối chức năng liên kết chặt chẽ:

+-------------------------------------------------------------------------+
|                              KHỐI NGUỒN                                 |
| 220VAC ---> [Biến áp 9VAC] ---> [Cầu 1N4007] ---> [LM7805] ---> +5VDC  |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                        KHỐI ĐIỀU KHIỂN TRUNG TÂM                        |
|                           (Vi điều khiển AT89C51)                       |
|  - Mạch tạo dao động: Thạch anh 12MHz + 2 Tụ gốm 33pF (XTAL1, XTAL2)    |
|  - Mạch Reset: Tụ 10uF + Điện trở 10k/100R (Chân 9 - RST)               |
+-------------------------------------------------------------------------+
     | (P1.0 - P1.7)                       | (P0.0 - P0.5)         | (P2.2)
     v                                     v                       v
+-----------------------+     +-----------------------+  +----------------+
|    MÃ ĐOÀN (a - dp)   |     |    QUÉT ANODE CHUNG   |  | KHỐI RELAY     |
| 6 LED 7 Đoạn          |     | 6 Transistor A564     |  | Transistor A564|
| (Common Anode)        |     | (Kéo nguồn Anode)     |  | Cuộn hút 12V   |
+-----------------------+     +-----------------------+  | Tiếp điểm 220V |
     ^                                     ^             +----------------+
     +-------------------------------------+                      |
                                                                  v
+-----------------------------------------------------+      [CHUÔNG BÁO]
|               KHỐI PHÍM BẤM CHỨC NĂNG               |
| - P3.2 (INT0): Nút chỉnh Giờ                        |
| - P3.3 (INT1): Nút chỉnh Phút                       |
| - P3.5, P2.0, P2.1: Chỉnh mốc chuông & Chế độ       |
+-----------------------------------------------------+

Chi tiết thông số kỹ thuật từng khối:

  1. Khối Vi điều khiển trung tâm (AT89C51):
    • Tần số dao động: $f_{osc} = 12\text{ MHz}$.
    • Chu kỳ máy: $T_{mc} = \frac{12}{f_{osc}} = 1\mu\text{s}$. Mọi lệnh 1 chu kỳ máy chỉ tốn đúng $1\mu\text{s}$, lệnh 2 chu kỳ máy tốn $2\mu\text{s}$, tạo điều kiện cực kỳ thuận lợi để tính toán định thời chính xác tuyệt đối.
    • Chân $\overline{\text{EA}}$ (chân 31) nối lên $+5\text{V}$ (mức 1) để vi điều khiển chỉ thực thi mã lệnh từ bộ nhớ Flash ROM nội 4KB.
  2. Khối Hiển thị và Quét LED:
    • Sử dụng 6 LED 7 đoạn Anode chung kích thước 0.56 inch.
    • Port 1 ($\text{P1.0} \div \text{P1.7}$) đóng vai trò xuất dữ liệu mã đoạn ($a, b, c, d, e, f, g, dp$) qua các điện trở hạn dòng $R_{seg} = 330\Omega$.
    • Port 0 ($\text{P0.0} \div \text{P0.5}$) kết hợp điện trở kéo lên mạng (Pull-up Resistor Network) $10\text{k}\Omega \times 8$ để điều khiển cực B của 6 Transistor PNP loại A564, cấp nguồn $+5\text{V}$ luân phiên cho Anode của từng LED.
    • Tính toán dòng quét: Dòng qua mỗi đoạn LED $I_{seg} = \frac{5\text{V} - V_{LED} - V_{CE(sat)}}{R_{seg}} \approx \frac{5 - 1.8 - 0.2}{330} \approx 9.09\text{ mA}$. Dòng cực đại qua cực C của transistor khi hiển thị số "8." là $I_C \approx 8 \times 9.09\text{ mA} \approx 72.7\text{ mA}$, hoàn toàn nằm trong giới hạn cho phép của Transistor A564 ($I_{C(max)} = 400\text{ mA}$).
  3. Khối Điều khiển Công suất (Relay):
    • Chân điều khiển: $\text{P2.2}$. Khi xuất mức 0 ($\text{CLR P2.2}$), dòng kích mở Transistor A564 cấp dòng cho cuộn hút Relay 12V/5V ($R_{coil} = 100\Omega, I_{coil} = 50\text{ mA}$).
    • Diode dập xung ngược 1N4007 mắc song song ngược cực với cuộn hút relay để triệt tiêu sức điện động cảm ứng khi ngắt tải, bảo vệ an toàn cho transistor chuyển mạch.
  4. Khối Nguồn Ổn Áp:
    • Biến áp hạ áp $220\text{VAC} \rightarrow 9\text{VAC}$ (công suất 500mA).
    • Chỉnh lưu cầu 4 Diode 1N4007, tụ lọc nguồn sơ cấp $C_1 = 2200\mu\text{F}/25\text{V}$, IC ổn áp tuyến tính LM7805 cho ngõ ra chuẩn $+5\text{VDC} \pm 2%$, tụ lọc ngõ ra $C_3 = 1000\mu\text{F}$ kết hợp các tụ gốm khử nhiễu cao tần $104$ ($0.1\mu\text{F}$).

Methodology (Phương pháp luận phát triển)

Dự án áp dụng mô hình phát triển hệ thống nhúng tuần tự chặt chẽ (V-Model rút gọn):

Phân bổ tiến độ thực hiện (6 tuần):

  • Tuần 1: Khảo sát lý thuyết vi điều khiển 8951, tập lệnh và các chế độ định thời/ngắt; xác định yêu cầu hệ thống.
  • Tuần 2: Tính toán thông số linh kiện, thiết kế sơ đồ nguyên lý mạch nguồn, mạch dao động, mạch hiển thị và mạch điều khiển chuông trên EAGLE CAD.
  • Tuần 3: Gia công bo mạch in (PCB), khoan lỗ, gắn linh kiện và kiểm tra thông mạch phần cứng tĩnh.
  • Tuần 4: Xây dựng lưu đồ thuật toán chi tiết, viết mã nguồn Assembly cho chương trình chính, hàm giải mã LED, quét hiển thị và ngắt Timer 0.
  • Tuần 5: Lập trình module ngắt ngoài chỉnh thời gian, module cài đặt giờ báo chuông và giải thuật so sánh thời gian thực.
  • Tuần 6: Nạp chương trình vào chip AT89C51 qua mạch nạp chuyên dụng, chạy thử nghiệm liên tục 72 giờ để hiệu chuẩn sai số và đóng gói báo cáo tốt nghiệp.

Implementation và kết quả

Development process

Cấu trúc chương trình được thiết kế theo tư duy lập trình cấu trúc hướng module hóa bằng ngôn ngữ Assembly MCS-51, tận dụng tối đa các vùng nhớ RAM nội:

  • Vùng lưu mã 7 đoạn (Look-up Table): Từ ô nhớ 70H đến 79H (tương ứng với chữ số $0 \div 9$).
  • Vùng đệm biến đếm thời gian thực: Ô nhớ 12H (Chục giờ), 13H (Đơn vị giờ), 14H (Chục phút), 15H (Đơn vị phút), 16H (Chục giây), 17H (Đơn vị giây).
  • Vùng đệm dữ liệu cài đặt chuông: Từ 60H đến 63H.
  • Vùng đệm quét hiển thị ra Port: Từ 22H đến 27H.
; ===================================================================
; BẢNG MÃ LED 7 ĐOẠN ANODE CHUNG (Lưu trữ tại vùng RAM 70H - 79H)
; 0: 03H | 1: 9FH | 2: 25H | 3: 0DH | 4: 99H
; 5: 49H | 6: 41H | 7: 1FH | 8: 01H | 9: 09H
; ===================================================================
MAIN:
    MOV   P1, #00H
    MOV   SP, #30H          ; Khởi tạo con trỏ Stack Pointer tại 30H
    MOV   70H, #03H         ; Số 0
    MOV   71H, #9FH         ; Số 1
    MOV   72H, #25H         ; Số 2
    MOV   73H, #0DH         ; Số 3
    MOV   74H, #99H         ; Số 4
    MOV   75H, #49H         ; Số 5
    MOV   76H, #41H         ; Số 6
    MOV   77H, #1FH         ; Số 7
    MOV   78H, #01H         ; Số 8
    MOV   79H, #09H         ; Số 9

Giải thuật định thời tạo gốc thời gian 1 giây:

Để tạo khoảng thời gian $1\text{ giây} = 1.000.000\mu\text{s}$, Timer 0 được cấu hình hoạt động ở Mode 1 (16-bit Timer). Giá trị đếm tối đa của Timer 16-bit là $65536$. Đồ án thiết lập chu kỳ ngắt Timer 0 là $10\text{ms} = 10.000\mu\text{s}$. Giá trị nạp khởi tạo cho Timer 0: $$\text{Value} = 65536 - 10000 = 55536 = \text{D8F7H}$$ Do đó: TH0 = 0D8H, TL0 = 0F7H. Thanh ghi R2 được dùng làm biến đếm phụ. Khi Timer 0 ngắt đủ 100 lần ($100 \times 10\text{ms} = 1000\text{ms} = 1\text{s}$), vi điều khiển sẽ thực hiện tăng biến giây.

; Khởi tạo Timer 0 Mode 1 (16 bit), Timer 1 Mode 1
    MOV   TMOD, #11H        
    CLR   TF0
    CLR   TF1
    MOV   TL0, #0F7H        ; Nạp Byte thấp
    MOV   TH0, #0D8H        ; Nạp Byte cao
    SETB  TR0               ; Bắt đầu chạy Timer 0
    SETB  IT0               ; Kích hoạt ngắt ngoài 0 theo sườn âm
    SETB  IT1               ; Kích hoạt ngắt ngoài 1 theo sườn âm
    MOV   IE, #87H          ; Cho phép ngắt toàn cục EA, ngắt INT0, INT1, Timer 0

; Trích đoạn chương trình con phục vụ ngắt Timer 0 (DELAY1):
DELAY1:
    MOV   IE, #80H          ; Tạm thời khóa các ngắt khác
    CLR   TF0
    CLR   TR0
    INC   R2                ; Tăng biến đếm số lần ngắt 10ms
    MOV   TL0, #0F7H        ; Nạp lại giá trị ban đầu cho Timer 0
    MOV   TH0, #0D8H
    SETB  TR0
    MOV   IE, #87H          ; Mở lại các ngắt
    RETI
; ===================================================================
; MODULE QUÉT HIỂN THỊ 6 LED 7 ĐOẠN ĐA CÔNG (HIENTHI)
; ===================================================================
HIENTHI:
    MOV   P0, #0FEH         ; Bật LED 1 (P0.0 = 0 kích Transistor 1)
    MOV   P1, 27H           ; Xuất mã hiển thị hàng đơn vị giây
    LCALL DELAY             ; Trễ quét hiển thị ~1ms
    MOV   P1, #0FFH         ; Tắt LED chống bóng ma (Ghosting)

    MOV   P0, #0FDH         ; Bật LED 2 (P0.1 = 0 kích Transistor 2)
    MOV   P1, 26H           ; Xuất mã hiển thị hàng chục giây
    LCALL DELAY
    MOV   P1, #0FFH

    MOV   P0, #0FBH         ; Bật LED 3 (P0.2 = 0 kích Transistor 3)
    MOV   P1, 25H           ; Xuất mã hàng đơn vị phút
    LCALL DELAY
    MOV   P1, #0FFH

    MOV   P0, #0F7H         ; Bật LED 4 (P0.3 = 0 kích Transistor 4)
    MOV   P1, 24H           ; Xuất mã hàng chục phút
    LCALL DELAY
    MOV   P1, #0FFH

    MOV   P0, #0EFH         ; Bật LED 5 (P0.4 = 0 kích Transistor 5)
    MOV   P1, 23H           ; Xuất mã hàng đơn vị giờ
    LCALL DELAY
    MOV   P1, #0FFH

    MOV   P0, #0DFH         ; Bật LED 6 (P0.5 = 0 kích Transistor 6)
    MOV   A, 22H
    CJNE  A, #03H, X10      ; Kiểm tra điều kiện hàng chục giờ
    MOV   P1, #0FFH
    LCALL DELAY
    MOV   P1, #0FFH
    RET
X10:
    MOV   P1, 22H
    LCALL DELAY
    MOV   P1, #0FFH
    RET

Xử lý chống dội phím (Button Debounce) trong chương trình ngắt chỉnh giờ/phút:

Hiện tượng dội cơ học (Contact Bounce) kéo dài từ 5ms – 20ms khi bấm nút dễ khiến vi điều khiển nhảy nhiều bước số. Thuật toán xử lý bằng cách chèn vòng lặp delay nội bộ khoảng 20ms ngay khi nhận cờ ngắt:

CHINHGIO:
    MOV   IE, #80H          ; Khóa ngắt tránh lồng ngắt
    MOV   R0, #0FFH         ; Vòng lặp delay 20ms khử dội
G31:
    MOV   6AH, #4EH
    DJNZ  6AH, $
    DJNZ  R0, G31
    INC   13H               ; Tăng đơn vị giờ
    MOV   A, 13H
    CJNE  A, #04H, NG3      ; Kiểm tra chuyển giao 24h
    MOV   A, 12H
    CJNE  A, #02H, NG2
    MOV   12H, #00H
    MOV   13H, #00H
NG2:
    LCALL GIAIMA
    LCALL HIENTHI
    CLR   TF0
    SETB  TR0
    RETI
NG3:
    CJNE  A, #10H, NG2
    INC   12H               ; Tăng hàng chục giờ
    MOV   13H, #00H
    SJMP  NG2

Testing và validation

Hệ thống được đưa vào kiểm thử liên tục trong môi trường phòng thí nghiệm và lắp đặt thực tế tại xưởng thực hành:

Hạng mục kiểm thử Kịch bản kiểm thử Kết quả thiết kế dự kiến Kết quả đo đạc thực tế Trạng thái
Định thời ngắt Timer 0 Đo dạng sóng chân test ngắt bằng Oscilloscope Chu kỳ $10.000\mu\text{s} \pm 0.1\mu\text{s}$ $10.002\mu\text{s}$ (độ lệch $0.02%$) Đạt
Tần số quét màn hình LED Đo tần số quét chu kỳ 6 LED $\ge 50\text{ Hz}$ để mắt không nhận thấy nhấp nháy $58.8\text{ Hz}$ (ổn định, không rung) Đạt
Độ sụt áp nguồn khi kích Relay Đo điện áp đường $+5\text{V}$ khi đóng cuộn hút Relay $V_{out} \ge 4.75\text{V}$ (ngưỡng an toàn 8951) Điện áp duy trì ở mức $4.92\text{V}$ Đạt
Khử rung nút bấm (Debounce) Bấm liên tục 100 lần mỗi phím INT0, INT1 Nhận diện chính xác 100/100 lần nhảy 1 đơn vị $100%$ chính xác, không bị nhảy đúp Đạt
Độ chính xác thời gian 24h Chạy liên tục so sánh với đồng hồ chuẩn Sai số $< 2\text{ giây}/24\text{h}$ Sai lệch xấp xỉ $+1.2\text{ giây}/24\text{h}$ Đạt

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

  1. Tối ưu hóa kiến trúc phần cứng (Giảm thiểu 45% chi phí linh kiện):
    • Đồ án loại bỏ hoàn toàn các IC giải mã chuyên dụng (như 74LS47 hay 74LS138) thường thấy trong các thiết kế đồng hồ số thời kỳ này. Toàn bộ công việc giải mã nhị phân sang mã 7 đoạn và giải mã địa chỉ chọn kênh LED được thực hiện bằng phần mềm thông qua tập lệnh ghép bảng MOVC / ADD A, #70H và quét trực tiếp qua Port 0/Port 1.
  2. Khai thác hiệu quả kỹ thuật xử lý bit (Bit-level Addressing) của MCS-51:
    • 8951 có 210 bit có thể định địa chỉ riêng biệt. Đồ án đã vận dụng các lệnh xử lý bit trực tiếp (SETB, CLR, JB, JNB, CPL) để điều khiển từng tiếp điểm relay, cờ chế độ cài đặt và giao tiếp phím mà không cần qua các phép toán logic mặt nạ (AND/OR Mask) phức tạp, giúp tăng tốc độ phản hồi của CPU lên gấp 3 lần so với lập trình trên các dòng VXL khác.
  3. Giải pháp nguồn và chống nhiễu công nghiệp cho hệ thống vi điều khiển:
    • Việc đóng cắt tải cảm ứng (cuộn dây relay và chuông điện 220VAC) thường sinh ra tia lửa điện và xung gai điện áp gây treo vi điều khiển (latch-up/reset ngẫu nhiên). Đồ án đã xử lý triệt để bài toán này bằng cách kết hợp diode dập biên ngược 1N4007, mạch lọc RC tại chân Reset ($10\mu\text{F} - 10\text{k}\Omega$) và phân tách đường mass công suất với mass tín hiệu trên bản vẽ PCB EAGLE.

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

Trường hợp sử dụng thực tế (Real-world Use Cases):

  • Trường học & Trung tâm đào tạo: Tự động báo giờ vào lớp, chuyển tiết và tan trường chính xác theo lịch biểu cố định, thay thế nhân sự đánh trống thủ công.
  • Phân xưởng sản xuất / Nhà máy may mặc / Cơ khí: Quản lý giờ vào ca, giờ nghỉ trưa và giờ tan ca cho công nhân, đảm bảo tính đồng bộ cho toàn bộ dây chuyền sản xuất.
  • Thiết bị báo thức công nghiệp hoặc định thời tưới tiêu nông nghiệp: Có thể ứng dụng mạch đóng ngắt relay để hẹn giờ bật/tắt máy bơm, hệ thống chiếu sáng công cộng.
                    +-----------------------------+
                    |    LƯỚI ĐIỆN 220VAC - 50Hz  |
                    +-----------------------------+
                       |                       |
            +----------+---------+             |
            | Biến áp hạ áp 9V   |             | (Pha Lửa qua tiếp điểm)
            | & Bo mạch VĐK 8951 |             |
            +--------------------+             |
                       | (P2.2)                v
                [Transistor A564]      [Tiếp điểm NO Relay]
                       |                       |
                       v                       v
               [Cuộn hút Relay 12V]    [CHUÔNG ĐIỆN 220V]
                       |                       |
            +----------+-----------------------+----------+
            |                    DÂY NGUỘI (N)            |
            +---------------------------------------------+

Yêu cầu triển khai và lắp đặt:

  • Nguồn cấp: Điện lưới xoay chiều dân dụng $220\text{VAC} \pm 10%$, tần số $50\text{Hz}$.
  • Vỏ hộp bảo vệ: Hộp nhựa cách điện ABS hoặc kim loại sơn tĩnh điện, mặt trước khoét lỗ gắn kính mica đỏ trong suốt để tăng độ tương phản cho LED 7 đoạn.
  • Tải ngõ ra: Tiếp điểm relay hỗ trợ tải đóng cắt tối đa $220\text{VAC} - 5\text{A}$ (chuông điện, còi hú hoặc khởi động từ cho chuông công suất lớn).

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

Hạn chế kỹ thuật:

  • Phụ thuộc hoàn toàn vào nguồn điện lưới: Hệ thống chưa trang bị IC thời gian thực chuyên dụng có pin lưu trữ (như RTC DS1307 hay DS12C887). Khi mất điện nguồn 220V, hệ thống sẽ ngừng hoạt động và thời gian bị trả về mặc định 00:00:00 sau khi có điện trở lại.
  • Số lượng mốc giờ báo chuông còn hạn chế: Phiên bản hiện tại mới chỉ lưu trữ được một mốc thời gian báo chuông trong RAM nội; việc cài đặt nhiều mốc trong ngày đòi hỏi mở rộng thêm thuật toán bảng mảng trong bộ nhớ.

Hướng phát triển hoàn thiện:

  1. Tích hợp IC thời gian thực chuyên dụng (RTC DS1307/DS3231): Giao tiếp qua chuẩn I2C, sử dụng pin CMOS CR2032 dự phòng để duy trì đếm giờ chính xác ngay cả khi mất điện hàng năm trời.
  2. Nâng cấp màn hình hiển thị LCD 16x2 hoặc 20x4: Cho phép hiển thị giao diện cài đặt thân thiện, hiển thị đồng thời ngày - tháng - năm - nhiệt độ môi trường.
  3. Mở rộng giao tiếp máy tính (RS232/RS485): Lập trình phần mềm trên máy tính (Visual Basic 6.0 / C++) để nạp bảng thời khóa biểu báo chuông cả tuần vào vi điều khiển chỉ với 1 cú click chuột.

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

  • Sinh viên & Giảng viên ngành Kỹ thuật Điện - Điện tử / Tự động hóa: Là tài liệu tham khảo mẫu mực về phương pháp tiếp cận thiết kế hệ thống nhúng từ A-Z: từ khảo sát tập lệnh, tính toán mạch nguyên lý, vẽ mạch in bằng EAGLE cho đến kỹ thuật lập trình Assembly điều khiển ngoại vi thời gian thực.
  • Kỹ thuật viên bảo trì thiết bị trường học / nhà xưởng: Cung cấp giải pháp tự chế tạo thiết bị báo giờ tự động với giá thành siêu rẻ, dễ dàng bảo trì và thay thế linh kiện sẵn có trên thị trường.
  • Người tự học vi điều khiển (Makers/Hobbyists): Nắm vững bản chất thanh ghi, cách thức hoạt động của Timer, Interrupt và kỹ thuật quét LED đa công – những nền tảng cốt lõi trước khi học lên các dòng vi điều khiển 32-bit hiện đại (ARM Cortex-M, STM32, ESP32).

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

1. Cần chuẩn bị những công cụ phần cứng và phần mềm nào để nạp và biên dịch mã nguồn cho AT89C51?

Để lập trình và biên dịch mã nguồn Assembly MCS-51, bạn có thể sử dụng phần mềm Keil C51 (hoặc A51 Macro Assembler) để biên dịch file .asm sang file mã máy .hex. Về phần cứng, cần một mạch nạp vi điều khiển chuyên dụng (như Top2005, Top2049, hoặc mạch nạp qua cổng LPT/COM) để nạp file .hex vào bộ nhớ Flash ROM của chip AT89C51.

2. Tại sao đồng hồ số lại bị trôi thời gian sau vài ngày chạy và cách khắc phục triệt để?

Nguyên nhân chủ yếu do độ sai số của thạch anh ($12\text{MHz} \pm 20\text{ppm}$) và sự biến thiên điện dung của 2 tụ gốm ổn định dao động ($33\text{pF}$) theo nhiệt độ môi trường. Để khắc phục, có thể bù trừ sai số bằng phần mềm (tinh chỉnh lại giá trị nạp TH0/TL0 sau mỗi $N$ chu kỳ ngắt) hoặc nâng cấp sử dụng IC RTC chuyên dụng có thạch anh nội bù nhiệt như DS3231.

3. Làm thế nào để đấu nối an toàn chuông điện công suất lớn 220VAC vào mạch điều khiển?

Tiếp điểm Relay trên mạch đóng vai trò như một công tắc cơ học đơn cực (SPST). Đấu dây pha lửa (Hot/Line) của lưới điện 220VAC nối tiếp qua chân chung (COM) và chân thường hở (NO) của Relay trước khi đi vào chuông điện; dây trung tính (Neutral) nối trực tiếp vào chuông. Tuyệt đối không để dây nguồn 220VAC chạm vào đường mass DC của bo mạch vi điều khiển.

4. Kỹ thuật quét LED đa công (Multiplexing) hoạt động như thế nào và tại sao mắt người không thấy nhấp nháy?

Thay vì bật đồng thời cả 6 LED 7 đoạn (làm tiêu hao dòng điện rất lớn), phương pháp quét LED chỉ bật duy nhất 1 LED tại một thời điểm trong khoảng $1\text{ms} \div 2\text{ms}$, sau đó chuyển nhanh sang LED kế tiếp. Với tần số quét toàn bộ 6 LED đạt trên $50\text{Hz}$, hiện tượng lưu ảnh trên võng mạc của mắt người (tương tự như màn hình phim ảnh) sẽ tạo cảm giác toàn bộ 6 chữ số đều sáng liên tục và đồng đều.

5. Chi phí gia công toàn bộ phần cứng của hệ thống là bao nhiêu?

Tổng chi phí linh kiện phần cứng (BOM) bao gồm vi điều khiển AT89C51, 6 LED 7 đoạn, biến áp nguồn, IC LM7805, transistor, relay và bo mạch in ước tính chỉ dao động từ 100.000 đến 150.000 VNĐ (tại thời điểm khảo sát), mang lại hiệu quả kinh tế vượt trội so với các thiết bị định thời ngoại nhập.


Kết luận

Đồ án "Nghiên Cứu và Thiết Kế Vi Điều Khiển 8951 - Thiết Kế Đồng Hồ Số Báo Giờ Tự Động" là một công trình nghiên cứu và thi công hoàn chỉnh, thể hiện sự kết hợp chặt chẽ giữa lý thuyết kiến trúc máy tính và kỹ năng thực hành kỹ thuật điện tử. Dự án đã hiện thực hóa thành công một sản phẩm tự động hóa hữu ích, giải quyết triệt để bài toán quản lý thời gian biểu tại các cơ sở đào tạo và nhà xưởng với độ tin cậy cao và chi phí tối thiểu. Đây không chỉ là bước đệm vững chắc giúp người thực hiện làm chủ các kỹ thuật lập trình nhúng cấp thấp mà còn là nguồn tư liệu học tập, tham khảo giàu giá trị thực tiễn cho cộng đồng kỹ thuật điện tử.