תוכן עניינים:

FPGA ציקלון IV DueProLogic פקדי סרוו מנוע סרוו: 4 שלבים
FPGA ציקלון IV DueProLogic פקדי סרוו מנוע סרוו: 4 שלבים

וִידֵאוֹ: FPGA ציקלון IV DueProLogic פקדי סרוו מנוע סרוו: 4 שלבים

וִידֵאוֹ: FPGA ציקלון IV DueProLogic פקדי סרוו מנוע סרוו: 4 שלבים
וִידֵאוֹ: FPGA Cyclone IV DueProLogic controls Arduino (tutorial & code) 2024, יולי
Anonim
FPGA ציקלון IV DueProLogic פקדי סרוו מנוע
FPGA ציקלון IV DueProLogic פקדי סרוו מנוע

במדריך זה אנו הולכים לכתוב קוד Verilog לשליטה במנוע סרוו. סרוו SG-90 מיוצר על ידי Waveshare. בעת רכישת מנוע סרוו, ייתכן שתקבל גליון נתונים המפרט את מתח ההפעלה, מומנט מרבי ואת אפנון רוחב הדופק המוצע (PWM) וכו '. עם זאת, ה- FPGA DuePrologic מספק מתח כניסה של 3.3V כאשר מתח ההפעלה של סרוו SG -90 הוא 5V - 7V. בהיעדר כוח חשמלי, אפרט את ה- PWM המכויל שלי על מנת לסובב את מנוע הסרוו בהצלחה.

המשימה שלנו: מנוע הסרוו מסתובב קדימה ואחורה בתקופה של 5 שניות

התפריט המלא: https://roywchpi.blogspot.com 2020/07/13-fpga-cyclone-iv-dueprologic-controls.html

שלב 1: בנה מעגל אלקטרוני

בנה מעגל אלקטרוני
בנה מעגל אלקטרוני

שלב 2: הגדר מתכנן סיכות

הגדר מתכנן סיכות
הגדר מתכנן סיכות

לחץ על "התחל ניתוח הקלט/פלט" כדי לבדוק אם מתכנן הסיכות מוגדר כהלכה. אחרת, עליך לייבא את כל שמות היציאות בעצמך.

שלב 3: קוד Verilog

אנו יוצרים טיימר "servo_count". כאשר "servo_A" הוא גבוה, PWM הוא 1.5ms ומכאן שהסרוו ממוקם בטמפרטורה של 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;

סוֹף

always @(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;

סוֹף

always @(posedge CLK_66)

התחל

אם (servo_A == 1'b1)

התחל

ex_auto <= ex_auto + 1'b1;

אם (ex_auto> 100000) // מחזור שעון 66MHz, 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) // מחזור שעון 66MHz, PWM זה הוא ~ 0.15ms, סרוו מסתובב ל 0 מעלות

התחל

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

סוֹף

סוֹף

סוֹף

שלב 4: העלה קוד Verilog

Image
Image

לחץ על "התחל אוסף". אם לא מוצגת הודעת שגיאה, עבור אל "מתכנת" כדי להשלים את הגדרת החומרה. זכור לעדכן את קובץ ה- pof ב"שינוי קובץ "במידת הצורך. לחץ על "התחל" כדי להעלות את הקוד.

אחרי הכל, אתה צריך לראות שמנוע הסרוו מסתובב מעת לעת.

מוּמלָץ: