2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
כרגע אני בונה משדר/מקלט RC המבוסס על שבב ה- RF SX1280. אחת המטרות של הפרויקט היא שאני רוצה רזולוציית סרוו של 12 סיביות מהמקלות עד הסרווס. בין היתר מכיוון שלסרוואות דיגיטליות מודרניות יש רזולוציה של 12 סיביות שנית משדר ברמה גבוהה ממילא משתמש ב -12 סיביות. בדקתי כיצד אוכל לייצר אותות PWM ברזולוציה גבוהה במכשירי STM32. אני משתמש בגלולה שחורה (STM32F103C8T8) כרגע עבור אב הטיפוס.
שלב 1: רשימת חלקים
חוּמרָה
- כל לוח פיתוח STM32F103 (גלולה כחולה, כדור שחור וכו ')
- בנק כוח USB כאספקת חשמל
- מתכנת STM32 (Segger j-links, ST-LINK/V2, או פשוט שיבוט st-link)
תוֹכנָה
- STM32CubeMX
- Atollic TrueSTUDIO עבור STM32
- מקור הפרויקט מ- github
שלב 2: הפתרון הברור
כנראה שהפתרון הקל ביותר הוא להשתמש באחד הטיימר שיכול ליצור אותות PWM, כמו TIM1-3 ב- STM32F103. עבור סרוו דיגיטלי מודרני קצב המסגרות יכול לרדת ל -5 אלפיות השנייה בערך, אך עבור סרוו אנלוגי ישן הוא אמור להיות 20 מילישניות או 50 הרץ. אז, כתרחיש הגרוע ביותר בואו לייצר את זה. עם שעון 72 מגה -הרץ ורזולוציה נגדית של טיימר 16 סיביות, עלינו להגדיר את מסדר הטיימר למינימום 23 על מנת לכסות את קצב המסגרות של 20 מילי -שניות. בחרתי 24 כי אז במשך 20 אלפיות השנייה אני צריך להגדיר את המונה בדיוק ל 60000. אתה יכול לראות את ההתקנה של CubeMX ואת אותות PWM של 1 ו -1.5 אלפיות השנייה שנוצרו בצילומי המסך. למרבה הצער, במשך 1 ms יש להגדיר את מונה הטיימר ל -3000, דבר שייתן לנו רזולוציה של 11 ביט בלבד. לא נורא, אבל המטרה הייתה 12 ביט, אז בואו ננסה משהו אחר.
כמובן שאם הייתי בוחר בקר מיקרו עם מונה טיימר 32 סיביות, כמו STM32L476 רזולוציה זו יכולה להיות גבוהה בהרבה והבעיה תיפתר.
אבל כאן, ברצוני להציע פתרון חלופי שיגדיל עוד יותר את הרזולוציה גם ב- STM32F103.
שלב 3: טיימרים מדורגים ברזולוציה גבוהה יותר
הבעיה העיקרית עם הפתרון הקודם היא שקצב הפריימים (20 אלפיות השנייה) גבוה יחסית לאות ה- PWM שנוצר בפועל (בין 1 ל -2 אלפיות השנייה), ולכן אנו מבזבזים כמה סיביות מוערכות עבור 18 השניות הנותרות כאשר אנו מחכים המסגרת הבאה. ניתן לפתור זאת על ידי טיימרים מדורגים באמצעות תכונת קישור הטיימר לסנכרון.
הרעיון הוא שאשתמש ב- TIM1 כמאסטר ליצירת קצב הפריימים (20 אלפיות השנייה) ו- TIM2, TIM3 כדי להתמודד עם אותות PWM כעבדים. כאשר המאסטר מפעיל את העבדים הם יוצרים רק אות PWM במצב דופק אחד. לכן אני צריך לכסות רק 2 אלפיות השנייה בטיימרים אלה. למרבה המזל אתה יכול להפיל את הטיימרים האלה בחומרה, כך שהסנכרון הזה לא צריך שום התערבות של המעבד וזה גם מאוד מדויק, הרטט נמצא באזור ה- ps. אתה יכול לראות את ההתקנה של CubeMX בצילומי המסך.
כפי שאתה יכול לראות בחרתי 3 בתור prescalar אז במשך 2 ms אני צריך להגדיר 48000 בדלפק הטיימר. זה נותן לנו 24000 עבור 1 ms שזה בעצם יותר מה שאנחנו צריכים בשביל רזולוציה של 14 ביט. Tadaaaa…
אנא תסתכל על צילומי המסך של האוסילוסקופ במבוא לתוצאה הסופית. הערוץ 3 (סגול) הוא ההפסקה של הטיימר הראשי אשר תפעיל את המלחים ליצירת דופק אחד. ערוץ 1 ו -4 (קרן צהובה וירוקה) הם אותות ה- PWM בפועל שנוצרים על ידי טיימרים שונים. שים לב שהם מסונכרנים אך הם מסונכרנים בקצוות הנגררים, כלומר בגלל מצב PWM 2. זו לא בעיה, מכיוון שקצב ה- PWM עבור הסרוו המסוים עדיין נכון.
יתרון נוסף של פתרון זה הוא ששינוי קצב המסגרות פירושו שינוי התקופה ב- TIM1 בלבד. עבור סרוו דיגיטלי מודרני אתה יכול לרדת אפילו ל-200-300 הרץ, אך אנא עיין במדריך של סרוו אם אתה רוצה לכוונן.