Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом руководстве мы собираемся написать код 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
Щелкните «Начать компиляцию». Если сообщение об ошибке не отображается, перейдите к «Программисту», чтобы завершить настройку оборудования. Не забудьте обновить файл pof в «Изменить файл», если необходимо. Нажмите «Пуск», чтобы загрузить код.
Ведь вы должны видеть, что серводвигатель периодически вращается.