Đồ án Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan - 3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng

Chương 1: GIỚI THIỆU VỀ CHIP FPGA VÀ NGÔN NGỮ ĐẶC TẢ PHẦN

CỨNG VHDL .1

1.1 KHÁI QUÁT VỀ CHIP FPGA: .1

1.1.1 Khái niệm: .1

1.1.2 Ứng dụng: .2

1.2 NGÔN NGỮ ĐẶC TẢ PHẦN CỨNG VHDL: .2

1.2.1 Giới thiệu: .2

1.2.2 Cấu trúc một file VHDL: .3

1.2.3 Cấu trúc từ vựng: .4

1.2.4 Các đối tượ ng dữ liệu trong VHDL: .5

1.2.5 Kiểu dữ liệu: .6

1.2.6 Các lệ nh tuần tự: .10

Chương 2: C ẤU TRÚC KIT SP ARTANT-3 E, VI ĐIỀU KHIỂN MICROB LAZE

VÀ PHẦN MỀM EDK CỦA HÃNG XILINK .14

2.1 CẤU TRÚC KIT SP ARTANT–3E CỦA XILINX: .14

2.1.1 Các thành phần c hính của kit SP ARTANT – 3E: .14

2.1.2 Bộ tạo xung clock cho FPGA: .15

2.1.3 Các nút chuyển nút nhấn và Led: .15

2.1.4 Khối LCD: .17

2.1.5 Bộ biến đổi tương t ự sang số:.18

2.2 VI ĐIỀU KHIỂN NHÚNG MICROBLAZE: .23

2.2.1 Giới thiệu v ề vi điều khiển Microblaze: .23

2.2.2 Kiến trúc cơ bản của MicrroBlaze: .24

2.2.3 Kiến trúc Pipeline c ủa vi điều khiển MicroBlaze: .25

2.2.4 Giao tiếp tính hiệ u trong MicroBlaze: .25

2.3 PH Ầ N MỀM EDK: .27

2.3.1 Giới thiệu Phần mềm EDK: .27

2.3.2 Các t ập lệnh trong EDK: .27

2.3.3 Các h t ạo Project v ới ph ần mề m EDK: .32

Chương 3: PH ẦN MỀM VB VÀ G IAO DIỆN ĐIỀU KHIỂN .39

3.1 GIỚI THI ỆU VỀ NGÔN NGỮ LẬ P TRÌNH VB.NET: .39

3.2 LẬ P TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET: .39

3.2.1 T ự động dò tìm cổng COM: .39

3.2.2 Đóng m ở cổng COM: .39

3.2.3 Nhận dữ liệu từ cổng COM: .40

3.2.4 Gửi dữ liệu ra cổng COM: .40

3.2.5 Cài đ ặt tham s ố cho cổng COM: .41

3.2.6 Viết chươ ng trình: .41

Chương 4: TRIỂN KHAI XÂY DỰNG HỆ THỐNG NHÚNG TRÊN KIT

SP ARTANT 3 E .53

4.1 SƠ ĐỒ TỔNG QUÁT VỀ ỨNG DỤNG NHÚNG: .53

4.2 XÂY D ỰNG CÁC CHIP NHÚNG: .54

4.2.1 Khối cảm biến nhiệt: .54

4.2.2 Khối điều khiển Camera: .58

4.3 XÂY D ỰNG CÁC ỨNG DỤNG NHÚNG: .61

4.3.1 Sơ đồ giải thu ật: .61

KẾT LUẬN.70

PHỤ LỤC CÁC T Ừ VIẾT TẮC .71

DANH MỤC TÀI LIỆU THAM KHẢO.72

 

 

pdf80 trang | Chia sẻ: lethao | Lượt xem: 2792 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan - 3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
như sơ đồ sau: Hình 2.5: Khối LCD trên kit Spartan 3e Đối với LCD có hai chế độ hoạt động là tám bit dữ liệu hoặc bốn bit dữ liệu. Ở đây ta thấy trên kít ghép mối LCD hoạt động ở chế độ bốn bit dữ liệu. Quá trình hoạt động được mô tả như sau: Chân RS = 0 thanh ghi lệnh được chọn cho phép chúng ta gửi một lệnh như xóa màn hình, đưa con trỏ về đầu dòng…, khi chân RS = 1 thanh ghi dữ liệu được chọn cho phép chúng ta gửi dữ liệu lên màn hình LCD. Chân R/W =1 cho phép chúng ta đọc thông tin từ LCD, R/W =0 cho phép chúng ghi thông tin lên LCD. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 18 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là 450ns. 2.1.5 Bộ biến đổi tƣơng tự sang số: 6 Header kết nối đến ADC LTC1407A_ 2 Kênh A/D SPI_SCK : U16 AD_CONV : P11 SPI_MOSO : N10 LTC6912_2 Kênh Amp SPI_MOSI : T4 AMP_CS : N7 SPI_SCK : U16 AMP_SHDN : P7 AMP_DOUT : A18 Hình 2.4: Khối ADC trên kit Spartan 3e Kit Spartan_3E cung cấp hai kênh tín hiệu Analog, vi mạch LTC1407A là loại biến đổi tưong tự sang số gồm hai bộ biến đổi riêng biệt, vi mạch LTC6912 gồm hai bộ khuyếch đại có thể thay đổi được hệ số. Cả hai vi mạch này đều đuợc điều khiển bởi chip FPGA. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 19 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.5: Sơ Đồ chân khối ADC Tín hiệu tương tự được đưa vào VinA và VinB sẽ được biến đổi thành một số nhị phân 14bit D[13:0] với điện áp so sánh 1 .65V D[13:0] = 1.65 8192 1.25 Vin V Gain V Gain : Độ lợi của bộ khuyếch đại Vin : Điện áp ngỏ vào D[13:0] : Số nhị phân 14bit Cách tạo độ lợi cho vi mạch LTC6912 được cho trong bảng data sheet sau: Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 20 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Giao diện kết nối giữa chip FPGA với vi mạch LTC6912 : Tín hiệu Chân FPGA Điếu khiển Diễn tả SPI_MOSI T4 FPGA LTC6912 Tạo 8bit data điều khiển độ lợi cho LTC6912 AMP_CS N7 FPGA LTC6912 Tín hiệu chọn chip. LTC6912 hoạt động khi chân này ở mức 0 SPI_SCK U16 FPGA LTC6912 Xung clock AMP_SHDN P7 FPGA LTC6912 Chân reset cho LTC6912 AMP_DOUT E18 FPGA LTC6912 Dữ liệu 8bit ở ngỏ ra của LTC6912. Tín hiệu hồi tiếp FPGA sẽ gởi dữ liệu nối tiếp 8 bit ra LTC6912 thông qua chân SPI_MOSI. Giữ liệu 8 bit này sẽ được dùng để cài đặt cho hai bộ khuyếch đại A và B mỗi bộ trên cơ sỡ 4bit. Hình 2.6: Tám bit ra LTC6912 2.1.5.2 Giới thiệu hai IC LTC6912 và LTC1407A IC LTC6912: Đây là loại IC có thể điều khiển được độ khuyếch đại bằng cách nạp vào thanh ghi trong nó một giá trị 8bit nối tiếp. IC LTC6912 có hai kênh điều khiển độ khuyếch đại độc lập nhau. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 21 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.7: Cấu trúc IC LTC6912 Qúa trình ghi nhận dữ liệu của LTC6912 AMP_CS : chân chọn chip. SCK : chân clock khoảng 2.5Mhz. SDI : chận dữ liệu vào . AMO_DO : chân dữ liệu ra. Ta nhận thấy rằng với mổi bit truyền đều tương xứng với tần số xung clock. Với LTC6912 tần số xung clock tối đa cho phép là 10Mhz nếu lớn hơn giá trị này thì hệ thống sẽ bị nhiễu do đó tần số xung clock thích hợp là 2.5MHz . Cách điều khiển như Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 22 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn sau trước tiên chân AMP_CS phải ở mức thấp lúc này thanh ghi trong IC sẽ tiếp nhận dữ liệu nối tiếp từ FPGA dựa trên cạnh lên của tần số xung clock trong khi đó dữ liệu nhận được sẽ được gởi ngược trở về FPGA kể kiểm tra lúc này dữ liệu bám theo cạnh xuống của xung clock . Cách thức giao tiếp được chỉ ra ở giản đồ thời gian ghi nhận dữ liệu. Hình 2.8: Giản đồ thời gian ghi nhận dữ liệu LTC1407A: Đây là IC thực hiện biến đổi tín hiệu tương tự sang tín hiệu số, nó cung cấp cho ta hai bộ biến đổi riêng biệt tương tự như LTC6912 cả hai bộ biến đổi này hoạt động một cách độc lập. Kết nối giao tiếp giữa FPGA và LTC1407A được trình bày ở hình 5, FPGA giao tiếp với LTC1407A thông qua các chân SPI_MOSI, SPI_MISO và SPI_CLK . Ý nghĩa của các chân đựơc chú thích ra như sau : Khi chân AD_CONV ở mức cao thì bộ AD sẽ thực hiện biến đổi các tín hiệu tương tự ở cả hai ngỏ vào của bộ biến đổi nhưng lúc này các kết quả sẽ không được chuyển đến ngỏ ra chỉ khi nào tín hiệu ỏ trên nhân AD_CONV chuyển xuống mức Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 23 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn thấp. Tốc độ lấy mẫu nằm trong khoảng 1.5 Mhz. Kết nối được chỉ ra ở giản đồ giao tiếp LTC1407A. Hình 2.9: Giản đồ giao tiếp LTC1407A Sau khi có tín hiệu ra thì chân SPI_MISO sẽ đưa tín hiệu đến FPGA. Tín hiệu được biến đổi được đưa ra dựa trên chu kỳ xung clock. Chu kỳ xung clock lúc này vào khoảng 19.6nm. 2.2 VI ĐIỀU KHIỂN NHÚNG MICROBLAZE: 2.2.1 Giới thiệu về vi điều khiển Microblaze: Các bộ vi xử lý có sẵn dùng cho dòng FPGA (Field Programmable Gate Arrays) của Xillinx sử dụng với các công cụ phần mềm có trong phần mềm EDK (Embedded Development kit) được phân thành 2 loại: Bộ vi xử lý mềm MicrroBlaze. Bộ vi xử lý cứng đã được nhúng sẵn PowerPC. MicrroBlaze là bộ vi xử lý được dùng hầu hết trong FPGA các dòng như Spartan-II, Spartan-III, Virtex của hãng Xillinx. MicroBlaze là một vi điều khiển ảo, Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 24 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn nó tồn tại dưới dạng phần mềm đã được phát triển của hãng Xillinx, chúng ta có thể thiết lập các thông số để sử dụng đối với vi điều khiển này (UART, các cổng vào ra ngoại vi, ..) thông qua phần mềm EDK. MicroBlaze là bộ xử lý mềm nhúng 32-bit của Xillinx. Tập lệnh thu gọn RISC (Reduced Instruction Set Computer), với các bus riêng biệt để truy xuất dữ liệu và lệnh từ bộ nhớ on-chip và bộ nhớ ngoài tại cùng một thời điểm. 2.2.2 Kiến trúc cơ bản của MicrroBlaze: Kiến trúc của MicroBlaze có các đặc điểm sau: Từ lệnh 32 bit với 3 toán hạng và 2 chế độ định địa chỉ. Đường bus 32 bit địa chỉ. 1 khối ghi dịch. 2 cấp độ ngắt. Khối ALU(Arithmetic Logic Unit): gồm các bộ cộng/trừ, ghi dịch/logic, nhân. Hình 2.10: Kiến trúc cơ bản của vi điều khiển MicroBlaze Trong đó có các thành phần sau: Bus IF: (Bus interface) đường bus giao tiếp. Instruction Buffer: bộ đệm lệnh. Instruction Decode: bộ giải mã lệnh. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 25 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Program Counter: bộ đếm chương trình. Add/Sub: khối cộng/trừ; Shift/Logical: khối ghi dịch/lôgic; Multiply: khối nhân. Register File: thanh ghi dữ liệu 32thanh x 32bit. 2.2.3 Kiến trúc Pipeline của vi điều khiển MicroBlaze: Vi điều khiển MicroBlaze xử lý lệnh theo kiến trúc pipeline song song, hầu hết các lệnh của nó, mỗi giai đoạn mất 1 chu kỳ đồng hồ để thực hiện xong. Quá trình xử lý lệnh được chia làm 3 giai đoạn: nhận lệnh (Fetch), giải mã lệnh (Decode), thi hành lệnh (Execute). Hình 2.11: Kiến trúc Pipeline của vi điều khiển MicroBlaze Thông thường, nếu bỏ qua thời gian trễ nghỉ “stall” thì mỗi giai đoạn trên chỉ mất 1 chu kỳ đồng hồ, khi đó 3 lệnh có thể được xử lý cùng một lúc, mỗi lệnh được thi hành trong 1 đường ống gồm 3 giai đoạn. MicroBlaze có 1 bộ đệm tiền nhận lệnh (Instruction Prefetch Buffer) để làm giảm xung đột tiềm ẩn trong bộ nhớ khi thực hiện các lệnh đa chu kỳ. Khi Pipeline được tạo trễ nghỉ “stall” do thực hiện lệnh đa chu kỳ trong giai đoạn thi hành, bộ đệm tiền nhận lệnh sẽ tiếp tục nhận các lệnh ngay sau đó. Và khi Pipeline thi hành trở lại, giai đoạn nhận lệnh có thể lấy lệnh trực tiếp từ bộ đệm tiền nhận lệnh, thay vì đợi cho bộ nhớ lệnh truy cập để thi hành. 2.2.4 Giao tiếp tính hiệu trong MicroBlaze: MicroBlaze cung cấp 3 giao tiếp bộ nhớ: LMB: Local Memory Bus.. PLB: Processor Local Bus. Fetch Decod e Execute e Fetch Decod e Execute Execute Execute Fetch Decod e Stall Stall Execute Cycle 1 Cycle 2 Cycle 3 Cycle 4 Lệnh 1 Lệnh 2 Lệnh 3 Cycle 5 Cycle 7 Cycle 6 Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 26 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn OPB (On-Chip Peripheral Bus) và XCL (Xillinx Cache Link). Hình 2.12: một hệ thống Bus điển hình Trong đó: IXC: Instruction side Xillinx Cache Link Interface (cặp liên kết đơn FSL chủ/tớ). DXCL: Data side Xillinx Cache Link Interface (cặp liên kết đơn FSL chủ/tớ). ILMB: Instruction interface, Local Memory Bus: giao tiếp lệnh theo chuẩn bus LMB, chỉ dùng cho giao tiếp BRAM. DLMB: Data interface, Local Memory Bus: giao tiếp dữ liệu theo chuẩn bus LMB, chỉ dùng cho giao tiếp BRAM. IOPB: Instruction interface, On-chip Peripheral Bus: giao tiếp lệnh theo chuẩn bus OPB. DOPB: Data interface, On-chip Peripheral Bus: giao tiếp dữ liệu theo chuẩn bus OPB. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 27 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn MicroBlaze có kiến trúc kết nối lõi theo chuẩn IBM, chuẩn này cung cấp 3 loại bus giành cho kết nối liên tục đa lõi, các thư viện macro và logic người dùng: + Bus lõi xử lý nội PLB (Processor Local Bus). + Bus ngoại vi on-chip OPB (On-chip Peripheral Bus). + Bus thanh ghi điều khiển thiết bị DCR (Device Control Register). 2.3 PHẦN MỀM EDK: 2.3.1 Giới thiệu Phần mềm EDK: EDK là phần mềm của hãng xilinx được thiết kế tương thích với các chip FPGA của hãng. Chương trình EDK là một chương trình thân thiện với người sử dụng, giúp chúng ta có thể dễ dàng thiết kế một hệ thống phức tạp mà chỉ thao tác đơn giản, vì thực chất EDK sử dụng các chương trình VHDL viết sẵn (gọi là các IP) nên ta không cần viết các IP đó, mà chỉ sử dụng nó, phần quan trọng là chúng ta phải viết phần mềm điều khiển chip nhúng đã được viết sẵn đó, và điều này cũng thực sự không phải là khó khăn vì chúng ta không cần sử dụng tập lệnh Asembly của chip nhúng ( được đặc tên là MicroBlaze) mà chúng ta sẽ sử dụng ngôn ngữ Standard C hay C++ để viết chương trình điều khiển MicroBlaze (tương đương với một vi xử lý 32 bit, đối với version 4.0 còn có thêm FPU/đơn vị xử lý dấu chấm động) và các thư viên hỗ trợ sẵn với các hàn điều khiển ngoại vi rất nhiều). 2.3.2 Các tập lệnh trong EDK: XGpio_mSetDatarReg(BaseAddress, Channel, Data) Chức năng: Xác định thanh ghi dữ liệu của kênh GPIO đã được xác định. Các thông số: BaseAddress: chứa địa chỉ nền của thiết bị GPIO. Channel: bao gồm 2 kênh (1 hoặc 2). Data: giá trị để ghi lên thanh ghi dữ liệu. XGpio_SetDataDirection(XGpio * InstancePtr, unsigned Channel, u32 DirectionMask) Chức năng: Định dạng hướng vào hay ra của dữ liệu cho kênh GPIO được xác định. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 28 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Các thông số: InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc. Channel: bao gồm 2 kênh (1 hoặc 2). DirectionMask: là một mặt nạ bit, xác định hướng của dữ liệu là hướng vào hay ra, khi các bit được set lên 1 thì đó là ngõ vào, khi các bit được set về 0 thì đó là ngõ ra. Chú ý: Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel) Chức năng: Đọc dữ liệu tại vị trí con trỏ đang chỉ tới, ở kênh GPIO được xác định. Các thông số: InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc. Channel: bao gồm 2 kênh (1 hoặc 2). Chú ý: Hàm trả về giá trị 32 bits chứa trong thanh ghi mà con trỏ đang chỉ tới. Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId ) Chức năng: Khởi động con trỏ, trỏ tới một thiết bị. Mỗi thiết bị được đặt cho một tên riêng duy nhất. Thông số: InstancePtr: là con trỏ chỉ tới một ngoại vi nhất định. Vùng nhớ của con trỏ phải được phân phát bởi người dùng. DeviceId:là tên riêng duy nhất của thiết bị được đặt bởi người dùng để phân biệt với các thiết bị khác. Thiết bị này được điều khiển bởi con trỏ. Chú ý: Mọi thao tác muốn thực hiện trên thiết bị thì đầu tiên phải khởi động con trỏ, trỏ tới thiết bị đó, nếu không chương trình sẽ báo lỗi. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 29 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hàm không có gái trị trả về. XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data ) Chức năng: Ghi dữ liệu vào vị trí (thiết bị) con trỏ đang chỉ tới,tương ứng với một kênh đã được xác định. Thông số: InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc. Channel: bao gồm 2 kênh (1 hoặc 2) Data: giá trị để ghi lên thanh ghi dữ liệu tạ vị trí con trỏ đang trỏ tới. Chú ý: Hàm không có gái trị trả về. Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế độ kênh đôi. XGpio_Discreteset(XGpio * InstancePtr, unsigned Channel, u32 Mask) Chức năng: Định các đầu ra riêng biêt lên mức logic 1, tương ứng với 1 kênh được chon của thiết bị. Thông số: InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc. Channel: bao gồm 2 kênh (1 hoặc 2) Mask:set các bit ngõ ra lên mức cao, các bit khác của thanh ghi dữ liệu không bị ảnh hưởng. XGpio_Discreteclear(XGpio * InstancePtr, unsigned Channel, u32 Mask) Chức năng: Định các đầu ra riêng biệt xuống mức logic 0, tương ứng với 1 kênh được chọn của thiết bị. Thông số: InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc. Channel: bao gồm 2 kênh (1 hoặc 2) Mask:set các bit ngõ ra xuống mức thấp, các bit khác của thanh ghi dữ liệu không bị ảnh hưởng. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 30 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn XGpio_mGetDataReg(BaseAddress, Channel) Chức năng: Lấy dữ liệu của một thanh ghi của một kênh đã được xác định. Thông số: BaseAddress: chứa địa chỉ nền của thiết bị GPIO. Channel: bao gồm 2 kênh (1 hoặc 2). Chú ý: Hàm trả về giá trị dữ liệu 32bits XGpio_mReadReg(BaseAddress, RegOffset) Chức năng: Đọc một giá trị từ thanh ghi GPIO. Kết quả thu được một dữ liệu 32bits. Nếu thiết bị hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số nhỏ, các bit còn lại sẽ là bit 0. Thông số: BaseAddress: chứa địa chỉ nền của thiết bị GPIO. RegOffset: địa chỉ của thanh ghi được đọc cách địa chỉ nền một khoảng XGpio_mWriteReg(BaseAddress, RegOffset, Data) Chức năng: Ghi một giá trị từ thanh ghi GPIO, một dữ liệu 32bits được ghi. Nếu thiết bị hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số nhỏ hơn mới được ghi. Thông số: BaseAddress: chứa địa chỉ nền của thiết bị GPIO. RegOffset: địa chỉ của thanh ghi được ghi cách địa chỉ nền một khoảng. Data: dữ liệu được ghi vào thanh ghi. XUartLite_ClearStats(XUartLite *InstancePtr) Chức năng: Đưa về không các số liệu của các phần cứng được chỉ tới. Thông số: InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 31 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn XUartLite_DisableInterrupt(XUartLite *InstancePtr) Chức năng: Hàm này có tác dụng vô hiệu hóa các ngắt khi truyền dẫn nối tiếp. Sau khi hàm này được gọi thì việc nhận các dữ liệu nối tiếp sẽ không gặp phải bất cứ ngắt nào. Thông số: InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp. XUartLite_EnableInterrupt(XUartLite *InstancePtr) Chức năng: Hàm này cho phép các ngắt được hoạt động trong quá trình nhận và truyền dữ liệu nối tiếp. Đối với một thiết bị có chứa 16 byte để truyền nhận dữ liệu theo kiểu FIFO thì bất cứ lúc nào cũng có thể có ngắt được cho phép trong quá trình truyền nhận dữ liệu. Thông số: InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp. XUartLite_IsSending(XUartLite *InstancePtr) Chức năng: Hàm sẽ xác định liệu thiết bị truyền dẫn nối tiếp được chỉ ra có đang gửi dữ liệu hay không. Nếu thanh ghi truyền dẫn không bỏ trống tức là nó đang gửi dữ liệu. Thông số: InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp. Chú ý: Hàm trả về giá trị đúng khi thiết bị đang gửi dữ liệu, ngược lại là sai. XUartLite_ResetFifos(XUartLite *InstancePtr) Chức năng: Hàm có tác dụng reset bộ nhớ FIFO, việc truyền và nhận dữ liệu sẽ bị xóa. Hàm này có thể được sử dụng trong các ứng dụng nhằm xóa các dữ liệu không mong muốn trong bộ nhớ FIFO. Thông số: InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 32 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn XUartLite_RecvByte(u32 BaseAddress) Chức năng: Hàm nhận một byte đơn từ cổng truyền dẫn nối tiếp. Hàm đọc giá trị 8 bits từ thanh ghi nhận. Thông số: BaseAddress: là địa chỉ nền của thiết bị được xác định. Chú ý: Hàm trả lại giá trị byte mong muốn. XUartLite_RecvByte(u32 BaseAddress, u8 Data ) Chức năng: Hàm gửi đi một byte đơn qua cổng truyền dẫn nối tiếp. Hàm sẽ ghi giá trị 8 bits vào thanh ghi truyền. Thông số: BaseAddress: là địa chỉ nền của thiết bị được xác định. Data : byte dữ liệu gửi đi. Tạo hệ thống phần cứng cơ bản trong XPS (Xilinx Platform Studio): khi các bạn cho chạy chương trình EDK thì một cửa sổ xuất hiên gọi là cửa sổ XPS, chúng ta sẽ bắt đầu tạo Project ở đây, màn hình khởi đông chương trình như sau : 2.3.3 Cách tạo Project với phần mềm EDK: Hình 2.10: Cửa sổ XPS Trong hôp thoại đầu tiên xuất hiện, cho phép chúng ta thao tác cơ bản : Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 33 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Base System Builder Wizard :hộp thoại này sẽ cho phép chúng ta tao một Project mới. Open A Recent Project : mở một Project đã có sẵn. Ở đây sẽ bắt đầu với bước tạo một Project mới: nhấn Ok khi hôp chọn ở Base System…, hộp thoại tiếp theo sẽ hiện ra: Hình 2.11: Hộp thoại Create New XPS Project Ở hộp thoại này, phần mềm sẽ yêu cầu đặt tên cho thư mục chứa Project và các thư mục liên quan, nhần Browse và tạo một thư mục với một đường dẫn cụ thể, ở đây, mình sẽ đặt tên cho thư mục doan, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo ra file doan.xmp trong thư mục chúng ta vừa tạo. Click Next xuất hiện hộp thoại Select Board, lần lượt chọn: Board vendor: Xilinx Board name: Spartan-3E Starter Board Board revision: C Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 34 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.12: Hộp thoại Select Board Click Next xuất hiện hộp thoại Select Processor. Hình 2.13: Hộp thoại Select Processor Click Next xuất hiện hộp thoại Configure MicroBlaze Processor. Lần lượt chọn Reference clock frequency: 50 MHz Processor–Bus clock frequency: 50 MHz Debug interface: On-Chip H/W debug module Local Data and Instruction memory: 8 KB Cache setup: Enable - unchecked Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 35 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.14: Hộp thoại Configure MicroBlaze Processor Click Next xuất hiện hộp thoại Configure IO Interfaces, đánh dấu chọn RS232_DCE và LEDs_8Bit. RS232_DCE: 115200 bits per second, 8 data bits, no parity, no interrupt LEDs_8Bit: XPS GPIO peripheral, no interrupt. Tương tự chọn ngoại vi Dip_switchs_4bit và các ngoại vi khác bỏ trống. Hình 2.15: Hộp thoại Configure IO Interfaces Click Next cho đến khi xuất hiện hộp thoại Add Internal Peripherals. Bạn có thể click Add Peripheral để thêm ngoại vi. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 36 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Click Next xuất hiện hộp thoại Software Setup, cho phép Memory test được chọn và không chọn Peripheral selftest. Hình 2.16: Hộp thoại Software Setup Click Next xuất hiện hộp thoại Configure Memory Test Application. Hình 2.17: Hộp thoại Configure Memory Test Application Click Next xuất hiện hộp thoại System Created, tổng kết phần cứng mà ta vừa tạo ra. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 37 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.18: Hộp thoại System Created Click Generate, xuất hiện hộp thoại Finish. Click Finish để kết thúc quá trình tạo project. Nếu hộp thoại Next Step xuất hiện thì chọn muc Start Using Platform Studio và click OK. Cửa sổ System Assembly View1 xuất hiện, thể hiện sự kết nối của hệ thống ngoại vi và hệ thống bus. Hình 2.19: Cửa sổ System Assembly View Chọn Project → Generate and View Block Diagram để thể hiện sơ đồ khối phần cứng. Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 38 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hình 2.20: Block Diagram View of the Generated Project Như vậy ta đã xây dựng xong phần cứng cơ bản. Trong thực tế, nếu người dùng cần thêm ngoại vi cho thiết kế thì có nhiều cách thêm ngoại vi (có hướng dẫn trong video kèm theo). Chương 3: Phần mền VB và giao diện điều khiển 39 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Chƣơng 3: PHẦN MỀM VB VÀ GIAO DIỆN ĐIỀU KHIỂN 3.1 GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH VB.NET: Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không. Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ‟s .NET Framework. Do đó, nó cũng không phải là VB phiên bản 7. Thật sự, đây là ngôn ngữ lập trình mới, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác như C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình. 3.2 LẬP TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET: 3.2.1 Tự động dò tìm cổng COM: Tự động dò tìm cổng COM và add vào listbox, sử dụng đoạn mã sau: Sub GetSerialPortNames() ' Show all available COM ports. For Each sp As String In My.Computer.Ports.SerialPortNames ListBox1.Items.Add(sp) Next End Sub Hoặc đoạn mã sau: For n As Integer = 0 To _ My.Computer.Ports.SerialPortNames.Count - 1 cbport.Items.Add( _ My.Computer.Ports.SerialPortNames(n)) 3.2.2 Đóng mở cổng COM: Để mở cổng COM sử dụng đoạn lệnh sau: If SerialPort1.IsOpen Then SerialPort1.Close() ’ đóng cổng COM SerialPort1.Open() ’ mở cổng COM Else Chương 3: Phần mền VB và giao diện điều khiển 40 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn SerialPort1.Open() End If 3.2.3 Nhận dữ liệu từ cổng COM: Khi có sự kiện nhận dữ liệu từ cổng COM sẽ hiển thị ra textbox. Dữ liệu nhận được dạng string. Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Control.CheckForIllegalCrossThreadCalls = False txtreceiver.Text = SerialPort1.ReadExisting End Sub Hoặc sử dụng hàm sau với cổng COM 1: Function ReceiveSerialData() As String ' Receive strings from a serial port. Dim returnStr As String = "" Using com1 As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort("COM1") Do Dim Incoming As String = com1.ReadLine() If Incoming Is Nothing Then Exit Do Else returnStr &= Incoming & vbCrLf End If Loop End Using End Function 3.2.4 Gửi dữ liệu ra cổng COM: Dữ liệu truyền đi mã ASCII. Mã lệnh: phải mở cổng COM trước khi truyền dữ liệu. SerialPort1.Write(Tx.Text) Chương 3: Phần mền VB và giao diện điều khiển 41 GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn Hoặc sử dụng hàm sau: Sub SendSerialData(ByVal data As String) ' Send strings to a serial port. Using com1 As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort("COM1") com1.WriteLine(data) End Using E

Các file đính kèm theo tài liệu này:

  • pdfNghiên cứu và triển khai hệ thồng nhúng trên kit Spartan-3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng.pdf