Công nghệ FPGA xây dựng bộ điều khiển robot tránh vật cản

MỤC LỤC

Khái niệm về FPGA

Thuật ngữ Field Programmable chỉ quá trình tái cấu trúc IC có thể được thực hiện bởi người dùng cuối, trong điều kiện thông thường, hay nói một cách khác là người kỹ sư lập trình IC có thể dễ dàng hiện thực hóa thiết kế của mình sử dụng FPGA mà không lệ thuộc vào một quy trình sản xuất hay cấu trúc phần cứng phức tạp nào trong nhà máy bán dẫn. Đến những dòng sản phẩm FPGA gần đây thì FPGA được thiết kế để có thể giao tiếp với rất nhiều dạng ROM khác nhau hoặc FPGA thường được thiết kế kèm CPLD để nạp những thành phần cố định, việc tích hợp này làm FPGA nạp cấu hình nhanh hơn nhưng cơ chế nạp và lưu trữ cấu hình vẫn không thay đổi.

Lịch sử phát triển

2 có thể được ứng dụng cho lớp những toán xử lý số phức tạp đòi hỏi hiệu suất làm việc lớn mà các công nghệ trước không đáp ứng được.

Cấu trúc của FPGA

Hãy xem xét một ứng dụng luồng dữ liệu cần lọc để loại bỏ nhiễu và nhận được mẫu dữ liệu mong muốn cần đi qua khối ánh xạ tài nguyên để FPGA có thể phân bổ băng thông phù hợp cho dữ liệu, sau đó chuyển dữ liệu tới bộ lọc FIR để loại bỏ nhiễu khi dữ liệu được truyền trên kênh có dây hoặc kênh không dây trong cả hai trường hợp đều bị nhiễu, bộ lọc FIR là cách tốt nhất để loại bỏ nhiễu và chọn tín hiệu quan tâm. Vì vậy, các sơ đồ phát hiện và sửa lỗi (EDAC), ví dụ, dự phòng ba mô-đun, mã khối tuyến tính, lọc bộ nhớ, được sử dụng trong đó cấu hình được lưu trữ bên trong bộ nhớ dễ bị bức xạ và cấu hình trong FPGA dựa trên SRAM để bất cứ khi nào có trục trặc bộ nhớ, một cấu hình vàng đã được tải vào SRAM từ mảng bộ nhớ.

Hình 1.2 Sơ đồ khối logic module
Hình 1.2 Sơ đồ khối logic module

Các ưu điểm của ngôn ngữ VHDL

Như thế ta có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả ở mức cao và các hệ con được mô tả chi tiết. - Khả năng trao đổi kết quả: Vì VHDL là một tiêu chuẩn được chấp nhận, nên một mô hình VHDL có thể chạy trên mọi bộ mô phỏng đáp ứng được tiêu chuẩn VHDL và các kết quả mô tả hệ thống có thể được trao đổi giữa các nhà thiết kế sử dụng công cụ thiết kế khác nhau nhưng cùng tuân theo chuẩn VHDL. Hơn nữa, một nhóm thiết kế có thể trao đổi mô tả mức cao của các hệ thống con trong một hệ thống; trong khi các hệ con đó được thiết kế độc lập.

VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó có thể sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm nhiều người.

Cấu trúc của 1 chương trình sử dụng ngôn ngữ VHDL

- Khai báo generic là khai báo các tham số tĩnh của thực thể, khai báo này rất hay sử dụng cho những module có những tham số thay đổi kiểu như như độ rộng kênh, kích thước ô nhớ, tham số bộ đếm… ví dụ chúng ta có thể thiết kế bộ cộng cho các hạng tử có độ dài bit thay đổi, số bit được thể hiện là hằng số trong khai báo generic (xem ví dụ dưới đây). - identifier là tên gọi của kiến trúc, thông thường để phân biệt các kiểu mô tả thường dùng các tên behavioral cho mô tả hành vi, dataflow cho mô tả luồng dữ liệu, structure cho mô tả cấu trúc tuy vậy có thể sử dụng một tên gọi hợp lệ bất kì nào khác. Toàn bộ mô tả hành vi phải được đặt trong một khối { process (signal list) end process;} nghĩa của khối này là nó tạo một quá trỡnh để “theo dừi” sự thay đổi của tất cả cỏc tớn hiệu cú trong danh sỏch tớn hiệu (signal list), khi có bất kì một sự thay đổi giá trị nào của tín hiệu trong danh sách thì nó sẽ thực hiện quá trình tính toán ra kết quả tương ứng ở đầu ra.

Các phát biểu trong khối begin end là các phát biểu đồng thời (concurrent statements) nghĩa là không phụ thuộc thời gian thực hiện của nhau, nói một cách khác không có thứ tự ưu tiên trong việc sắp xếp các phát biểu này đứng trước hay đứng sau trong đoạn mã mô tả.

Hình 2.2 Sơ đồ logic full_adder
Hình 2.2 Sơ đồ logic full_adder

Giới thiệu chung

Tại đây, ta sẽ lựa chọn chính xác tên mã chip mà chúng ta sẽ làm việc cùng để từ đó phần mềm sẽ tự động tối ưu tài nguyên cũng như sử dụng trình biên dịch thích hợp. Sau khi đã hoàn thành mã thiết kế, ta chọn Analysis & Synthesis trong cửa sổ Task để phần mềm biên dịch và phát hiện lỗi trong thiết kế của chúng ta. Tại cột Location, ta sẽ chọn các chân được bố trí sẵn trên kit để đấu nối với các thiết bị ngoại vi dựa trên bảng được cung cấp trong tài liệu hướng dẫn đi kèm với thiết bị.

Sau khi đó hoàn thành việc bố trớ ngừ ra và ngừ vào của thiết kế, ta đúng cửa sổ Pin Planner và thực hiện biên dịch toàn bộ thiết kế bằng cách chọn Complile Design tại cửa sổ Task.

Hình 3.2 Giao diện chọn New Project Wizard
Hình 3.2 Giao diện chọn New Project Wizard

Kiểm thử thiết kế

FPGAs là một lĩnh vực khá mới mẻ và có tiềm năng phát triển mạnh mẽ trong tương lai, nên với mong muốn tìm hiểu sâu hơn về công nghệ nói trên cũng như hoàn thiện được 1 sản phẩm có ứng dụng công nghệ mạch tích hợp khả trình, em đã lựa chọn bo mạch Altera FPGA De0-CV được trang bị chip Cyclone V 5CEBA4F23C7N với hơn 49000 phần tử logic khả trình, đảm bảo đủ tài nguyên để triển khai toàn bộ dự án. DE0-CV được tối ưu hóa là một nền tảng thiết kế phần cứng mạnh mẽ, sử dụng thiết bị FPGA Altera Cyclone V làm bộ điều khiển trung tâm cho các thiết bị ngoại vi của nó như USB Blaster trên bo mạch, khả năng video, …. Điển hình như điều khiển động cơ và các bộ xung áp, điều áp… PWM giúp điều khiển độ nhanh chậm của động cơ hoặc cao hơn nữa, đồng thời giúp điều khiển sự ổn định của tốc độ động cơ - Ngoài lĩnh vực điều khiển hay ổn định tải, PWM còn tham gia, điều chế các mạch nguồn như: nghịch lưu 1 pha và 3 pha, boot, buck, ….

- Ngoài ra, điều chế độ rộng xung PWM còn gặp nhiều trong thực tế ở các mạch điện điều khiển, đặc biệt, PWM còn chuyên dùng để điều khiển những phần tử điện tử công suất có đường đặc tính là tuyến tính khi được trang bị sẵn 1 nguồn 1 chiều cố định.

Hình 3.13 Kết quả mô phỏng của thiết kế clock_divider
Hình 3.13 Kết quả mô phỏng của thiết kế clock_divider

Các khối chức năng

Lệnh này đảm bảo rằng chính xác mỗi 100ms sẽ thực hiện phát tín hiệu lại 1 lần dù hệ thống phát sinh lỗi tức thời, đảm bảo việc xe tự hành của ta sẽ không bỏ qua việc phát hiện vật cản quá lâu, dẫn tới việc va chạm trực tiếp với vật thể. Nếu tín hiệu echo thôi tích cực trong khoảng thời gian biến tạm có giá trị nhỏ hơn 55.000, ta xỏc định được trong khoảng cỏch kể trờn cú tồn tại vật cản và tớn hiệu ngừ ra obstacle sẽ được đặt lên mức logic cao (mức 1), ngược lại sẽ được đặt về mức thấp (mức 0). Với lợi thế của ngôn ngữ mô tả phần cứng, ta không cần lập trình lại 3 khối riờng biệt mà chỉ cần tạo ra 3 ngừ ra và ngừ vào, kết nối với cỏc tớn hiệu của khối ultrasonic đã xây dựng qua hàm PORT MAP được xây dựng sẵn trong ngôn ngữ VHDL.

Vì mô hình đang triển khai khá đơn giản, gồm 2 động cơ điều khiển 2 bánh xe đặt sau nên với việc kích hoạt các tín hiệu Motor_R_forward, Motor_L_forward, Motor_R_backward, Motor_L_backward một cách có chủ đích là chúng ta có thể tạo ra được các lệnh điều hướng như đã trình bày.

Hình 4.14 Khối ultrasonic
Hình 4.14 Khối ultrasonic

Xây dựng mô hình

Ngoài ra, để thuận tiện trong việc tìm lỗi và phát hiện nếu có cảm biến nào bị hư hỏng, tác giả sử dụng thêm 3 đèn LED kiểm tra tín hiệu xác định vật cản trả về từ cảm biến. Ở đây, bộ đảo được sử dụng với đầu vào là tín hiệu detected và tín hiệu đầu ra là 3 LED có sẵn trên kit phát triển tương ứng với 3 cảm biến. Với phần khung có hình dạng và nhiều chi tiếp phức tạp hơn nên tác giả chọn phương pháp in 3D để đạt được hình dạng mong muốn còn phần tấm nắp thì hình dạng đơn giản nên ta chọn phương pháp cắt mica để tiếm kiệm chi phí.

43 Dưới đây là thành quả sau khi hoàn thiện các phần của mô hình và lắp đặt hoàn chỉnh.

Hình 4.19 Phần thân mô hình khung robot tự tránh vật cản
Hình 4.19 Phần thân mô hình khung robot tự tránh vật cản