Với sự phát triển không ngừng của Khoa học – Kỹ thuật, cùng với đó là sự ra đời và phát triển nhanh chóng của công nghệ vi mạch khả trình trên thế giới, FPGAs được sử dụng rộng rãi trong các lĩnh vực công nghệ sản xuất chế tạo, quân sự… Ngành công nghiệp là một trong những ngành đầu tiên đón nhận công nghệ FPGA và có tiềm năng ứng dụng công nghệ rất lớn. Căn cứ vào yêu cầu của đề tài nghiên cứu, thiết kế xe tự hành cỡ nhỏ phù hợp với khả năng tiếp cận của sinh viên. Do đó nhóm em đã quyết định lựa chọn thiết kế xe tự động tránh vật cản, sử dụng kit FPGA Altera De0-CV. Để hoàn thiện chiếc xe, chúng em đã trải qua 3 giai đoạn: - Thiết kế mô hình tạm thời: Em quyết định thiết kế khung xe dựa trên tấm nhựa mica có sẵn để tiết kiệm chi phí cũng như dễ tháo nắp và bố trí lại các linh kiện. Các cảm biến, động cơ, driver điều khiển được cố định bằng keo, từ đó hình thành 1 mô hình đầy đủ thiết bị, phục vụ cho việc chạy thử và sửa lỗi điều khiển. - Thiết kế hệ thống điều khiển: Hệ thống điều khiển chịu trách nhiệm cung cấp nguồn điện, điều khiển các thiết bị trong cơ cấu xe như nhận tín hiệu từ các cảm biến và từ đó dựa trên thuật toán được tích hợp điều khiển chuyển động các bánh xe thông qua driver. - Thiết kế khung xe và lắp đặt hoàn chỉnh: Qua nhiều lần hiệu chỉnh từ vị trí bố trí các thiết bị đến sửa lỗi lập trình trong quá trình chạy thử, em đã xây dựng được mô hình xe theo mong muốn. Từ đó, em xây dựng bản vẽ mô hình và lựa chọn phương pháp in 3D để hoàn thiện phần khung xe. Xe tự hành tránh vật cản của nhóm đã đạt được mục tiêu, đáp ứng được yêu cầu đầu bài đặt ra. Tuy nhiên thời gian phát triển và nguồn lực còn hạn chế nên độ hoàn thiện chưa cao cũng như các chức năng của xe còn chưa đơn giản. Nếu có thêm thời gian để phát triển và hoàn thiện thì có cơ hội tạo ra sản phẩm có tính ứng dụng cao ở thực tế hoàn toàn có thể.
TỔNG QUAN VỀ FPGA
Khái niệm về FPGA
FPGA là viết tắt của Field-Programmable Gate Array, là vi mạch dùng câu trúc mảng phần tử logic mới và tiên tiến nhất hiện nay 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 Đây chính là một trong những đặc điểm làm FPGA trở thành một công nghệ IC khả trình được nghiên cứu và phát triển nhiều nhất hiện nay Để có được khả năng đó, FPGA ra đời hoàn toàn là một công nghệ mới chứ không phải là một dạng mở rộng của các chip khả trình kiểu như PAL, PLA Sự khác biệt đó thứ nhất nằm ở cơ chế tái cấu trúc FPGA, toàn bộ cấu hình của FPGA thường được lưu trong một bộ nhớ truy cập ngẫu nhiên (thông thường SRAM), quá trình tái cấu trúc được thực hiện bằng cách đọc thông tin từ RAM để lập trình lại các kết nối và chức năng logic trong IC Có thể so sánh cơ chế đó làm việc giống như phần mềm máy tính cũng được lưu trữ trong RAM và khi thực thi sẽ được nạp lần lượt tới vi xử lý, nói cách khác việc lập trình lại cho FPGA cũng dễ dàng như lập trình lại phần mềm trên máy tính
Như vậy về mặt nguyên tắc thì quá trình khởi động của FPGA không diễn ra tức thì mà cấu hình từ SRAM phải được đọc trước sau đó mới diễn ra quá trình tái cấu trúc theo nội dung thông tin chứa trong SRAM Dữ liệu chứa trong bộ nhớ RAM phụ thuộc vào nguồn cấp, chính vì vậy để lưu giữ cấu hình cho FPGA thường phải dùng thêm một ROM ngoại vi Đế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
Ngoài khả năng đó điểm thứ hai làm FPGA khác biệt với các PLD thế hệ trước là FPGA có khả năng tích hợp logic với mật độ cao với số cổng logic tương đương lên tới hàng trăm nghìn, hàng triệu cổng Khả năng đó có được nhờ sự đột phá trong kiến trúc của FPGA Nếu hướng mở rộng của CPLD tích hợp nhiều mảng PAL, PLA lên một chip đơn, trong khi bản thân các mảng này có kích thước lớn và cấu trúc không đơn giản nên số lượng mảng tích hợp nhanh chóng bị hạn chế, dung lượng của CPLD nhiều nhất cũng chỉ đạt được nghìn cổng hoặc tương đương Đối với FPGA thì phần tử logic cơ bản không còn là mảng PAL, PLA mà thường là các khối logic lập trình được cho 4 - 6 bit đầu vào và 1 đầu ra (được gọi là LUT) Việc chia nhỏ đơn vị logic cho phép tạo một cấu trúc khả trình linh hoạt hơn và tích hợp được nhiều hơn số lượng cổng logic trên một khối bán dẫn Bên cạnh đó hiệu quả làm việc và tốc độ của FPGA cũng vượt trội so với các IC khá trình trước đó Vì có mật độ lớn và tốc độ làm việc cao nên FPGA
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.
Lịch sử phát triển
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 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.
Cấu trúc của FPGA
Ba phần tử cơ bản trong FPGA là các khối logic khả trình (CLB), các kết nối giữa các khối và các khối vào ra (I/O) như miêu tả trong hình 1.1
Hình 1.1 Cấu trúc cơ bản của FPGA
Logic Module (LM) trong CLB có thể được cấu hình cho logic tổ hợp, logic được đệm thanh ghi, hoặc kết hợp cả hai Flip-flop là một bộ phận của khối logic đi kèm theo LM và được sử dụng cho logic được đệm thanh ghi Sơ đồ khối của LM dựa trên LUT được miêu tả trong hình 1.2
Hình 1.2 Sơ đồ khối logic module
LUT là một loại bộ nhớ có thể lập trình và được sử dụng để sinh các hàm logic tổ hợp dựa trên SOP Nói chung một LUT bao gồm 2n ô nhớ, ở đây n là số hiến đầu vào Cho ví dụ, 3 biến đầu vào có thể chọn đến 8 ô nhớ, vậy một LUT với 3 đầu vào có thể tạo một biểu thức dạng SOP lên đến 8 số hạng Các ô nhớ có thể được lập trình 1 hoặc 0, như hình 2.3 biểu diễn cho một hàm logic Nếu ô nhớ được lập trình bằng 1 thì tổ hợp của các biến đầu vào tương ứng xuất hiện trong biểu thức SOP tại đầu ra, còn nếu bằng 0 thì tổ hợp của các biến đầu vào tương ứng không xuất hiện trong biểu thức SOP tại đầu ra Biểu thức SOP tại đầu ra của LUT được cấu hình như trong hình 1.3 là:
Hình 1.3 Đầu ra của LUT
Các chế độ hoạt động của Logic Module
Module logic có thể được lập trình cho các chế độ hoạt động sau:
• Chế độ LUT mở rộng
• Chế độ số học được chia sẻ
Ngoài 4 chế độ hoạt động trên, LM có thể được sử dụng như chuỗi các thanh ghi để tạo bộ đếm hoặc các thanh ghi dịch Trong phần này chúng ta đề cập đến chế độ thông thường và LUT mở rộng
Chế độ thông thường được sử dụng chủ yếu cho tạo các hàm logic tổ hợp
Trong chế độ này số biến đầu vào của LM nhiều nhất là 8 Chế độ này cho phép 2 hàm có thể được cài đặt bằng một LM hoặc một hàm với số đầu vào nhiều nhất là 6 Các hàm có thể chia sẻ biến đầu vào hoặc hoàn toàn độc lập (hình 1.4)
Hình 1.4 Một số cấu hình của LM
Chế độ LUT mở rộng cho phép ta mở rộng đến 6 biến đầu vào, như hình 2.5 Một bộ phần kênh được tích hợp sẵn bên trong LM cho phép ta mở rộng số biến đầu vào lên 6
Hầu hết FPGA hiện nay đều dựa theo công nghệ SRAM và dữ liệu hình các CLB sẽ mất khi ngắt nguồn cấp Vì vậy, một số FPGA tích hợp sẵn bộ nhớ bất khả biến để lưu dữ liệu cấu hình và tự động cấu hình FPGA khi có nguồn tin hoặc yêu cầu một bộ nhớ bất khả biến bên ngoài và một bộ vi xử lý được tích hợp sẵn trong FPGA sẽ điều khiển quá trình trao đổi dữ liệu và cấu hình FPGA khi nguồn cấp trở lại
FPGA như chúng ta thảo luận, thực chất như là các IC “trắng” và người dùng cuối có thể lập trình cho bất kỳ thiết kế logic nào FPGA cũng bao gồm lõi logic cứng (hard-core logic) Lõi cũng là một phần logic bên trong được nhà sản xuất đặt sẵn để cung cấp một chức năng cụ thể và không thể thay đổi bởi người dùng Ví dụ, nếu người dùng cần một bộ vi xử lý nhỏ trong thiết kế, bộ vi xử lý đó có thể được lập trình trên FPGA sử dụng các CLB bởi người dùng hoặc được
5 được cung cấp dưới dạng lõi cứng bởi nhà sản xuất Nếu chức năng nào đó cho phép người dùng lập trình lại được, nó được gọi là lõi mềm Lợi thế của lõi cứng là cứng một thiết kế thì lõi cứng chiếm ít tài nguyên hơn là người dùng tự lập trình tại hiện trường Các lõi cứng đã được kiểm tra và thử nghiệm Mặt trái của lõi cứng là các chức năng của nó là cố định
Lõi cứng thường có sẵn cho các chức năng phổ biến, hay được sử dụng trong thiết kế số như bộ vi xử lý, bộ xử lý các chuẩn giao tiếp, các bộ DSP Một FPGA có thể có nhiều lõi cứng được nhà sản xuất tích hợp bên trong Hình 1.5 miêu tả lõi cứng được bao quanh bởi các CLB được nhà sản xuất lập trình sẵn
Hình 1.5 Ý tưởng cơ bản của lõi logic cứng được nhúng trong FPGA
Các lõi cứng nói chung được phát triển bởi và là bản quyền của nhà sản xuất FPGA Các thiết kế thuộc sở hữu của nhà sản xuất được gọi là IP Một số IP là pha trộn giữa lõi cứng và lõi mềm Ví dụ một bộ vi xử lý cho phép người dùng chọn lựa và hiệu chỉnh một số tham số
Sơ đồ khối phổ biến của FPGA được cho trong hình 1.6 FPGA bao gồm các khối bộ nhớ cũng như các bộ DSP được đặt khắp bên trong và được kết nối với kết nối toàn cục của FPGA
Hình 1.6 Ví dụ sơ đồ khối của FPGA
Các ứng dụng của công nghệ FPGA
Khi xem xét các tính năng có lợi khác nhau của chip FPGA, người ta có thể suy ra loại ứng dụng mà FPGA sẽ phù hợp nhất Chúng thường được sử dụng cho các dự án có điện năng thấp và độ phức tạp cao vì chúng cung cấp khả năng tùy biến phần cứng
Các ứng dụng chính của FPGA là: Y tế, xử lý video & hình ảnh, viễn thông, máy chủ & công nghệ đám mây, quốc phòng và không gian
Hình 1.7 Các ứng dụng của công nghệ FPGA
Chip FPGA được sử dụng trong cả giao tiếp có dây và không dây Trong giao tiếp có dây, nó được sử dụng trong bảng nối đa năng nối tiếp và giao tiếp không dây, nó được sử dụng cho các giải pháp mạng và giải quyết các tiêu chuẩn của WiMAX, 5G/6G và HSDPA FPGA được sử dụng ở phía cơ sở hạ tầng giúp xử lý dữ liệu ở tốc độ cao
Trong lĩnh vực ứng dụng y tế, chip FPGA được sử dụng cho mục đích chẩn đoán và giám sát Chúng được sử dụng trong các thiết bị y tế để xử lý dữ liệu
Trong lĩnh vực ứng dụng hàng không vũ trụ và quốc phòng, chip FPGA được sử dụng để xử lý hình ảnh, cấu hình lại một phần cho SDR, cũng như để tạo dạng sóng
Công nghệ FPGA cung cấp cho các công ty ASIC cơ hội tạo mẫu nhanh, nơi các ý tưởng và khái niệm có thể được thử nghiệm mà không cần trải qua một quá trình dài FPGA được sử dụng để cải thiện thời gian đưa ra thị trường các sản phẩm công nghệ khác nhau và giảm chi phí kỹ thuật tổng thể phát sinh trong một số quy trình bao gồm giám sát và tự động hóa công nghiệp
Vì FPGA được sử dụng để cấu hình lại và theo kịp các sửa đổi, nên nó giảm chi phí bảo trì dài hạn cần thiết cho hệ thống Ngay cả các nhà phát triển của Microsoft cũng có quyền truy cập vào các chip FPGA và họ làm việc với các công cụ nguồn mở có tên là Bộ công cụ nhận thức của Microsoft Microsoft đang sử dụng Intel FPGA để họ có thể tăng cường sử dụng Al trong các hoạt động của mình
7 Trên thực tế, FPGA đang được sử dụng phổ biến để phát triển các mạng thần kinh sâu hoặc DNN, điều này cuối cùng sẽ dẫn đến việc sản xuất và bảo trì các hệ thống thông minh nhân tạo Các FPGA hiệu suất cao thậm chí có thể giúp ích nhiều hơn cho một ứng dụng khi so sánh với GPU và do đó được ưu tiên cho mục đích phát triển công nghệ máy học
Việc mua lại gần đây của Intel (đã mua Altera) và AMD (đã mua Xilinx) cho thấy tầm quan trọng của FPGA trong thị trường máy chủ và máy tính, đây có thể là phân khúc thị trường sẽ cho thấy sự tăng trưởng của thị trường FPGA
FPGAs trong công nghệ viễn thông
Chip FPGA được sử dụng trong cả giao tiếp có dây và không dây Trong truyền thông có dây, chúng được sử dụng trong bảng nối đa năng và trong truyền thông không dây, chúng được sử dụng trong các trạm cơ sở di động Ngày nay, FPGA được sử dụng cho các giải pháp kết nối mạng và giải quyết các tiêu chuẩn
WiMAX, 5G/6G và HSDPA FPGA trong truyền thông có dây và không dây cũng được sử dụng để Xử lý tín hiệu và mục đích loại bỏ nhiễu cũng rất tốt
FPGA có thể được sử dụng trong các ô nhỏ đến các ô vĩ mô phụ – 6 GHz đến mmWave Chúng ta sẽ tìm thấy FPGA trong các trạm gốc 5G hiệu suất cao Hình 1 cho thấy ứng dụng Nhập trước xuất trước (FIFO) trong các hệ thống truyền thông 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 Hơn nữa, chúng ta có thể sử dụng khối nối tiếp IFFT để song song và song song với khối nối tiếp để chọn băng thông tần số chính xác Ứng dụng này rất hữu ích để loại bỏ nhiễu khỏi tín hiệu và chọn tần số
Hình 1.8 Ứng dụng của FIFO trong viễn thông
FPGAs trong các ứng dụng quốc phòng
Các giải pháp tiên tiến của FPGA cho phép các RADAR ngày nay được sử dụng trong hệ thống phòng thủ và Tình báo Điện tử đạt được thành công trong nhiệm vụ Vì CPU hoặc GPU không thể đạt được những gì FPGA có thể làm do
8 tính chất lập trình của nó Việc lập trình lại không chỉ để thay đổi dạng sóng mà cả thuật toán cũng như sử dụng logic lập trình được
Hình 1.9 Chuyển đổi dữ liễu và lọc Định dạng chùm thích ứng là điển hình cho bất kỳ hệ thống RADAR nào yêu cầu hướng dẫn và theo dõi độ chính xác chính xác trong phổ được phân bổ
Các giải pháp dựa trên Hình 2 cho phép các nhà thiết kế RADAR xây dựng phần cứng thông qua lập trình đáp ứng hiệu suất tốt nhất Ứng dụng này có thể được sử dụng để thu thập dữ liệu Tần số vô tuyến và thực hiện chuyển đổi tương tự sang kỹ thuật số vì dữ liệu ở định dạng tương tự, nhưng FPGA chỉ hiểu định dạng kỹ thuật số của dữ liệu, do đó cần có ADC Sau khi dữ liệu được chuyển đổi thành định dạng kỹ thuật số, thuật toán lọc FPGA được phát triển bằng ngôn ngữ RTL để chuyển đổi dữ liệu thô thành định dạng chùm tương ứng hoặc lọc tương ứng để đạt được kết quả mong muốn FPGA có thể sử dụng bất kỳ kiểu dữ liệu DSP nào, tức là fixed, float, double Các FPGA hiện đại cũng được trang bị Ethernet, PCIe, Interlaken, SRIO hoặc bất kỳ giao diện tùy chỉnh nào giúp xử lý dữ liệu nhanh hơn với độ trễ tối thiểu
FPGAs trong các ứng dụng không gian
FPGA có các ứng dụng trong không gian để truyền dữ liệu từ mặt đất đến đơn vị không gian như vệ tinh và vệ tinh đến trạm mặt đất FPGA có thể được sử dụng để xử lý dữ liệu quang học có độ phân giải cao và chụp ảnh radar Nó có thể được sử dụng trong không gian để kiểm soát quỹ đạo để giao tiếp với các cảm biến Nó cũng có thể được sử dụng để xử lý video để nén và giải nén dữ liệu theo yêu cầu băng thông dữ liệu Hình 3 cho thấy dòng bit cấu hình vệ tinh đơn giản của mảng FPGA trong các ứng dụng không gian thường gặp phải các sự cố khó chịu do sự kiện đơn lẻ do môi trường được làm cứng bằng bức xạ trong không gian, điều này có thể dẫn đến tính toàn vẹn của dữ liệu trong bộ nhớ và dẫn đến lỗi ngẫu nhiên Đối với các bộ nhớ thương mại được sử dụng trong quỹ đạo Trái đất cao (HEO), lỗi bit đơn và giải thích lỗi byte kép cho một số lượng lớn 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.10 Hệ thống phát hiện và sửa lỗi vệ tinh
FPGAs trong các ứng dụng ô tô
NGÔN NGỮ VHDL
Giới thiệu về ngôn ngữ VHDL
VHDL là ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao, là một loại ngôn ngữ mô tả phần cứng được phát triển dung cho trương trình VHSIC (Very High Speed Itergrated Circuit) của bộ quốc phòng Mỹ Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô phỏng phần cứng tiêu chuẩn và thống nhất cho phép thử nghiệm các hệ thống số nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trọng thực tế Ngôn ngữ VHDL được ba ng ty Intermetics, IBM và Texas Instruments bắt đầu nghiên cứu phát triển vào tháng 7 năm 1983 Phiên bản đầu tiên được công bố vào tháng 8- 1985 Sau đó VHDL được đề xuất để tổ chức IEEE xem xét thành một tiêu chuẩn chung Năm 1987 đưa ra tiêu chuẩn về VHDL (tiêu chuẩn IEEE- 1076-1987)
VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thay đổi và lập tài liệu cho các hệ thống số VHDL là một ngôn ngữ độc lập không gắn với bất kỳ một phương pháp thiết kế, một bộ mô tả hay công nghệ phần cứng nào Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp thiết kế trong khi chỉ sử dụng một ngôn duy nhất.
Các ưu điểm của ngôn ngữ VHDL
- Tính công cộng: VHDL được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE, VHDL không thuộc sở hữu của bất kỳ cá nhân hay tổ chức nào Do đó VHDL được hỗ trợ của nhiều nhà sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống Ðây là một ưu điểm nổi bật của VHDL, giúp VHDL trở nên ngày càng phổ biến
- Khả năng hỗ trợ nhiều công nghệ và phương pháp thiết kế: VHDL cho phép thiết kế bằng nhiều phương pháp như phương pháp thiết kế từ trên xuống, hay từ dưới lên dựa vào các thư viện có sẵn Như vậy VHDL có thể phục vụ tốt cho nhiều mục đích thiết kế khác nhau, từ việc thiết kế các phần tử phổ biến đến việc thiết kế các IC ứng dụng đặc biệt (Application Specified IC)
- Ðộc lập với công nghệ: VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng có thể được chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc vào công nghệ chế tạo phần cứng nào được sử dụng (dùng CMOS, nMOS, hay GaAs) Ðây cũng là một ưu điểm quan trọng của VHDL nó cho phép người thiết kế không cần quan tâm đến công nghệ phần cứng khi thiết kế hệ thống, như thế khi có một công nghệ chế tạo phần cứng mới ra đời nó có thể được áp dụng ngay cho các hệ thống đã thiết kế
- Khả năng mô tả mở rộng: VHDL cho phép mô tả hoạt động của phần cứng từ mức hệ thống số (hộp đen) cho đến mức cổng VHDL có khả năng mô tả hoạt động của hệ thống trên nhiều mức nhưng chỉ sử dụng một
12 cú pháp chặt chẽ thống nhất cho mọi mức 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
- Khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các thiết kế:
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 Bên trong ngôn ngữ VHDL có nhiều tính năng hỗ trợ việc quản lý, thử nghiệm và chia sẻ thiết kế VHDL cũng cho phép dùng lại các phần đã có sẵn.2.3 Cấu trúc một mô hình thế thống sử dụng ngôn ngữ VHDL.
Cấu trúc của 1 chương trình sử dụng ngôn ngữ VHDL
Một hệ thống module logic trên VHDL bao gồm: khai báo thư viện, entity (thực thể) có chứa các entity (thực thể) con và có một entity (thực thể) có cấp bậc cao nhất và ARCHITECTURE là kiến trúc chương trình
Hình 2.1 Cấu trúc 1 chương trình VHDL
- Khai báo LIBRARY (thư viện): tương tự như C, chúng ta cần khai báo thư viện cho chương trình VHDL Một số thư viện sau thường dùng cho thiết kế: ieee, stđ, work Khai báo thư viện phải đầu mỗi chương trình và mỗi module đều phải khai báo
- ENTITY (thực thể): Khai báo các chân I/O của mạch thiết kế, các tham số tĩnh dùng chung (generic) của một module VHDL
- ARCHITECTURE (kiến trúc): là phần mô tả chính của một module VHDL Mô tả các chức năng chính của thiết kế hay còn gọi là hàm
Khai báo thư viện phải được đặt đầu tiên trong mỗi module VHDL, lưu { rằng nếu ta sử dụng một file để chứa nhiều module khác nhau thì mỗi một module đều phải yêu cầu có khai báo thư viện đầu tiên, nếu không khi biên dịch sẽ phát sinh ra lỗi
Ví dụ về khai báo thư viện library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
Khai báo thư viện bắt đầu bằng từ khóa Library Tên thư viện (chú ý là
VHDL không phân biệt chữ hoa chữ thường) Sau đó trên từng dòng kế tiếp sẽ khai báo các gói thư viện con mà thiết kế sẽ sử dụng, mỗi dòng phải kết thúc bằng dấu “;”
Tương tự như đối với các ngôn ngữ lập trình khác, người thiết kế có thể khai báo sử dụng các thư viện chuẩn hoặc thư viện người dùng Thư viện IEEE gồm nhiều gói thư viện con khác nhau trong đó đáng chú ý có các thư viện sau:
- Gói IEEE.std_logic_1164 cung cấp các kiểu dữ liệu std_ulogic, std_logic, std_ulogic_vector, std_logic_vector, các hàm logic and, or, not, xor, … các hàm chuyển đổi giữa các kiểu dữ liệu trên
Std_logic, std_ulogic hỗ trợ kiểu logic với 9 mức giá trị (xem 4.2) - Gói STD.TEXTIO.all chứa các hàm vào ra READ/WRITE để đọc ghi dữ liệu từ FILE, STD_INPUT, STD_OUTPUT
- Gói IEEE.std_logic_arith.all định nghĩa các kiểu dữ liệu số guyên SIGNED, UNSIGNED, INTEGER, cung cấp các hàm số học bao gồm “+”, “-”, “*”, “/”, so sánh “”, “=”, các hàm dịch trái, dịch phải SHL, SHR, các hàm chuyển đổi từ kiểu vector sang các kiểu số nguyên và ngược lại
- Gói IEEE.math_real.all; IEEE.math_complex.all; cung cấp các hàm làm việc với số thực và số phức như SIN, COS, SQRT… hàm làm tròn, CIEL, FLOOR, hàm tạo số ngẫu nhiên SRAND, UNIFORM… và nhiều các hàm tính toán số thực khác
- Gói IEEE.numeric_std.all; và IEEE.numeric_bit.all cung cấp các hàm tính toán và biến đổi với các dữ liệu kiểu số có dấu, không dấu, chuỗi bit và chuỗi dữ liệu kiểu std_logic Cụ thể và chi tiết hơn về các thư viện chuẩn của IEEE có thể thamkhảo thêm trong tài liệu của IEEE (VHDL Standard Languagereference), hoặc các nguồn tham khảo khác trên Internet
Khai báo thực thể (entity) là khai báo về mặt cấu trúc các cổng vào ra (port), các tham số tĩnh dùng chung (generic) của một module VHDL
14 entity identifier is generic (generic_variable_declarations); port (input_and_output_variable_declarations); end entity identifier;
Trong đó - identifier là tên của module
- 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)
- Khai báo cổng vào ra: liệt kê tất cả các công vào ra của module, các cổng có thể hiểu là các kênh dữ liệu động của module để phân biệt với các tham số trong khai báo generic Kiểu của các cổng có thể là: o in: cổng vào o out: cổng ra o inout vào ra hai chiều
Mô tả kiến trúc (ARCHITECTURE) là phần mô tả chính của một module VHDL, nếu như mô tả entity chỉ mang tính chất khai báo về giao diện của module thì mô tả kiến trúc chứa nội dung về chức năng của module Cấu trúc của mô tả kiến trúc tổng quát như sau: architecture identifier of entity_name is
[ statements ] end identifier ; Trong đó
- 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
- [declarations] có thể có hoặc không chứa các khai báo cho phép như sau: o Khai báo và mô tả chương trình con (subprogram) o Khai báo kiểu dữ liệu con (subtype) o Khai báo tín hiệu (signal), hằng số (constant), file o Khai báo module con (component)
- [statements] phát biểu trong khối {begin end process;} chứa các phát biểu đồng thời (concurrent statements) hoặc các khối process chứa các phát biểu tuần tự (sequential statements)
SƠ LƯỢC VỀ PHẦN MỀM QUARTUS
Giới thiệu chung
Quartus II là phần mềm cho hệ điều hành Windows, thuộc nhóm phần mềm Software được phát triển bởi NA Phiên bản mới nhất của Quartus II là Version NA (cập nhật NA)
Quartus II, một phần mềm xuất bản bởi Altera, là nền tảng cho phép tou quản lý tài nguyên của bạn cũng như các thiết kế sử dụng công cụ năng suất tích hợp sẵn của nó Nó được trang bị với đào tạo phù hợp với các tính năng mà các nguồn lực để nâng cao năng suất của bạn Những công cụ này cũng chịu trách nhiệm thúc đẩy quá trình phát triển thông qua FPGA platform Quartus II cũng cho phép bạn làm việc trên thiết kế logic riêng của bạn thông qua các công cụ lập trình Toàn bộ gói Quartus II bao gồm HardCopy ASICs, SoC, và CPLD Bạn có thể sử dụng tất cả các chức năng với giao diện đó là dễ dàng để nắm bắt và sử dụng Các công cụ năng suất nhúng trong chương trình FPGA hỗ trợ này có một chức năng đa xử lý có nghĩa là chương trình này cho phép bạn kích hoạt thiết kế của bạn trên bất kỳ loại máy tính đa xử lý Với công cụ này bạn có thể tăng tốc thời gian biên dịch của bạn càng nhiều càng tốt 20 phần trăm vì nó cho phép xử lý song song Các nhà xuất bản của phần mềm này ra mắt một công cụ năng suất gọi là Open Computing Language (OpenCLTM) được tích hợp trong phiên bản khác của Quartus gọi Altera DSK Khái niệm của việc kết hợp các chức năng của
FPGA và Open Computing Language (OpenCLTM) nhằm mục đích để cung cấp tăng tốc hệ thống
Hình 3.1 Giao diện của phần mềm Quartus
Tạo 1 project mới
Sau khi mở phần mềm lên, chọn New Project Wizard
Hình 3.2 Giao diện chọn New Project Wizard
Sau đó, 1 cửa sổ xuất hiện để lựa chọn thư viện lưu project và đặt tên cho project Lưu ý, khi đặt tên cho folder chứa project, ta nên đặt trùng tên với top module của project mình làm việc để dễ dàng tìm kiếm
Hình 3.3 Cửa sổ thiết lập thư việc và tên project
Tiếp theo, vì ta đang tạo 1 project mới hoàn toàn nên tiếp tục chọn Next >
Next cho đến khi chuyển đến cửa sổ bên dưới 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
Hình 3.4 Giao diện lựa chọn thiết bị FPGA
Trong mục Name Filter, ta có thể điền trực tiếp tên thiết bị để có thể chọn được nhanh nhất Tên thiết bị được in trực tiếp trên con chip tại bo mạch mình sử dụng Ở đây, ta đang làm việc với bo mạch Altera De0-CV Theo công bố của nhà sản xuất hoặc ta có thể thấy trực tiếp trên bo mạch, chip FPGA của chúng ta là Cyclone V 5CEBA4F23C7
Hình 3.5 Tên thiết bị được in trực tiếp trên chip
Sau khi đã chọn được thiết bị, nhấn Finish Tiếp theo, ta sẽ tạo các file HDL để lập trình theo nhu cầu project Ở đây, ngôn ngữ ta sử dụng là VHDL Ta chọn File > New > VHDL File
Hình 3.6 Thêm các file HDL
Sau khi đã tạo được file HDL, ta sẽ viết phần mã lập trình cho thiết kế của chúng ta
Hình 3.7 Mã lập trình cho thiết kế clock_divider
Tiếp theo, chọn File > Save để lưu file thiết kế Lưu ý rằng ta bắt buộc phải đặt tên file trùng tên với module để trình biên dịch có thể phát hiện và biên dịch được module đó
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
24 Nếu trong thiết kế của ta có lỗi, trình biên dịch sẽ thông báo tại cửa sổ
Thực hiện kiểm tra lại mã nguồn và sửa toàn bộ lỗi phát sinh, sau đó ta biên dịch lại chương trình cho đến khi phần mềm không còn thông báo lỗi nữa
Sau khi đã hoàn thành mã nguồn của thiết kế, ta chuyển đến bước thực hiện gán các chân điều khiển vào ra của thiết kế lên kit FPGA Chọn Assignments >
Pin Planner Cửa sổ Pin Planner sẽ xuất hiện như hình 3.10
Hình 3.10 Cửa sổ Pin Planner
Cột Node Name chứa những tín hiệu vào và ra của thiết kế kết hợp với cột Direction ngay bên cạnh để xác định chiều của các cổng này Dựa theo User Manual của hãng phát hành, tại cột I/O Standard ta chọn 3.3V – LVTTL và cột
Current Strength là 16mA 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
Cuối cùng, ta sẽ thực hiện nạp chương trình xuống bo mạch Kết nối bo mạch với máy tính của chúng ta thông qua cổng USB Blaster và chọn Program
Device, sau đó cửa sổ Programmer xuất hiện như hình 3.11
Chọn Hardware Setup, tại cửa sổ Hardware Setup mới xuất hiện ta chọn thiết bị trùng tên với thiết bị mà mình làm việc Sau khi hoàn thành việc thêm thiết bị, ta đóng cửa sổ này lại
Tích chọn vào Program/Configure, sau đó nhấn Start để bắt đầu nạp chương trình xuống bo mạch Khi thanh Progress đạt 100% tức là quá trình nạp chương trình đã hoàn thành.
Kiểm thử thiết kế
Với thiết kế clock_divider đơn giản như tác giả vừa trình bày, ta có thể chạy kiểm thử với phần mềm ModelSim được tích hợp ngay trong phần mềm Quartus
Chọn File > New > University Program VPF, sau đó Cửa sổ Simulation Waveform Editor xuất hiện như hình 3.12
Hình 3.12 Cửa sổ Simulation Waveform Editor
Tại cột Name, ta nhấn chuột phải và chọn Node Finder Tại cửa sổ Node Finder mới xuất hiện, ta chọn List để liệt kê toàn bộ các tín hiệu của thiết kế Các
26 tín hiệu mà chúng ta quan tâm sẽ được thêm vào danh sách mô phỏng bằng biểu tưởng > hoặc có thể thêm toàn bộ tín hiệu của thiết kế bằng biểu tưởng >>, cuối cùng chọn OK
Gán các ràng buộc đầu vào của thiết kế bằng các biểu tưởng trên thành công cụ như Overwrite Clock để cài đặt cho tín hiệu clock đồng bộ của thiết kế,
… Sau khi đã hoàn thành bước này, chọn Run Functional Simulation Kết quả thu được như hình 3.13
Hình 3.13 Kết quả mô phỏng của thiết kế clock_divider
Với kết quả mô phỏng như trên, thiết kế đã đáp ứng đúng mong muốn của chúng ta là chia tần số nhỏ đi 64 lần
THIẾT LẬP BỘ ĐIỀU KHIỂN VỚI FPGA VÀ XÂY DỰNG MÔ HÌNH CHO ROBOT TỰ TRÁNH VẬT CẢN
Các thành phần hệ thống
4.1.1.1 Bộ điều khiển trung tâm
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, …
Hình 4.2 Mặt trước của bo mạch De0-CV
Hình 4.3 Mặt sau của bo mạch Bảng 4.1 Thông số kĩ thuật của bo mạch De0-CV
FPGA Device • Cyclone V 5CEBA4F23C7N Device
Configuration and Debug • Serial Configuration device – EPCS64 on FPGA
• On-Board USB Blaster (Normal type B USB connector)
• JTAG and AS mode configuration
Memory Device • 64MB SDRAM, x16 bits data bus
Display • Uses a 4-bit resistor-network DAC
• With 15-pin high-density D-sub connector
Micro SD Card Socket • Provides SPI and 4-bit SD mode for
Switches, Buttons and LEDs • 10 LEDs
4.1.1.2 Cảm biến phát hiện vật cản
Cảm biến siêu âm HC-SR04 là một dạng cảm biến module Cảm biến này thường chỉ là một bản mạch, hoạt động theo nguyên lý thu phát sóng siêu âm bởi 2 chiếc loa cao tần Một số ứng dụng thường thấy của cảm biến này là phát hiện vật cản trên xe robot, đo khoảng cách vật, …
Hình 4.4 Module cảm biến siêu âm HC-SR04
Cảm biến siêu âm HC-SR04 cấu tạo gồm 3 phần:
- Bộ phận phát sóng siêu âm: Cấu tạo của các đầu phát và đầu thu siêu âm là các loa gốm đặc biệt, phát siêu âm có cường độ cao ở tần số thường là 40kHz cho nhu cầu đo khoảng cách Về nguyên lý, các loa này cần có nguồn điện áp cao mới phát tốt được (nhà sản xuất công bố = 30V) Trên mạch công suất sử dụng IC MAX232 làm nhiệm vụ đệm IC này sẽ lấy tín hiệu từ bộ điều khiển, khuếch đại biên độ lên mức +/-30V cấp nguồn cho bộ loa trên IC này sẽ được đóng ngắt qua một transistor để hạn chế việc tiêu thụ dòng
Hình 4.5 Phát sóng trên cảm biến siêu âm HC-SR04
- Bộ phận thu sóng siêu âm phản xạ: Thiết bị thu là dạng loa gốm có cấu tạo chỉ nhạy với một tần số chẳng hạn như 40KHz Qua một loạt các linh kiện như OPAM TL072, transistor NPN…Tín hiệu này liên tục được khuếch đại biên độ và cuối cùng là đưa qua một bộ so sánh, kết hợp với tín hiệu từ bộ điều khiển để đưa về bộ điều khiển
- Bộ phận xử lý, điều khiển tín hiệu: Ở đây, bộ điều khiển trung tâm Cyclone V được sử dụng làm nhiệm vụ phát xung, xử lý tính toán thời gian từ khi phát đến khi thu được sóng siêu âm nếu nhận được tín hiệu TRIG
Nguyên lý hoạt động cảm biến siêu âm HC-SR04:
- Để đo khoảng cách bằng cảm biến siêu âm HC-SR04, ta sẽ phát 1 xung rất ngắn (5 microSeconds) từ chân Trig Tiếp theo, 1 xung HIGH ở chân Echo sẽ được cảm biến tạo ra và phát đi cho đến khi nhận lại được sóng phản xạ ở chân này Lúc này, độ rộng của xung sẽ bằng với thời gian sóng siêu âm được phát từ cảm biến và phản xạ lại
- Trong không khí, tốc độ âm thanh đạt mức 340 m/s (hằng số), tương đương với 29,412 microseconds/cm (106 / (340*100))
- Khi đã tính được thời gian, ta sẽ chia cho 29,412 để ra giá trị khoảng cách
Hình 4.6 Kích thước và sóng cảm biến siêu âm HC-SR04
31 Ví dụ đo mức chất lỏng có trong bồn chứa bằng cảm biến siêu âm HC- SR04, ta sẽ có các bước như sau: o Đặt chân TRIG lên mức Cao (5V) trong 10 μs (microseconds) o Sau đó module siêu âm ghi lại thời gian và gửi ra sóng âm tần số 40Khz o Sóng siêu âm truyền xuống bề mặt chất lỏng trong bồn chứa và phản xạ lại o Sóng phản xạ truyền ngược về đầu dò o Module siêu âm nhận được sóng phản xạ và đánh dấu thời gian nhận được tín hiệu này o Cuối cùng, module siêu âm đưa chân ECHO lên mức cao trong khoảng thời gian (microseconds ) phản hồi sóng âm (Gửi đi – nhận về) và tính toán ra khoảng cách Kết quả trên chân ECHO: 58 μs/cm o Vì vậy, nếu chân ECHO lên mức cao trong thời gian 5800 μs (5.8 ms), thì chúng ta tính được khoảng cách giữa cảm biến và mức chất lỏng trong bể là: 5800μs / 58μs/cm = 100cm = 1m
Trước khi đi vào tìm hiểu các phần tiếp theo của dòng cảm biến này, chúng ta cùng điểm qua một vài thông số kỹ thuật nổi bật của cảm biến siêu âm HC- SR04 như sau:
- Model: HC-SR04 - Điện áp làm việc: 5VDC - Dòng điện: 15mA
- Tần số: 40 KHZ - Khoảng cách phát hiện: 2cm – 4m - Tín hiệu đầu ra: Xung mức cao 5V, mức thấp 0V - Góc cảm biến: Không quá 15 độ
- Độ chính xác cao: Lên đến 3mm - Chế độ kết nối: VCC / Trig (T-Trigger) / Echo (R-Receive) / GND
Một bộ phận không thể thiếu trong xe tự hành đó chính là động cơ Ở mục tiêu đề tài này, yếu tố di chuyển chính xác không quá quan trọng nên em lựa chọn sử dụng động cơ DC GA25 Ưu điểm dễ thấy nhất của động cơ này là giá thành rẻ, nhiều loại tốc độ để lựa chọn Nguyên lý hoạt động đơn giản, dựa trên phương pháp điều chế độ rộng xung PWM (Pulse Width Modulation)
Hình 4.7 Động cơ DC GA25 Bảng 4.2 Thông số kĩ thuật động cơ DC GA25 Điện áp cung cấp 3 ~ 12V
Tốc độ không hộp số 5600rpm
Tốc độ qua hộp số 3V ~ 30rpm
12V ~ 130rpm Nguyên lý điều chế độ rộng xung PWM
- Phương pháp điều xung PWM (tiếng anh Pulse Width Modulation) là phương pháp điều chỉnh điện áp ra tải Nói dễ hiểu đây là phương pháp giúp điều chế dựa trên sự thay đổi độ rộng chuỗi xung vuông, làm thay đổi điện áp ra Các sóng PWM khi biến đổi sẽ có cùng 1 tần số, khác nhau về độ rộng của sườn dương hay sườn âm
- Điều chế độ rộng xung PWM được ứng dụng rất nhiều trong điều khiển Đ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
PWM được ứng dụng rất nhiều trong các thiết bị điện tử, đồng
33 thời cũng là nhân tố mà các đội Robocon dùng để điều khiển động cơ hay ổn định tốc độ của động cơ
- Điều chế độ rộng xung (PWM) cho phép người dùng kiểm soát tốc độ của động cơ, sản lượng nhiệt của máy sưởi, giúp tiết kiệm năng lượng Các ứng dụng hiện có cho PWM gồm:
• Bộ điều khiển quạt tản nhiệt với tốc độ thay đổi
• Hệ thống truyền động máy nén VRF HVAC
• Mạch truyền động đối với động cơ xe hybrid và điện
• Bộ điều chỉnh độ sáng LED
Không thể thiếu khi đi kèm với động cơ đó chính là driver điều khiển Để điều khiển động cơ DC kể trên, L298N sẽ là lựa chọn phù hợp về cả mặt giá thành cũng như chức năng cần đảm bảo
L298N là module điều khiển động cơ trong các xe DC và động cơ bước
Module có một IC điều khiển động cơ L298 và một bộ điều chỉnh điện áp 5V 78M05 Module L298N có thể điều khiển tối đa 4 động cơ DC hoặc 2 động cơ DC với khả năng điều khiển hướng và tốc độ
Hình 4.8 Driver L298N Bảng 4.3 Cấu hình sơ đồ chân L298N
IN1 & IN2 Các chân đầu vào điều khiển hướng quay động cơ A
IN3 & IN4 Các chân đầu vào điều khiển hướng quay của Động cơ B
ENA Kích hoạt tín hiệu PWM cho Động cơ A
VIB Kích hoạt tín hiệu PWM cho Động cơ B
34 OUT1 & OUT2 Chân đầu ra cho động cơ A
OUT3 & OUT4 Chân đầu ra cho Động cơ B
5V Cấp nguồn cho mạch logic bên trong IC L298N
Bảng 4.4 Thông số kĩ thuật của driver L298N
Chip điều khiển Cặp H-Bridge
L298N Điện áp cấp cho động cơ (Tối đa)
Dòng điện cấp động cơ (tối đa) 2A Điện áp logic 5V Điện áp hoạt động của IC 5-35V Dòng điện hoạt động IC 2A
Cảm biến dòng điện cho mỗi động cơ Có tản nhiệt cho hiệu suất tốt hơn
Có đèn báo LED bật nguồn
Các khối chức năng
Trong chương này, ngôn ngữ mô tả phần cứng VHDL (Very High Speed Itegrated Circuit Hardware Description Language) được sử dụng để xây dựng thiết kế mô hình trên phần mềm Quartus và được kiểm thử dựa vào công cụ ModelSim được tích hợp ngay trong phần mềm nói trên
Khối phát hiện vật cản
Khối phát hiện vật cản có nhiệm vụ phát hiện vật cản trong khoảng cách cài đặt để truyền tín hiệu về bộ điều khiển trung tâm Dựa trên thuật toán né tránh tác giả đã xây dựng, bộ điều khiển trung tâm sẽ phát xung PWM tới 2 động cơ đề điều chỉnh tốc độ, hướng di chuyển
Thành phần không thể thiếu trong bất kì hệ thống nào đó chính là khối counter
(khối đếm) Hình 5.1 mô tả các thông tin đơn giản của khối này bao gồm các đầu vào và đầu ra của khối
Chức năng chính của khối này là cho ra một đầu ra counter_output có giá trị tăng 1 đơn vị mỗi sườn dương của tín hiệu clk và sẽ được đặt lại về 0 mỗi khi tín hiệu reset ở mức logic thấp (mức 0) Tín hiệu enable có chức năng bắt đầu bộ đếm khi đạt mức logic cao (mức 1)
Khối trigger_generator đảm nhiệm chức năng tạo xung kích hoạt cho các cảm biến siêu âm phát xung bắt đầu dò tìm vật cản phía trước
Các tín hiệu của khối counter tại mục 5.1.1 được sử dụng thành những tín hiệu trung gian cho khối trigger_generator Ta đặt 1 biến tạm có giá trị là
5.000.000 trong hệ cơ số 10 hay 0100.1100.0100.1011.0100.0000 trong hệ binary để so sánh với giá trị ngõ ra của khối counter Theo chức năng đã mô tả của khối counter, giá trị này cần 5.000.000 chu kì clock, mà mỗi chu kì là 20ns
Vậy giá trị biến tạm ta đặt ra cần 100ms để đạt được hay nói cách khác mỗi 100ms ta sẽ gửi tín hiệu cho cảm biến bắt đầu quá trình dò quét vật cản 01 lần
Lệnh reset sẽ được gửi tới khối trigger_generator này mỗi khi giá trị counter đạt vượt 5.000.000 chu kì clock hoặc tín hiệu counter bị nhiễu do các tác nhân không xác định 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ể
Sử dụng các tín hiệu từ 2 khối khối counter và trigger_generator được tác giả trình bày ở trên, khối ultrasonic có nhiệm vụ kích hoạt quá trình phát sóng âm
Ngõ vào echo của khối ngay sau khi tín hiệu trigger dừng tích cực sẽ chuyển mức từ logic 0 lên mức logic 1 Nếu sóng âm phát ra và có vật thể trong khoảng này, sóng sẽ dội lại và ngay khi sóng âm tới loa thu của cảm biến, ngõ vào echo sẽ thôi tích cực ngay lập tức Biến tạm pulse_width được tạo ra để so sánh với khoảng thời gian tín hiệu echo tích cực Ở đây, tác giả đặt giá trị cho
38 biến tạm này là 55.000 Áp dụng công thức tính khoảng cách được đề cập ở mục 4.1.2, trong khoảng thời gian để biến tạm đạt được giá trị đã đặt ra, sóng âm sẽ di chuyển được quãng đường xấp xỉ 15cm theo cả 2 chiều đi và về 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)
Tác giả thiết kế 03 cảm biến đặt theo các góc khác nhau tăng khoảng phát hiện vật cản
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ữ
Khối điều khiển động cơ
Khối động cơ có chức năng điều hướng và điều chỉnh tốc độ của xe tự hành để né tránh vật cản phía trước xe Với mỗi tình huống vật cản khác nhau, bộ điều khiển trung tâm dựa trên thuật toán mà tác giả xây dựng để gửi xung PWM khác nhau tới động cơ, cho ra tốc độ và hướng di chuyển riêng biệt
Chức năng của khối chia tần là để giảm tần số hoạt động được cấp từ bộ điều khiển trung tâm đến các thiết bị ngoại vi trong hệ thống, ở đây chính là động cơ
Lý do cần đến khối này trong ứng dụng của chúng ta là vì tần số hoạt động mặc định của bộ điều khiển De0-CV khá cao, lên tới 50Mhz Nếu hoạt động ở tần số này, động cơ sẽ rất nhanh nóng, và nếu phải hoạt động trong trạng thái này một thời gian dài rất dễ dẫn đến hỏng động cơ
Sử dụng các đầu ra và đầu vào của khối chia tần làm tín hiệu trung gian, khối phát xung PWM có tác dụng tạo ra xung PWM với độ rộng xung thay đổi tùy vào tốc độ chúng ta mong muốn
Như đã nói trước đó, tín hiệu PWM vẫn bật trong một thời gian cụ thể và sau đó tắt trong khoảng thời gian còn lại Điều làm cho tín hiệu PWM này trở nên đặc biệt và hữu ích hơn là chúng ta có thể đặt thời gian hoạt động của nó bằng cách kiểm soát chu kỳ nhiệm vụ của tín hiệu PWM
Khối điều khiển chính
Sau khi xây dựng được các khối chức năng đã kể trên, ta kết nối chúng vào khối điều khiển chính Qua việc gán các tín hiệu đầu ra của các khối con vào tín hiệu trung gian, khối chính sẽ tính toán và đưa ra tín hiệu điều khiển cụ thể đến từng động cơ
Hình 4.18 Khối điều khiển chính
Từ tín hiệu pwm_1 và pwm_2, tác giả xây dựng những hàm điều hướng cho xe bao gồm forward – đi thẳng, backward – đi lùi, turn_left – rẽ trái, turn_right – rẽ phải 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.
Bảng 4.6 Mô tả các lệnh điều hướng cho xe tự hành
Motor_R_forward Motor_L_forward Motor_R_backward Motor_L_backward Đi thẳng pwm_1 pwm_2 0 0 Đi lùi 0 0 pwm_1 pwm_2
Với 03 cảm biến phát hiện vật cản riêng biệt, tác giả xây dựng những trường hợp cụ thể để từ đó sử dụng lệnh điều hướng thích hợp, giúp xe dễ dành tránh được trướng ngại vật
Bảng 4.7 Quy tắc điều hướng xe tự hành tránh vật cản
Tín hiệu từ cảm biến Điều hướng động cơ
Forward Turn_left Backward Backward + Turn_right with highspeed
Turn_right Forward Backward + Turn_left with highspeed
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.
Xây dựng mô hình
Dựa trên sơ đồ đấu nối đơn giản trên, tác giả sử dụng phần mềm SolidWorks để xây dựng khung xe với những chi tiết được đo đạc cẩn thận và cân nhắc kĩ càng để có thể gá đặt động cơ và các cảm biến trong hệ thống điều khiển
Hình 4.19 Phần thân mô hình khung robot tự tránh vật cản
Hình 4.20 Phần nắp mô hình robot tự tránh vật cả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.21 Mô hình hoàn chỉnh của robot tự động tránh vật cản