Professional Documents
Culture Documents
123doc Trien Khai He Thong Nhung Tren Nios Va Dieu Khien Thiet Bi Qua May Tinh
123doc Trien Khai He Thong Nhung Tren Nios Va Dieu Khien Thiet Bi Qua May Tinh
Ket-noi.com chia se
MỤC LỤC
2.3.3. Xây dựng hệ thống bằng SoPC( Qsys) trên Quartus II ............... 30
3
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
3.3 Thiết kế giao diện điều khiển trên máy tính. ................................ 59
3.5.1. Kết nối chân tín hiệu điều khiển ngoại vi..................................... 64
5
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Hình 2-8: Đường dẫn, tên dự án, tên thực thể chính. .................................... 24
Hình 2-18: Chọn hệ thống SoPC dựa trên ngôn ngữ Verilog hoặc VHDL ... 31
6
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Hình 2-24: Tạo thêm I/O cần thiết cho hệ thống NIOS II ............................. 35
Hình 2-26: Giao diện chương trình phần mềm NIOS II ................................ 36
Hình 2-31: Sơ đồ khối một Avalon bus module trong thiết kế ...................... 46
Hình 3-12: Giao tiếp giữa cổng Slave và Avalon Bus Module trong quá trình
đọc từ Slave .................................................................................................. 57
Hình 3-13: Thời gian trong quá trình đọc dữ liệu từ cổng slave .................... 57
7
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Hình 3-14: Các tín hiệu giao tiếp và thời gian trong khi ghi dữ liệu ra cổng
slave.............................................................................................................. 58
Hình 3-17: Lưu đồ thuật toán quá trình gửi dữ liệu ...................................... 61
Hình 3-18: Lưu đồ thuật toán quá trình nhận dữ liệu .................................... 63
Hình 3-20: Mạch chuẩn giao tiếp Rs232 dùng IC Max232 ........................... 65
8
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Bảng 3-1: Chân kết nối tín hiệu điều khiển GPIO1....................................... 65
9
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
FPGA Field programmable gate array Vi mạch dùng cấu trúc mảng
phần tử logic lập trình được
VHDL VHSIC Hardware Description Ngôn ngữ lập trình phần cứng
Language
10
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Trong chương này sẽ trình bày tổng quan về đề tài bao gồm lý do chọn đề tài,
mục tiêu, giới hạn, phạm vi nghiên cứu, nội dung thực hiện và phương pháp tiếp
cận của đề tài.
Trong những năm gần đây, xu hướng của thế giới là phát triển mạnh công
nghệ bán dẫn. Một chip có thể tích hợp trên nó nhiều cổng logic có thể ứng dụng
trong nhiều lĩnh vực. Ngày nay, ngành công nghiệp chế tạo phần cứng luôn có
những đột phá không ngừng. Từ các mạch điện đơn giản đến các mạch số, mạch
tích hợp, kiến trúc mạch ngày một trở nên phức tạp hơn.
Các hệ thống nhúng được phát triển trên FPGA đang được sử dụng rộng rãi
cho các nghiên cứu, ứng dụng, và đào tạo hiện nay bởi đặc tính linh hoạt cho các
thiết kế thiết bị trên FPGA. Đặc tính có thể cấu hình lại của FPGA cho phép tạo ra
phiên bản thiết kế của một thiết bị mong muốn cho các ứng dụng khác nhau. Nhờ sử
dụng các ngôn ngữ mô phỏng phần cứng VHDL, Verilog và một số công cụ thiết
kế, mô phỏng, ngày nay, ở phòng thí nghiệm, cơ sở đào tạo, hay một cá nhân có thể
đưa ra ý tưởng, một mẫu thiết kế một bộ xử lý mong muốn, và thực thi nó trên
FPGA. Với những ứng dụng rộng rãi trong nhiều ngành công nghiệp đa dạng, hầu
hết các hệ nhúng hiện nay đều được phát triển trên công nghệ FPGA. Mặt khác,
FPGA được hỗ trợ rất nhiều các thiết bị ngoại vi tạo điều kiện thuận lợi cho việc
phát triển hệ thống nhúng, phát triển các ứng dụng điều khiển trên FPGA kết nối
với các thiết bị ngoại vi.
Để có được bước đầu làm quen và nghiên cứu về công nghệ FPGA từ đó có
thể nghiên cứu sâu hơn về công nghệ nên Em đã chọn đề tài nghiên cứu: “ Triển
khai hệ thống nhúng trên nios và điều khiển thiết bị qua máy tính” làm đề tài
tốt nghiệp Đại học của mình.
11
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Trong quá trình thực hiện đề tài này, do còn hạn chế về kiến thức và thời
gian nên không tránh được những thiếu sót. Em kính mong quý thầy cô
thông cảm và bỏ qua đồng thời em cũng mong nhận được những góp ý và
chỉ bảo thêm của quý thầy cô.
Nghiên cứu và phát triển hệ thống nhúng trên FPGA của hãng Altera.
Viết chương trình điều khiển trên máy tính kết nối với FPGA điều khiển
thiết bị ngoại vi.
12
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Đưa ra được giải pháp và chức năng của sản phẩm, thiết kế mạch và lập
trình đạt được yêu cầu đặt ra của hệ thống điều khiển.
Sử dụng tốt công cụ lập trình NIOS tạo ứng dụng điều khiển thiết bị qua
máy tính.
Lắp đặt, chạy thử và hoàn thiện hệ thống.
Quyển báo cáo viết và trình bày theo đúng mẫu quy định.
13
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Chương này sẽ trình bày cơ sở lý thuyết của đề tài bao gồm tổng quan về
FPGA, giới thiệu phần mềm, công cụ sử dụng trong đề tài, các bước triển khai hệ
thống, truyền thông qua máy tính.
FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty Xilinx
vào năm 1984, kiến trúc mới của FPGA cho phép tích hợp số lượng tương đối lớn
các phần tử bán dẫn vào 1 vi mạch so với kiến trúc trước đó là CPLD. FPGA có khả
năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic, trong khi CPLD chỉ chứa từ
10.000 đến 100.000 cổng logic; con số này đối với PAL, PLA còn thấp hơn nữa chỉ
đạt vài nghìn đến 10.000.
CPLD được cấu trúc từ số lượng nhất định các khối SPLD( Simple
programmable devices, thuật ngữ chung chỉ PAL, PLA). SPLD thường là một mảng
logic AND/OR lập trình được có kích thước xác định và chứa một số lượng hạn chế
các phần tử nhớ đồng bộ( clocked register). Cấu trúc này hạn chế khả năng thực
14
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
hiện những hàm phức tạp và thông thường hiệu suất làm việc của vi mạch phụ
thuộc vào cấu trúc cụ thể của vi mạch hơn là vào yêu cầu bài toán.
Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, nhỏ hơn
nhiều nếu đem so sánh với một khối SPLD, ưu điểm này giúp FPGA có thể chứa
nhiều hơn các phần tử logic và phát huy tối đa khả năng lập trình của các phần tử
logic và hệ thống mạch kết nối, để đạt được mục đích này thì kiến trúc của FPGA
phức tạp hơn nhiều so với CPLD.
Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợp
nhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao,
hay các bộ nhân cộng( multiplication and accumulation, MAC), thuật ngữ tiếng
Anh là DSP slice dùng cho những ứng dụng xử lý tín hiệu số DSP.
Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hỗ
trợ tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ trong khi
vẫn đảm bảo hoạt động bình thường cho các bộ phận khác.
FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC,
nhưng nếu so sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kế
trên thư viện logic thì FPGA không đạt đựợc mức độ tối ưu như những loại này, và
hạn chế trong khả năng thực hiện những tác vụ đặc biệt phức tạp, tuy vậy FPGA ưu
việt hơn ở chỗ có thể tái cấu trúc lại khi đang sử dụng, công đoạn thiết kế đơn giản
do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng.
Còn nếu so sánh với các dạng vi mạch bán dẫn lập trình được dùng cấu trúc
mảng phần tử logic như PLA, PAL, CPLD thì FPGA ưu việt hơn các điểm: tác vụ
tái lập trình của FPGA thực hiện đơn giản hơn; khả năng lập trình linh động hơn; và
khác biệt quan trọng nhất là kiến trúc của FPGA cho phép nó có khả năng chứa khối
lượng lớn cổng logic( logic gate), so với các vi mạch bán dẫn lập trình được có
trước nó.
15
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng
không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC( ASIC prototyping), các hệ
thống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã
học, mô hình phần cứng máy tính, máy đánh cờ( Máy đánh cờ Hydra có 32 bộ vi xử
lý cộng thêm FPGA đã chiến thắng kiện tướng quốc tế Michael Adams trong năm
2005.
Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp
những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính, ngoài
ra nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối
lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực.
Cấu trúc tổng thể của một FPGA được minh họa ở hình sau:
16
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Phần tử chính của FPGA là các khối logic(logic block). Khối logic được cấu
thành từ LUT và một phần tử nhớ đồng bộ flip-flop.
LUT( Look up table) là khối logic có thể thực hiện bất kì hàm logic nào từ 4
đầu vào, kêt quả của hàm này tùy vào mục đích mà gửi ra ngoài khối logic trực tiếp
hay thông qua phần tử nhớ flip-flop.
Trong tài liệu hướng dẫn của các dòng FPGA của Xilinx còn sử dụng khái
niệm SLICE, 1 Slice tạo thành từ gồm 4 khối logic, số lượng các Slices thay đổi từ
vài nghìn đến vài chục nghìn tùy theo loại FPGA.
Nếu nhìn cấu trúc tổng thể của mảng LUT thì ngoài 4 đầu vào kể trên còn hỗ
trợ thêm 2 đầu vào bổ sung từ các khối logic phân bố trước và sau nó nâng tổng số
đầu vào của LUT lên 6 chân. Cấu trúc này là nhằm tăng tốc các bộ số học logic.
Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo hai
phương ngang và đứng, tùy theo từng loại FPGA mà các đường kết nối được chia
thành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có 3 loại kết nối: ngắn,
dài và rất dài. Các đường kết nối được nối với nhau thông qua các khối chuyển
17
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
mạch lập trình được( programmable switch), trong một khối chuyển mạch chứa một
số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức tạp khác
nhau.
Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích
hợp thêm khác nhau, ví dụ để thiết kế những ứng dụng SoC, trong dòng Virtex 4,5
của Xilinx có chứa nhân xử lý PowerPC, hay trong Atmel FPSLIC tích hợp nhân
AVR…, hay cho những ứng dụng xử lý tín hiệu số DSP trong FPGA được tích hợp
các DSP Slide là bộ nhân cộng tốc độ cao, thực hiện hàm A*B+C, ví dụ dòng
Virtex của Xilinx chứa từ vài chục đến hàng trăm DSP slices với A, B, C 18-bit.
Block RAM
Ngoài ra những FPGA của Xilinx còn có block RAM, có thể mường tượng
như là bộ nhớ nhỏ nằm trong FPGA. Những FPGA này tuy nhỏ( khoảng vài chục kí
lô bit cho đến vài triệu bit tùy theo loại FPGA) nhưng có thể dùng để tạo một bộ
nhớ nhỏ như ROM, FIFO.
DE2( Development and Education ) la một công cụ cho việc thiết kế nâng cao
các thiết bị đa phương tiện, lưu trữ và mạng.
DE2 sử dụng công nghệ state-of- the-art trong cả phần cứng và các công cụ
thiết kế nhờ máy tính giúp mở rộng phạm vi ứng dụng. DE2 có nhiều tính năng phù
hợp với cả việc sử dụng trong các phòng lab và các hệ thống số tinh vi. Altera cung
cấp các công cụ hỗ trợ phù hợp cho DE2, gồm có các hướng dẫn, các bài lab trên
DE2, và các bài minh họa…
18
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
19
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
USB Blaster dùng để lập trình hệ thống từ PC, hỗ trợ các chế độ JTAG cũng
như điều khiển trực tiếp khi sử dụng NIOS II
8 – Mbyte SDRAM
Chip giải mã âm thanh 24 bits với các jack cắm line-in, line-out và
microphone
40 chân mở rộng
LDC 2x16
20
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Quartus II là công cụ chính được sử dụng trong quá trinh thực hiện đề tài.
Được cung cấp và cập nhật thường xuyên bởi Altera. Đây là công cụ thiết kế tốt
nhất cho các dòng chip FPGA của Altera bao gồm cả Cyclon II 2C35 có trên DE2.
Là công cụ phân tích và tổng hợp thiết kế HDL, nó cho phép nhà phát triển
thực hiện thiết kế của họ, đồng thời cho phép phân tích thời gian, kiểm tra sơ đồ
RTL, mô phỏng hệ thống và cấu hình sản phẩm một cách phù hợp nhất.
21
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Design Entry – Mạch sau đã thiết kế sẽ được mô tả bởi các ngôn ngữ mô tả
phần cứng như VHDL hay Verilog, hoặc cũng có thể dùng sơ đồ
Schematic.
Synthesis – Công cụ tổ hợp sẽ tổ hợp mạch tạo ra một file netlist có chứa
các phần tử logic và các kết nối giữa chúng.
Function Simulation – Chức năng của mạch sau tổ hợp sẽ được kiểm định.
22
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Fitting – Công cụ máy tính sẽ đặt các phần tử logic được định nghĩa trong
file netlist xuống các phần tử logic trong con chip FPGA thực tế. Đồng thời
chọn ra các đường dây để kết nối chúng với nhau.
Timming Analysis – Phân tích trễ truyền dẫn trên các đường dây khác
nhau nhằm đưa ra các chỉ thị giúp cải thiện hiệu năng làm việc của mạch.
Timming Simulation – Kiểm tra đồng thời cả về mặt chức năng lẫn thời
gian của mạch.
Programming and Configuration – Thực hiện mạch trên con chip vật lý
bằng cách cấu hình các phần tử logic trên chip và thành lập các kết nối cần
thiết
23
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Điền đường dẫn lưu dự án, tên dự án và tên thực thể chính của dự án Next.
Hình 2-8: Đường dẫn, tên dự án, tên thực thể chính.
24
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
- Thêm file mới cho dự án: Điền tên file name Add.
- Thêm file đã có sẵn: Browse đường dẫn đến file đã tạo sẵn và Add.
- Nếu đã tạo xong dự án mà muốn thêm file thiết kế VHDL vào trong dự án:
Ở mục Project Navigator, chuyển sang tab file, click chuột phải vào file
Add/Remove File in Project Add.
Chọn dòng thiết bị sử dụng.
25
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Các công cụ thiết kế vi mạch khác sử dụng với phần mềm Quartus II để phát
triển dự án Next.
26
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Gán chân:
- Nhấp chọn Assignments > Assignment Editor. Nhấp đôi vào <<new>>.
Nhấp chọn tín hiệu từ danh sách trải xuống làm chân được gán. Tiếp đến
27
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
nhấp đôi vào hộp bên phải hộp dành cho tín hiệu cần gán( cột Location).
Chọn chân PIN_XYZ từ danh mục hoặc có thể gõ trực tiếp vào hộp
Location.
- Tương tự như trên, thực hiện gán chân cho các đầu vào khác
- Sau khi hoàn thành việc gán chân, nhấp chọn File > Save. Đóng cửa sổ
Assignment Editor, nhấp chọn Yes và biên dịch lại mạch.
Chú ý : Nên chọn tên các tín hiệu trùng với trong bảng
DE1_pin_assigment.csv thì khi gán chân ta chỉ cần vào assigment > import
assigment,trong đường dẫn ta trỏ đến file DE1_pin_assigment.csv rồi ấn OK và làm
theo bước 3 là xong.Không mất thời gian gán chân bằng tay.
Biên dịch
- Khi đã viết code xong cho một chương trình nào đó bạn cần biên dịch để
tạo ra những file dùng để nạp lên KIT DE2
- Bước 1: Nhấp chọn mục Processing > Start Complication. Biên dịch thành
công( hay không thành công) sẽ được thông báo trên hộp thoại bung ra sau
khi quá trình biên dịch kết thúc. Xác nhận bằng cách nhấp nút OK.
28
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
- Bước 2: Khi biên dịch hoàn thành, một báo cáo biên dịch được đưa ra. Cửa
sổ này cũng có thể mở ra bất kỳ lúc nào bằng cách nhấp chọn Processing >
Complication Report. Trong báo cáo này bao gồm một số danh mục ở bên
trái cửa sổ, nhấp vào các danh mục này để thấy thông tin chi tiết của danh
mục này hiện lên ở bên phải cửa sổ.
- Bước 3: Sửa các lỗi: Chọn mục Analysis & Synthesis > Messages để hiển
thị thông báo lỗi. Nhấp đôi vào thông báo lỗi đầu tiên, dòng lệnh lỗi sẽ
được đánh dấu trên trình soạn thảo văn bản, sửa lại cho đúng rồi biên dịch
lại dự án.
Nạp xuống KIT
- Gạt chuyển mạch RUN/PROG sang vị trí RUN. Nhấp chọn Tools >
Programmer để có cửa sổ như trong hình. Đánh dấu vào tùy chọn
Program/Configue để cho phép nạp tệp cấu hình xxxxxx.sof.
29
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Port I/O
Các component
Ta mở tool SoPC builder( Qsys) trong phần mềm QUATUS II
Sau đó đặt tên hệ thống, chọn ngôn ngữ mô tả phần cứng là Verilog hay
VHDL, nhấn OK.
Hình 2-18: Chọn hệ thống SoPC dựa trên ngôn ngữ Verilog hoặc VHDL
31
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Đối với kiểu NIOS đơn giản ta tiếp tục next đến phần chọn thành phần JTAG.
Trong bài này ta sử dụng phiên bản NIOS II/e nên chỉ cho phép chọn JTAG level 1.
Rồi nhấn next để hoàn thành khai báo
32
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
33
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Sau bước này ta có hệ thống đơn giản có thể hoạt động được như hình sau
Hình 2-24: Tạo thêm I/O cần thiết cho hệ thống NIOS II
35
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
36
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Tạo dự án
Đầu tiên chọn SOPC Information File name chính là hệ thống SOPC mà
chúng ta đã tạo ra bằng tool SoPC trên Quartus II. Browse vào hệ thống SOPC đã
tạo ra.
Khi chọn xong SOPC thì CPU name sẽ hiện lên tên CPU mà chúng ta đặt ở
phần xây dựng hệ thống. Và sau đó là đặt Project name rồi Finish. Kết thúc quá
trình tạo dự án.
37
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
38
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Ngày nay các thiết bị đo lường, điều khiển ... đều phải giao tiếp với máy tính
để quan sát thông số và chế độ hoạt động của thiết bị như thế nào? Chuẩn giao tiếp
được coi là đơn giản và dễ dùng đó là RS232. Hầu như các thiết bị đều được giao
tiếp với máy tính thông qua chuẩn này.
Vấn đề giao tiếp giữa PC và vi điều khiển rất quan trọng trong các ứng dụng
điều khiển, đo lường... Ghép nối qua cổng nối tiếp RS232 là một trong những kỹ
thuật được sử dụng rộng rãi để ghép nối các thiết bị ngoại vi với máy tính.Nó là một
chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều nhất là 2 thiết
bị , chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu là 12.5 đến 25.4m, tốc
độ 20kbit/s đôi khi là tốc độ 115kbit/s với một số thiết bị đặc biệt. Ý nghĩa của
chuẩn truyền thông nối tiếp nghĩa là trong một thời điểm chỉ có một bit được gửi đi
dọc theo đường truyền.
Có hai phiên bản RS232 được lưu hành trong thời gian tương đối dài là
RS232B và RS232C. Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được dùng
còn RS232C hiện vẫn được dùng và tồn tại thường được gọi là tên ngẵn gọn là
chuẩn RS232
Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được gọi
là cổng Com. Chúng được dùng ghép nối cho chuột, modem, thiết bị đo
lường...Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào đời máy và
main của máy tính. Việc thiết kế giao tiếp với cổng RS232 cũng tương đối dễ dàng,
đặc biệt khi chọn chế độ hoạt động là không đồng bộ và tốc độ truyền dữ liệu thấp.
39
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Trong chuẩn RS232 có mức giới hạn trên và dưới( logic 0 và 1) là +-12V.
Hiện nay đang được cố định trở kháng tải trong phạm vi từ 3000 ôm - 7000 ôm.
Mức logic 1 có điện áp nằm trong khoảng -3V đến -12V, mức logic 0 từ +-3V
đến 12V.
Tốc độ truyền nhận dữ liệu cực đại là 100kbps( ngày nay có thể lớn hơn) Các
lối vào phải có điện dung nhỏ hơn 2500pF.
Trở kháng tải phải lớn hơn 3000 ôm nhưng phải nhỏ hơn 7000 ôm.
Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng nối
tiếp RS232 không vượt qua 15m nếu chúng ta không sử model.
Các giá trị tốc độ truyền dữ liệu chuẩn : 50, 75, 110, 750, 300, 600, 1200,
2400, 4800, 9600, 19200, 28800, 38400....56600, 115200 bps.
RS 232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng tín
hiệu điện áp chênh lệch giữa một dây dẫn và đất. Do đó ngay từ đầu tiên ra đời nó
đã mang vẻ lỗi thời của chuẩn TTL, nó vấn sử dụng các mức điện áp tương thích
TTL để mô tả các mức logic 0 và 1. Ngoài mức điện áp tiêu chuẩn cũng cố định các
giá trị trở kháng tải được đấu vào bus của bộ phận và các trở kháng ra của bộ phát.
Mức điện áp của tiêu chuẩn RS232C( chuẩn thường dùng bây giờ) được mô tả
như sau:
Các mức điện áp trong phạm vi từ -3V đến 3V là trạng thái chuyển tuyến.
Chính vì từ - 3V tới 3V là phạm vi không được định nghĩa, trong trường hợp thay
đổi giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua
quãng quá độ trong một thơì gian ngắn hợp lý. Điều này dẫn đến việc phải hạn chế
về điện dung của các thiết bị tham gia và của cả đường truyền. Tốc độ truyền dẫn
40
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
tối đa phụ thuộc vào chiều dài của dây dẫn. Đa số các hệ thống hiện nay chỉ hỗ trợ
với tốc độ 19,2 kBd .
Cổng Rs232.
41
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
- Chân 8 : Clear To Send( CTS) : Xóa để gửi ,bô nhận đặt đường này lên
mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín
hiệu
- Chân 9 : Ring Indicate( RI) : Báo chuông cho biết là bộ nhận đang nhận tín
hiệu rung chuông
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ. Do
vậy nên tại một thời điểm chỉ có một bit được truyền( 1 kí tự). Bộ truyền gửi một bit
bắt đầu( bit start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi đến trong lần
truyền bit tiếp the . Bit này luôn bắt đầu bằng mức 0.. Tiếp theo đó là các bit dữ
liệu( bits data) được gửi dưới dạng mã ASCII( có thể là 5,6,7 hay 8 bit dữ liệu) Sau
đó là một Parity bit( Kiểm tra bit chẵn, lẻ hay không) và cuối cùng là bit dừng - bit
stop có thể là 1, 1,5 hay 2 bit dừng.
Tốc độ Baud
Đây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng cho
quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ liệu hay
còn gọi là tốc độ bit. Tốc độ bit được định nghĩa là số bit truyền được trong thời
gian 1 giây hay số bit truyền được trong thời gian 1 giây. Tốc độ bit này phải được
thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau( Tốc độ giữa vi điều
khiển và máy tính phải chung nhau 1 tốc độ truyền bit)
Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud. Tốc
độ Baud liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả
bit được truyền còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì
một phần tử báo hiệu sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là
phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400,
4800, 9600, 19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường dùng
tốc độ là 19200
42
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử dụng chuẩn là thời gian
chuyển mức logic không vượt quá 4% thời gian truyền 1 bit. Do vậy, nếu tốc độ bit
càng cao thì thời gian truyền 1 bit càng nhỏ thì thời gian chuyển mức logic càng
phải nhỏ. Điều này làm giới hạn tốc Baud và khoảng cách truyền.
Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra lỗi
khi truyền dữ liệu là bổ xung thêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi
trong quá trình truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra
chẵn lẻ.
Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để cho thấy số lượng
các bit "1" được gửi trong một khung truyền là chẵn hay lẻ.
Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9... Nếu
như một bit chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường hợp không
mắc lỗi vì thế không phát hiện ra lỗi. Do đó trong kỹ thuật mã hóa lỗi này không
được sử dụng trong trường hợp có khả năng một vài bit bị mắc lỗi.
Avalon bus là một kiến trúc bus giản đơn, được thiết kế để kết nối các vi xử lý
nhúng và các thiết bị ngoại vi trong một hệ-thống-trên-chip-khả-trình( SOPC).
Avalon bus là một giao tiếp mà đặc tả các kết nối cổng giữa các thiết bị master và
slave, đồng thời đặc tả thời gian liên lạc giữa các thiết bị.
Mục đích thiết kế chính của Avalon bus là:Đơn giản: cung cấp một giao thức
dễ hiểu, dễ sử dụng. Tối ưu hóa việc sử dụng tài nguyên cho các bus logic: bảo toàn
các yếu tố logic( loigic element) bên trong thiết bị logic khả trình( PLD).
Đồng bộ hóa các quá trình hoạt động: vừa tích hợp tốt với các logic của người
dùng cùng tồn tại trên một PLD, lại vừa tránh được các vấn đề phân tích thời gian
phức tạp.
43
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Avalon bus hỗ trợ bus đa chủ. Các kiến trúc đa chủ này tạo ra một sự linh hoạt
rất lớn trong việc xây dựng các hệ thống SOPC, và tạo điều kiện cho các thiết bị
ngoại vi có băng thông rộng. Ví dụ: một thiết bị ngoại vi chủ có thể thực hiện một
quá trình truyền truy-xuất-bộ-nhớ-trực-tiếp( DMA) để truyền dữ liệu từ thiết bị
ngoại vi vào bộ nhớ mà không cần một vi xử lý trong đường truyền dữ liệu.
Các master và slave giao tiếp với nhau dựa trên một kĩ thuật gọi là thỏa hiệp ở
phía slave( slave-side arbitration). Kĩ thuật này xác định master nào được nắm
quyền giao tiếp với slave trong trường hợp nhiều master cùng truy cập đến một
slave.
Chi tiết về sự thỏa hiệp này được gói gọn bên trong Avalon bus. Do đó, các
giao tiếp master và slave rất chắc, bất chấp số lượng các master và slave có trên bus.
Mỗi bus master sẽ giao tiếp với Avalon bus như thể nó là master duy nhất trên
đường Avalon bus.
Các master có thể thực hiện quá trình truyền bất kì lúc nào, miễn là chúng
không truy cập cùng một slave trong cùng một chu kì bus.
Avalon bus được thiết kế để thích nghi với môi trường SOPC, do đó nó là một
kiến trúc bus tích hợp( on-chip) rất năng động, bao gồm các tài nguyên logic và
truyền bên trong một thiết bị logic khả trình. Một vài nét chính của kiến trúc Avalon
là:
Giao tiếp với các thiết bị ngoại vi đồng bộ với xung clock Avalon. Do đó, sự
sắp xếp các tín hiệu báo và tín hiệu bắt tay không đồng bộ và phức tạp là điều
không cần thiết. Hoạt động của Avalon bus( và cũng là của toàn hệ thống) có thể
được phân tích bằng các kĩ thuật phân tích chuẩn và đồng bộ thời gian.
Tất cả các tín hiệu đều hoạt động ở LOW hoặc HIGH, điều này cho phép sự
xoay vòng của hệ thống. Các bộ đa hợp bên trong Avalon bus xác định tín hiệu nào
điều khiển thiết bị ngoại vi nào. Các thiết bị ngoại vi sẽ không cần phải có ngõ ra 3-
trạng-thái ngay cả khi thiết bị không được chọn hoạt động.
44
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Các tín hiệu địa chỉ, dữ liệu và điều khiển sử dụng các cổng riêng biệt, điều
này làm đơn giản hóa thiết kế của các thiết bị ngoại vi. Một thiết bị ngoại vi không
cần thiết phải giải mã các chu kì bus dữ liệu và địa chỉ, và cũng không cần phải tắt
các ngõ ra khi nó không được chọn hoạt động.
Không gian địa chỉ lên tới 4Gbyte: các thiết bị ngoại vi và bộ nhớ có thể được
gắn bất kì nơi nào trong không gian địa chỉ 32-bit.
Tích hợp bộ giải mã địa chỉ: Avalon bus sẽ tự động tạo các tín hiệu Chip
Select cho tất cả các thiết bị ngoại vi, rất thuận tiện trong việc thiết kế các thiết bị
ngoại vi để giao tiếp với Avalon.
Avalon bus cũng bao gồm một số các đặc điểm và quy ước để hỗ trợ việc tạo
tự động các hệ thống, bus, và thiết bị bằng phần mềm SOPC Builder.
Avalon bus module là xương sống của một module hệ thống. Đó là con đường
chính để giao tiếp giữa các component trong một thiết kế SOPC. Avalon bus
module là một tập hợp các tín hiệu điều khiển, dữ liệu, địa chỉ và các logic thỏa hiệp
mà kết nối các thành phần tạo nên hệ thống. Avalon bus module thực hiện một kiến
trúc bus có thể cấu hình được, có nghĩa là có thể thay đổi để phù hợp với nhu cầu
kết nối các thiết bị ngoại vi của người thiết kế.
Avalon bus module được tạo một cách tự động bởi SOPC Builder, vì thế
người thiết kế hệ thống có thể tiết kiệm thời gian trong việc nối các thiết bị với
nhau. Sơ đồ khối của một Avalon bus module điển hình được trình bày trong hình.
Avalon bus module sẽ cung cấp các hỗ trợ sau cho những thiết bị ngoại vi kết
nối tới đường bus này:
Đa hợp đường dữ liệu: Các bộ đa hợp bên trong module Avalon bus sẽ truyền
dữ liệu từ thiết bị slave được chọn đến thiết bị master thích hợp.
Giải mã địa chỉ: bộ giải mã địa chỉ của module này sẽ tạo ra các tín hiệu chip
select cho mỗi thiết bị ngoại vi, như vậy các thiết bị ngoại vi không cần giải mã
45
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
đường địa chỉ để tạo ra tín hiệu chip select đơn giản hóa các thiết kế của thiết bị
ngoại vi.
Tạo trạng thái chờ: bộ tạo trạng thái chờ sẽ mở rộng thêm các quá trình
truyền bằng một hay nhiều chu kì bus, điều này cần thiết cho một số thiết bị hoặc
quá trình đòi hỏi sự đồng bộ đặc biệt. Trạng thái này có thể được tạo ra để dừng một
thiết bị master trong hợp thiết bị slave không thể đáp ứng trong một chu kì bus.
Phân công ưu tiên ngắt: khi một hay nhiều thiết bị slave tạo ra các tín hiệu
ngắt, Avalon bus module sẽ chuyển các ngắt( theo thứ tự ưu tiên) đến cá thiết bị
master kèm theo số yêu cầu ngắt( IRQ number) thích hợp.
Khả năng trì hoãn các dữ liệu: các logic cần để thực hiện việc truyền với độ
trễ mong muốn giữa các cặp master-slave đã được tích hợp sẵn trong Avalon bus
module.
Một thiết bị ngoại vi Avalon là một thiết bị logic, hoặc được tích hợp sẵn hoặc
nằm rời bên ngoài, thực hiện một số chức năng ở mức hệ thống và giao tiếp với các
46
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
thành phần khác trong hệ thống thông qua Avalon bus. Các thiết bị này có thể được
thêm vào hoặc lấy ra khỏi hệ thống vào thời điểm thiết kế để phù hợp với yêu cầu
của hệ thống.
Thiết bị ngoại vi Avalon có thể là các bộ nhớ, vi xử lý, hay các thành phần
thiết bị ngoại vi truyền thống như UART, PIO, bộ định thời…. Bất kì logic người
dùng nào cũng có thể là một thiết bị ngoại vi, chỉ cần cung cấp giao tiếp địa chỉ, dữ
liệu và điều khiển cho Avalon bus. Một thiết bị ngoại vi sẽ kết nối với các cổng
riêng biệt trên Avalon bus module.
Chức năng của các thiết bị ngoại vi Avalon được phân loại thành master hoặc
slave. Một thiết bị ngoại vi chủ( master) là một thiết bị mà có thể khởi tạo quá trình
truyền dữ liệu trên Avalon bus. Nó cần ít nhất một cổng master nối với Avalon bus,
và có thể có các cổng slave để nhận dữ liệu từ các thiết bị chủ khác. Một thiết bị
slave là một thiết bị chỉ chấp nhận việc truyền dữ liệu từ Avalon bus và không thể
khời tạo quá trình truyền. Một số thiết bị slave điển hình như bộ nhớ hay cổng nối
tiếp sẽ có duy nhất một cổng slave nối với Avalon bus.
Master Port: Một cổng chủ là tập hợp các cổng trên một thiết bị chủ mà các
cổng này được sử dụng để khởi tạo các quá trình truyền trên Avalon bus. Cổng chủ
nối trực tiếp tới Avalon bus module. Trên thực tế, một thiết bị ngoại vi thường có
một hoặc nhiều cổng chủ, cũng như cồng slave. Sự phụ thuộc lẫn nhau giữa các
cổng này tùy vào thiết kế của thiết bị.
Cổng slave: Một cổng slave là một nhóm các cổng trên một thiết bị ngoại vi
mà chấp nhận việc truyền dữ liệu qua Avalon bus từ một cổng chủ.
Cặp chủ-tớ( master-slave pair): Một cặp chủ-tớ là sự kết hợp giữa một cổng
slave và một cổng master thông qua Avalon bus module. Về mặt cấu trúc, những
cổng master và slave này kết nồi đến cổng tương ứng trên Avalon bus module và
phải được chỉ rõ khi thiết kế trong SOPC Builder.
47
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Chương này sẽ trình bày nội dung thực hiện công việc của đề tài bao gồm sơ
đồ hệ thống tổng quát, chi tiết thiết kế, lưu đồ thuật toán, sơ đồ nguyên lý và hình
ảnh module thực tế.
Computer: Dùng để nạp chương trình xuống KIT và truyền nhận dữ liệu để
điều khiển.
NIOS II Processor: Khu xử lý trung tâm đóng vai trò truyền nhận và xử lý dữ
liệu.
Rs232: Kết nối điều khiển từ máy tính xuống KIT thông qua cáp nối Rs232.
Avalon Bus: Giao tiếp giữa các Component trong một hệ thống SoPC.
49
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Với yêu cầu của đề tài, tính năng của hệ thống còn cơ bản, không cần nhiều
chức năng nên chọn lõi NIOS II phiên bản NIOS II/e như hình bên dưới.
Với phiên bản NIOS II/e này chúng ta có 1 bộ vi xử lý 32 bit. Với Jtag debug
Module là Level 1. Gồm các thành phần tín hiệu cơ bản sau:
50
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Stop bits: 1
Synchronizer stage: 2
Baud rate: 57600 bps
Tạo ra bộ nhớ Ram on Chip với tổng dung lượng là 40960 bytes.
3.2.5. EFAN
52
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
PIO Efan với 3 tín hiệu chính là 3 tín hiệu điều khiển Quạt, tương ứng với số 1,
số 2, số 3 của Quạt.
3.2.6. LCD
Khối LCD là khối điều khiển LCD gồm những thành phần sau:
inout wire [7:0] lcd_data, // lcd.data
output wire lcd_E, // .E
output wire lcd_RS, // .RS
output wire lcd_RW, // .RW
Lcd_data – pio_3: Gồm 8 tín hiệu.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ
sử dụng 8 đường bus này :
Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là
DB7
53
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Chân chọn chế độ đọc/ghi( Read/Write). Nối chân R/W với logic “0” để LCD
hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc.
54
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Nối chân RS với logic “0”( GND) hoặc logic “1”( VCC) để chọn thanh ghi.
Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD( ở chế
độ“ghi”- write) hoặc nối với bộ đếm địa chỉ của LCD( ở chế độ “đọc” - read)
Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận
khi có 1 xung cho phép của chân E.
Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào( chấp nhận) thanh
ghi bên trong nó khi phát hiện một xung( high-to-low transition) của tín
hiệu chân E.
Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh
lên( lowto-high transition) ở chân E và được LCD giữ ở bus đến khi nào
chân E xuống mức thấp.
55
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Led control gồm 8 tín hiệu điều khiển tương ứng với 8 led green được tích hợp
trên KIT Altera DE2.
wire [7:0]led_green;
Bóng đèn ngoại vi được điều khiển nhờ vào tín hiệu của led green, từ đó, led
green trên KIT sáng thì bóng đèn ngoại vi cũng sáng.
output wire lamp,
assign lamp = ~led_green_export[0];
3.2.8. Avalon Bus
Trong suốt quá trình này chân read_n và chipselect phải được kích hoạt. Một
đơn vị dữ liệu sẽ được chuyển từ cổng slave đến Avalon bus module với kích thước
bằng với độ rộng tối đa của cồng slave. Như vậy, trong module giao tiếp ta phải có
lệnh để khi Avalon bus thiết lập một quá trình đọc từ cổng slave, thiết kế của ta phải
đáp ứng lại chính xác dữ liệu muốn truyền lên. Có thể thực hiện việc này bằng các
lệnh sau:
end
Hình sau mô tả các chân kết nối cần thiết giữa cổng slave từ component mà ta
thiết kế với Avalon bus module.
Hình 3-12: Giao tiếp giữa cổng Slave và Avalon Bus Module trong quá
trình đọc từ Slave
Quá trình truyền này cụ thể gồm các giai đoạn: module Avalon bus nhận địa
chỉ và tín hiệu read_n, giải mã địa chỉ và tạo ra tín hiệu chipselect, dữ liệu được
cổng slave truyền lên. Hình sau mô tả chi tiết về thời gian trong quá trình đọc từ
cổng slave.
Hình 3-13: Thời gian trong quá trình đọc dữ liệu từ cổng slave
57
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Quá trình mô tả trên chỉ là quá trình đọc cơ bản từ các cổng slave. Ngoài ra, ta
có thể đọc từ cổng slave với nhiều cách( phụ thuộc vào thiết kế) như: đọc có trạng
thái chờ, đọc có thời gian cài đặt…
Trong quá trình này, tín hiệu write_n và chipselect sẽ được kích hoạt. Dữ liệu
sẽ được truyền từ Avalon bus module ra cổng slave. Trong trường hợp cổng này
chưa đáp ứng được, thì quá trình truyền phải có trạng thái chờ. Ta có thể đơn giản
hoá thực thi này bằng các dòng lệnh sau trong module thiết kế:
end
Và sau khi module không đáp ứng kịp với tốc độ truyền dữ liệu từ Avalon
bus module ta có thể bật tín hiệu waitrequest lên. Sơ đồ khối các tín hiệu giao tiếp
trong quá trình ghi và thời gian của quá trình này được trình bày trong hình sau.
Hình 3-14: Các tín hiệu giao tiếp và thời gian trong khi ghi dữ liệu ra cổng
slave
58
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Sử dụng phần mềm Visual Studio 2010 thiết kế giao diện trên máy tính bằng
Windows Form Application của C#. Chương trình này được dùng khá phổ biến, phù
hợp để thiết kế giao tiếp bởi giao diện thân thiện với người dùng.
Hệ thống được kết nối với máy tính thông qua đường Rs232( sử dụng mạch
chuyển USB sang Rs232) với tốc độ Baud là 57600.
Trên máy tính, có giao diện điều khiển được viết bằng C#, CPU Nios II sẽ
nhận lệnh từ máy tính để điều khiển đèn, quạt và hiển thị thông báo trên LCD của
kit.
Giao diện điều khiển cơ bản gồm các đối tượng chính:
3 button tương ứng với 3 chế độ của quạt và 1 button dùng để tắt quạt.
2 picturebox giúp hiển thị một cách trực quan các trạng thái.
1 SerialPort Com
1 ImageList
3 groupBox
59
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
60
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Màu xanh hiển thị trên button cho thấy mạch đang hoạt động ở chức năng đó.
Ví dụ hình 3.16 là hệ thống đang ngắt kết nối, đèn tắt, quạt tắt.
61
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Chương trình của Nios II sẽ được nạp lên SRAM ON CHIP. Quá trình hoạt
động sẽ được điều khiển từ trên máy tính bằng cách sử dụng giao diện, lệnh này sẽ
được truyền đến KIT thông qua đường UART( Rs232 Serial Port)
Cụ thể khi button Số 1( btnSo1) được nhấn, máy tính sẽ gửi xuống một kí tự
“1”(FAN1)
Tương tự khi button Số 2( btnSo2) được nhấn, máy tính sẽ gửi xuống một kí
tự “2”(FAN2).
Khi button Số 3( btnSo3) được nhấn, máy tính sẽ gửi xuống một kí tự
“3”(FAN3)
Khi button Tắt quạt( btnTatQ) được nhấn, máy tính sẽ gửi xuống một kí tự
“0”(FAN_OFF).
Button Bật đèn( btnBatD) được nhấn, máy tính sẽ gửi xuống một kí tự
“4”(LAMP_ON).
Button Tắt đèn( btnTatD) được nhấn, máy tính sẽ gửi xuống một kí tự
“5”(LAMP_OFF)
3.4.2. Quá trình nhận
62
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Nếu nhận được kí tự ‘1’, efan_on(LEVEL1), LEVEL1 = 0x3, kênh EN1 đóng,
EN2,3 mở và quạt chạy số 1.
63
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Nếu nhận được kí tự ‘2’, efan_on(LEVEL2), LEVEL2 = 0x5, kênh EN2 đóng,
kênh EN1,3 mở và quạt chạy số 2.
Nếu nhận được kí tự ‘3’, efan_on(LEVEL3), LEVEL3 = 0x6, kênh EN3 đóng,
EN1,2 mở và quạt chạy số 3.
Đề tài sử dụng phương pháp điều khiển Relay 4 kênh để điều khiển các thiết bị
ngoại vi. Trong đó 1 kênh để điều khiển bật tắt bóng đèn và ba kênh còn lại điều
khiển 3 mức chạy của quạt là số 1, số 2 và số 3.
Kết nối Relay với KIT thông qua chân mở rộng của KIT DE2.
64
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Bảng 3-1: Chân kết nối tín hiệu điều khiển GPIO1
KIT Altera DE2 sử dụng mạch chuẩn giao tiếp Rs232 dùng IC Max232.
Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi.
Max232 là IC của hãng Maxim. Đây là IC chay ổn định và được sử dụng phổ biến
trong các mạch giao tiếp chuẩn RS232. Dòng tín hiệu được thiết kế cho chuẩn
RS232 . Mỗi đầu truyền ra và cổng nhận tín hiệu đều được bảo vệ chống lại sự
phóng tĩnh điện( hình như là 15KV). Ngoài ra Max232 còn được thiết kế với nguồn
+5V cung cấp nguồn công suất nhỏ.
65
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
66
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Module Relay sử dụng 6 đầu vào là Vcc, GND để nuôi nguồn, 4 đầu vào ENB
để điều khiển Module. PC 817 đóng vai trò dung để cách lý giữa hai khối điện áp
chênh lệch. Relay đóng vai trò là một kho đóng mở, dùng để đóng cắt những nguồn
điện áp lớp( 12V-220V/10A).
67
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Trong đó Vcc và GND được nối với 2 chân mở rộng Vcc, GND của KIT DE2.
4 đầu vào EN1,2,3,4 chính là 4 tín hiều điều khiển ngoại vi: 3 tín hiệu điều
khiển 3 số của quạt và 1 tín hiệu điều khiển đèn.
68
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
69
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Chương này sẽ trình bày kết quả đạt được của đề tài, hạn chế và hướng phát
triển của đề tài trong thời gian tới.
Sau thời gian nghiên cứu và thực hiện kể từ khi nhận đề tài, bằng sự nỗ lực
của bản thân, bên cạnh đó nhờ sự hướng dẫn nhiệt tình, tận tâm của thầy Lê Trung
Hiếu do đó đề tài này đã được hoàn thành đúng thời hạn và đạt được yêu cầu đặt ra
là thiết kế hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính. Trong quá
trình thực hiện nhóm đã thu được những kết quả sau:
Giới thiệu về FPGA, ứng dụng trong rất nhiều các lĩnh vực công nghệ, sản
xuất, quân sự, các thiết bị điều khiển thông minh và trong nhiều ngành công
nghiệp khác…
Nẵm được tổng quan, cấu trúc của FPGA và quy trình thiết kế FPGA.
Thiết kế được hệ thống nhúng trên NIOS bằng cách xây dựng phần cứng
cũng như phần mềm, cá chế độ gửi và nhận tín hiệu. Điều khiển hoạt động
của hệ thống sao cho tối ưu và ổn định, an toàn. Hệ thống được xây dựng
hoàn chỉnh tử những khối nhỏ. Giao tiếp được giữa máy tính và thiết bị điều
khiển, xây dựng giao diện điều khiển thành công trên Visual Studio.
Quá trình chạy thử nghiệm cho thấy tính ổn đinh, phần mềm được xây dựng
đơn giản, dễ sử dụng và đem lại hiệu quả hoạt động cao.
Để thực hiện được đề tài này Em đã thực hiện tìm hiểu, nghiên cứu các vấn
đề có liên quan đến đề tài như: Cách thiết kế phần cứng và phần mềm cho
KIT thông qua Quartus II và tool SoPC( Qsys) trên Quartus II, phần mềm lập
trình nhúng NIOS, giao tiếp giữa máy tính và KIT DE2 thông qua UART-
JTAG và RS232. Xây dựng hệ thống với ngoại vi có sẵn trên KIT(LCD
Display, LED) và ngoại vi mở rộng( GIPO). Ngôn ngữ lập trình Verilog, C.
70
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
Hệ thống nhúng trên NIOS điều khiển thiết bị ngoại vi là một ứng dụng nhúng
cơ bản trên KIT Altera DE2, nên sản phẩm chỉ mang tính DEMO chưa có tính
thương mại, chưa có tính công nghệ cao. Các ứng dụng điều khiển còn đơn giản,
chưa ứng dụng nhiều module tự động hóa.
Trong thời gian nghiên cứu và thực hiện đề tài, tác giả đã vạch ra được hướng
phát triển tiếp theo của đề tài như sau:
Xây dựng thêm các Control làm phong phú trên việc tùy biến giao
diện điều khiển.
Bổ sung các Module tự động hóa mang tính công nghệ cao, có thể
ứng dụng trong việc sản xuất để có thể ứng dụng trong thương mại.
Nghiên cứu và triển khai sử dụng các ngoại vi khác trên Kit làm
phong phú thêm chức năng, công nghệ sử dụng cao hơn cho đề tài.
71
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
[1] TS Vũ Đức Lung, Giáo trình ngôn ngữ mô tả phần cứng Verilog, Đại học
bách khoa thành phố Hồ Chí Minh, 2012.
[3] Dr. Pong P. Chu, Embedded SoPC Design with Nios II Processor and
Verilog Examples, 2012.
[4] Nguyễn Thế Hoàng, Thí nghiệm thiết kế FPGA, Khoa Công Nghệ Điện Tử,
ĐH Công Nghiệp TP HCM.
72
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
PHỤ LỤC
1. Mã Verilog mô tả hệ thống.
module de2_top(
wire lcd_E,
wire lcd_RW,
73
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
);
wire [7:0]led_green;
reg [31:0]counter=0;
74
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
phase_zero_L1<= phase_zero;
phase_zero_L2<= phase_zero_L1;
phase_zero_L3<= phase_zero_L2;
end
end
else
end
if(reset_n)
end
75
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
soc_qsys U(
.reset_reset_n(reset_n), // reset.reset_n
.clk_clk(clk), // clk.clk
.led_red_export(), // led_red.export
.dir_export(), // dir.export.
/*
.sram_DQ(sram_DQ), // sram.DQ
.sram_ADDR(sram_ADDR), // .ADDR
.sram_LB_N(sram_LB_N), // .LB_N
.sram_UB_N(sram_UB_N), // .UB_N
.sram_CE_N(sram_CE_N), // .CE_N
.sram_OE_N(sram_OE_N), // .OE_N
.sram_WE_N(sram_WE_N), // .WE_N
*/
.phase_export(phase_export),
.efan_export(efan_export_sign),
.uart_0_rxd(uart_0_rxd),
.uart_0_txd(uart_0_txd),
.lcd_data_export(lcd_data), // lcd.data
.lcd_e_export(lcd_E), // .E
.lcd_rs_export(lcd_RS), // .RS
.lcd_rw_export(lcd_RW), // .RW
76
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
.pwm_export(pwm_export), // pwm.export
.led_green_export(led_green) // led_green.export
);
endmodule
#ifndef _LCD_H_
#define _LCD_H_
#define row1 1
#define row2 2
#define col1 0
#define col2 1
#define col3 2
#define col4 3
#define col5 4
#define col6 5
#define col7 6
#define col8 7
#define col9 8
#define col10 9
#define col11 10
#define col12 11
#define col13 12
77
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
#define col14 13
#define col15 14
#define col16 15
#define RW PIO_4_BASE
#define RS PIO_5_BASE
#define E PIO_6_BASE
//unsigned int8 lcd_display_page( unsigned int8 *str, unsigned int16 len, INT8
cursor );
#endif
#include "lcd.h"
#include <string.h>
#include <unistd.h>
#include <io.h>
#include "system.h"
unsigned int8 i;
output_low(E); // E = 0 : disable
output_low(RW); // RW = 0 : write
LCD_nibble(0x38);
delay_ms( 10 );
LCD_nibble(0x308);
delay_ms( 1 );
LCD_nibble(0x38);
delay_ms( 1 );
LCD_nibble(0x0C);
delay_ms( 10 );
LCD_nibble(0x1);
delay_ms( 10 );
LCD_nibble(0x06);
delay_ms( 10 );
//LCD_nibble(0x0);
delay_ms( 10 );
switch( row )
case row1:
80
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
lcd_puts( buff );
break;
case row2:
lcd_puts( buff );
break;
default:
LCD_write( 0, 0x01 );
break;
output_b( n );
//delay_ms( 1 );
output_high( E );
81
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
usleep( 1 );
output_low( E );
delay_ms( 1 );
//set_tris_b(0x00);
//set_tris_a(0x20);
delay_ms( 1 );
usleep(100);
else output_low( RS );
output_low(E);
LCD_nibble(n);
output_low( RS );
output_low(E);
if( row == 1 )
address = 0x80;
else
82
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
address = 0xC0;
address += col;
LCD_write( 0, address );
switch( c )
delay_ms( 2 );
break;
while( *string )
lcd_putc( *string );
string++;
}
83
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
while( *string )
col = col1;
else break;
lcd_putc( *string );
string++;
col++;
len++;
84
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
unsigned int8 i = 2;
strcpy( buff, " ALTERA DE2 KIT \nNice To See You " );
while( i > 0 )
lcd_puts( buff );
// while( 1);
delay_ms( 1000 );
lcd_clear( 0 );
delay_ms( 300 );
i--;
lcd_puts( buff );
delay_ms( 100 );
#include "sys/alt_stdio.h"
#include "system.h"
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
85
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
#include <string.h>
#include <io.h>
#include "lcd.h"
int main()
char i =0;
set_duty(_DUTY);
86
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
set_cycle(_CYCLE);
pwm_on();
set_dir(0);
//printf("PWM_0_BASE: %d\n\r",IORD(PWM_0_BASE,0));
//printf("PWM_0_BASE: %d\n\r",IORD(PWM_0_BASE,1));
//printf("PWM_0_BASE: %x\n\r",IORD(PWM_0_BASE,2));
led_off();
pwm_off();
lcd_init();
lcd_menu_init();
delay_ms(1000);
lcd_clear( 1 );
lcd_clear( 2 );
lcd_gotoxy(0,1);
lcd_gotoxy(0,2);
while(1){
task = alt_getchar();
//scanf("%d",&task);
printf("\ntask = %c \n\r",task);
switch(task)
case 0:
pwm_off();
set_dir(0);
efan_off();
alt_printf("Tat Quat\n\r");
lcd_clear( 1 );
lcd_gotoxy(0,1);
break;
case 1:
set_duty(300);
pwm_on();
efan_on(LEVEL1);
set_dir(0);
lcd_clear( 1 );
88
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
lcd_gotoxy(0,1);
lcd_puts("Quat: So 1");
break;
case 2:
set_duty(600);
efan_on(LEVEL2);
pwm_on();
set_dir(0);
lcd_clear( 1 );
lcd_gotoxy(0,1);
lcd_puts("Quat: So 2");
break;
case 3:
set_duty(1000);
pwm_on();
efan_on(LEVEL3);
set_dir(0);
lcd_clear( 1 );
lcd_gotoxy(0,1);
lcd_puts("Quat: So 3");
break;
89
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính
case 4:
led_on();
lcd_clear( 2 );
lcd_gotoxy(0,2);
break;
case 5:
led_off();
lcd_clear( 2 );
lcd_gotoxy(0,2);
break;
}
while(1)
{
output(PIO_0_BASE, 0xff); //led sang
delay_ms(1000);
}
return 0;
90