a) Giới thiệu KeilC uVision
Đề tài này sử dụng phần mềm KeilC uVision5 để lập trình cho vi điều khiển STM32F103C8T6. KeilC là môi trường phát triển tích hợp và bộ tạo chương trình tự động được thiết kế cho họ các vi điều khiển ARM, 8051, STM của Atmel, là một trình biên dịch chéo C, ASM thành ngôn ngữ máy tính để nạp vào vi điều khiển tạo sự tương tác giữa vi điều khiển và người lập trình. Phần mềm Keil C uVisioncho kiến trúc vi điều khiển hỗ trợ mọi cấp độ của nhà phát triển phần mềm từ kỹ sư ứng dụng chuyên nghiệp đến sinh viên chỉ học về phát triển phần mềm nhúng. Tiện ích được thiết kế để giải quyết các vấn đề phực tạp mà các nhà phát triển phần mềm nhúng phải đối mặt. Keil C uVisionmô phỏng chính xác các thiết bị ngoại vi trên chip của thiết bị. Nó giúp người dùng hiểu cấu hình phần cứng và tránh lãng phí thời gian cho các vấn đề thiết lập. Ngoài ra, với mô phỏng, cũng có thể viết và kiểm tra các ứng dụng phần cứng đã có sẵn.
Chương trình có thể chạy trên các hệ điều hành 2000, XP, Vista và Windows 32/64 bit. KeilC uVision là một trong những IDE (Integrated Development Environment) tốt nhất hiện nay được các lập trình viên sử dụng để phát triển dòng vi điều khiển lõi ARM cho các ứng dụng nhúng. Phần mềm này có một số ưu nhược điểm như sau:
Ưu điểm
+ Trình biên dịch này là khá nhanh, mạnh, được nhiều người sử dụng, hỗ trợ simulation, hỗ trợ nhiều loại debugger, tối ưu hóa cao cho các ứng dụng có bộ xử lý lõi ARM.
+ Hỗ trợ cho nhiều loại kiến trúc MCU.
+ Hỗ trợ chúng ta cách quản lý source code bằng cách add source vào project explorer, cấu hình target device, define parameter rất tiện lợi....
Nhược điểm
+ Là phần mềm có phí, phiên bản thử nghiệm bị giới hạn nhiều tính năng, tool IDE không hiệu quả khi ứng dụng cho những chương trình lớn, phức tạp...
Màn hình làm việccủa Keil C: bao gồm các thanh công cụ ở phía trên cùng và 3 vùng chính như trong hình dưới
49 Vùng 1: Là vị trí của các cửa sổ Project, cho phép quản lý các tập tin trong dự án, và cửa sổ Function, cho phép ta quản lý các chương trình con.
Vùng 2: Vùng soạn thảo. Đây là nơi soạn thảo chương trình.
Vùng 3: Cửa sổ Build Output. Hiển thị các thông tin trong quá trình biên dịch chương trình.
Hình 4.1 Màn hình làm việc của KeilC
Các bước tạo một dự án mới:
Bước 1: Để thuận tiện trong việc quản lý các dự án, ta nên tạo từng thư mục riêng cho mỗi dự án, với tên thư mục là tên dự án kèm theo ngày lập dự án đó. Kèm theo đó, ta nên thêm một file text, có nội dung ghi lại những thay đổi của dự án, vào thư mục của dự án đó.
Bước 2: Vào menu Project\New uVision Project để tạo project mới. Nhập đường dẫn và tên project vào hộp thoại. Nhấn OK.
Bước 3: Chọn loại vi điều khiển cần sử dụng trong hộp thoại Select device for Target (Hình 4.2). Nhấn OK.
50 Bước 4: Tạo một file mới: File\New và lưu lại với định dạng *.c hoặc *.h.
Bước 5: Add file vừa tạo vào project.
Bước 6: Thiết lập cho Keil C xuất ra file *.hex, ta mở hộp thoại Target Option (Hình 4.3). Click chọn vào checkbox Create HEX file trong tab Output (Hình 4.4). Nhấn OK
Hình 4.3 Chọn hộp thoại Target option
Hình 4.4 Tab Output trong hộp thoại Target option
b) Lưu đồ giải thuật cho chương trình chính
51
Hình 4.5Lưu đồ giải thuật cho chương trình chính cho khối mạch
Hoạt động của chương trình chính được mô tảnhư sau:
Ban đầu khi cấp nguồn cho bo mạch, hệ thống sẽ khởi tạo các cổng vào ra, ngắt ngoài, timer, UART, ADC, màn hình LCD của vi điều khiển, bao gồm việc cài đặt các cấu hình mặc định cho hệ thống như các đèn tắt, các cửa sổ đóng, các rèm đóng.
Ngắt ngoài EXTI4 được cài đặt ở chế độ Falling Edge (ngắt khi có sườn xuống) tương ứng với tín hiệu từ cảm biến mưa.
Ngắt ngoài EXTI5, EXTI6 được cài đặt ở chế độ Rising Edge (ngắt khi có sườn lên) tương ứng với tín hiệu từ các công tắc hành trình.
Timer 3 được khởi tạo cho ứng dụng tạo ra tín hiệu PWM điều khiển động cơ servo.
Ngắt UART1 được cài đặt ở chế độ truyền và nhận tín hiệu tương ứng với tín hiệu giao tiếp với module bluetooth (8-bit Data, 1-bit Stop, No Parity), Baud Rate 9600.
Ngắt UART2 được cài đặt ở chế độ truyền và nhận tín hiệu tương ứng với tín hiệu giao tiếp với cảm biến vân tay R305 (8-bit Data, 1-bit Stop, No Parity), Baud Rate 57600.
52 Ngắt ADC được khởi tạo cho ứng dụng đọc tín hiệu từ cảm biến nhiệt độ LM35 để hiển thị LCD và đọc tín hiệu từ cảm biến đo dòng ACS712 để thực hiện xử lý các kịch bản.
Khởi tạo màn hình LCD để hiển thị nhiệt độ và thông tin lớp học.
Nếu có ngắt, vi điều khiển nhảy vào chương trình phục vụ ngắt và thực hiện các lệnh điều khiển tương ứng. Mức ưu tiên của các ngắt này được cài đặt là như nhau, nên ngắt nào xảy ra trước thì được thực hiện trước.
Nếu không có ngắt hoặc thực hiện ngắt xong, vi điều khiển tiến hành xử lí tín hiệu từ cảm biến nhiệt độ LM35 và hiển thị thông số lên màn hình LCD. Trên thực tế, vì nhiệt độ là đại lượng biến đổi chậm nên có thể dùng ngắt Timer để đọc tín hiệu từ cảm biến LM35 và hiển thị lên LCD để tiết kiệm năng lượng.
c) Lưu đồ giải thuật chương trình con xử lý ngắt ngoài
Lưu đồ giải thuật chương trình con xử lý ngắt ngoài được thể hiện trong hình 4.6:
Hình 4.6 Lưu đồ giải thuật chương trình con xử lý ngắt ngoài
Hoạt động của chương trình con này được mô tảnhư sau:
Khi có tín hiệu ngắt ngoài từ cảm biến mưa, tức là phát hiện trời mưa, vi điều khiển thực hiện lệnh đóng các cửa sổ.
Khi có tín hiệu ngắt ngoài từ công tắc hành trình, tức là báo hiệu rèm cửa đã đóng đến điểm giới hạn, vi điều khiển thực hiện dừng động cơ rèm.
d) Lưu đồ giải thuật chương trình con giao tiếp với LCD và LM35
Lưu đồ giải thuật chương trình con giao tiếp giữa vi điều khiển với LCD và cảm biến nhiệt độ LM35 như hình dưới:
53
Hoạt động của chương trình con này được mô tảnhư sau:
Khi có tín hiệu ngắt ADC từ cảm biến nhiệt độ LM35, vi điều khiển thực hiện tính toán giá trị nhiệt độ và hiển thị lên màn hình LCD.
Ngoài ra, màn hình LCD còn hiển thị thông tin tên lớp học. Thông tin này là cố định không thay đổi trong suốt quá trình hoạt động của hệ thống.
Hình 4.7 Lưu đồ giải thuật chương trình con giao tiếp với LCD và LM35
e) Lưu đồ giải thuật chương trình con giao tiếp với HC06
Lưu đồ giải thuật chương trình con giao tiếp với module bluetooth HC06 như sau:
Hình 4.8 Lưu đồ giải thuật chương trình con giao tiếp với module HC06
54
Khi có tín hiệu điều khiển từ ứng dụng, vi điều khiển thực hiện các lệnh điều khiển. Danh sách các tín hiệu điều khiển từ ứng dụng được liệt kê trong bảng dưới đây
Bảng 4.1 Bảng tín hiệu khối điều khiển nhận về qua chuẩn bluetooth
Mã Hecxa Chức năng 0x40 Bật đèn 1 0x41 Tắt đèn 1 0x42 Bật đèn 2 0x43 Tắt đèn 2 0x44 Mở rèm 1 50% 0x54 Mở rèm 1 100% 0x45 Đóng rèm 1 0x46 Mở rèm 2 50% 0x56 Mở rèm 2 100% 0x47 Đóng rèm 2 0x48 Mở cửa sổ 1 0x49 Đóng cửa sổ 1 0x4A Mở cửa sổ 2 0x4B Đóng cửa sổ 2
0x4C Cho phép đăng nhâp bằng vân tay
0x4E Reset
0x00 Cài đặt chế độ mặc định cho user có ID = 1 0x03 Cài đặt chế độ mặc định cho user có ID = 2 0x30 Cài đặt chế độ mặc định cho user có ID = 3 0x3F Cài đặt chế độ mặc định cho user có ID = 4
f) Lưu đồ giải thuật chương trình con giao tiếp với R305
Lưu đồ giải thuật chương trình con giao tiếp với cảm biến vân tay R305 được minh họa trong hình 4.9
Hoạt động của chương trình con này được mô tảnhư sau:
Khi có tín hiệu cho phép đăng nhập bằng vân tay từ ứng dụng điều khiển, MCU gửi gói tin thu thập vân tay người dùng đến cảm biến. Gói tin này có định dạng như sau:
Bảng 4.2 Định dạng gói tin thu thập vân tay được gửi đi
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 2 bytes Header Module address Package identifier Package length Instruction code Checksum 0xEF01 0xFFFFFFFF 0x01 0x0003 0x01 0x0005
55 Khi nhận được gói tin yêu cầu thu thập vân tay, cảm biến đợi người dùng đặt vân tay (đèn cảm biến sáng liên tục). Khi có vân tay, cảm biến gửi gói tin trả về MCU (12 bytes) với định dạng như sau:
Bảng 4.3 Định dạng gói tin thu thập vân tay được trả về
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 2 bytes Header Module address Package identifier Package length Confirmation code Checksum 0xEF01 0xFFFFFFFF 0x07 0x0003 Sum
- Confirmation code = 0x00 nghĩa là thu thập vân tay thành công.
Hình 4.7 Lưu đồ giải thuật chương trình con giao tiếp R305
Nếu việc thu thập vân tay thành công, MCU gửi gói tin ghi dữ liệu vân tay vào bộ nhớ đệm (13 bytes) với định dạng như sau:
56
Bảng 4.4 Định dạng gói tin ghi vân tay được gửi đi
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 1 bytes 2 bytes Header Module address Package identifier Package length Instruction code Buffer number Checksum 0xEF01 0xFFFFFFFF 0x01 0x0004 0x02 0x01 0x0008 Khi nhận được gói tin yêu cầu ghi dữ liệu vào bộ nhớ đệm, cảm biến tiến hành ghi dữ liệu và gửi gói tin trả về MCU (12 bytes) với định dạng như sau:
Bảng 4.5 Định dạng gói tin ghi vân tay được trả về
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 2 bytes Header Module address Package identifier Package length Confirmation code Checksum 0xEF01 0xFFFFFFFF 0x07 0x0003 Sum
- Confirmation code = 0x00 nghĩa là ghi dữ liệu thành công.
Nếu việc ghi thành công, MCU gửi bản tin kiểm tra xem mã vân tay vừa thu thập có trong bộ nhớ flash của cảm biến hay không (17 bytes). Gói tin có định dạng như sau:
Bảng 4.6 Định dạng gói tìm kiếm vân tay được gửi đi
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 1bytes 2 bytes 2 bytes 2 bytes Header Module address Package identifier Package length Instruction code Buffer number
Parameter Parameter Checksum 0xEF01 0xFFF
FFFFF
0x01 0x0008 0x04 0x01 0x0000 0x00FF 0x010D Khi nhận được gói tin yêu cầu ghi dữ liệu vào bộ nhớ đệm, cảm biến tiến hành ghi
dữ liệu và gửi gói tin trả về MCU (16 bytes) với định dạng như sau:
Bảng 4.7 Định dạng gói tin tìm kiếm vân tay được trả về
2 bytes 4 bytes 1 bytes 2 bytes 1 bytes 2 bytes 2 bytes 2 bytes Header Module address Package identifier Package length Confirmation code Checksum
0xEF01 0xFFFFFFFF 0x07 0x0007 PageID Match
Score
Sum - Confirmation code = 0x00 nghĩa là có tìm thấy vân tay trong bộ nhớ.
- Confirmation code = 0x09 nghĩa là không tìm thấy vân tay trong bộ nhớ. - PageID: là mã vân tay nếu có trong bộ nhớ.
Nếu có tìm thấy mã vân tay trong bộ nhớ, MCU gửi ID vân tay tới ứng dụng điều khiển để truy vấn thông tin người dùng để hiển thị và thiết lập các trạng thái mặc định của các thiết bị trong lớp học.
57 Lưu đồ giải thuật chương trình con giao tiếp với cảm biến đo dòng được minh họa như trong hình 4.10
Hoạt động của chương trình con này được mô tảnhư sau:
Khi có tín hiệu ngắt ADC từ cảm biến đo dòng ACS712, vi điều khiển thực hiện tính toán giá trị dòng điện.
Nếu giá trị dòng > 0, tức là có tín hiệu bật điều hòa (máy chiếu), vi điều khiển thực hiện các lệnh điều khiển tương ứng.
Hình 4.8 Lưu đồ giải thuật chương trình con giao tiếp với ACS712