FPGA Cyclone IV DueProLogic Nəzarət Servo Motoru: 4 Addım
FPGA Cyclone IV DueProLogic Nəzarət Servo Motoru: 4 Addım
Anonim
FPGA Cyclone IV DueProLogic Nəzarət Servo Motoru
FPGA Cyclone IV DueProLogic Nəzarət Servo Motoru

Bu təlimatda, servo motoru idarə etmək üçün Verilog kodunu yazacağıq. Servo SG-90 Waveshare tərəfindən istehsal olunur. Servo motoru satın aldığınızda, iş gərginliyini, maksimum fırlanma anını və təklif olunan Pulse Width Modulation (PWM) və s. Bununla birlikdə, FPGA DuePrologic, SG -90 servonun işləmə gərginliyi 5V - 7V olduğu yerdə 3.3V giriş gərginliyi təmin edir. Elektrik enerjisi olmadıqda, servo motoru uğurla döndərmək üçün kalibrlənmiş PWM -in siyahısını verəcəyəm.

Bizim vəzifəmiz: servo motor 5 saniyə müddətində irəli və irəli dönər

Tam menyu:

Addım 1: Elektron Dövrə qurun

Elektron dövrə qurun
Elektron dövrə qurun

Addım 2: Pin Planner qurun

Pin Planner qurun
Pin Planner qurun

Pin planlayıcısının düzgün qurulduğunu yoxlamaq üçün "G/Ç Təyin Analizinə Başla" düyməsini basın. Əks təqdirdə, bütün liman adlarını özünüz idxal etməlisiniz.

Addım 3: Verilog Kodu

Taymer "servo_count" yaradırıq. "Servo_A" YÜKSƏK olduqda, PWM 1.5ms -dir və buna görə də servo 120 dərəcədə yerləşir. Bunun əksinə olaraq, "servo_A" LOW olduqda, PWM 0.15ms -dir və buna görə də servo 0 dərəcə saxlanılır.

təyin XIO_2 [3] = servo_pulse; // V üçün

reg [31: 0] servo_count;

ilkin başlanğıc

servo_count <= 32'b0;

servo_A <= 1'b0;

bitmək

həmişə @(poza CLK_66)

başlamaq

servo_count <= servo_count + 1'b1;

əgər (servo_count> 400000000) // Saat dövrü 66MHz, 1/66M * 400000000 ~ 5 saniyə

başlamaq

servo_A <=! servo_A;

servo_count <= 32'b0;

bitmək

bitmək

reg [31: 0] ex_auto;

ilkin başlanğıc

ex_auto <= 32'b0;

servo_auto <= 1'b0;

bitmək

həmişə @(poza CLK_66)

başlamaq

əgər (servo_A == 1'b1)

başlamaq

ex_auto <= ex_auto + 1'b1;

əgər (ex_auto> 100000) // Saat dövrü 66MHz, bu PWM ~ 1.5ms, servo 120 dərəcəyə dönər

başlamaq

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

bitmək

bitmək

əgər (servo_A == 1'b0)

başlamaq

ex_auto <= ex_auto + 1'b1;

əgər (ex_auto> 10000) // Saat dövrü 66MHz, bu PWM ~ 0.15ms -dir, servo 0 dərəcəyə fırlanır

başlamaq

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

bitmək

bitmək

bitmək

Addım 4: Verilog Kodunu Yükləyin

Image
Image

"Kompilyasiyaya Başla" düyməsini basın. Heç bir səhv mesajı görünmürsə, hardware quraşdırmasını başa çatdırmaq üçün "Proqramçı" ya gedin. Lazım gələrsə "Dosyanı dəyişdir" bölməsində pof faylını yeniləməyi unutmayın. Kodu yükləmək üçün "Başla" düyməsini basın.

Axı, servo motorun vaxtaşırı döndüyünü görməlisiniz.