Სარჩევი:

FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 ნაბიჯი
FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 ნაბიჯი

ვიდეო: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 ნაბიჯი

ვიდეო: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 ნაბიჯი
ვიდეო: CS50 2013 - Week 2 2024, ნოემბერი
Anonim
FPGA Cyclone IV DueProLogic Controls Servo Motor
FPGA Cyclone IV DueProLogic Controls Servo Motor

ამ სახელმძღვანელოში ჩვენ ვაპირებთ დავწეროთ Verilog კოდი სერვო ძრავის გასაკონტროლებლად. Servo SG-90 დამზადებულია Waveshare– ის მიერ. როდესაც ყიდულობთ სერვო ძრავას, თქვენ შეიძლება მიიღოთ მონაცემთა ცხრილი, რომელშიც მოცემულია ოპერაციული ძაბვა, მაქსიმალური ბრუნვის მომენტი და შემოთავაზებული პულსის სიგანის მოდულაცია (PWM) … და ა.შ. თუმცა, FPGA DuePrologic უზრუნველყოფს შეყვანის ძაბვას 3.3V, სადაც servo SG -90– ის სამუშაო ძაბვაა 5V - 7V. ელექტროენერგიის არარსებობის შემთხვევაში, მე ჩამოვთვლი ჩემს დაკალიბრებულ PWM– ს, რათა სერვო ძრავა წარმატებით მოვატრიალო.

ჩვენი ამოცანა: სერვო ძრავა ბრუნავს წინ და უკან 5 წამის განმავლობაში

სრული მენიუ:

ნაბიჯი 1: შექმენით ელექტრონული წრე

ააშენეთ ელექტრონული წრე
ააშენეთ ელექტრონული წრე

ნაბიჯი 2: დააყენეთ Pin Planner

დააყენეთ Pin Planner
დააყენეთ Pin Planner

დააწკაპუნეთ "I/O Assignment Analysis" - ის შესამოწმებლად, არის თუ არა pin planner სწორად დაყენებული. წინააღმდეგ შემთხვევაში, თქვენ უნდა შემოიტანოთ ყველა პორტის სახელი.

ნაბიჯი 3: Verilog Code

ჩვენ ვქმნით ტაიმერს "servo_count". როდესაც "servo_A" არის მაღალი, PWM არის 1.5ms და, შესაბამისად, servo მდებარეობს 120 გრადუსზე. ამის საპირისპიროდ, როდესაც "servo_A" არის დაბალი, PWM არის 0.15ms და, შესაბამისად, სერვო რჩება 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) // საათის ციკლი 66MHz, 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) // საათის ციკლი 66MHz, ეს PWM არის ms 1.5ms, სერვო ბრუნავს 120 გრადუსამდე

დაწყება

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

დასასრული

დასასრული

თუ (servo_A == 1'b0)

დაწყება

ex_auto <= ex_auto + 1'b1;

თუ (ex_auto> 10000) // საათის ციკლი 66MHz, ეს PWM არის 15 0.15ms, სერვო ბრუნავს 0 გრადუსამდე

დაწყება

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

დასასრული

დასასრული

დასასრული

ნაბიჯი 4: ატვირთეთ Verilog კოდი

Image
Image

დააჭირეთ "შედგენის დაწყება". თუ შეცდომის შეტყობინება არ არის ნაჩვენები, გადადით "პროგრამისტი" აპარატურის დაყენების დასასრულებლად. გახსოვდეთ pof ფაილის განახლება "ფაილის შეცვლა" საჭიროების შემთხვევაში. დააჭირეთ ღილაკს "დაწყება", რომ ატვირთოთ კოდი.

ყოველივე ამის შემდეგ, თქვენ უნდა ნახოთ, რომ სერვო ძრავა პერიოდულად ბრუნავს.

გირჩევთ: