FPGA ցիկլոն IV DueProLogic Controls Servo Motor: 4 քայլ
FPGA ցիկլոն IV DueProLogic Controls Servo Motor: 4 քայլ
Anonim
FPGA ցիկլոն IV DueProLogic Controls Servo Motor
FPGA ցիկլոն IV DueProLogic Controls Servo Motor

Այս ձեռնարկում մենք պատրաստվում ենք գրել Verilog ծածկագիրը `սերվո շարժիչը կառավարելու համար: Servo SG-90- ը արտադրվում է Waveshare- ի կողմից: Երբ դուք գնում եք servo շարժիչ, դուք կարող եք ստանալ տվյալների թերթիկ, որը ցույց է տալիս աշխատանքային լարումը, առավելագույն ոլորող մոմենտը և առաջարկվող Pulse Width Modulation (PWM) … և այլն: Այնուամենայնիվ, FPGA DuePrologic- ն ապահովում է մուտքի լարումը 3.3 Վ, որտեղ servo SG -90- ի աշխատանքային լարումը 5V - 7V է: Էլեկտրաէներգիայի բացակայության դեպքում ես թվարկելու եմ իմ չափագրված PWM- ը `սերվո շարժիչը հաջողությամբ պտտելու համար:

Մեր խնդիրը. Servo շարժիչը պտտվում է այս ու այն կողմ 5 վայրկյան ժամանակահատվածով

Ամբողջական ընտրացանկ ՝

Քայլ 1: Կառուցեք էլեկտրոնային միացում

Կառուցեք էլեկտրոնային միացում
Կառուցեք էլեկտրոնային միացում

Քայլ 2: Ստեղծեք Pin պլանավորող

Ստեղծեք Pin պլանավորող
Ստեղծեք Pin պլանավորող

Կտտացրեք «Սկսել մուտքի/ելքի առաջադրանքի վերլուծությունը» ՝ ստուգելու, թե արդյոք քորոց պլանավորողը ճիշտ է դրված: Հակառակ դեպքում, դուք պետք է ինքնուրույն ներմուծեք բոլոր նավահանգիստների անունները:

Քայլ 3: Verilog Code

Մենք ստեղծում ենք «servo_count» ժամաչափ: Երբ «servo_A» - ն բարձր է, PWM- ը 1,5ms է, և, հետևաբար, servo- ն գտնվում է 120 աստիճանի վրա: Ի հակադրություն, երբ «servo_A» - ն OWԱՐ է, PWM- ն 0.15ms է, և, հետևաբար, servo- ն մնում է 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) // Clամացույցի ցիկլ 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) // ockամացույցի ցիկլ 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) // ockամացույցի ցիկլ 66 ՄՀց, այս PWM- ն ~ 0.15ms է, սերվոն պտտվում է 0 աստիճանի

սկսել

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

վերջ

վերջ

վերջ

Քայլ 4: Վերբեռնեք Verilog ծածկագիրը

Image
Image

Կտտացրեք «Սկսել կազմումը»: Եթե սխալ հաղորդագրություն չի ցուցադրվում, գնացեք «merրագրավորող» ՝ ապարատային կարգավորումն ավարտելու համար: Անհրաժեշտության դեպքում հիշեք pof ֆայլը «Փոխել ֆայլը» բաժնում: Կոդը վերբեռնելու համար կտտացրեք «Սկսել»:

Ի վերջո, դուք պետք է տեսնեք, որ servo շարժիչը պարբերաբար պտտվում է:

Խորհուրդ ենք տալիս: