FPGA циклону IV DueProLogic Серво Моторун көзөмөлдөйт: 4 кадам
FPGA циклону IV DueProLogic Серво Моторун көзөмөлдөйт: 4 кадам
Anonim
FPGA циклону IV DueProLogic Серво Моторун көзөмөлдөйт
FPGA циклону IV DueProLogic Серво Моторун көзөмөлдөйт

Бул окуу куралы, биз servo моторун көзөмөлдөө үчүн Verilog кодун жазганы жатабыз. Серво SG-90 Waveshare тарабынан чыгарылган. Серво моторун сатып алганда, сиз иштөө чыңалуусун, максималдуу моментти жана сунушталган Pulse Width Modulation (PWM)… ж. Бирок, FPGA DuePrologic 3.3V киргизүү чыңалуусун камсыз кылат, мында SG -90 сервосунун иштөө чыңалуусу 5V - 7V. Электр энергиясынын жоктугунан, мен серво моторун ийгиликтүү айландыруу үчүн калибрленген PWM тизмесин берем.

Биздин милдет: Серво мотору 5 секунддук мезгил менен алдыга жана артка бурулат

Толук меню:

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

Электрондук схеманы түзүү
Электрондук схеманы түзүү

2 -кадам: Pin Planner орнотуу

Pin Planner орнотуу
Pin Planner орнотуу

Пин пландоочунун туура коюлганын текшерүү үчүн "Кирүү/чыгууну тапшырууну талдоону баштоо" баскычын чыкылдатыңыз. Болбосо, бардык порт аттарын өзүңүз импорттоого туура келет.

3 -кадам: Verilog Code

Биз "servo_count" таймерин түзөбүз. "Servo_A" ЖОГОРУ болгондо, PWM 1.5ms, демек, servo 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;

аяктоо

дайыма @(posedge CLK_66)

баштоо

servo_count <= servo_count + 1'b1;

эгер (servo_count> 400000000) // Саат цикли 66МГц, 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;

аяктоо

дайыма @(posedge CLK_66)

баштоо

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

баштоо

ex_auto <= ex_auto + 1'b1;

эгер (ex_auto> 100000) // Саат цикли 66 МГц, бул PWM ~ 1.5ms, серво 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.15ms, серво 0 градуска айланат

баштоо

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

аяктоо

аяктоо

аяктоо

4 -кадам: Verilog кодун жүктөө

Image
Image

"Компиляцияны баштоону" чыкылдатыңыз. Эгерде эч кандай ката билдирүүсү көрүнбөсө, аппараттык орнотууну аягына чыгаруу үчүн "Программистке" өтүңүз. Керек болсо, "Файлды өзгөртүү" бөлүмүндө pof файлын жаңыртууну унутпаңыз. Кодду жүктөө үчүн "Старт" чыкылдатыңыз.

Кантсе да, сиз servo мотор мезгил -мезгили менен айланып турганын көрүшүңүз керек.

Сунушталууда: