فهرست مطالب:

FPGA Cyclone IV DueProLogic Control Servo Motor: 4 مرحله
FPGA Cyclone IV DueProLogic Control Servo Motor: 4 مرحله

تصویری: FPGA Cyclone IV DueProLogic Control Servo Motor: 4 مرحله

تصویری: FPGA Cyclone IV DueProLogic Control Servo Motor: 4 مرحله
تصویری: Servomotor control on the FPGA Basys3 Board 2024, نوامبر
Anonim
FPGA Cyclone IV DueProLogic Control Servo Motor
FPGA Cyclone IV DueProLogic Control Servo Motor

در این آموزش ، ما قصد داریم کد Verilog را برای کنترل سرو موتور بنویسیم. سرو SG-90 توسط Waveshare تولید می شود. هنگام خرید سروو موتور ، ممکن است یک برگه داده دریافت کنید که شامل ولتاژ کار ، حداکثر گشتاور و مدولاسیون عرض پالس (PWM) و غیره است. با این حال ، FPGA DuePrologic ولتاژ ورودی 3.3 ولت را فراهم می کند که در آن ولتاژ عملکرد سرو SG -90 5V - 7V است. در صورت عدم وجود نیروی الکتریکی ، من PWM کالیبره شده خود را لیست می کنم تا بتوانم سروو موتور را با موفقیت بچرخانم.

وظیفه ما: موتور سروو با مدت 5 ثانیه به جلو و عقب می چرخد

منوی کامل:

مرحله 1: ایجاد مدار الکترونیکی

ساخت مدار الکترونیکی
ساخت مدار الکترونیکی

مرحله 2: راه اندازی Pin Planner

راه اندازی Pin Planner
راه اندازی Pin Planner

روی "شروع تجزیه و تحلیل تخصیص ورودی/خروجی" کلیک کنید تا بررسی کنید که آیا برنامه ریز پین به درستی تنظیم شده است. در غیر این صورت ، باید همه نام پورت ها را خودتان وارد کنید.

مرحله 3: کد Verilog

ما یک تایمر "servo_count" ایجاد می کنیم. هنگامی که "servo_A" بالا باشد ، PWM 1.5 میلی ثانیه است و بنابراین سروو در 120 درجه قرار دارد. در مقابل ، وقتی "servo_A" پایین باشد ، PWM 0.15ms است و بنابراین سروو در 0 درجه باقی می ماند.

اختصاص XIO_2 [3] = سروو_پالس ؛ // برای V '

reg [31: 0] servo_count؛

شروع اولیه

servo_count <= 32'b0؛

servo_A <= 1'b0؛

پایان

همیشه @(posedge 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؛

پایان

پایان

reg [31: 0] ex_auto؛

شروع اولیه

ex_auto <= 32'b0؛

servo_auto <= 1'b0؛

پایان

همیشه @(posedge CLK_66)

شروع

if (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؛

پایان

پایان

if (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

روی "شروع گردآوری" کلیک کنید. اگر هیچ پیام خطایی نمایش داده نشد ، برای تکمیل راه اندازی سخت افزار به "Programmer" بروید. به یاد داشته باشید که در صورت لزوم فایل pof را در "Change file" به روز کنید. برای بارگذاری کد ، روی "شروع" کلیک کنید.

پس از همه ، شما باید ببینید که سرو موتور به صورت دوره ای می چرخد.

توصیه شده: