Spisu treści:

Jak zrobić Erniego: 11 kroków
Jak zrobić Erniego: 11 kroków

Wideo: Jak zrobić Erniego: 11 kroków

Wideo: Jak zrobić Erniego: 11 kroków
Wideo: Wędzarnia ogrodowa elektryczna mojego szwagierka ERNIEGO 2024, Listopad
Anonim
Jak zrobić Ernie
Jak zrobić Ernie

To jest samouczek, jak zbudować Ernie, autonomicznego robota podążającego za dźwiękiem, używając tablicy Zybo. Omówiono w nim, jak: stworzyć projekt w Vivado, stworzyć serwonapędy przypominające PWM w FPGA, połączyć się z dwoma czujnikami dźwięku, stworzyć różnicę czasu przybycia IP, użyć freeRTOS i uruchomić zybo z akumulatora. To był nasz ostatni projekt dla klasy systemów operacyjnych czasu rzeczywistego (CPE 439) w Cal Poly SLO.

Lista wyposażenia:

  • 1 - Płytka rozwojowa ZYBO Zynq 7000
  • 2 - Serwomechanizm ciągłego obrotu paralaksy
  • 2 - Czujnik dźwięku (wykrywacz dźwięku SparkFun)
  • Akumulator litowo-jonowy 1 - 5 V USB (do płyty)
  • 4 - baterie AA (do serw)
  • 1 - zestaw baterii AA (z 4 gniazdami baterii)
  • 1 - Kabel Micro USB
  • 1 - Deska do krojenia chleba
  • wiele - przewody męskie na męskie
  • 1 - Serwo podwozie

Wymagania Systemowe:

  • Xilinx Vivado Design Suite 2016.2
  • Pilny Adept 2.16.1

Krok 1: Konfiguracja projektu w Vivado dla Ernie

Konfiguracja projektu w Vivado dla Ernie
Konfiguracja projektu w Vivado dla Ernie
Konfiguracja projektu w Vivado dla Ernie
Konfiguracja projektu w Vivado dla Ernie
Konfiguracja projektu w Vivado dla Ernie
Konfiguracja projektu w Vivado dla Ernie
  1. Pojawi się kreator
  2. Kliknij Następny
  3. Następnie nazwij projekt

    1. Nigdy nie używaj nazwy projektu lub ścieżki do katalogu, która zawiera spacje!!!!!
    2. To będzie projekt RTL.
  4. Nie chcemy podawać źródeł
  5. Klikając Dalej, przechodzimy do strony części. Używamy ZYNQ XC7Z010-1CLG400C.

    1. Vivado nie ma Zybo wymienionego jako jedna z predefiniowanych płyt. Wybierz: „części”, a następnie wyszukaj xc7z010clg400-1.
    2. Jeśli przez pomyłkę wybierzesz niewłaściwą część, możesz łatwo zmienić układy: Narzędzia -> Ustawienia projektu -> Ogólne i kliknij kropki po prawej stronie „Urządzenie projektu”
  6. Kliknij opcję Utwórz projekt blokowy.

    Nadaj mu teraz nazwę design_1

  7. Zobaczysz zielony pasek z napisem Dodaj IP, kliknij go.
  8. Szukaj Zynq.

    1. Kliknij dwukrotnie System przetwarzania ZYNQ7,
    2. Ten blok pojawi się w naszym projekcie bloku.
  9. Zobaczysz zielony pasek z napisem Run Block Automation, kliknij go.
  10. Pobierz zybo_zynq_def.xml poniżej.
  11. W Vivado kliknij „Importuj ustawienia XPS” i wybierz „zybo_zynq_def.xml”

    To wstępnie wypełnia konfigurację bloku Vivado wszystkimi wbudowanymi urządzeniami peryferyjnymi i przypisaniami pinów płyty Zybo

  12. Kliknij dwukrotnie blok ZYNQ.

    1. Konfiguracja MIO

      1. Włącz Timer 0 (pod Jednostka Procesora Aplikacji - img 1)
      2. Włącz Watchdog (w Application Processor Unit- img 1)
      3. Włącz GPIO->GPIO MIO (w Application Processor Unit - img 2)
      4. Włącz GPIO->ENET Reset (pod I/O Peripherals- img 2)
    2. Konfiguracja zegara

      Wyłącz FCLK0 (pod PL Fabric Clocks - img 3)

  13. Kliknij OK.
  14. „Uruchom automatyzację bloku” teraz.

    Pojawią się pytania dotyczące sygnałów, powiedz OK

  15. Kliknij „Generuj opakowanie HDL”.

    Będziemy chcieli skopiować wygenerowany wrapper, aby umożliwić edycję użytkownika

  16. Kliknij OK.

Krok 2: Tworzenie PWM Erniego w Vivado

Tworzenie PWM Erniego w Vivado
Tworzenie PWM Erniego w Vivado
Tworzenie PWM Erniego w Vivado
Tworzenie PWM Erniego w Vivado

Ten krok wygeneruje adres IP PWM z danymi wejściowymi przesłanymi przez bibliotekę AXI.

  1. Utwórz blok AXI GPIO, klikając prawym przyciskiem myszy tło i klikając „dodaj IP”

    wpisz „AXI_GPIO” w pasku wyszukiwania i wybierz ten pakiet

  2. Ponownie dostosuj adres IP, klikając dwukrotnie nowy blok axi_gpio_0

    1. pod GPIO ustaw szerokość GPIO na 2. Te bity będą sygnałem PWM_ON do sterowania każdą instancją modułu PWM.
    2. kliknij "włącz podwójny kanał"
    3. pod GPIO 2 ustaw szerokość GPIO na 2. Te bity będą sygnałem PWM_FW, aby ustawić kierunek każdej instancji modułu PWM.
  3. Kliknij prawym przyciskiem myszy port wyjściowy axi_gpio_0 oznaczony GPIO i wybierz „Make External”

    1. Kliknij nowe wyjście oznaczone GPIO i przejdź do zakładki „właściwości” na lewym pasku narzędzi i zmień nazwę na PWM_ON
    2. Kliknij nowe wyjście oznaczone GPIO2 i przejdź do zakładki „właściwości” na lewym pasku narzędzi i zmień nazwę na PWM_FW
  4. Wybierz opcję Uruchom automatyzację połączeń na zielonym banerze nad schematem blokowym.

    Jeśli ręcznie podłączysz porty, adresy AXI mogą nie zostać skonfigurowane, co może spowodować późniejsze problemy z komunikacją

  5. W panelu Flow Navigator wybierz Project manager -> Add Sources, aby utworzyć nowy niestandardowy blok IP

    1. wybierz „dodaj lub utwórz źródła projektu” i naciśnij Dalej
    2. kliknij „Utwórz plik”, zmień typ pliku na „SystemVerilog” i wpisz „pwm” w polu nazwy pliku, a następnie kliknij OK
    3. kliknij Zakończ
    4. zignoruj okno Define Module, naciskając OK (nadpiszemy je później)

      jeśli pojawi się pytanie, czy jesteś pewien, kliknij Tak

  6. Na karcie źródeł kliknij dwukrotnie plik pwm.sv (znajdujący się w „Źródła projektu/design_1_wrapper”)

    Skopiuj/wklej cały kod SystemVerilog z pliku pwm.txt załączonego poniżej

Krok 3: Tworzenie TDOA Erniego w Vivado

Tworzenie TDOA Erniego w Vivado
Tworzenie TDOA Erniego w Vivado
Tworzenie TDOA Erniego w Vivado
Tworzenie TDOA Erniego w Vivado

Ten krok wygeneruje adres IP TDOA, którego dane wyjściowe można odczytać za pośrednictwem biblioteki AXI

  1. Utwórz blok AXI GPIO, klikając prawym przyciskiem myszy tło i klikając „dodaj IP”

    wpisz „AXI_GPIO” w pasku wyszukiwania i wybierz ten pakiet

  2. Ponownie dostosuj adres IP, klikając dwukrotnie nowy blok axi_gpio_1

    1. pod GPIO, zaznacz pole "Wszystkie wejścia" i ustaw szerokość GPIO na 32. Ta magistrala będzie różnicą czasu przybycia między dwoma czujnikami.
    2. wewnątrz bloku axi_gpio_1 kliknij + obok portu GPIO, aby wyświetlić gpio_io_i[31:0].
  3. Kliknij prawym przyciskiem myszy port wyjściowy axi_gpio_1 oznaczony jako gpio_io_i[31:0] i wybierz „Utwórz zewnętrzny”

    Kliknij nowe wejście oznaczone gpio_io_i[31:0] i przejdź do zakładki „Właściwości” na lewym pasku narzędzi i zmień nazwę na TDOA_val

  4. Wybierz opcję Uruchom automatyzację połączeń na zielonym banerze nad schematem blokowym.

    Jeśli ręcznie podłączysz porty, adresy AXI mogą nie zostać skonfigurowane, co może spowodować późniejsze problemy z komunikacją

  5. W panelu Flow Navigator wybierz Project manager -> Add Sources, aby utworzyć nowy niestandardowy blok IP

    1. wybierz „dodaj lub utwórz źródła projektu” i naciśnij Dalej
    2. kliknij „Utwórz plik”, zmień typ pliku na „SystemVerilog” i wpisz „tdoa” w polu nazwy pliku, a następnie kliknij OK
    3. kliknij Zakończ
    4. zignoruj okno Define Module, naciskając OK (nadpiszemy je później)

      jeśli pojawi się pytanie, czy jesteś pewien, kliknij Tak

  6. Na karcie źródeł kliknij dwukrotnie plik tdoa.sv (znajdujący się w „Źródła projektu/design_1_wrapper”)

    Skopiuj/wklej cały kod SystemVerilog z pliku tdoa.txt załączonego poniżej

Krok 4: Pakowanie i eksportowanie Ernie

Pakowanie i eksportowanie Ernie
Pakowanie i eksportowanie Ernie
  1. Sprawdź, czy schemat blokowy wygląda jak załączony zrzut ekranu
  2. Na karcie źródeł kliknij prawym przyciskiem myszy design_1.bd i wybierz „Utwórz opakowanie HDL…”

    1. Wybierz "Kopiuj wygenerowane wyjście, aby umożliwić edycję użytkownika", a następnie naciśnij "OK"
    2. Skopiuj kod z załączonego poniżej design_1_wrapper.txt i wklej go w miejsce wygenerowanego kodu design_1_wrapper.v
    3. zapisz design_1_wrapper.v
  3. Na karcie źródła kliknij dwukrotnie plik ZYBO_Master.xdc w obszarze Constraints/constrs1

    1. Skopiuj kod z załączonego poniżej pliku ZYBO_Master.txt i wklej go w miejsce istniejącego kodu ZYBO_Master.xdc
    2. Zwróć uwagę na następujące styki wejścia/wyjścia:

      1. L15: sygnał PWM dla lewego silnika (Pmod JA2 na Zybo)
      2. L14: sygnał PWM dla prawego silnika (Pmod JA8 na Zybo)
      3. V12: wejście bramki z czujnika dźwięku 1 (Pmod JE1 na Zybo)
      4. K16: wejście bramki z czujnika dźwięku 2 (Pmod JE2 na Zybo)
  4. W okienku Flow Navigator kliknij „Generuj strumień bitów” w obszarze Program i debugowanie

    jeśli myślisz, że zostało to zrobione od razu, prawdopodobnie tak nie jest. poważnie, zrób trochę herbaty

  5. Kliknij Plik->Eksportuj->Generuj sprzęt

    Zaznacz „Uwzględnij strumień bitów” i naciśnij OK

  6. Kliknij Plik-> Uruchom SDK

Krok 5: Budowanie Ernie

Budynek Ernie
Budynek Ernie
Budynek Ernie
Budynek Ernie
  1. Zamontuj serwa do obudowy serwomechanizmu.
  2. Postępując zgodnie z arkuszem danych serw, wykonaj następujące czynności:

    1. podłącz masę serw do pinów uziemienia na JA Pmod Zybo (patrz załączony obraz pinout)
    2. podłącz pin zasilania serw do akumulatora AA;

      Odkryliśmy, że gdy serwa są podłączone do Vdd Zybo, płyta pobiera zbyt dużo prądu, powodując ciągłe resetowanie się płyty

    3. podłącz piny sygnału wejściowego do odpowiednich pinów wyjściowych Zybo (lewy: JA2, prawy: JA8)
  3. zamontuj czujniki dźwięku z przodu obudowy, zwrócone do przodu, trzymając je jak najbliżej siebie
  4. użyj przewodnika podłączania czujnika dźwięku, aby zintegrować czujniki dźwięku

    1. podłącz uziemienie i piny Vdd każdego czujnika dźwięku do masy i pinów Vdd na JE Pmod Zybo (patrz załączony obraz pinout)
    2. Podłącz sworzeń bramki lewego czujnika dźwięku do JE1;
    3. Podłącz sworzeń bramki prawego czujnika dźwięku do JE2

Krok 6: Pierwsze BSP Ernie

Pierwszy BSP Erniego
Pierwszy BSP Erniego
Pierwszy BSP Erniego
Pierwszy BSP Erniego
  1. Utwórz BSP, aby zamknąć platformę, którą właśnie stworzyliśmy.

    Możesz to uzyskać poprzez Plik -> Nowy -> Pakiet wsparcia płyty

  2. Pojawi się kreator, który pomoże ci stworzyć BSP.

    1. Chcemy powiązać ten BSP z naszą platformą, którą właśnie stworzyliśmy, więc
    2. Platforma sprzętowa powinna być zgodna z tą, którą właśnie stworzyliśmy (patrz zdjęcie 1)
    3. Naszym procesorem będzie procesor _0.
    4. Kliknij Zakończ
    5. Upewnij się, że zaznaczyłeś lwip141 do włączenia do twojego bsp w wyskakującym oknie (patrz img 2)

Krok 7: FreeRTOS za Ernie

  1. Pobierz najnowszą wersję FreeRTOS z Sourceforge.

    Jeśli pobrany plik jest plikiem wykonywalnym, uruchom go, aby wyodrębnić pliki FreeRTOS do katalogu projektu

  2. Pozostaw ten pakiet SDK otwarty i kliknij Plik -> Importuj.
  3. Chcemy kliknąć Ogólne -> Z istniejącego obszaru roboczego, a następnie przejść do miejsca, w którym pobraliśmy FreeRTOS.
  4. Nasze demo będzie zlokalizowane w FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702. Po wybraniu tego folderu powinniśmy zobaczyć trzy projekty (nasz kod (OS), to BSP i platforma HW).

    TYLKO Importuj RTOSDemo do bieżącego obszaru roboczego

  5. We wszystkich projektach „niebieskich” folderów zmień BSP, do którego się odwołuje

    1. Kliknięcie prawym przyciskiem myszy i wybranie opcji „Zmień BSP z odniesieniem”.
    2. Wybierz BSP, który właśnie utworzyłeś dla swojego Zybo
    3. Edycja kodu w folderach SDK Blue Xilinx to rzeczywiste projekty kodu.

Krok 8: Importowanie kodu C Erniego

  1. W katalogu RTOSDemo/src nadpisz istniejący plik main.c załączonym tutaj plikiem main.c.
  2. Skopiuj plik main_sound.c do katalogu RTOSDemo/src.

Krok 9: Debugowanie Ernie

  1. Wybierz Uruchom -> Konfiguracje debugowania
  2. W lewym okienku utwórz nowe uruchomienie Debugera systemu
  3. W zakładce Konfiguracja docelowa,

    wybierz „Zresetuj cały system”, aby wybrać zarówno to, jak i ps7_init

  4. Teraz wybierz zakładkę Aplikacja.

    1. Wybierz „pobierz aplikację”
    2. Ustaw rdzeń cortexa9_0 na „zatrzymaj się przy wejściu do programu”
    3. Kliknij Zastosuj i debuguj.
  5. Sprawdź, czy w procesie debugowania nie ma błędów
  6. Uważnie obserwuj robota, naciśnij przycisk Wznów, aż program zostanie uruchomiony bez trafienia w żadne punkty przerwania
  7. Robot powinien teraz odwrócić się i skierować w stronę głośnych dźwięków. Tak!

Krok 10: Uczynienie Ernie Autonomous

  1. Gdy projekt jest gotowy do pracy (możesz bez problemu uruchomić go przez debugger), możesz załadować go do pamięci flash na swojej płycie.
  2. Utwórz projekt zwany „pierwszym etapem programu ładującego” (FSBL) i zawiera wszystkie instrukcje, których Twoja płyta będzie potrzebować, aby załadować pliki projektu (strumień bitów i system operacyjny) podczas uruchamiania.

    1. Wybierz: Plik->Nowy->Projekt aplikacji i powinno pojawić się następujące okno.
    2. Nazwij go, jak chcesz (np. „FSBL”)
    3. Upewnij się, że platforma sprzętowa jest tą, z którą pracujesz
    4. Naciśnij następny (nie naciskaj Zakończ)
    5. Wybierz szablon Zynq FSBL
    6. Kliknij Zakończ.
  3. Po zakończeniu procesu tworzenia będziesz wiedział, czy wszystko zadziałało, jeśli zobaczysz następujące dwa nowe foldery w oknie Eksploratora projektów.
  4. Utwórz obraz rozruchowy Teraz musisz utworzyć obraz rozruchowy.

    1. Kliknij prawym przyciskiem myszy folder swojego projektu (w tym przypadku mój nazywa się „RTOSDemo”)
    2. Kliknij „Utwórz obraz rozruchowy” z menu rozwijanego
    3. Jeśli wszystko jest poprawnie połączone, projekt będzie wiedział, jakich plików potrzebuje, a następujące okno będzie wyglądało tak, jak widać poniżej (kluczem jest to, że masz 3 partycje w sekcji Boot image, bootloader, plik bitowy i plik.elf projektów).

      Jeśli tak nie jest, prawdopodobnie jest coś nie tak z połączeniem twojego projektu. Upewnij się, że foldery projektu są połączone z odpowiednimi BSP

    4. Kliknij przycisk „Utwórz obraz”
  5. Ostatnim krokiem do wykonania w oprogramowaniu jest teraz flashowanie wcześniej utworzonego obrazu do pamięci tablicy

    1. Wybierz z głównego paska narzędzi SDK wybierz Xilinx Tools->Program Flash Memory
    2. Upewnij się, że wybrana jest właściwa platforma sprzętowa i że ścieżka pliku obrazu poprawnie wskazuje plik. BIN utworzony w poprzednim kroku.
    3. Wybierz „qspi single” z typu Flash
    4. Zaznacz „Zweryfikuj po flashu”, aby zapewnić integralność, ale nie jest to potrzebne
  6. Skonfiguruj swoją płytę Na koniec musisz upewnić się, że zworka trybu programowania płyty (JP5) jest prawidłowo ustawiona, aby wybrać rozruch z qspi (które zawiera to, co przed chwilą błysnęło) po uruchomieniu BootROM.
  7. Teraz po prostu wyłącz i włącz urządzenie i upewnij się, że dioda „Konfiguracja logiki zakończone” (LED 10) świeci na zielono.

Krok 11: Sprawienie, by Ernie był słodki

  1. Futro
  2. Dużo futra
  3. Duże oczy!
  4. … cylinder

Zalecana: