FPGA циклонының IV DueProLogic басқару машиналары: 4 қадам
FPGA циклонының IV DueProLogic басқару машиналары: 4 қадам
Anonim
FPGA циклоны IV DueProLogic Серво қозғалтқышы
FPGA циклоны IV DueProLogic Серво қозғалтқышы

Бұл оқулықта біз сервоқозғалтқышты басқару үшін Verilog кодын жазамыз. Серво SG-90 Waveshare шығарады. Серво қозғалтқышты сатып алғанда, сіз жұмыс кернеуін, максималды моментті және ұсынылған импульстік ен модуляциясын (PWM) және т.б. көрсететін деректер кестесін ала аласыз. Алайда, FPGA DuePrologic кіріс кернеуін 3,3В қамтамасыз етеді, мұнда SG -90 сервосының жұмыс кернеуі 5В - 7В құрайды. Электр қуатының жетіспеушілігінде мен сервокоторды сәтті айналдыру үшін калибрленген PWM тізімін беремін.

Біздің міндет: Серво қозғалтқышы 5 секунд уақыт ішінде алға -артқа айналады

Толық мәзір:

1 -қадам: Электрондық схеманы құру

Электрондық схеманы құру
Электрондық схеманы құру

2 -қадам: PIN жоспарлаушыны орнатыңыз

Pin Planner орнатыңыз
Pin Planner орнатыңыз

Іске қосу жоспарлағышының дұрыс орнатылғанын тексеру үшін «Енгізу -шығару тапсырмасын талдауды бастау» түймесін басыңыз. Әйтпесе, барлық порт атауын өзіңіз импорттауға тура келеді.

3 -қадам: Verilog коды

Біз «servo_count» таймерін жасаймыз. Егер «servo_A» ЖОҒАРЫ болса, PWM - 1,5 мс, сондықтан серво 120 градуста орналасқан. Керісінше, «servo_A» ТӨМЕН болғанда, PWM 0,15 мс құрайды, сондықтан серво 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) // Сағат циклы 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;

Соңы

әрқашан @(сурет CLK_66)

баста

егер (servo_A == 1'b1)

баста

ex_auto <= ex_auto + 1'b1;

егер (ex_auto> 100000) // Сағат циклы 66 МГц, бұл PWM ~ 1,5 мс, серво 120 градусқа бұрылады

баста

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

Соңы

Соңы

егер (servo_A == 1'b0)

баста

ex_auto <= ex_auto + 1'b1;

егер (ex_auto> 10000) // Сағат циклы 66 МГц, бұл PWM ~ 0,15 мс болса, серво 0 градусқа бұрылады

баста

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

Соңы

Соңы

Соңы

4 -қадам: Verilog кодын жүктеңіз

Image
Image

«Компиляцияны бастау» түймесін басыңыз. Егер қате туралы хабар көрсетілмесе, жабдықты орнатуды аяқтау үшін «Бағдарламалаушыға» өтіңіз. Қажет болса, «Файлды өзгерту» ішіндегі pof файлын жаңартуды ұмытпаңыз. Кодты жүктеу үшін «Бастау» түймесін басыңыз.

Ақыр соңында, серво қозғалтқышының мезгіл -мезгіл айналатынын көруге болады.

Ұсынылған: