1. Trang chủ
  2. » Thể loại khác

Cơ sở và ứng dụng Internet of Things, Thiết kế hệ thống nhúng - Phan Văn Ca, Trương Quang Phúc

334 8 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ Sở Và Ứng Dụng Internet Of Things (Thiết Kế Hệ Thống Nhúng)
Tác giả TS Phan Văn Ca, ThS Trương Quang Phúc
Trường học Trường Đại Học Sư Phạm Kỹ Thuật TP Hồ Chí Minh
Chuyên ngành Công Nghệ Kỹ Thuật Điện Tử - Truyền Thông, Công Nghệ Kỹ Thuật Máy Tính
Thể loại giáo trình
Năm xuất bản 2017
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 334
Dung lượng 28,02 MB

Cấu trúc

  • Chương 1: THIẾT KẾ HỆ THỐNG NHÚNG (13)
    • 1.1. HỆ THỐNG NHÚNG (13)
    • 1.2. TIẾN TRÌNH THIẾT KẾ HỆ THỐNG NHÚNG (13)
      • 1.2.1. Đặc tả vấn đề (15)
      • 1.2.2. Nghiên cứu cơ sở lý thuyết (15)
      • 1.2.3. Tiền thiết kế (15)
      • 1.2.4. Thiết kế (17)
      • 1.2.5. Thực hiện thiết kế mẫu thử Prototype (19)
      • 1.2.6. Kiểm thử thiết kế (19)
      • 1.2.7. Lập hồ sơ thiết kế đầy đủ và chính xác (20)
    • 1.3. VÍ DỤ VỀ THIẾT KẾ HỆ THỐNG NHÚNG (21)
  • Chương 2: KIẾN TRÚC BỘ XỬ LÝ (27)
    • 2.1. KHÁI QUÁT KIẾN TRÚC ATMEGA164 (27)
      • 2.1.1. Kiến trúc RISC (27)
      • 2.1.2. Tập lệnh hợp ngữ (28)
      • 2.1.3. Kích thước toán tử C (29)
      • 2.1.4. Các phép toán trên BIT (29)
      • 2.1.5. Khái quát kiến trúc ATMEGA164 (30)
    • 2.2. BỘ NHỚ CHƯƠNG TRÌNH VÀ BỘ NHỚ DỮ LIỆU (31)
      • 2.2.1 Bộ nhớ có thể lập trình Flash EEPROM (31)
      • 2.2.2 EEPROM truy xuất theo byte (32)
      • 2.2.3. Ví dụ EEPROM truy xuất theo byte (32)
      • 2.2.4. Bộ nhớ truy xuất ngẫu nhiên tĩnh (SRAM) (33)
      • 2.2.5. Các bit khóa có khả năng lập trình (33)
    • 2.3. HỆ THỐNG CỔNG (0)
    • 2.4. CÁC ĐẶC TÍNH NGOẠI VI (36)
      • 2.4.1. Cơ sở thời gian (36)
      • 2.4.2. Hệ thống con định thời (37)
      • 2.4.3. Các kênh điều chế độ rộng xung (37)
      • 2.4.4. Truyền thông nối tiếp (37)
      • 2.4.5. Bộ chuyển đổi số sang tương tự - ADC (38)
      • 2.4.6. Bộ so sánh tương tự (39)
      • 2.4.7. Hệ thống ngắt (39)
    • 2.5. CÁC THAM SỐ HOẠT ĐỘNG VÀ VẬT LÝ (40)
      • 2.5.1. Đóng gói (40)
      • 2.5.2. Tiêu thụ công suất (42)
      • 2.5.3. Tốc độ xử lý (42)
    • 2.6. CHỌN VI ĐIỀU KHIỂN (42)
    • 2.7. ỨNG DỤNG: BOARD THỬ ATMEGA164 (43)
      • 2.7.1. Cấu hình phần cứng (43)
      • 2.7.2. Cấu hình phần mềm (45)
    • 2.8. LẬP TRÌNH VỚI ATMEGA164 (48)
      • 2.8.1. Thủ tục lập trình (48)
      • 2.8.2. Lập trình trên hệ thống (ISP) (50)
    • 2.9. TÍNH LINH ĐỘNG CỦA PHẦN MỀM (51)
    • 2.10. KIẾN TRÚC ATMEGA328P (51)
    • 2.11. NGÔN NGỮ ASSEMBLY (53)
      • 2.11.1. Giới thiệu (53)
      • 2.11.2. Chuỗi công cụ Arduino (55)
      • 2.11.3. Assembly trên Arduino (61)
      • 2.11.4. Assembly nội tuyến trên Arduino (63)
      • 2.11.5. Hiệu quả của ngôn ngữ C (66)
  • Chương 3: GIAO TIẾP NỐI TIẾP (69)
    • 3.1. GIỚI THIỆU (69)
    • 3.2. GIAO THỨC KẾT NỐI I 2 C (72)
    • 3.3. GIAO DIỆN NGOẠI VI NỐI TIẾP SPI (73)
      • 3.3.1. Các thanh ghi SPI (75)
      • 3.3.2. Lập trình SPI (77)
      • 3.3.3. Mở rộng các tính năng Atmel AVR qua SPI (77)
    • 3.4. TRUYỀN/NHẬN BẤT ĐỒNG BỘ USART (80)
      • 3.4.1 Bộ tạo xung nhịp cho hệ thống USART (82)
      • 3.4.2 Bộ nhận/phát USART (83)
      • 3.4.3 Các thanh ghi USART (83)
      • 3.4.4. Chương trình và cách thức hoạt động (85)
      • 3.4.5. Truyền song công USART (87)
      • 3.4.6. Truyền dữ liệu USART qua sóng vô tuyến (91)
      • 3.4.7. Truyền USART đến PC (93)
      • 3.4.8. USART truyền nối tiếp đến LCD (94)
      • 3.4.9. ASCII (95)
    • 3.5. USART TRÊN ATMEGA328P (96)
      • 3.5.1. Quản lý ngắt cổng nối trong C (96)
      • 3.5.2. Mô tả các thanh ghi (103)
    • 3.6. MẠNG VI ĐIỀU KHIỂN (112)
      • 3.6.1. Giao tiếp nối tiếp hai dây (114)
      • 3.6.2. Mạng CAN (114)
      • 3.6.3 Mạng ZIGBEE (114)
  • Chương 4: CHUYỂN ĐỔI TƯƠNG TỰ - SỐ (ADC) (117)
    • 4.1. LẤY MẪU, LƯỢNG TỬ HÓA VÀ MÃ HÓA (120)
    • 4.2. QUÁ TRÌNH CHUYỂN ĐỔI TƯƠNG TỰ - SỐ (124)
      • 4.2.1. Thiết kế giao tiếp bộ chuyển đổi TID (124)
      • 4.2.2. Khuếch đại thuật toán (126)
    • 4.3. CÁC CÔNG NGHỆ ADC (129)
      • 4.3.1. Phương pháp xấp xỉ liên tiếp (129)
    • 4.4. HỆ THỐNG ADC ATMEL ATMEGA164 (129)
      • 4.4.1. Sơ đồ khối (130)
      • 4.4.2. Thanh ghi (131)
      • 4.4.3. Lập trình ADC (133)
    • 4.5. VÍ DỤ (134)
      • 4.5.1. Bộ chỉ thị lượng mưa ADC (134)
      • 4.5.2. Bộ chỉ thị lượng mưa ADC với SPI (138)
      • 4.5.3. Truyền các giá trị ADC tới USART hoặc SPI (139)
      • 4.5.4. Phát hiện ngưỡng – ADC 1BIT (142)
    • 4.6. BỘ CHUYỂN ĐỔI SỐ SANG TƯƠNG TỰ (DAC) (143)
      • 4.6.1. DAC 8 kênh, 8-bit giao tiếp SPI (145)
    • 4.7. BỘ ADC VÀ SO SÁNH TRÊN ATMEGA328P (146)
  • Chương 5: HỆ THỐNG NGẮT (157)
    • 5.1. LÝ THUYẾT NGẮT (157)
      • 5.1.1. Giới thiệu ngắt (157)
      • 5.1.2. Thuộc tính (159)
      • 5.1.3. ISR và truyền thông tác vụ chính (160)
    • 5.2. HỆ THỐNG NGẮT ATMEGA164 (161)
      • 5.2.1. Lập trình một hệ thống ngắt (162)
      • 5.2.2. Ứng dụng (163)
      • 5.2.3. Tiến trình nền và tiến trình ưu tiên (166)
      • 5.2.4. Các ví dụ ngắt (167)
    • 5.3. NGẮT ATMEGA328P TRONG C (179)
      • 5.3.1. Các trình xử lý ngắt (179)
  • Chương 6: HỆ THỐNG ĐỊNH THỜI (193)
    • 6.1. TỔNG QUAN (193)
    • 6.2. NHỮNG THUẬT NGỮ LIÊN QUAN ĐẾN TIMER (194)
      • 6.2.1. Tần số (194)
      • 6.2.2. Chu kỳ (194)
      • 6.2.3. Chu kỳ xung tác động (Duty cycle) (194)
    • 6.3. TỔNG QUAN VỀ TIMER (195)
    • 6.4. ỨNG DỤNG (197)
      • 6.4.1. Bắt xung – đo sự kiện theo thời gian bên ngoài (197)
      • 6.4.2. Đếm sự kiện (199)
      • 6.4.3. So sánh - Tạo tín hiệu định thời giao tiếp ngoại vi (200)
      • 6.4.4. Điều chế độ rộng xung (200)
      • 6.4.5. Tình huống ứng dụng trong công nghiệp (PWM) (205)
    • 6.5. BỘ TIMER CỦA DÒNG VI ĐIỀU KHIỂN ATMEL (206)
      • 6.5.1. Bộ Timer 0 (207)
      • 6.5.2. Bộ Timer 1 (213)
      • 6.5.3. Bộ Timer 2 (217)
      • 6.5.4. Mô tả thanh ghi Timer trong Atmega328P (221)
    • 6.6. CHƯƠNG TRÌNH ỨNG DỤNG TIMER (230)
      • 6.6.1. Định thời chính xác (230)
      • 6.6.2. Điều chế độ rộng xung (231)
      • 6.6.3. Chế độ thu thập ngõ vào (232)
      • 6.6.4. Điều khiển động cơ servo với PWM (233)
      • 6.6.5. PWM sử dụng cho hệ thống quạt lạnh tự động (237)
  • Chương 7: THÔNG SỐ ATMEL AVR VÀ NGOẠI VI (245)
    • 7.1. CÁC THÔNG SỐ HOẠT ĐỘNG (245)
    • 7.2. HOẠT ĐỘNG CỦA PIN (248)
      • 7.2.1. Đặc tính điện áp và dòng máng của hệ thống nhúng (249)
      • 7.2.2. Đặc tính của pin (249)
    • 7.3. THIẾT BỊ NGÕ VÀO (250)
      • 7.3.1. Chuyển mạch (250)
      • 7.3.2. Điện trở kéo lên trong cấu hình chuyển mạch (251)
      • 7.3.3. Sự nảy của chuyển mạch (251)
      • 7.3.4. Bàn phím (252)
      • 7.3.5. Cảm biến (256)
      • 7.3.6. Ví dụ cảm biến nhiệt độ LM34 (259)
    • 7.4. THIẾT BỊ NGÕ RA (259)
      • 7.4.1. LED đơn (259)
      • 7.4.2. LED bảy đoạn (260)
      • 7.4.3. Ví dụ về mã nguồn (262)
      • 7.4.4. LED chỉ thị ba trạng thái (263)
      • 7.4.5. Hiển thị ma trận điểm (263)
      • 7.4.6. Hiển thị trên LCD (266)
      • 7.4.7. Hiển thị GLCD (268)
      • 7.4.8. Thiết bị DC công suất cao (274)
    • 7.5. ĐIỀU KHIỂN CUỘN DÂY SOLENOID DC (275)
    • 7.6. ĐIỀU KHIỂN ĐỘNG CƠ DC (276)
      • 7.6.1. Thông số hoạt động của động cơ DC (277)
      • 7.6.2. Điều khiển chiều quay với cầu H (278)
      • 7.6.3. Kết nối động cơ servo (278)
      • 7.6.4. Điều khiển động cơ bước (278)
      • 7.6.5. Thiết bị xoay chiều (284)
    • 7.7. KẾT NỐI VỚI CÁC THIẾT BỊ KHÁC (0)
      • 7.7.1. Sonalerts, máy nhắn tin, chuông (285)
      • 7.7.2. Động cơ rung (286)
      • 7.7.3. Quạt DC (287)
  • Chương 8: MỘT SỐ ỨNG ỤNG HỆ THỐNG NHÚNG (289)
    • 8.1. TỔNG QUAN (289)
    • 8.2. TRẠM DỰ BÁO THỜI TIẾT (0)
      • 8.2.1. Yêu cầu (290)
      • 8.2.2. Sơ đồ khối (290)
      • 8.2.3. Sơ đồ mạch (291)
      • 8.2.4. Lưu đồ hoạt động UML (293)
      • 8.2.5. Chương trình vi điều khiển (294)
    • 8.3. ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ (301)
    • 8.4. SƠ ĐỒ NGUYÊN LÝ (301)
      • 8.4.1. Yêu cầu hệ thống (303)
      • 8.4.2. Sơ đồ khối (303)
      • 8.4.3. Lưu đồ hoạt động UML (303)
      • 8.4.4. Chương trình vi điều khiển (304)
    • 8.5. ROBOT TỰ HÀNH TRONG MÊ CUNG (309)
      • 8.5.1. Giới thiệu (309)
      • 8.5.2. Yêu cầu (309)
      • 8.5.3. Sơ đồ mạch nguyên lý (311)
      • 8.5.4. Sơ đồ khối (311)
      • 8.5.5. Lưu đồ của robot (312)
      • 8.5.6. Chương trình vi điều khiển (313)
  • PHỤ LỤC (315)
  • TÀI LIỆU THAM KHẢO (331)

Nội dung

THIẾT KẾ HỆ THỐNG NHÚNG

HỆ THỐNG NHÚNG

Hệ thống nhúng sử dụng vi điều khiển để xử lý các ngõ vào và tạo ra ngõ ra, với mối liên kết giữa chúng được xác định bởi thuật toán mã hóa lưu trữ trong bộ nhớ thường trú Thiết kế hệ thống nhúng đối mặt với nhiều thách thức, bao gồm việc đảm bảo giao tiếp điện thích hợp cho thiết bị ngõ vào và ngõ ra, quản lý tài nguyên hạn chế trên chip, phát triển khái niệm giao tiếp người dùng, xem xét môi trường hoạt động, phân tích chi phí, tuân thủ các tiêu chuẩn liên quan, và cân nhắc các khía cạnh sản xuất.

TIẾN TRÌNH THIẾT KẾ HỆ THỐNG NHÚNG

Phần này hướng dẫn từng bước để phát triển nguyên mẫu đầu tiên của hệ thống nhúng, đáp ứng các yêu cầu đã được xác định Nội dung sẽ tập trung vào các bước phổ biến, tránh sử dụng thuật ngữ hình thức và thay vào đó chú trọng vào các công việc thực hiện trong quá trình phát triển nguyên mẫu Quá trình thiết kế được thể hiện qua lưu đồ bằng ngôn ngữ UML trong Hình 1.1.

Hình 1.1: Tiến trình thiết kế hệ thống nhúng

Mục đích của bước đặc tả vấn đề là xác định rõ ràng mục tiêu của hệ thống Để thực hiện bước này, cần nghiên cứu kỹ lưỡng chức năng của hệ thống được giả định Các câu hỏi cần đặt ra trong bước này bao gồm việc làm rõ các yêu cầu và mục tiêu cụ thể mà hệ thống cần đạt được.

- Hệ thống dùng làm gì?

- Nó sẽ hoạt động ở đâu và dưới những điều kiện nào?

Trong thiết kế hệ thống, việc xác định có giới hạn hay không là rất quan trọng Nhà thiết kế hệ thống nhúng cần tương tác chặt chẽ với khách hàng để đạt được sự đồng ý rõ ràng về các yêu cầu và thông số kỹ thuật Kết quả của quá trình này là danh sách chi tiết các yêu cầu hệ thống, đảm bảo rằng cả kỹ sư thiết kế và khách hàng đều có sự thống nhất trước khi bắt đầu thiết kế Sự tương tác này là yếu tố then chốt để thiết lập các yêu cầu rõ ràng và có thể xác định được.

1.2.2 Nghiên cứu cơ sở lý thuyết

Khi danh sách yêu cầu chi tiết đã được xác định, bước tiếp theo là tiến hành nghiên cứu lý thuyết liên quan đến thiết kế Trong giai đoạn này, nhà thiết kế cần hiểu rõ tất cả các yêu cầu và tính năng mong muốn, điều này đòi hỏi sự tương tác chặt chẽ với khách hàng Đồng thời, nhà thiết kế cũng sẽ xem xét các quy tắc, nguyên tắc, giao thức và tiêu chuẩn liên quan đến dự án Đây là thời điểm thích hợp để bắt đầu cân nhắc về sự giao tiếp giữa các phần khác nhau của đề tài, đặc biệt là các thiết bị đầu vào và đầu ra kết nối với vi điều khiển Mục tiêu cuối cùng là đạt được sự hiểu biết sâu sắc về các yêu cầu và các khía cạnh liên quan đến đề tài.

Mục tiêu của bước tiền thiết kế là chuyển đổi các vấn đề đã phân tích thành các phương án thiết kế khả thi Động não là công cụ hiệu quả giúp phát triển danh sách các lựa chọn thay thế Trong hệ thống nhúng, nhà thiết kế có thể xem xét giải pháp chỉ với phần cứng hoặc kết hợp cả phần cứng và phần mềm Giải pháp phần cứng thường thực thi nhanh hơn nhưng không thể thay đổi sau khi hoàn thiện, trong khi phần mềm mang lại tính linh hoạt nhưng có tốc độ thực hiện chậm hơn Hầu hết các giải pháp thiết kế nhúng sẽ kết hợp cả hai để tận dụng lợi thế của từng loại.

Trong bước này, nhà thiết kế cũng phải khảo sát các giải pháp công nghệ thiết kế số tiềm năng Có rất nhiều lựa chọn thay thế bao gồm:

- Mảng cổng lập trình được (FPGA),

- Các công nghệ có sẵn kết hợp xử lý chế độ hỗn hợp

Sau khi xem xét các giải pháp thiết kế thay thế, cần một cách tiếp cận duy nhất để phát triển thành một thiết kế hoàn chỉnh Đánh giá sự cân bằng giữa các thiết kế cạnh tranh là rất quan trọng, và khách hàng nên được liên quan trong bước này Khi một lựa chọn thiết kế đã được phân tích, có thể xác định phân vùng chung giữa phần cứng và phần mềm Đây cũng là thời điểm thích hợp để chọn một thiết bị phần cứng cụ thể cho thiết kế mẫu Nếu đã chọn công nghệ vi điều khiển, cần lựa chọn một bộ điều khiển cụ thể bằng cách trả lời các câu hỏi liên quan.

- Những hệ thống con hoặc các tính năng của vi điều khiển (ví dụ: ADC, PWM, bộ định thời,…) được yêu cầu bởi thiết kế?

- Có bao nhiêu chân ngõ vào và ngõ ra được yêu cầu bởi thiết kế?

- Tốc độ vận hành tối đa dự kiến của vi điều khiển là bao nhiêu?

Việc sử dụng bộ vi điều khiển mới nhất mà không có tài liệu, hỗ trợ và công cụ phát triển đầy đủ sẽ gây ra nhiều khó khăn Để đạt hiệu quả cao trong quá trình phát triển, cần có các tài liệu liên quan và công cụ hỗ trợ sẵn có.

Trong quá trình thiết kế, việc chuyển sang một vi điều khiển tương thích với bộ nhớ lớn hơn trở nên dễ dàng nhờ vào sự hỗ trợ của Atmel Chẳng hạn, ATmega164 với 16K bộ nhớ có thể dễ dàng nâng cấp lên phiên bản 32K (ATmega324) hoặc 64K (ATmega644).

Khi lựa chọn vi điều khiển cho quá trình sản xuất, cần đảm bảo rằng số lượng vi điều khiển cụ thể sẽ có sẵn đủ để đáp ứng nhu cầu Tránh việc chọn vi điều khiển quá cũ hoặc quá mới, trừ khi đã xác minh được rằng số lượng sản xuất cần thiết đã được đảm bảo.

- Tất cả các phần cứng thiết bị ngoại vi yêu cầu đều có sẵn với đầy đủ các tài liệu hỗ trợ?

Board lập trình STK500 của Atmel mang đến giải pháp lập trình chi phí thấp cho hầu hết các bộ điều khiển trong dòng sản phẩm ATmega Nếu bạn chọn ATmega164 làm giải pháp thiết kế, việc chuyển sang vi điều khiển tương thích với tài nguyên bộ nhớ lớn hơn như ATmega324 hay ATmega644 sẽ rất dễ dàng.

Sau khi xác định rõ các yêu cầu và tính năng hệ thống, cùng với việc chọn lựa vi điều khiển phù hợp, bước tiếp theo là tiến hành thiết kế thực tế Việc thiết kế cần tuân theo một phương pháp có hệ thống và nguyên tắc, giúp phát triển giải pháp đáp ứng yêu cầu một cách hiệu quả và ít căng thẳng Trong quá trình thiết kế này, nhiều công cụ hữu ích sẽ được áp dụng để đơn giản hóa quy trình thiết kế.

- Sử dụng thiết kế từ trên xuống (top-down design), phương pháp thực hiện từ dưới lên (bottom up implementation approach),

- Sử dụng sơ đồ cấu trúc để hỗ trợ phân vùng cho hệ thống,

- Sử dụng Lưu đồ hoạt động UML để lập ra luồng của chương trình, và

- Phát triển một sơ đồ mạch chi tiết của toàn bộ hệ thống

Thiết kế từ trên xuống và thực hiện từ dưới lên là phương pháp hiệu quả để phân vùng thiết kế, bắt đầu từ một hệ thống tổng thể và chia nhỏ thành các hệ thống con Trong giai đoạn này, người thiết kế tập trung vào cách các phần khác nhau của đề tài tương tác với nhau, không quan tâm đến cách hoàn thành thiết kế Sơ đồ khối là công cụ hữu ích, giúp thể hiện cấu trúc hệ thống phần cứng và các thành phần phần mềm tương tác Tiếp theo, quá trình thiết kế sẽ tiếp tục phân vùng hoạt động của hệ thống cho đến khi mỗi hệ thống con trong sơ đồ khối có một chức năng xác định rõ ràng.

Lưu đồ hoạt động UML là công cụ quan trọng trong quá trình thiết kế hệ thống, giúp xác định chi tiết hoạt động của từng hệ thống con đã được phân chia Thay vì lập trình mỗi hệ thống con như một hàm chức năng, chúng ta sử dụng lưu đồ hoạt động UML để chỉ rõ thông tin và luồng điều khiển của từng phân hệ Lưu đồ này tương thích với tiêu chuẩn UML, tạo điều kiện thuận lợi cho việc mô tả và phân tích các hoạt động trong hệ thống.

Hình 1.2: Các ký hiệu dùng trong Lưu đồ hoạt động UML

UML là phương pháp chuẩn hóa cho tài liệu hệ thống, trong đó Lưu đồ hoạt động là công cụ quan trọng để mô tả hệ thống và thiết kế hoạt động Các ký hiệu cơ bản trong Lưu đồ hoạt động UML cho hệ thống vi điều khiển được minh họa trong Hình 1.2 Để phát triển Lưu đồ hoạt động UML, có thể áp dụng các phương pháp từ trên xuống, từ dưới lên hoặc kết hợp Phương pháp từ trên xuống bắt đầu bằng việc mô hình hóa luồng tổng thể của thuật toán từ mức cao, trong khi phương pháp từ dưới lên bắt đầu với sơ đồ khối và chọn một hệ thống con để mô hình hóa Thông thường, cách tiếp cận lai, kết hợp cả hai kỹ thuật, được ưa chuộng trong thực tiễn.

Người thiết kế phần mềm cần xây dựng Lưu đồ hoạt động của UML với đầy đủ chi tiết trước khi bắt tay vào viết mã Nếu không thể diễn giải hoạt động của hệ thống ở cấp độ này, người thiết kế sẽ thiếu thông tin cần thiết để phát triển mã Do đó, Lưu đồ hoạt động của UML phải chi tiết đủ để cho phép người thiết kế viết mã thuật toán trực tiếp từ đó.

VÍ DỤ VỀ THIẾT KẾ HỆ THỐNG NHÚNG

Bài viết này mô tả quá trình thiết kế hệ thống nhúng cho thiết bị kiểm vận động KTD (kinesiology testing device) Hệ thống KTD bao gồm một bảng hiển thị với hai cột đèn LED lớn 10 mm, có thể nhìn thấy từ khoảng cách 5 mét Cột đèn LED bên phải chỉ thị mức thử sức mong muốn, trong khi cột bên trái thể hiện mức độ thử sức thực tế Đèn LED được điều khiển bởi bộ tạo tín hiệu bên ngoài với tín hiệu dốc tần số thấp, và dây biến trở cung cấp điện áp ngõ ra tỷ lệ thuận với độ dài dây kéo Dây biến trở được kết nối với thiết bị tập thể dục để theo dõi sự thay đổi trong quá trình thử nghiệm Các yêu cầu và đặc tính của bộ tạo tín hiệu cùng dây biến trở đã được xem xét kỹ lưỡng.

Hình 1.3: Mô hình thiết bị kiểm tra vận động

Tiền thiết kế là bước quan trọng trong quá trình phát triển sản phẩm Sau khi hiểu rõ các yêu cầu, cần suy nghĩ về các giải pháp khả thi, bao gồm hai lựa chọn chính: giải pháp hoàn toàn dựa trên phần cứng hoặc giải pháp sử dụng vi điều khiển Dù chọn phương án nào, các tính năng nhất định phải được đảm bảo là yêu cầu bắt buộc.

- Khả năng điều khiển độc lập tổng cộng 28 bóng đèn có đường kính lớn (10 mm)

- Một mạch giao tiếp để điều khiển mỗi đèn LED.

- Hai kênh analog-to-digital để chuyển đổi các ngõ vào từ dây điện trở và bộ truyền tín hiệu tương ứng thành tín hiệu số

Bộ đệm đệm ngõ vào có chức năng cách ly và bảo vệ bảng điều khiển khỏi dây biến trở và bộ tạo tín hiệu, đồng thời giúp ngăn ngừa tình trạng thiết lập quá tải.

- Một thuật toán để liên kết tín hiệu ngõ vào analog với tín hiệu kích hoạt LED thích hợp

Với số lượng lớn chân ngõ ra cần thiết để điều khiển đèn LED, cùng với thuật toán kết nối ngõ vào Analog và ngõ ra LED khá đơn giản, vi điều khiển không phải là lựa chọn tối ưu cho đề tài này.

Hình 1.4: Sơ đồ khối và Lưu đồ hoạt động UML

Sau khi chọn thiết kế, bước tiếp theo là phát triển một thiết kế chi tiết, trong đó hệ thống tổng thể được phân chia thông qua sơ đồ khối như trong Hình 1.4 Từ sơ đồ khối này, sơ đồ mạch cho từng hệ thống con được phát triển Để xây dựng bộ chuyển đổi tương tự sang số với ngõ ra 14 bit, một mạch thử nghiệm nhỏ với 4 bit được phát triển nhằm kiểm tra khái niệm Mạch thử nghiệm này được thể hiện trong Hình 1.5, trong khi sơ đồ mạch hoàn chỉnh với ngõ ra 14 bit điều khiển 28 LED lớn được mô tả trong Hình 1.6.

Hình 1.5: Mạch kiểm thử kích thước nhỏ cho hệ thống

Sau khi hoàn thành thiết kế, mạch được thực hiện trên một board mạch thử để đảm bảo hoạt động chính xác Mỗi hệ thống con sẽ được triển khai và thử nghiệm từng phần, bắt đầu từ mức thấp nhất của sơ đồ khối Sau khi hoàn tất thử nghiệm, thiết kế sẽ được chuyển sang sơ đồ bố trí PCB, nơi PCB sẽ được lắp ráp và kiểm tra hoạt động Hệ thống cũng được kiểm tra trong điều kiện phòng thí nghiệm thực tế, từ đó yêu cầu một số sửa đổi để cho phép chu kỳ tập và nghỉ của mảng LED chỉ thị mức thử sức mong muốn có thể lập trình được Bằng cách thay đổi các tham số tín hiệu, chu kỳ nghỉ và chu kỳ tập có thể được điều chỉnh, ví dụ như chu kỳ nghỉ 2 giây và chu kỳ tập 1 giây Bộ truyền tín hiệu được thiết lập cho tín hiệu dốc với các thông số hiển thị, trong khi mạch bảo vệ ngõ vào hạn chế mức tín hiệu từ 0 đến 4 V.

Hình 1.7: Thiết lập tham số hiển thị cho các đèn LED

1.1 Hệ thống nhúng là gì?

1.2 Các khía cạnh cần quan tâm khi thiết kế một hệ thống nhúng?

1.3 Mục đích của sơ đồ khối, Lưu đồ hoạt động UML và sơ đồ mạch? 1.4 Trình bày khái niệm thiết kế từ trên xuống và thực hiện từ dưới lên 1.5 Mô tả giá trị của một bộ hồ sơ thiết kế chính xác

1.6 Nêu những yêu cầu trong việc tài liệu hóa đầy đủ một thiết kế hệ thống nhúng?

KIẾN TRÚC BỘ XỬ LÝ

KHÁI QUÁT KIẾN TRÚC ATMEGA164

Chương này cung cấp cái nhìn tổng quan về kiến trúc của vi điều khiển Atmel AVR ATmega164 Đầu tiên, nó giới thiệu về kiến trúc tập lệnh rút gọn (RISC) và mô tả ngắn gọn tập lệnh hợp ngữ của Atmel Tiếp theo, phần kiến trúc phần cứng của ATmega164 sẽ được trình bày chi tiết hơn.

Vi điều khiển là một hệ thống máy tính hoàn chỉnh được tích hợp trong một chip, hoạt động dựa trên chương trình do người dùng viết, tương tác với kiến trúc phần cứng cố định Kiến trúc của vi điều khiển có thể được phân loại thành các loại như kiến trúc tích lũy, kiến trúc thanh ghi, kiến trúc ngăn xếp và kiến trúc đường ống.

Atmel ATmega164 là một kiến trúc thanh ghi, trong đó tất cả các toán hạng được lưu trữ trong các thanh ghi bên trong CPU Điều này có nghĩa là máy tính sẽ tải dữ liệu cần thiết vào CPU trước khi thực hiện phép toán, và kết quả cũng được lưu trong thanh ghi Trong quá trình thực thi chương trình, CPU tương tác với các thanh ghi để giảm thiểu việc truy xuất bộ nhớ tốc độ thấp, thường được thực hiện bởi các thao tác nền Kiến trúc thanh ghi này gắn liền với tập lệnh RISC, với bộ xử lý RISC cung cấp các thao tác lệnh cơ bản hiệu quả và đơn giản Các lệnh phức tạp hơn được xây dựng từ các thao tác này, giúp tối ưu hóa hoạt động của chương trình Atmel ATmega164 hỗ trợ 131 lệnh loại RISC, hầu hết có thể được thực thi trong một chu kỳ xung nhịp đơn.

Bộ xử lý RISC tập trung vào việc đơn giản hóa phần cứng và tập lệnh để nâng cao hiệu suất máy tính ATmega164 được trang bị phần cứng cho phép thực hiện phép toán nhân chỉ trong hai chu kỳ xung nhịp, trong khi nhiều kiến trúc vi điều khiển khác thường yêu cầu nhiều chu kỳ hơn cho phép toán này.

Atmel ATmega164 được trang bị 32 thanh ghi 8-bit đa dụng, kết hợp chặt chẽ với đơn vị logic số học của bộ vi xử lý (ALU) trong CPU

Bộ xử lý ATmega164 được thiết kế theo kiến trúc Harvard, với bộ nhớ và bus riêng biệt cho chương trình và dữ liệu, cho phép thực hiện lệnh nhanh chóng và hiệu quả Kiến trúc này dựa trên thanh ghi và tập lệnh RISC, giúp bộ xử lý hoàn thành một lệnh hợp ngữ trong mỗi chu kỳ xung nhịp Với tốc độ xung nhịp tối đa 20 MHz, ATmega164 có khả năng thực hiện lên đến 20 triệu lệnh mỗi giây (MIPS).

Tập lệnh là một nhóm lệnh mà máy tính có thể hiểu và thực hiện, thường độc quyền cho một phần cứng cụ thể, như ATmega164 với 131 hướng dẫn, giúp thực hiện lệnh nhanh chóng trong một chu kỳ xung nhịp Để tối ưu hóa hiệu suất của vi điều khiển, lập trình viên thường sử dụng hợp ngữ, nhưng điều này yêu cầu kiến thức sâu về kiến trúc phần cứng và hạn chế khả năng chuyển đổi sang vi điều khiển khác Do đó, trong tài liệu này, chúng ta sẽ sử dụng ngôn ngữ lập trình C, cho phép điều khiển phần cứng ở mức thanh ghi và dễ dàng chuyển đổi giữa các vi điều khiển trong dòng AVR Khi biên dịch chương trình C, mã nguồn sẽ được chuyển đổi thành hợp ngữ và sau đó thành mã máy cho vi điều khiển cụ thể.

Lập trình trong C không tốt hơn hợp ngữ và ngược lại; cả hai phương pháp đều có ưu và nhược điểm riêng Chúng tôi chọn sử dụng C trong cuốn sách này vì lý do đã nêu trước đó Trong suốt cuốn sách, chúng tôi sẽ sử dụng trình biên dịch ICC AVR của ImageCraft cho các ví dụ về chương trình vi điều khiển, và các tính năng cụ thể cũng có sẵn trên các trình biên dịch Atmel AVR C khác.

Khi khai báo biến trong C, số bit lưu trữ toán tử được xác định gián tiếp Hình 2.1 liệt kê kích thước các biến C phổ biến với trình biên dịch ICC AVR của ImageCraft Các kích thước của các biến khác như pointers, shorts, longs, v.v có thể được tìm thấy trong tài liệu trình biên dịch.

Hình 2.1: Kích thước các biến trong C

Khi lập trình vi điều khiển, việc hiểu số bit lưu trữ và vị trí gán biến là rất quan trọng Gán một biến kiểu unsigned char (8-bit) vào cổng ngõ ra 8-bit cho kết quả dự đoán được, trong khi gán một biến unsigned int (16-bit) vào cổng 8-bit lại không đảm bảo kết quả chính xác Do đó, việc cân bằng các phát triển gán là cần thiết để đạt được kết quả chính xác Cần nhấn mạnh rằng sửa đổi “unsigned” cho phép tất cả các bit được sử dụng để xác định độ lớn của đối số.

“signed” sẽ sử dụng bit trọng số lớn nhất bên trái để chỉ ra cực tính (±) của đối số

2.1.4 Các phép toán trên BIT

Trong thiết kế hệ thống nhúng, việc sử dụng không hết các chân trên vi điều khiển hoặc gán nhiều ngõ vào và ngõ ra cho các chân khác nhau trên cùng một port là điều phổ biến Do đó, nhiều trình biên dịch hiện nay hỗ trợ khả năng tham chiếu đến các chân cụ thể.

Hình 2.2: Các phép toán trên bit

Một kỹ thuật thao tác trên bit không phụ thuộc vào trình biên dịch cụ thể có thể tác động đến các bit riêng lẻ mà không làm ảnh hưởng đến các bit khác, như được minh họa trong Hình 2.2.

2.1.5 Khái quát kiến trúc ATmega164

Phần này trình bày về kiến trúc của bộ vi điều khiển ATmega164

Với những kiến thức này, người đọc có thể dễ dàng tìm hiểu và tiếp cận tất cả các bộ vi xử lý trong dòng AVR Hình 2.3 trình bày sơ đồ khối kiến trúc của Atmel ATmega164.

ATmega164 được thiết kế với nhiều kết nối bên ngoài, bao gồm nguồn điện (VCC, GND), chân ngõ vào thời gian cơ sở để điều khiển đồng hồ (XTAL1 và XTAL2), và chân reset (RESET tác động thấp) Nó có bốn cổng 8-bit (PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7) cho phép tương tác với môi trường bên ngoài, có thể sử dụng như cổng ngõ vào/ngõ ra số hoặc cho các chức năng thay thế Các cổng này kết nối với CPU của ATmega164 và các hệ thống con thông qua các bus nội bộ Ngoài ra, ATmega164 còn tích hợp hệ thống con Timer, bộ chuyển đổi ADC, bộ so sánh tương tự, hệ thống ngắt, hệ thống định thời, cùng với các thành phần bộ nhớ và tính năng truyền thông nối tiếp mở rộng.

Bài viết này sẽ tóm tắt các hệ thống con bên trong vi điều khiển, cung cấp cái nhìn tổng quan về chức năng và hoạt động của từng hệ thống Thông tin chi tiết về lập trình và cách thức hoạt động sẽ được trình bày rõ ràng trong các chương tiếp theo.

Hình 2.3: Sơ đồ khối Atmel AVR ATmega164

BỘ NHỚ CHƯƠNG TRÌNH VÀ BỘ NHỚ DỮ LIỆU

ATmega164 được trang bị ba loại bộ nhớ chính: bộ nhớ ROM có khả năng lập trình và xóa bằng điện (EEPROM), bộ nhớ EEPROM cho phép truy xuất dữ liệu theo địa chỉ byte, và bộ nhớ truy cập ngẫu nhiên tĩnh (SRAM) để lưu trữ tạm thời.

2.2.1 Bộ nhớ có thể lập trình Flash EEPROM

Flash EEPROM là bộ nhớ không bay hơi, giữ lại nội dung ngay cả khi nguồn cấp cho vi điều khiển bị ngắt Nó được sử dụng để lưu trữ các chương trình và có khả năng lập trình khối, cho phép xóa và lập trình như một đơn vị duy nhất Nếu chương trình yêu cầu một bảng lớn các hằng số, chúng có thể được lưu trữ trong một biến toàn cục và lập trình vào flash EEPROM cùng với phần còn lại của chương trình Vi điều khiển ATmega164 được trang bị 16K byte bộ nhớ flash có thể lập trình, được tổ chức thành 8K vị trí, mỗi vị trí chứa 16 bit.

Bộ nhớ flash EEPROM có khả năng lập trình trong hệ thống, cho phép vi điều khiển được lập trình mà không cần tháo rời khỏi mạch, khác với công nghệ EEPROM cũ Việc lập trình này được thực hiện thông qua một máy tính cá nhân (PC) kết nối qua cáp, giúp tải chương trình trực tiếp vào vi điều khiển Ngoài ra, vi điều khiển cũng có thể được lập trình bên ngoài mạch bằng cách sử dụng board lập trình flash, phương pháp này thường áp dụng khi các chân vi điều khiển cho lập trình ISP được sử dụng cho các mục đích thiết kế khác.

Bộ nhớ Flash EEPROM là thiết bị lưu trữ quan trọng cho các chương trình ứng dụng thực thi Một loại EEPROM khác trên bo mạch cho phép truy cập theo byte, được sử dụng để lưu trữ các biến cần thiết nhằm bảo vệ hệ thống trong trường hợp mất nguồn Bài viết này sẽ giới thiệu chi tiết về bộ nhớ này.

2.2.2 EEPROM truy xuất theo byte

Bộ nhớ truy xuất byte là loại bộ nhớ không bay hơi, được sử dụng để lưu trữ lâu dài và gọi lại các biến trong suốt quá trình thực thi chương trình.

Bộ nhớ EEPROM rất hữu ích cho việc ghi lại lỗi hệ thống và dữ liệu khi thực thi chương trình Nó cũng lưu trữ thông tin cần thiết trong trường hợp mất điện, với khả năng thay đổi định kỳ Các ứng dụng điển hình của bộ nhớ này bao gồm lưu trữ thông số hệ thống, tổ hợp khóa điện tử và chuỗi mở khóa cho cửa nhà để xe tự động ATmega164 được trang bị bộ nhớ EEPROM với dung lượng đáng kể.

2.2.3 Ví dụ EEPROM truy xuất theo byte

Phần này hướng dẫn cách đọc và ghi vào EEPROM để truy xuất byte trên vi điều khiển ATmega164, sử dụng các tính năng của trình biên dịch ICC AVR của ImageCraft Các trình biên dịch khác cũng có tính năng tương tự Để cấu hình chương trình đảm bảo truy cập bộ nhớ EEPROM hiệu quả, cần thực hiện một số bước cụ thể.

1 Các định nghĩa hàm hỗ trợ đặc trưng của trình biên dịch để truy cập vào EEPROM phải được khai báo trong chương trình C chính Trường hợp sử dụng trình biên dịch ICC AVR của ImageCraft, bước này được thực hiện bằng cách bao gồm file tiêu đề eeprom.h như dưới đây:

2 Các biến được đặt trong EEPROM phải được khai báo như các biến toàn cục Với trình biên dịch ImageCraft ICC AVR, điều này được thực hiện bằng cách sử dụng cấu trúc #pragma được minh họa dưới đây Các biến được lưu trữ trong EEPROM được đặt vào giữa hai phát biểu #pragma Ngoài ra, một biến toàn cục thông thường cũng được khai báo tương ứng với biến dựa trên EEPROM để dễ dàng đọc và ghi vào biến từ vị trí EEPROM Trong ví dụ sau, biến nằm trong EEPROM được gọi là “test_data_EEPROM” trong khi biến tương ứng được sử dụng trong chương trình được gọi là “test_data”

#pragma data: eeprom unsigned int test_data_EEPROM = 0x1234;

//global variables unsigned int test_data;

3 Biến EEPROM sau đó có thể được ghi hoặc đọc, một vị trí trong bộ nhớ EEPROM truy xuất theo byte sử dụng bằng cách gọi các hàm trong trình biên dịch ICC AVR như sau:

EEPROM_READ ((int) & test_data_EEPROM, test_data);

EEPROM_WRITE ((int) & test_data_EEPROM, test_data);

Khi chương trình có biến EEPROM được biên dịch, tệp sẽ được tạo ra bên cạnh tệp Tệp dùng để cấu hình EEPROM khi lập trình ATmega164 bằng bộ lập trình STK500, đồng thời STK500 cũng cho phép đọc nội dung của EEPROM.

2.2.4 Bộ nhớ truy xuất ngẫu nhiên tĩnh (SRAM)

Bộ nhớ RAM tĩnh, hay còn gọi là SRAM, là loại bộ nhớ bốc hơi, có nghĩa là nội dung sẽ bị mất khi vi điều khiển mất nguồn ATmega164 được trang bị 1K (thực tế là 1120) byte bộ nhớ SRAM, trong đó 96 vị trí được dành riêng cho các thanh ghi đa dụng của CPU, cũng như cho các ngõ vào/ngõ ra và các hệ thống con ngoại vi Trong quá trình thực thi chương trình, RAM đóng vai trò quan trọng trong việc lưu trữ các biến toàn cục, hỗ trợ phân bổ bộ nhớ động và cung cấp vị trí cho ngăn xếp.

2.2.5 Các bit khóa có khả năng lập trình Để cung cấp khả năng bảo mật bộ nhớ cho người dùng, ATmega164 được trang bị sáu bit khóa bộ nhớ Các bit khóa này được lập trình bằng bảng mạch lập trình Atmel STK500 và có thể được cấu hình cho các tùy chọn sau:

- Không cho phép tính năng khóa bộ nhớ,

- Không cho phép lập trình thêm bộ nhớ sử dụng các kỹ thuật lập trình song song hoặc nối tiếp, hoặc

- Không cho lập trình thêm hoặc kiểm thử bộ nhớ sử dụng các kỹ thuật lập trình song song hoặc nối tiếp

Nội dung mã máy của bộ nhớ Flash và EEPROM có thể được truy xuất bằng STK500 và phần mềm AVR Studio Tuy nhiên, nếu cố gắng đọc bộ nhớ Flash với các bit khóa được cấu hình ở mức bảo mật cao nhất, chỉ các giá trị bộ nhớ mặc định sẽ được hiển thị.

Atmel ATmega164 trang bị bốn cổng vào/ra (I/O) số 8-bit đa dụng, bao gồm PORTA, PORTB, PORTC và PORTD Mỗi cổng này không chỉ phục vụ cho việc vào/ra mà còn có các chức năng thay thế khác nhau, sẽ được trình bày chi tiết trong các phần tiếp theo Bài viết này tập trung vào các tính năng cơ bản của cổng I/O.

Hình 2.4: Các thanh ghi cấu hình cổng ATmega164

Như mô tả trong Hình 2.4, mỗi cổng của ATmega164 có ba thanh ghi liên kết với nó

- Thanh ghi dữ liệu PORTx - dùng để ghi dữ liệu ngõ ra/vào cổng

- Thanh ghi hướng dữ liệu DDRx - dùng để thiết lập cho một chân cổng cụ thể là ngõ ra (1) hoặc ngõ vào (0)

- Địa chỉ chân ngõ vào PINx - dùng để đọc dữ liệu ngõ vào từ cổng

CÁC ĐẶC TÍNH NGOẠI VI

ATmega164 tích hợp nhiều tính năng ngoại vi quan trọng, cho phép thực hiện các công việc phức tạp và tinh vi Những hệ thống con này được chứa bên trong chip vi điều khiển, mang lại khả năng xử lý linh hoạt và hiệu quả cho các ứng dụng khác nhau.

Bộ vi điều khiển là một máy trạng thái đồng bộ phức tạp, thực hiện các bước của chương trình theo thứ tự do người dùng định nghĩa Quá trình thực hiện lệnh bao gồm ba giai đoạn: nạp lệnh, giải mã và thực thi, tất cả đều có thể dự đoán Mỗi lệnh trong chương trình tạo ra chuỗi tín hiệu để điều khiển phần cứng, nhằm thực hiện các hoạt động tương ứng với lệnh đó.

Tốc độ thực hiện các hành động trong bộ vi điều khiển được điều khiển bởi xung nhịp đồng hồ, cung cấp cơ sở thời gian cho các hệ thống con ngoại vi ATmega164 có thể sử dụng xung nhịp nội từ mạch RC hoặc xung nhịp bên ngoài Xung nhịp nội được chọn qua các bit cầu chì lập trình với tần số cố định là 1, 2, 4 hoặc 8 MHz Để có tần số linh hoạt hơn, nguồn xung nhịp bên ngoài như mạng RC, bộ cộng hưởng gốm và bộ dao động thạch anh có thể được sử dụng Nhà thiết kế hệ thống sẽ chọn tần số và thiết bị xung nhịp phù hợp với ứng dụng Tần số hoạt động tối đa của ATmega164P với điện áp 5 VDC là 20 MHz.

2.4.2 Hệ thống con định thời

ATmega164 được trang bị các bộ định thời bổ sung, cho phép người dùng tạo tín hiệu ngõ ra chính xác và đo các đặc tính như thời gian, chu kỳ làm việc và tần số của tín hiệu số Thiết bị này cũng hỗ trợ tạo độ trễ chính xác, thực hiện đồng hồ thời gian thực và đếm các sự kiện bên ngoài Cụ thể, ATmega164 có hai bộ đếm thời gian/bộ đếm 8-bit và một bộ đếm 16-bit.

2.4.3 Các kênh điều chế độ rộng xung

Tín hiệu điều chế độ rộng xung (PWM) có đặc điểm là tần số cố định và chu kỳ tác động (duty cycle) biến đổi Chu kỳ tác động được định nghĩa là tỷ lệ phần trăm thời gian mà tín hiệu tuần hoàn duy trì mức logic cao trong toàn bộ chu kỳ Công thức tính chu kỳ tác động là: duty cycle [%] = (thời gian mức logic cao / chu kỳ) × 100%.

ATmega164 được trang bị ba bộ đếm thời gian riêng biệt để hỗ trợ

Bài viết đề cập đến 6 kênh điều chế độ rộng xung (PWM), cho phép người dùng cấu hình vi điều khiển để tạo ra các tín hiệu PWM với độ linh hoạt cao Các kênh PWM kết hợp với khả năng chia nhỏ cơ sở thời gian xuống các tần số nguồn xung nhịp khác nhau, giúp tạo ra các tín hiệu với chu kỳ tần số thấp đến tương đối cao, cùng với các tín hiệu chu kỳ tác động cao và tần số tương đối thấp.

Tín hiệu PWM (Pulse Width Modulation) được áp dụng rộng rãi trong các lĩnh vực như điều khiển vị trí động cơ servo, điều chỉnh tốc độ động cơ DC, và tạo ra tín hiệu ngõ ra DC tương tự.

ATmega164 được trang bị nhiều hệ thống con truyền thông nối tiếp, bao gồm bộ nhận và phát đồng bộ và không đồng bộ (USART), giao diện ngoại vi nối tiếp (SPI) và giao diện nối tiếp hai dây Tất cả các hệ thống này đều sử dụng phương thức truyền dữ liệu nối tiếp, trong đó dữ liệu được gửi từ bộ truyền đến máy thu một cách tuần tự.

USART là giao thức truyền thông song công giữa máy thu và bộ truyền, được trang bị phần cứng độc lập trên ATmega164 Giao thức này thường được sử dụng cho truyền thông không đồng bộ, nghĩa là không có xung nhịp chung giữa bộ truyền và máy thu Để đảm bảo sự đồng bộ, các bit bắt đầu và kết thúc khung được sử dụng ở đầu và cuối mỗi byte dữ liệu trong chuỗi truyền.

ATmega164 USART mang lại sự linh hoạt cao với khả năng thiết lập nhiều tốc độ truyền dữ liệu khác nhau, gọi là tốc độ Baud Nó cho phép cấu hình độ rộng bit dữ liệu từ 5 đến 9 bit, kèm theo một hoặc hai bit kết thúc Đặc biệt, ATmega164 được trang bị phần cứng hỗ trợ kiểm tra chẵn lẻ và tạo ra bit chẵn lẻ, giúp phát hiện lỗi bit đơn trong byte dữ liệu Ngoài ra, USART còn có thể hoạt động ở chế độ đồng bộ, tăng cường khả năng truyền tải dữ liệu.

 Giao tiếp ngoại vi nối tiếp - SPI

Giao diện ngoại vi nối tiếp SPI (Serial Peripheral Interface) của ATmega164 hỗ trợ truyền thông hai chiều giữa bộ truyền và máy thu Hệ thống SPI yêu cầu bộ truyền và máy thu chia sẻ một nguồn xung nhịp chung, điều này cần thêm một đường tín hiệu xung nhịp nhưng mang lại tốc độ truyền dữ liệu cao hơn so với USART.

SPI là một giao thức truyền dữ liệu sử dụng thanh ghi dịch 16 bit, với một nửa 8 bit ở bộ truyền và nửa còn lại ở máy thu Trong hệ thống này, bộ truyền hoạt động như máy chủ, cung cấp xung nhịp đồng bộ hóa cho quá trình truyền dữ liệu, trong khi máy thu được chỉ định làm máy tớ.

 Giao tiếp nối tiếp 2 dây - TWI

Hệ thống TWI (Two Wire Interface) cho phép thiết kế mạng kết nối tối đa 128 thiết bị như vi điều khiển, đầu dò, bộ hiển thị và bộ nhớ thông qua cơ chế kết nối hai dây.

Mỗi thiết bị trong mạng đều sở hữu một địa chỉ duy nhất, cho phép chúng truyền và nhận dữ liệu qua bus hai dây với tần số tối đa lên đến 400 KHz Điều này tạo điều kiện cho việc trao đổi thông tin linh hoạt giữa các thiết bị trong một khu vực nhỏ.

2.4.5 Bộ chuyển đổi số sang tương tự - ADC Để tương tác với các tín hiệu analog bên ngoài, ATmega164 được trang bị hệ thống con ADC 8 kênh tương tự như bộ chuyển đổi số ADC chuyển đổi một tín hiệu tương tự từ thế giới bên ngoài thành một biểu diễn nhị phân thích hợp cho việc sử dụng bởi vi điều khiển ATmega164

CÁC THAM SỐ HOẠT ĐỘNG VÀ VẬT LÝ

Bài viết này cung cấp thông tin chi tiết về bố trí vật lý và các tham số vận hành của vi điều khiển ATmega164 Là một nhà thiết kế hệ thống, việc hiểu rõ các tùy chọn về tham số vật lý và hoạt động là rất quan trọng để lựa chọn giải pháp phù hợp cho từng ứng dụng cụ thể.

ATmega164 có nhiều kiểu đóng gói khác nhau, bao gồm vỏ nhựa 2 hàng 40 chân (PDIP), vỏ dẹt vuông mỏng 44 chân (TQFP), vỏ khung vuông phẳng với đường ra siêu nhỏ hoặc không đường ra 44 chân (QFN/MLF), và loại 44 DRQFN chân Sơ đồ chân ra của PDIP cùng với các tùy chọn đóng gói TQFP/QFN/MLF được mô tả trong Hình 2.6.

Hình 2.6: Sơ đồ chân các kiểu đóng gói PDIP và TQFP/QFN/MLF

ATmega164 hoạt động với điện áp cung cấp từ 1,8 đến 5,5 VDC, và trong các ví dụ dưới đây, nguồn cung cấp 5VDC được tạo ra từ pin 9 VDC Dòng điện danh định của vi điều khiển này rất thấp; cụ thể, khi ATmega164 hoạt động ở tần số 1 MHz với nguồn điện 1,8 VDC, dòng điện tiêu thụ chỉ là 0,4 mA Khi ở chế độ tắt nguồn, vi điều khiển tiêu thụ dòng điện nhỏ hơn 0,1 µA từ nguồn điện.

ATmega164 có thể hoạt động với tốc độ xung nhịp từ 0 đến 20 MHz, với tốc độ được xác định bởi cơ sở thời gian của bộ vi xử lý Tuy nhiên, tốc độ hoạt động nhanh không phải lúc nào cũng là lựa chọn tối ưu, vì vậy người thiết kế cần xác định tốc độ phù hợp cho từng ứng dụng Công suất tiêu thụ của vi điều khiển tăng lên khi tốc độ hoạt động cao, điều này đặc biệt quan trọng trong các ứng dụng hệ thống nhúng di động sử dụng pin.

CHỌN VI ĐIỀU KHIỂN

Để chọn một vi điều khiển cụ thể cho một ứng dụng, các vấn đề sau đây phải được xem xét:

Vi điều khiển cần được trang bị các hệ thống con phù hợp với yêu cầu của ứng dụng cụ thể, chẳng hạn như khả năng chuyển đổi ADC và truyền thông nối tiếp.

- Có bao nhiêu chân I/O số được yêu cầu bởi bộ điều khiển?

Để xác định dung lượng bộ nhớ Flash EEPROM cần thiết cho ứng dụng, người thiết kế cần xây dựng sơ đồ minh họa các thiết bị ngoại vi và kết nối với vi điều khiển Việc này sẽ giúp xác định yêu cầu về hệ thống con vi điều khiển và số chân I/O cần thiết.

Việc xác định dung lượng bộ nhớ Flash EEPROM cho một ứng dụng cụ thể là một thách thức đối với các nhà thiết kế Họ có thể lựa chọn các vi điều khiển tương thích chân-đến-chân như ATmega164/324/644, với bộ nhớ lần lượt là 16K, 32K và 64K Ứng dụng có thể bắt đầu phát triển với vi điều khiển 16K và sau đó nâng cấp lên 32K hoặc 64K khi cần thiết Khi chuyển đổi giữa các vi điều khiển, cần sử dụng tệp tin tiêu đề phù hợp và đảm bảo rằng số ngắt không bị thay đổi.

ỨNG DỤNG: BOARD THỬ ATMEGA164

Mục đích của board thử (Testbench) là minh họa hoạt động của các hệ thống con của ATmega164, cho phép tương tác với các thiết bị ngõ vào và ngõ ra khác nhau Testbench đóng vai trò quan trọng như một khuôn mẫu để phát triển các ứng dụng cụ thể, giúp người dùng dễ dàng thiết kế và kiểm tra các giải pháp công nghệ.

Bài viết này mô tả cấu hình phần cứng của một Testbench khung sườn cùng với nền tảng phần mềm cơ bản để thiết lập một hệ thống hoạt động Hệ thống vi điều khiển được kết nối với 8 công tắc chuyển mạch chống nảy tới PORTB và một dãy 8 kênh đèn LED ba trạng thái tới PORTA.

Phần mềm sẽ giám sát sự thay đổi trạng thái trên PORTB Khi người dùng nhấn một công tắc, vi điều khiển ATmega164 sẽ nhận diện sự thay đổi và đèn LED trên PORTA sẽ chuyển đổi màu từ đỏ sang xanh lá cây.

Cấu hình phần cứng cơ bản cho Testbench bao gồm PORTA với 8 công tắc được trang bị phần cứng chống nảy, và PORTB có bộ chỉ thị LED 8 kênh ba trạng thái Đối với mỗi chân cổng, đèn LED xanh biểu thị mức logic cao, đèn LED đỏ thể hiện mức logic thấp, trong khi không có đèn LED nào sáng khi ở trạng thái trở kháng cao.

Hình 2.7: Phần cứng Testbench ATmega164

Bộ điều khiển được trang bị phần cứng ngõ vào PORTB và phần cứng hiển thị ngõ ra trên PORTA, cùng với các đầu nối nguồn ở chân 10, 30, 32 và đất ở chân 11, 31 Nguồn điện 5 VDC tiêu chuẩn là lựa chọn phù hợp cho các kết nối nguồn Đối với ứng dụng di động, pin 9 VDC kết hợp với bộ điều chỉnh 5 VDC như LM340-05 hoặc uA7805 có thể được sử dụng làm nguồn điện hiệu quả.

Các chân từ 9 đến 11 của vi điều khiển ATmega164 được trang bị một điện trở 1M, hai tụ điện 1,0 UF và một bộ công tắc chuyển mạch, cho phép thiết lập chức năng reset Hệ thống sử dụng bộ cộng hưởng gốm 10 MHz ZTT làm cơ sở thời gian cho Testbench, kết nối với chân 12 (XTAL2) và 13 (XTAL1) của vi điều khiển.

Phần mềm Testbench được cung cấp dưới đây Chương trình bao gồm các phần sau:

Phần mềm này bao gồm tập tin ImageCraft ICC AVR cho ATmega164 (iom164v.h), cung cấp liên kết giữa tên bộ phận ghi phần cứng và vị trí phần cứng thực Khi sử dụng tên thanh ghi trong chương trình, tham chiếu sẽ được thực hiện tới nội dung của thanh ghi đó.

 Khai báo các nguyên mẫu hàm (prototype)

 Khai báo các biến toàn cục

Chương trình chính bắt đầu bằng việc khởi tạo các cổng thông qua việc gọi hàm, sau đó vào một vòng lặp liên tục Trong vòng lặp này, các ATmega164 theo dõi sự thay đổi trạng thái trên PORTB Khi người dùng nhấn một trong các công tắc kết nối với PORTB, sự thay đổi trạng thái được phát hiện và đèn LED tương ứng trên PORTA sẽ được bật sáng.

 Định nghĩa các hàm con

//function: provides test bench for ATMEL AVR ATmega164 controller //target controller: ATMEL ATmega164

//ATMEL AVR ATmega164 Controller Pin Assignments

//Chip Port Function I/O Source/Dest Asserted Notes

//Pin 1 PB0 to active high RC debounced switch

//Pin 2 PB1 to active high RC debounced switch

//Pin 3 PB2 to active high RC debounced switch

//Pin 4 PB3 to active high RC debounced switch

//Pin 5 PB4 to active high RC debounced switch

//Pin 6 PB5 to active high RC debounced switch

//Pin 7 PB6 to active high RC debounced switch

//Pin 8 PB7 to active high RC debounced switch

//Pin 14 PD0 to tristate LED indicator

//Pin 15 PD1 to tristate LED indicator

//Pin 16 PD2 to tristate LED indicator

//Pin 17 PD3 to tristate LED indicator

//Pin 18 PD4 to tristate LED indicator

//Pin 19 PD5 to tristate LED indicator

//Pin 20 PD6 to tristate LED indicator

//Pin 21 PD7 to tristate LED indicator

#include //ImageCraft ICC AVR include

//function prototypes void initialize_ports(void); //initialize ports

In the main function of the program, the PORTB is initialized and continuously monitored for changes The current value of PORTB is stored in the variable 'old_PORTB', while 'new_PORTB' captures the latest input from PINB If a difference is detected between 'new_PORTB' and 'old_PORTB', the program processes the change using a switch statement, specifically addressing the case where PB0 is asserted high (0x01).

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x01; //turn on PD0 LED (0000_0001) break; case 0x02: //PB1 (0000_0010)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x02; //turn on PD1 LED (0000_0010) break; case 0x04: //PB2 (0000_0100)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x04; //turn on PD2 LED (0000_0100) break; case 0x08: //PB3 (0000_1000)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x08; //turn on PD3 LED (0000_1000) break; case 0x10: //PB4 (0001_0000)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x10; //turn on PD4 LED (0001_0000) break; case 0x20: //PB5 (0010_0000)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x20; //turn on PD5 LED (0010_0000) break; case 0x40: //PB6 (0100_0000)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x40; //turn on PD6 LED (0100_0000) break; case 0x80: //PB7 (1000_0000)

PORTD=0x00; //turn off all LEDs PORTD

PORTD=0x80; //turn on PD7 LED (1000_0000) break; default:; //all other cases

} //end if new_PORTB old_PORTB=new_PORTB; //update PORTB

//initialize_ports: initial configuration for I/O ports

DDRA=0xff; //set PORTA[7:0] as output

PORTB=0x00; //disable PORTB pull-up resistors

DDRC=0xff; //set PORTC as output

DDRD=0xff; //set PORTD as output

LẬP TRÌNH VỚI ATMEGA164

Lập trình ATmega164 cần nhiều công cụ phần cứng và phần mềm Bài viết này sẽ tóm tắt các thành phần cần thiết Để biết thêm chi tiết, người đọc có thể tham khảo tài liệu từ nhà sản xuất tại www.atmel.com.

Công cụ Phần mềm: Tài liệu này sử dụng trình biên dịch ICC

AVR của ImageCraft là một trình biên dịch phổ biến và thân thiện, được sử dụng để chuyển đổi các tập tin nguồn như testbench.c sang ngôn ngữ máy cho vi điều khiển ATmega164 Để nạp mã máy vào ATmega164, người dùng sử dụng Atmel AVR Studio.

Kit STK500 AVR Flash MCU Starter Kit của Atmel là công cụ phần cứng lý tưởng để lập trình vi điều khiển ATmega164 Nó cung cấp giao diện giữa máy tính và ATmega164, giúp tải mã máy một cách dễ dàng Với các socket DIP, STK500 hỗ trợ lập trình cho tất cả các vi điều khiển trong dòng Atmel AVR và cho phép lập trình trong hệ thống (ISP).

Bài viết này hướng dẫn chi tiết từng bước lập trình vi điều khiển ATmega164 (PDIP) bằng bộ công cụ STK500 AVR Flash MCU Starter.

1 Tải AVR Studio (miễn phí từ www.atmel.com)

3 Kết nối STK500 như Hình 2.8

4 Lắp ATmega164 vào socket 40 chân màu đỏ Chú ý vị trí chân số 1 như trong Hình 2.8

6 Khởi động AVR Studio trên PC

7 Khi cửa sổ Pop up “Welcome to AVR Studio” xuất hiện Đóng cửa sổ bằng cách nhấp chuột vào “Cancel button.”

8 Nhấp chuột vào biểu tượng “AVR icon” Biểu tượng này giống như hình bóng bán dẫn trong mạch tích hợp và nằm trên dòng thứ hai của thanh công cụ khoảng một nửa chiều ngang màn hình

9 Một cửa sổ pop up STK500 với 6 Tab được kích hoạt (Program, Fuses, Lockbits, Advanced, Board, Auto) Ở dưới cùng của cửa sổ Tab, chương trình xác minh rằng STK500 đã được nhận diện Khắc phục sự cố khi cần thiết để đảm bảo rằng STK500 đã được tự động nhận diện bởi AVR Studio

10 Thiết lập cho tất cả các Tab:

 Programming mode: ISP, Erase Device Before

Programming, Verify Device After Programming

 Flash: Input HEX file, Browse and find machine code file:

 EEPROM: Input HEX file, Browse and find machine code file:

• Fuses: Thiết lập các Fuse sau

 Brown out detection at Vcc = 4.0V

 External Crystal/Resonator High Frequency; Start-up time 16K CK + 64ms

• Program Tab: nhấp chuột program

• Fuse Tab: nhấp chuột program (không quên bước này; nếu không vi điều khiển chạy rất chậm!)

12 Ngắt nguồn STK500 Tháo chip được lập trình trên board và đặt vào mạch Testbench

2.8.2 Lập trình trên hệ thống (ISP)

Lập trình ISP cho vi điều khiển cho phép thực hiện mà không cần tháo rời khỏi mạch Để sử dụng thủ tục này, kết nối đầu nối ISP6PIN trên STK500 với các chân MISO, SCK, RST và MOSI của vi điều khiển mục tiêu Chân VTG trên ISP6PIN cần được nối với chân VCC và GND đến đất của mạch Hình 2.8 minh họa sơ đồ kết nối ISP6PIN.

Hình 2.8: Lập trình ATmega164 với STK500

TÍNH LINH ĐỘNG CỦA PHẦN MỀM

Tính linh động của phần mềm được thể hiện qua khả năng hoạt động trên nhiều nền tảng khác nhau Các kỹ thuật trong tài liệu này cho phép phần mềm đã phát triển dễ dàng chuyển đổi sang các bộ vi điều khiển Atmel AVR khác Để thuận tiện cho việc chuyển đổi sang vi điều khiển khác, việc sử dụng các kỹ thuật gán bit trực tiếp được khuyến khích.

Thay vì thiết lập toàn bộ nội dung cho thanh ghi cùng một lúc, các bit đã chọn có thể được thiết lập riêng lẻ

Ví dụ, để thiết lập thanh ghi UCSRB, các phép gán từng bit sau đây có thể được sử dụng:

UCSRB = (1

Ngày đăng: 29/04/2022, 06:01

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. S. Barrett and D. Pack (2006), Microcontrollers Fundamentals for Engineers and Scientists, Morgan and Claypool Publishers Sách, tạp chí
Tiêu đề: Microcontrollers Fundamentals for Engineers and Scientists
Tác giả: S. Barrett and D. Pack
Năm: 2006
2. S. Barrett and D. Paack (2008), Atmel AVR Microcontroller Primer Programming and Interfacing, Morgan and Claypool Publishers Sách, tạp chí
Tiêu đề: Atmel AVR Microcontroller Primer Programming and Interfacing
Tác giả: S. Barrett and D. Paack
Năm: 2008
3. Roland Thomas and Albert Rosa (2003), The Analysis and Design of Linear Circuits, Fourth Edition, Wiley & Sons, Inc., New York Sách, tạp chí
Tiêu đề: The Analysis and Design of Linear Circuits
Tác giả: Roland Thomas and Albert Rosa
Năm: 2003
4. Daniel Pack and Steven Barrett (2008), Microcontroller Theory and Applications: HC12 and S12, Prentice Hall, 2ed, Upper Saddle River, New Jersey 07458 Sách, tạp chí
Tiêu đề: Microcontroller Theory and Applications: HC12 and S12
Tác giả: Daniel Pack and Steven Barrett
Năm: 2008
5. John Enderle, Susan Blanchard and Joseph Bronzino (2000), Introduction to Biomedical Engineering, Academic Press Sách, tạp chí
Tiêu đề: Introduction to Biomedical Engineering
Tác giả: John Enderle, Susan Blanchard and Joseph Bronzino
Năm: 2000
6. S. Franco (2002), Design with Operational Amplifiers and Analog Integrated Circuits, Third edition, McGrawHill Book Company Sách, tạp chí
Tiêu đề: Design with Operational Amplifiers and Analog Integrated Circuits
Tác giả: S. Franco
Năm: 2002
7. Frederick Driscoll, Robert Coughlin,and Robert Villanucci (2000), Data Acquisition and Process Control with the M68HC11 Microcontroller, Second Edition, Prentice Hall, Upper Saddle River Sách, tạp chí
Tiêu đề: Data Acquisition and Process Control with the M68HC11 Microcontroller
Tác giả: Frederick Driscoll, Robert Coughlin,and Robert Villanucci
Năm: 2000
8. Todd Morton (2001), Embedded Microcontrollers, Prentice Hall, Upper Saddle River, Prentice Hall Sách, tạp chí
Tiêu đề: Embedded Microcontrollers
Tác giả: Todd Morton
Năm: 2001
9. D. Pack and S. BarrettS (2002), 68HC12 Microcontroller: Theory and Applications, Prentice-Hall Incorporated, Upper Saddle River, NJ Sách, tạp chí
Tiêu đề: 68HC12 Microcontroller: Theory and Applications
Tác giả: D. Pack and S. BarrettS
Năm: 2002
10. S. Barrett and D. Pack (2004), Embedded Systems Design with the 68HC12 and HCS12, Prentice-Hall Incorporated, Upper Saddle River, NJ Sách, tạp chí
Tiêu đề: Embedded Systems Design with the 68HC12 and HCS12
Tác giả: S. Barrett and D. Pack
Năm: 2004
11. Atmel 8-bit AVR Microcontroller with 16/32/64K Bytes In-System Programmable Flash, AT-mega164P/V, ATmega324P/V, 644P/Vdata sheet: 8011I-AVR-05/08, Atmel Corporation, 2325 Orchard Parkway, San Jose, CA 95131 Khác
12. Hantronix Inc.Hantronix Product Specification HDM64Gs12L-4 128 x 64 Graphics LCD Display Module, Hantronix Inc., 10080 Bubb Rd. Cupertino, CA 95014, 2003 Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w