Съдържание:

Как да си направим Ърни: 11 стъпки
Как да си направим Ърни: 11 стъпки

Видео: Как да си направим Ърни: 11 стъпки

Видео: Как да си направим Ърни: 11 стъпки
Видео: Тя е на 9 Години, но Нейният Стомах е Като Бременна 2024, Ноември
Anonim
Как да си направим Ърни
Как да си направим Ърни

Това е урок за това как да изградите Ernie, вашия автономен звук след робот, използвайки Zybo Board. Той ще обхваща как да: създадете проект във Vivado, да създадете PWM-подобни драйвери на серво мотори във FPGA, интерфейс с два звукови сензора, да създадете разлика във времето на IP за пристигане, да използвате freeRTOS и да стартирате zybo от батерия. Това беше последният ни проект за клас Операционни системи в реално време (CPE 439) в Cal Poly SLO.

Списък на оборудването:

  • 1 - Съвет за развитие на ZYBO Zynq 7000
  • 2 - Серво за непрекъснато въртене на паралакс
  • 2 - Звуков сензор (SparkFun звуков детектор)
  • 1 - 5v литиево -йонна USB батерия (за платка)
  • 4 - батерии тип АА (за сервоустройства)
  • 1 - AA батерия (с/ 4 гнезда за батерии)
  • 1 - Micro USB кабел
  • 1 - Платка
  • много - мъжки към мъжки проводници
  • 1 - Серво шаси

Софтуерни изисквания:

  • Xilinx Vivado Design Suite 2016.2
  • Digilent Adept 2.16.1

Стъпка 1: Създаване на проект във Vivado за Ърни

Създаване на проект във Vivado за Ърни
Създаване на проект във Vivado за Ърни
Създаване на проект във Vivado за Ърни
Създаване на проект във Vivado за Ърни
Създаване на проект във Vivado за Ърни
Създаване на проект във Vivado за Ърни
  1. Ще се появи съветник
  2. Щракнете върху Напред
  3. Следващото име на проекта

    1. Никога не използвайте име на проект или пътека на директорията, в която има интервали !!!!!
    2. Това ще бъде RTL проект.
  4. Не искаме да посочваме източници
  5. Щраквайки върху Напред, стигаме до страницата Част. Използваме ZYNQ XC7Z010-1CLG400C.

    1. Vivado няма Zybo, посочен като една от предварително зададените му дъски. Изберете: „части“, след което потърсете xc7z010clg400-1.
    2. Ако погрешно изберете грешната част, лесно можете да превключите чипове: Инструменти -> Настройки на проекта -> Общи и щракнете върху точките вдясно от „Устройство за проект“
  6. Щракнете върху Създаване на дизайн на блок.

    Дайте му името design_1 засега

  7. Ще видите зелена лента с надпис Добавяне на IP, щракнете върху нея.
  8. Търсете Zynq.

    1. Щракнете двукратно върху ZYNQ7 Processing System,
    2. Този блок ще се появи в нашия блок дизайн.
  9. Ще видите зелена лента, на която пише Run Block Automation, щракнете върху нея.
  10. Изтеглете zybo_zynq_def.xml по -долу.
  11. В Vivado щракнете върху „Импортиране на XPS настройки“и изберете „zybo_zynq_def.xml“

    Това предварително попълва конфигурацията на блока Vivado с всички вградени периферни устройства и щифтове на Zybo платка

  12. Щракнете двукратно върху блока ZYNQ.

    1. MIO конфигурация

      1. Активиране на таймер 0 (под модул за процесор на приложения - img 1)
      2. Активиране на Watchdog (под модул за процесор на приложения- img 1)
      3. Активиране на GPIO-> GPIO MIO (под модул за процесор на приложения - img 2)
      4. Активиране на GPIO-> ENET Reset (под I/O периферия- img 2)
    2. Конфигурация на часовника

      Деактивирайте FCLK0 (под PL Fabric Clocks - img 3)

  13. Щракнете върху OK.
  14. „Стартирайте автоматизацията на блокове“сега.

    Ще има някои въпроси относно сигналите, кажете OK

  15. Щракнете върху „Генериране на HDL обвивка“.

    Ще искаме да копираме генерираната обвивка, за да позволим потребителски редакции

  16. Щракнете върху OK.

Стъпка 2: Създаване на PWM на Ernie във Vivado

Създаване на PWM на Ernie във Vivado
Създаване на PWM на Ernie във Vivado
Създаване на PWM на Ernie във Vivado
Създаване на PWM на Ernie във Vivado

Тази стъпка ще генерира PWM IP с входове, изпратени чрез AXI библиотеката.

  1. Създайте AXI GPIO блок, като щракнете с десния бутон върху фона и щракнете върху „добавяне на IP“

    въведете „AXI_GPIO“в лентата за търсене и изберете този пакет

  2. Повторно персонализирайте IP, като щракнете двукратно върху новия блок axi_gpio_0

    1. при GPIO, задайте ширина на GPIO на 2. Тези битове ще бъдат PWM_ON сигнал за задвижване на всеки екземпляр на PWM модул.
    2. кликнете върху „активиране на двоен канал“
    3. при GPIO 2, задайте ширина на GPIO на 2. Тези битове ще бъдат PWM_FW сигнал, за да зададете посоката на всеки екземпляр на PWM модул.
  3. Щракнете с десния бутон върху изходния порт axi_gpio_0, обозначен с GPIO, и изберете „Направи външно“

    1. Щракнете върху новия изход с етикет GPIO и отидете в раздела "свойства" в лявата лента с инструменти и променете името на PWM_ON
    2. Щракнете върху новия изход с етикет GPIO2 и отидете в раздела "свойства" в лявата лента с инструменти и променете името на PWM_FW
  4. Изберете Run Connection Automation в зеления банер над блоковата диаграма.

    Ако свържете ръчно портовете, AXI адресите може да не бъдат конфигурирани, което да доведе до проблеми с комуникацията по -късно

  5. В панела Flow Navigator изберете мениджър на проекти -> Добавяне на източници, за да създадете нов персонализиран IP блок

    1. изберете „добавяне или създаване на източници на дизайн“и натиснете следващия
    2. щракнете върху „създаване на файл“, променете типа на файла на „SystemVerilog“и въведете „pwm“в полето за име на файл, след което щракнете върху OK
    3. щракнете върху Готово
    4. игнорирайте прозореца Дефиниране на модул, като натиснете OK (ще ги презапишем по -късно)

      ако ви попита дали сте сигурни, щракнете върху Да

  6. В раздела източници щракнете двукратно върху pwm.sv (намира се в „Design Sources/design_1_wrapper“)

    Копирайте/поставете целия код на SystemVerilog от прикачения по -долу pwm.txt файл

Стъпка 3: Създаване на TDOA на Ernie във Vivado

Създаване на TDOA на Ernie във Vivado
Създаване на TDOA на Ernie във Vivado
Създаване на TDOA на Ernie във Vivado
Създаване на TDOA на Ernie във Vivado

Тази стъпка ще генерира TDOA IP, чийто изход може да бъде прочетен чрез AXI библиотеката

  1. Създайте AXI GPIO блок, като щракнете с десния бутон върху фона и щракнете върху „добавяне на IP“

    въведете „AXI_GPIO“в лентата за търсене и изберете този пакет

  2. Повторно персонализирайте IP, като щракнете двукратно върху новия блок axi_gpio_1

    1. под GPIO, поставете отметка в квадратчето „Всички входове“и задайте ширина на GPIO на 32. Тази шина ще бъде разликата във времето на пристигане между двата сензора.
    2. вътре в блока axi_gpio_1, щракнете върху + до GPIO порта, за да разкриете gpio_io_i [31: 0].
  3. Щракнете с десния бутон върху изходния порт на axi_gpio_1 с надпис gpio_io_i [31: 0] и изберете „Направи външно“

    Щракнете върху новия вход, обозначен с gpio_io_i [31: 0], и отворете раздела "свойства" в лявата лента с инструменти и променете името на TDOA_val

  4. Изберете Run Connection Automation в зеления банер над блоковата диаграма.

    Ако свържете ръчно портовете, AXI адресите може да не бъдат конфигурирани, което да доведе до проблеми с комуникацията по -късно

  5. В панела Flow Navigator изберете мениджър на проекти -> Добавяне на източници, за да създадете нов персонализиран IP блок

    1. изберете „добавяне или създаване на източници на дизайн“и натиснете следващия
    2. щракнете върху „създаване на файл“, променете типа на файла на „SystemVerilog“и въведете „tdoa“в полето за име на файл, след което щракнете върху OK
    3. щракнете върху Готово
    4. игнорирайте прозореца Дефиниране на модул, като натиснете OK (ще ги презапишем по -късно)

      ако ви попита дали сте сигурни, щракнете върху Да

  6. В раздела източници щракнете двукратно върху tdoa.sv (намира се в „Design Sources/design_1_wrapper“)

    Копирайте/поставете целия код на SystemVerilog от прикачения по -долу файл tdoa.txt

Стъпка 4: Опаковане и експортиране на Ърни

Опаковане и експортиране на Ърни
Опаковане и експортиране на Ърни
  1. Проверете дали блоковата диаграма изглежда като прикачения екран
  2. В раздела източници щракнете с десния бутон върху design_1.bd и изберете „Създаване на HDL обвивка …“

    1. Изберете „Копиране на генерирания изход, за да разрешите потребителски редакции“, след това натиснете „OK“
    2. Копирайте кода от приложен по -долу design_1_wrapper.txt и го поставете на мястото на генерирания код design_1_wrapper.v
    3. запазете design_1_wrapper.v
  3. В раздела източници щракнете двукратно върху файла ZYBO_Master.xdc под Ограничения/constrs1

    1. Копирайте кода от прикачения по -долу ZYBO_Master.txt и го поставете на мястото на съществуващия код ZYBO_Master.xdc
    2. Обърнете внимание на следните входни/изходни щифтове:

      1. L15: ШИМ сигнал за левия двигател (Pmod JA2 на Zybo)
      2. L14: ШИМ сигнал за десния двигател (Pmod JA8 на Zybo)
      3. V12: вход на порта от звуков сензор 1 (Pmod JE1 на Zybo)
      4. K16: вход на порта от звуков сензор 2 (Pmod JE2 на Zybo)
  4. В екрана за навигация на потока щракнете върху „Генериране на поток от битове“под Програма и отстраняване на грешки

    ако мислите, че е направено веднага, вероятно не е така. сериозно, направете си чай

  5. Щракнете върху Файл-> Експорт-> Генериране на хардуер

    Поставете отметка в „Включване на битстрийм“и натиснете OK

  6. Щракнете върху Файл-> Стартиране на SDK

Стъпка 5: Изграждане на Ърни

Изграждане на Ърни
Изграждане на Ърни
Изграждане на Ърни
Изграждане на Ърни
  1. Монтирайте сервомоторите към серво шасито.
  2. Следвайки листа с данни за сервомоторите, направете следното:

    1. свържете заземяването на сервомоторите към заземяващи щифтове на JA Pmod на Zybo (вижте приложеното изображение на разклонение)
    2. свържете захранващия щифт на сервомоторите към батерията AA

      Открихме, че когато сервомоторите са свързани към Vdd на Zybo, платката черпи твърде много ток, което води до непрекъснато нулиране на платката

    3. свържете щифтовете на входния сигнал към подходящите изходни щифтове на Zybo (вляво: JA2, вдясно: JA8)
  3. монтирайте звуковите сензори към предната част на шасито, обърнати напред, като ги държите възможно най -близо един до друг
  4. използвайте ръководството за свързване на сензора за звук, за да интегрирате звуковите сензори

    1. свържете заземяването и Vdd щифтовете на всеки звуков сензор към земята и Vdd щифтовете на JE Pmod на Zybo (вижте приложеното изображение на разклонение)
    2. свържете левия щифт на левия сензор за звук към JE1
    3. свържете десния щифт на десния сензор за звук към JE2

Стъпка 6: Първият BSP на Ърни

Първата BSP на Ърни
Първата BSP на Ърни
Първата BSP на Ърни
Първата BSP на Ърни
  1. Създайте BSP, за да завършите платформата, която току -що създадохме.

    Можете да получите това чрез File -> New -> Board Support Package

  2. Ще се появи съветник, който ще ви помогне да създадете BSP.

    1. Искаме да обвържем тази BSP с нашата платформа, която току -що създадохме, така че
    2. Хардуерната платформа трябва да съвпадне с тази, която току -що създадохме (вижте img 1)
    3. Нашият процесор ще бъде _0 процесор.
    4. Щракнете върху Готово
    5. Не забравяйте да проверите lwip141 за включване с вашия bsp в изскачащия прозорец (вижте img 2)

Стъпка 7: FreeRTOS'ing Ernie

  1. Изтеглете последната версия на FreeRTOS от Sourceforge.

    Ако изтеглянето е изпълним, стартирайте го, за да извлечете FreeRTOS файловете в директорията на вашия проект

  2. Дръжте този SDK отворен и щракнете върху Файл -> Импортиране.
  3. Искаме да щракнем върху Общи-> От съществуващо работно пространство и след това ще искаме да отидем до мястото, където сме изтеглили FreeRTOS.
  4. Нашето демо ще се намира в FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702. При избора на тази папка трябва да видим изскачащи три проекта (нашият код (OS), това е BSP и платформата HW).

    САМО Импортирайте RTOSDemo в текущото си работно пространство

  5. На всички проекти „сини“папки променете референтния BSP

    1. Щракнете с десния бутон и изберете „Промяна на референтния BSP“.
    2. Изберете BSP, който току -що създадохте за вашия Zybo
    3. Редактирането на кодове в папки SDK Blue на Xilinx са действителните кодови проекти.

Стъпка 8: Импортиране на C код на Ernie

  1. В директорията RTOSDemo/src презапишете съществуващия main.c с прикачения тук файл main.c.
  2. Копирайте файла main_sound.c в директорията RTOSDemo/src.

Стъпка 9: Отстраняване на грешки Ernie

  1. Изберете Run -> Debug Configurations
  2. В левия прозорец създайте ново изпълнение на System Debugger
  3. В раздела Настройка на целта,

    изберете „Нулиране на цялата система“, така че и това, и ps7_init да бъдат избрани

  4. Сега изберете раздела Приложение.

    1. Изберете „изтегляне на приложение“
    2. Задайте ядрото cortexa9_0 на „стоп при влизане в програмата“
    3. Щракнете върху Прилагане и отстраняване на грешки.
  5. Проверете дали няма грешки в процеса на отстраняване на грешки
  6. Като следите отблизо робота, натиснете бутона Възобновяване, докато програмата работи, без да удряте точки на прекъсване
  7. Сега роботът трябва да се обърне и да се придвижи към силни шумове. Да!

Стъпка 10: Направете Ernie автономен

  1. След като вашият проект е готов за стартиране (можете да стартирате без проблеми чрез дебъгъра), вие сте готови да го заредите във флаш паметта на вашата дъска.
  2. Създайте така наречения проект за първоначално зареждане (FSBL) и съдържа всички инструкции, от които вашата платка ще се нуждае, за да зареди файловете на вашия проект (битовия поток и операционната система) при стартиране.

    1. Изберете: File-> New-> Application Project и следващият прозорец трябва да се появи.
    2. Назовете го както искате (т.е. „FSBL“)
    3. Уверете се, че хардуерната платформа е тази, с която работите
    4. Натиснете следващия (Не натискайте Край)
    5. Изберете шаблона Zynq FSBL
    6. Щракнете върху Край.
  3. След като процесът на създаване приключи, ще разберете дали всичко е работило, ако видите следните две нови папки в прозореца на Project Explorer.
  4. Създаване на зареждащо изображение Сега ще трябва да създадете зареждащо изображение.

    1. Щракнете с десния бутон върху папката на вашия проект (в този случай моята се нарича „RTOSDemo“)
    2. Щракнете върху „Създаване на зареждащо изображение“от падащото меню
    3. Ако всичко е свързано правилно, проектът ще знае от какви файлове се нуждае и следният прозорец ще изглежда, както виждате по -долу (ключовото е, че имате 3 дяла в секцията Boot image, буутлоудъра, вашия битов файл и вашите.elf файл на вашите проекти).).

      Ако това не е така, вероятно нещо не е наред с свързването на вашия проект. Уверете се, че папките на проекта са свързани със съответните им BSP

    4. Щракнете върху бутона „Създаване на изображение“
  5. Последната стъпка, която трябва да извършите в софтуера, е сега да прехвърлите предварително създаденото си изображение в паметта на дъската

    1. Изберете от основната лента с инструменти на SDK, изберете Xilinx Tools-> Program Flash Memory
    2. Уверете се, че е избрана правилната хардуерна платформа и че пътят на файла с изображение правилно сочи файла. BIN, създаден в предишната стъпка.
    3. Изберете „qspi single“от типа Flash
    4. Поставете отметка в „Verify after flash“, за да осигурите целостта, но това не е необходимо
  6. Конфигурирайте вашата платка Накрая трябва да се уверите, че джъмпера за програмиране на платки (JP5) е правилно настроен да избира за зареждане от qspi (който съдържа това, което току -що мигате), когато се стартира BootROM.
  7. Сега просто включете захранването на устройството и се уверете, че светодиодът „Logic Configuration Done“(LED 10) свети в зелено.

Стъпка 11: Направете Ърни сладък

  1. Козина
  2. Много кожа
  3. Големи очи!
  4. … цилиндър

Препоръчано: