FPGA Cyclone IV DueProLogic контролира серво мотора: 4 стъпки
FPGA Cyclone IV DueProLogic контролира серво мотора: 4 стъпки
Anonim
FPGA Cyclone IV DueProLogic контролира серво мотора
FPGA Cyclone IV DueProLogic контролира серво мотора

В този урок ще напишем Verilog код за управление на серво мотора. Серво SG-90 се произвежда от Waveshare. Когато купувате серво мотора, може да получите лист с данни, който изброява работното напрежение, максималния въртящ момент и предложената модулация на ширината на импулса (PWM) … и т.н. Въпреки това, FPGA DuePrologic осигурява входно напрежение от 3.3V, където работното напрежение на серво SG -90 е 5V - 7V. При липса на електрическо захранване ще изброя моята калибрирана ШИМ, за да завъртя успешно серво мотора.

Нашата задача: Серво моторът се върти напред -назад с период от 5 секунди

Пълно меню:

Стъпка 1: Изградете електронна схема

Изградете електронна схема
Изградете електронна схема

Стъпка 2: Настройте Pin Planner

Настройване на Pin Planner
Настройване на Pin Planner

Щракнете върху „Стартиране на анализ на задачите на I/O“, за да проверите дали щифтовият планировчик е настроен правилно. В противен случай трябва да импортирате всички имена на портове сами.

Стъпка 3: Verilog код

Създаваме таймер "servo_count". Когато "servo_A" е HIGH, PWM е 1,5ms и следователно сервото е разположено на 120 °. За разлика от това, когато "servo_A" е НИСКО, PWM е 0,15ms и следователно сервото остава на 0 градуса.

задайте XIO_2 [3] = servo_pulse; // за V '

reg [31: 0] servo_count;

начален старт

servo_count <= 32'b0;

servo_A <= 1'b0;

край

винаги @(поставен CLK_66)

започнете

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Часовник 66MHz, 1/66M * 400000000 ~ 5 секунди

започнете

servo_A <=! servo_A;

servo_count <= 32'b0;

край

край

reg [31: 0] ex_auto;

начален старт

ex_auto <= 32'b0;

servo_auto <= 1'b0;

край

винаги @(поставен CLK_66)

започнете

ако (servo_A == 1'b1)

започнете

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Тактовият цикъл 66MHz, тази ШИМ е ~ 1.5ms, серво се завърта до 120 градуса

започнете

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

край

край

ако (servo_A == 1'b0)

започнете

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10000) // Тактовият цикъл 66MHz, тази ШИМ е ~ 0.15ms, серво се завърта на 0 градуса

започнете

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

край

край

край

Стъпка 4: Качете Verilog код

Image
Image

Кликнете върху „Стартиране на компилацията“. Ако не се показва съобщение за грешка, отидете на „Програмист“, за да завършите хардуерната настройка. Не забравяйте да актуализирате pof файла в „Промяна на файла“, ако е необходимо. Щракнете върху „Старт“, за да качите кода.

В края на краищата трябва да видите, че серво моторът се върти периодично.

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