Mục lục:

Làm thế nào để tạo ra Ernie: 11 bước
Làm thế nào để tạo ra Ernie: 11 bước

Video: Làm thế nào để tạo ra Ernie: 11 bước

Video: Làm thế nào để tạo ra Ernie: 11 bước
Video: Tony | Lấy Tủ Lạnh Làm Bể Cá Thủy Sinh 2024, Tháng mười một
Anonim
Làm thế nào để làm cho Ernie
Làm thế nào để làm cho Ernie

Đây là hướng dẫn về cách xây dựng Ernie, robot theo dõi âm thanh tự động của bạn, sử dụng Bảng Zybo. Nó sẽ bao gồm cách: tạo một dự án trong Vivado, tạo trình điều khiển động cơ servo giống PWM trong FPGA, giao diện với hai cảm biến âm thanh, tạo ra sự khác biệt về thời gian của IP đến, sử dụng freeRTOS và chạy zybo mà không cần pin. Đây là dự án cuối cùng của chúng tôi cho lớp Hệ điều hành thời gian thực (CPE 439) tại Cal Poly SLO.

Danh sách thiết bị:

  • 1 - Ban phát triển ZYBO Zynq 7000
  • 2 - Servo xoay liên tục thị sai
  • 2 - Cảm biến âm thanh (Máy dò âm thanh SparkFun)
  • Bộ pin 1 - 5v Lithium Ion USB (dành cho bo mạch)
  • 4 - Pin AA (dành cho servo)
  • 1 - Bộ pin AA (w / 4 khe cắm pin)
  • 1 - Cáp micro USB
  • 1 - Bảng mạch
  • nhiều - Dây đực đến Nam
  • 1 - Khung Servo

Yêu cầu phần mềm:

  • Xilinx Vivado Design Suite 2016.2
  • Digilent Adept 2.16.1

Bước 1: Thiết lập dự án trong Vivado cho Ernie

Thiết lập một dự án trong Vivado cho Ernie
Thiết lập một dự án trong Vivado cho Ernie
Thiết lập một dự án trong Vivado cho Ernie
Thiết lập một dự án trong Vivado cho Ernie
Thiết lập một dự án trong Vivado cho Ernie
Thiết lập một dự án trong Vivado cho Ernie
  1. Một trình hướng dẫn sẽ bật lên
  2. Bấm tiếp
  3. Tên tiếp theo của dự án

    1. Không bao giờ sử dụng tên dự án hoặc đường dẫn thư mục có khoảng trắng trong đó !!!!!
    2. Đây sẽ là một dự án RTL.
  4. Chúng tôi không muốn chỉ định nguồn
  5. Nhấp vào Tiếp theo, chúng ta đến trang Phần. Chúng tôi đang sử dụng ZYNQ XC7Z010-1CLG400C.

    1. Vivado không liệt kê Zybo là một trong những bảng được xác định trước. Chọn: “các bộ phận” rồi tìm kiếm xc7z010clg400-1.
    2. Nếu bạn chọn sai phần do nhầm lẫn, bạn có thể dễ dàng chuyển đổi chip: Công cụ -> Cài đặt dự án -> Chung và nhấp vào dấu chấm ở bên phải của “Thiết bị dự án”
  6. Nhấp vào Tạo thiết kế khối.

    Đặt tên cho nó là design_1 bây giờ

  7. Bạn sẽ thấy một thanh màu xanh lá cây cho biết Thêm IP, hãy nhấp vào nó.
  8. Tìm kiếm Zynq.

    1. Nhấp đúp vào Hệ thống xử lý ZYNQ7,
    2. Khối này sẽ xuất hiện trong thiết kế khối của chúng tôi.
  9. Bạn sẽ thấy một thanh màu xanh lục có nội dung Run Block Automation, hãy nhấp vào nó.
  10. Tải xuống zybo_zynq_def.xml bên dưới.
  11. Trong Vivado, nhấp vào “Nhập cài đặt XPS” và chọn “zybo_zynq_def.xml”

    Điều này sẽ điền trước cấu hình khối Vivado với tất cả các thiết bị ngoại vi tích hợp sẵn trên bo mạch Zybo và chỉ định pin

  12. Nhấp đúp vào khối ZYNQ.

    1. Cấu hình MIO

      1. Bật Bộ hẹn giờ 0 (trong Bộ xử lý ứng dụng - img 1)
      2. Bật Cơ quan giám sát (trong Bộ xử lý ứng dụng- img 1)
      3. Bật GPIO-> GPIO MIO (trong Bộ xử lý ứng dụng - img 2)
      4. Bật GPIO-> ENET Reset (trong I / O ngoại vi- img 2)
    2. Cấu hình đồng hồ

      Tắt FCLK0 (trong Đồng hồ vải PL - img 3)

  13. Nhấp vào Ok.
  14. “Chạy tự động hóa khối” ngay bây giờ.

    Sẽ có một số câu hỏi về tín hiệu, hãy nói OK

  15. Nhấp vào “Tạo HDL Wrapper”.

    Chúng tôi sẽ muốn sao chép trình bao bọc đã tạo để cho phép người dùng chỉnh sửa

  16. Bấm OK.

Bước 2: Tạo PWM của Ernie trong Vivado

Tạo PWM của Ernie trong Vivado
Tạo PWM của Ernie trong Vivado
Tạo PWM của Ernie trong Vivado
Tạo PWM của Ernie trong Vivado

Bước này sẽ tạo một IP PWM với các đầu vào được gửi qua thư viện AXI.

  1. Tạo khối GPIO AXI bằng cách nhấp chuột phải vào nền và nhấp vào "thêm IP"

    nhập "AXI_GPIO" vào thanh tìm kiếm và chọn gói này

  2. Tùy chỉnh lại IP bằng cách nhấp đúp vào khối axi_gpio_0 mới

    1. trong GPIO, đặt độ rộng GPIO thành 2. Các bit này sẽ là tín hiệu PWM_ON để điều khiển mỗi phiên bản mô-đun PWM.
    2. nhấp vào "bật kênh kép"
    3. trong GPIO 2, đặt độ rộng GPIO thành 2. Các bit này sẽ là tín hiệu PWM_FW để thiết lập hướng của từng cá thể mô-đun PWM.
  3. Nhấp chuột phải vào cổng đầu ra axi_gpio_0 có nhãn GPIO và chọn "Tạo bên ngoài"

    1. Nhấp vào đầu ra mới có nhãn GPIO và điều hướng đến tab "thuộc tính" trên thanh công cụ bên trái và đổi tên thành PWM_ON
    2. Nhấp vào đầu ra mới có nhãn GPIO2 và điều hướng đến tab "thuộc tính" trên thanh công cụ bên trái và đổi tên thành PWM_FW
  4. Chọn Chạy tự động hóa kết nối trong biểu ngữ màu xanh lá cây phía trên sơ đồ khối.

    Nếu bạn kết nối các cổng theo cách thủ công, địa chỉ AXI có thể không được định cấu hình, dẫn đến các sự cố giao tiếp sau này

  5. Trong Ngăn Điều hướng Luồng, chọn trình quản lý dự án -> Thêm Nguồn để tạo một khối IP tùy chỉnh mới

    1. chọn "thêm hoặc tạo nguồn thiết kế" và nhấn tiếp theo
    2. nhấp vào "tạo tệp", thay đổi loại tệp thành "SystemVerilog" và nhập "pwm" vào trường tên tệp, sau đó bấm OK
    3. bấm Kết thúc
    4. bỏ qua cửa sổ Xác định Mô-đun bằng cách nhấn OK (chúng tôi sẽ ghi đè những điều này sau)

      nếu nó hỏi bạn có chắc chắn không, hãy nhấp vào Có

  6. Trong tab nguồn, nhấp đúp vào pwm.sv (nằm trong "Nguồn thiết kế / design_1_wrapper")

    Sao chép / dán toàn bộ mã SystemVerilog từ tệp pwm.txt được đính kèm bên dưới

Bước 3: Tạo TDOA của Ernie trong Vivado

Tạo TDOA của Ernie trong Vivado
Tạo TDOA của Ernie trong Vivado
Tạo TDOA của Ernie trong Vivado
Tạo TDOA của Ernie trong Vivado

Bước này sẽ tạo ra một IP TDOA có đầu ra có thể được đọc qua thư viện AXI

  1. Tạo khối GPIO AXI bằng cách nhấp chuột phải vào nền và nhấp vào "thêm IP"

    nhập "AXI_GPIO" vào thanh tìm kiếm và chọn gói này

  2. Tùy chỉnh lại IP bằng cách nhấp đúp vào khối axi_gpio_1 mới

    1. trong GPIO, chọn hộp "Tất cả đầu vào" và đặt chiều rộng GPIO thành 32. Xe buýt này sẽ là chênh lệch thời gian đến giữa hai cảm biến.
    2. bên trong khối axi_gpio_1, nhấp vào + bên cạnh cổng GPIO để hiển thị gpio_io_i [31: 0].
  3. Nhấp chuột phải vào cổng đầu ra axi_gpio_1 có nhãn gpio_io_i [31: 0] và chọn "Tạo bên ngoài"

    Nhấp vào đầu vào mới có nhãn gpio_io_i [31: 0] và điều hướng đến tab "thuộc tính" trên thanh công cụ bên trái và đổi tên thành TDOA_val

  4. Chọn Chạy tự động hóa kết nối trong biểu ngữ màu xanh lá cây phía trên sơ đồ khối.

    Nếu bạn kết nối các cổng theo cách thủ công, địa chỉ AXI có thể không được định cấu hình, dẫn đến các sự cố giao tiếp sau này

  5. Trong Ngăn điều hướng luồng, chọn trình quản lý dự án -> Thêm nguồn để tạo khối IP tùy chỉnh mới

    1. chọn "thêm hoặc tạo nguồn thiết kế" và nhấn tiếp theo
    2. nhấp vào "tạo tệp", thay đổi loại tệp thành "SystemVerilog" và nhập "tdoa" vào trường tên tệp, sau đó bấm OK
    3. bấm Kết thúc
    4. bỏ qua cửa sổ Xác định Mô-đun bằng cách nhấn OK (chúng tôi sẽ ghi đè những điều này sau)

      nếu nó hỏi bạn có chắc chắn không, hãy nhấp vào Có

  6. Trong tab nguồn, nhấp đúp vào tdoa.sv (nằm trong "Nguồn thiết kế / design_1_wrapper")

    Sao chép / dán toàn bộ mã SystemVerilog từ tệp tdoa.txt đính kèm bên dưới

Bước 4: Đóng gói và xuất Ernie

Đóng gói và xuất Ernie
Đóng gói và xuất Ernie
  1. Xác minh rằng sơ đồ khối trông giống như ảnh chụp màn hình được đính kèm
  2. Trong tab nguồn, nhấp chuột phải vào design_1.bd và chọn "Tạo HDL Wrapper…"

    1. Chọn "Sao chép đầu ra đã tạo để cho phép người dùng chỉnh sửa", sau đó nhấn "OK"
    2. Sao chép mã từ design_1_wrapper.txt được đính kèm bên dưới và dán nó vào vị trí của mã design_1_wrapper.v đã tạo
    3. lưu design_1_wrapper.v
  3. Trong tab nguồn, bấm đúp vào tệp ZYBO_Master.xdc trong Ràng buộc / hằng số1

    1. Sao chép mã từ ZYBO_Master.txt được đính kèm bên dưới và dán mã đó vào vị trí của mã ZYBO_Master.xdc hiện có
    2. Lưu ý các chân đầu vào / đầu ra sau:

      1. L15: Tín hiệu PWM cho động cơ bên trái (Pmod JA2 trên Zybo)
      2. L14: Tín hiệu PWM cho động cơ bên phải (Pmod JA8 trên Zybo)
      3. V12: cổng vào từ cảm biến âm thanh 1 (Pmod JE1 trên Zybo)
      4. K16: cổng vào từ cảm biến âm thanh 2 (Pmod JE2 trên Zybo)
  4. Trong Ngăn Điều hướng Luồng, Nhấp vào "Tạo Dòng Bit" trong Chương trình và Gỡ lỗi

    nếu bạn nghĩ rằng nó được thực hiện ngay lập tức, nó có thể là không. nghiêm túc, pha một ít trà

  5. Nhấp vào Tệp-> Xuất-> Tạo phần cứng

    Chọn "Bao gồm Bitstream" và nhấn OK

  6. Nhấp vào Tệp-> Khởi chạy SDK

Bước 5: Xây dựng Ernie

Tòa nhà Ernie
Tòa nhà Ernie
Tòa nhà Ernie
Tòa nhà Ernie
  1. Gắn servo vào khung servo.
  2. Sau biểu dữ liệu cho các servos, hãy làm như sau:

    1. kết nối mặt đất của các servo với các chân nối đất trên Zybo's JA Pmod (xem hình ảnh sơ đồ chân đính kèm)
    2. kết nối chân nguồn của servo với bộ pin AA

      Chúng tôi nhận thấy rằng khi các Servos được kết nối với Vdd của Zybo, bo mạch sẽ hút quá nhiều dòng điện, khiến bo mạch liên tục đặt lại

    3. kết nối các chân tín hiệu đầu vào với các chân đầu ra thích hợp của Zybo (trái: JA2, phải: JA8)
  3. gắn các cảm biến âm thanh vào phía trước khung máy, hướng về phía trước, giữ chúng càng gần nhau càng tốt
  4. sử dụng hướng dẫn kết nối của cảm biến âm thanh để tích hợp các cảm biến âm thanh

    1. nối đất và chân Vdd của mỗi cảm biến âm thanh xuống đất và chân Vdd trên JE Pmod của Zybo (xem hình ảnh sơ đồ chân kèm theo)
    2. nối chân cổng của cảm biến âm thanh bên trái vào JE1
    3. nối chân cổng của cảm biến âm thanh bên phải sang JE2

Bước 6: BSP đầu tiên của Ernie

BSP đầu tiên của Ernie
BSP đầu tiên của Ernie
BSP đầu tiên của Ernie
BSP đầu tiên của Ernie
  1. Tạo một BSP để kết thúc nền tảng mà chúng tôi vừa tạo.

    Bạn có thể nhận được điều này thông qua File -> New -> Board Support Package

  2. Một trình hướng dẫn sẽ bật lên để giúp bạn tạo BSP.

    1. Chúng tôi muốn gắn BSP này với Nền tảng của chúng tôi mà chúng tôi vừa tạo, vì vậy
    2. Nền tảng phần cứng phải phù hợp với nền tảng chúng tôi vừa tạo (xem img 1)
    3. CPU của chúng ta sẽ là CPU _0.
    4. Nhấp vào Kết thúc
    5. Hãy nhớ chọn lwip141 để đưa vào bsp của bạn trong cửa sổ bật lên (xem img 2)

Bước 7: FreeRTOS'ing Ernie

  1. Tải xuống bản phát hành FreeRTOS mới nhất từ Sourceforge.

    Nếu tệp tải xuống là tệp thực thi, hãy chạy tệp đó để giải nén tệp FreeRTOS vào thư mục dự án của bạn

  2. Giữ SDK đó mở và nhấp vào Tệp -> Nhập.
  3. Chúng tôi muốn nhấp vào Chung-> Từ Không gian làm việc Hiện tại, và sau đó chúng tôi sẽ muốn điều hướng đến nơi chúng tôi đã tải xuống FreeRTOS.
  4. Bản demo của chúng tôi sẽ được đặt trong FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702. Khi chọn thư mục này, chúng ta sẽ thấy ba dự án bật lên (mã của chúng tôi (Hệ điều hành), BSP và Nền tảng HW).

    CHỈ Nhập RTOSDemo vào không gian làm việc hiện tại của bạn

  5. Trên tất cả các dự án thư mục “xanh lam”, hãy thay đổi BSP được tham chiếu

    1. Nhấp chuột phải và chọn “Thay đổi BSP được tham chiếu”.
    2. Chọn BSP bạn vừa tạo cho Zybo của mình
    3. Chỉnh sửa mã trong thư mục Xilinx’s SDK Blue là các dự án mã thực tế.

Bước 8: Nhập mã C của Ernie

  1. Trong thư mục RTOSDemo / src, ghi đè lên main.c hiện có bằng tệp main.c được đính kèm tại đây.
  2. Sao chép tập tin main_sound.c vào thư mục RTOSDemo / src.

Bước 9: Gỡ lỗi Ernie

  1. Chọn Run -> Debug Configurations
  2. Trên ngăn bên trái, tạo một lần chạy Trình gỡ lỗi hệ thống mới
  3. Trong tab Thiết lập Mục tiêu,

    chọn “Đặt lại toàn bộ hệ thống” để cả cái đó và ps7_init đều được chọn

  4. Bây giờ chọn tab Ứng dụng.

    1. Chọn “tải xuống ứng dụng”
    2. Đặt lõi cortexa9_0 thành “dừng ở mục nhập chương trình”
    3. Nhấp vào Áp dụng và gỡ lỗi.
  5. Xác minh rằng không có lỗi nào trong quá trình gỡ lỗi
  6. Theo dõi kỹ rô bốt, nhấn nút Tiếp tục cho đến khi chương trình chạy mà không chạm vào bất kỳ điểm ngắt nào
  7. Robot bây giờ sẽ quay lại và di chuyển về phía có tiếng ồn lớn. Yay!

Bước 10: Làm cho Ernie tự chủ

  1. Khi tất cả dự án của bạn đã sẵn sàng (bạn có thể chạy mà không gặp sự cố nào thông qua trình gỡ lỗi), bạn đã sẵn sàng tải nó vào bộ nhớ flash trên bo mạch của mình.
  2. Tạo dự án được gọi là “bộ nạp khởi động giai đoạn đầu” (FSBL) và chứa tất cả các hướng dẫn mà hội đồng quản trị của bạn sẽ cần để tải các tệp dự án của bạn (luồng bit và hệ điều hành) khi khởi động.

    1. Chọn: Tệp-> Mới-> Dự án Ứng dụng và cửa sổ sau sẽ xuất hiện.
    2. Đặt tên cho nó những gì bạn muốn (tức là “FSBL”)
    3. Đảm bảo nền tảng phần cứng là nền tảng bạn đang làm việc
    4. Nhấn tiếp theo (Không nhấn Kết thúc)
    5. Chọn mẫu Zynq FSBL
    6. Nhấp vào kết thúc.
  3. Khi quá trình tạo hoàn tất, bạn sẽ biết mọi thứ có hoạt động hay không nếu bạn thấy hai thư mục mới sau đây trong cửa sổ Project Explorer.
  4. Tạo hình ảnh khởi động Bây giờ bạn sẽ cần tạo hình ảnh khởi động.

    1. Nhấp chuột phải vào thư mục dự án của bạn (trong trường hợp này của tôi được gọi là “RTOSDemo”)
    2. Nhấp vào “Tạo hình ảnh khởi động” từ trình đơn thả xuống
    3. Nếu mọi thứ được liên kết chính xác, dự án sẽ biết nó cần tệp nào và cửa sổ sau sẽ trông như bạn thấy bên dưới (quan trọng là bạn có 3 phân vùng trong phần Hình ảnh khởi động, bộ nạp khởi động, tệp bit của bạn và tệp dự án của chính bạn.).

      Nếu đây không phải là trường hợp, có thể có điều gì đó sai với liên kết dự án của bạn. Đảm bảo rằng các thư mục dự án được liên kết với BSP tương ứng của chúng

    4. Nhấp vào nút "Tạo hình ảnh"
  5. Bước cuối cùng để thực hiện trong phần mềm là bây giờ flash hình ảnh đã tạo trước đó của bạn vào bộ nhớ của bo mạch

    1. Chọn từ thanh công cụ chính của SDK, chọn Xilinx Tools-> Program Flash Memory
    2. Đảm bảo rằng nền tảng phần cứng chính xác được chọn và đường dẫn tệp hình ảnh đang trỏ chính xác đến tệp. BIN được tạo ở bước trước.
    3. Chọn "qspi single" từ loại Flash
    4. Đánh dấu vào "Xác minh sau khi flash" để đảm bảo tính toàn vẹn nhưng nó không cần thiết
  6. Cấu hình bo mạch của bạn Cuối cùng, bạn cần đảm bảo rằng jumper chế độ lập trình bo mạch (JP5) được đặt chính xác để chọn khởi động từ qspi (chứa những gì bạn vừa flash) khi BootROM được chạy.
  7. Bây giờ, chỉ cần bật nguồn thiết bị và đảm bảo rằng “Đèn LED hoàn tất cấu hình logic” (LED 10) sáng màu xanh lục.

Bước 11: Làm cho Ernie dễ thương

  1. Lông thú
  2. Rất nhiều lông
  3. Đôi mắt to!
  4. … Mũ đội đầu

Đề xuất: