FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 шага
FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 шага
Anonim
FPGA Cyclone IV DueProLogic управляет серводвигателем
FPGA Cyclone IV DueProLogic управляет серводвигателем

В этом руководстве мы собираемся написать код Verilog для управления серводвигателем. Сервопривод SG-90 производится Waveshare. Когда вы покупаете серводвигатель, вы можете получить техническое описание, в котором указаны рабочее напряжение, максимальный крутящий момент и предлагаемая широтно-импульсная модуляция (ШИМ)… и т. Д. Однако FPGA DuePrologic обеспечивает входное напряжение 3,3 В, тогда как рабочее напряжение сервопривода SG-90 составляет 5–7 В. Из-за отсутствия электроэнергии я перечислю свой откалиброванный ШИМ, чтобы успешно вращать серводвигатель.

Наша задача: Серводвигатель вращается вперед и назад с периодом 5 секунд.

Полное меню:

Шаг 1: Создайте электронную схему

Построить электронную схему
Построить электронную схему

Шаг 2. Настройте Планировщик контактов

Настроить планировщик пинов
Настроить планировщик пинов

Нажмите «Начать анализ назначения ввода-вывода», чтобы проверить, правильно ли настроен планировщик выводов. В противном случае вам придется импортировать все имена портов самостоятельно.

Шаг 3. Код Verilog

Создаем таймер «servo_count». Когда «servo_A» имеет значение HIGH, ШИМ составляет 1,5 мс, и, следовательно, сервопривод находится под углом 120 градусов. Напротив, когда «servo_A» имеет значение LOW, PWM составляет 0,15 мс, и поэтому сервопривод остается на 0 градусов.

назначить XIO_2 [3] = servo_pulse; // для V '

reg [31: 0] servo_count;

начальное начало

servo_count <= 32'b0;

servo_A <= 1'b0;

конец

всегда @ (posedge CLK_66)

начинать

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Тактовый цикл 66 МГц, 1 / 66M * 400000000 ~ 5 секунд

начинать

servo_A <=! servo_A;

servo_count <= 32'b0;

конец

конец

рег [31: 0] ex_auto;

начальное начало

ex_auto <= 32'b0;

servo_auto <= 1'b0;

конец

всегда @ (posedge CLK_66)

начинать

если (servo_A == 1'b1)

начинать

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Тактовый цикл 66 МГц, этот ШИМ составляет ~ 1,5 мс, сервопривод вращается на 120 градусов

начинать

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

конец

конец

если (servo_A == 1'b0)

начинать

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10000) // Тактовый цикл 66 МГц, этот ШИМ составляет ~ 0,15 мс, сервопривод вращается на 0 градусов

начинать

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

конец

конец

конец

Шаг 4. Загрузите код Verilog

Image
Image

Щелкните «Начать компиляцию». Если сообщение об ошибке не отображается, перейдите к «Программисту», чтобы завершить настройку оборудования. Не забудьте обновить файл pof в «Изменить файл», если необходимо. Нажмите «Пуск», чтобы загрузить код.

Ведь вы должны видеть, что серводвигатель периодически вращается.