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

אוסצילוסקופ כפול עקבות: 11 שלבים (עם תמונות)
אוסצילוסקופ כפול עקבות: 11 שלבים (עם תמונות)

וִידֵאוֹ: אוסצילוסקופ כפול עקבות: 11 שלבים (עם תמונות)

וִידֵאוֹ: אוסצילוסקופ כפול עקבות: 11 שלבים (עם תמונות)
וִידֵאוֹ: ניר וגלי - חיי כלב 2024, יולי
Anonim
אוסצילוסקופ כפול עקבות
אוסצילוסקופ כפול עקבות

כשאני בונה את האוסילוסקופ המיני הקודם שלי רציתי לראות עד כמה אני יכול לגרום למיקרו ARM הקטן ביותר שלי לבצע STM32F030 (F030) וזה עשה עבודה טובה.

באחת ההערות הוצע כי "כדור כחול" עם STM32F103 (F103) עשוי להיות טוב יותר, קטן יותר מלוח הפיתוח עם ה- F030 ואולי אף זול יותר. אבל עבור המיני אוסצילוסקופ לא השתמשתי בלוח הפיתוח אלא ב- F030 על לוח SMD-DIP קטן עוד יותר, כך שגלולה כחולה בהחלט לא תהיה קטנה יותר ואני בספק אם יהיה גם זול יותר.

הקוד זמין כעת ב- Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

אספקה

רשימת חלקים: - קופסת פלסטיק - לוח לוח (אב טיפוס דו צדדי 8x12 ס מ) - כדור כחול - תצוגת TFT ST7735s - סוללת ליתיום -יון - ווסת נשירה נמוכה 3.3V 3.3V - אופמפ כפול MCP6L92 - לוח TSSOP8 עד DIP8 - קריסטל 12 מגה -הרץ (לא הכרחי) - מקודד סיבוב פלוס ידית (2x) - כוח מתג - מסופי בננות (4x) - לוח מטען ליתיום -יונים - מספר נגדים וקבלים - מרווחי ניילון, אגוזים וברגים

כלים:

- תחנת הלחמה - הלחמה 0.7 מ מ - חוט כלשהו - חותך צד - כוסות וזכוכית - מקדחה - מולטימטר - אוסצילוסקופ - STLink -V2

תוֹכנָה:

- STM32IDE - STM32CubeMX - כלי STLink - ספריית LowLayer - ספרייה מותאמת עבור ST7735s - פנקס רשימות ++ - Kicad

שלב 1: השתלבות או מצב דו -זמני

מצב שזור או SImultaneous
מצב שזור או SImultaneous
מצב שזור או SImultaneous
מצב שזור או SImultaneous

כדור כחול

אבל הרעיון היה קיים, וידעתי של- F103 יש שני ADC! מה אם הייתי משתמש בשני ה- ADC ביחד במצב "interleave", משהו שעשיתי בעבר עם STM32F407 (F407). מהירות הדגימה הייתה כפולה. זאת, שלבו זאת עם מיקרו -בקר מהיר יותר וזה יהווה יורש גדול של האוסילוסקופ המיני.

מצב Interleave באופן מוזר ADCs ב- F103 מתקדמים פחות מזה ב- F030 (ו- F407), אינך יכול לבחור את הרזולוציה. חשוב יותר הוא שגם אינך יכול לשנות את התזמון בין שני ה- ADC. כעת, כאשר אתה משתמש במצב הדירוג בדרך כלל אתה רוצה את הדגימה מהר ככל האפשר עם הזמן הקצר ביותר בין כל הדגימות, אך עם אוסצילוסקופ יש צורך לשנות את התזמון. אולי עדיין אפשר לעשות את זה, אני לא מעצב אוסצילוסקופ מקצועי, אבל עזבתי את התוכנית להשתמש במצב interleave.

מצב סימולטני

עם זאת, כאשר שני ADCים נותנים הרבה יותר אפשרויות, ניתן להגדיר את שני ה- ADC גם למצב "רגיל-סימולטני". מה דעתך על אוסצילוסקופ עקבות כפול?

לאחר שהחלטתי לנסות לעשות אוסצילוסקופ עקבות כפול רציתי גם לקבל רגישות קלט משתנה, אופציה שלא הייתה לי במיני אוסצילוסקופ. כלומר משכך (ומגבר) בכניסות. ואולי רציתי אפילו יותר? אז הכנתי רשימה קטנה של "נחמדים".

רשימת משאלות

שני ערוצים

רגישות משתנה בשני הערוצים

מופעל בשני הערוצים

רמת טריגר משתנה בשני הערוצים

קיזוז משתנה

כוח סוללה יחיד

להתאים לאותה קופסה כמו המיני אוסצילוסקופ

שלב 2: אבות טיפוס

אב טיפוס
אב טיפוס
אב טיפוס
אב טיפוס

כרגיל התחלתי את הפרויקטים האלה על קרש לחם. (ראה תמונה) ולפני הלחמת כל מה שעל הלוח אני מנסה לברר אם וכיצד הוא יתאים לקופסת הפרויקטים שנבחרה. זה מתאים, אבל רק. חלקים מסוימים מוסתרים מתחת למסך, אחרים מתחת לגלולה הכחולה. ושוב, בדיוק כמו ברוב הפרויקטים שלי, זהו פרויקט חד פעמי ואני לא אעצב עבורו PCB.

שלב 3: מחלישים

מחליכים
מחליכים

באוסילוסקופים רגילים מחלילי הכניסה הם מעגלים המשנים את הנחתה וההגברה על ידי החלפת נגדים פנימה והחוצה עם ממסרי אותות קטנים. אמנם יש לי כמה ממסרים אלה, אבל אני יודע שהם לא יתחלפו בפחות מ -4 וולט, זה אומר שהם יעבדו רק עם סוללת ליתיום יון טעונה במלואה (4.2V). אז הייתי צריך דרך אחרת להחליף נגדים אלה. כמובן שאני יכול פשוט להתקין מתגים מכניים, אבל זה בוודאי כבר לא יתאים לתיבת הפרויקט בחשבון, אולי אוכל לנסות שוב פוטנציומטר דיגיטלי טוב יותר (זה שיש לי הוא רועש מדי).

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

זה עובד טוב מאוד, אך עם 4 מתגים בלבד ב- 4066 ובעל 2 ערוצים לא היה ניתן לבצע יותר משלוש רמות רגישות. בחרתי 500mV, 1V ו- 2V לחלוקה כיוון שרמות המתח בהן אני משתמש ביותר. המסך מחולק ל 6 חטיבות, כך שמדובר בטווחים -1.5V עד +1.5V, -3V עד +3V ו- -6V עד 6V.

בעזרת "הקרקע הווירטואלית" אתה יכול להזיז טווחים אלה למעלה ולמטה כך שאפילו 0v עד +12V אפשרי.

שלב 4: קרקע וירטואלית

קרקע וירטואלית
קרקע וירטואלית
קרקע וירטואלית
קרקע וירטואלית

מכיוון שהאוסילוסקופ משתמש במעקה חשמל יחיד (3.3V), האופאמפס זקוקים למפלס קרקע וירטואלי או שהם לא יעבדו. מפלס קרקע וירטואלי זה נעשה עם PWM בערוץ פלט אחד של TIM4, מחזור העבודה שלו משתנה מכמה אחוזים לכמעט מאה אחוז. מסנן מעבר נמוך עם נגד 1k וקבל 10uF הופך את זה למתח של (כמעט) 0V ל (כמעט) 3.3V. תדירות הגל המרובע הוא קצת פחות מ -100 קילוהרץ, כך שמסנן המעבר הנמוך הפשוט מספיק טוב.

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

שלב 5: מקודדים רוטרי וניפוי באגים

מקודדים רוטרי וניפוי באגים
מקודדים רוטרי וניפוי באגים
מקודדים רוטרי וניפוי באגים
מקודדים רוטרי וניפוי באגים

באוסילוסקופ המיני השתמשתי רק במקודד סיבוב אחד לכל הפונקציות. זה יקשה מאוד על אוסצילוסקופ כפול, אז הנה אני צריך שניים. מקודד אחד עבור המנפחים ומפלס הקרקע הווירטואלי והשני מקודד לבסיס הזמן וההפעלה. למרבה הצער, בדיוק כמו בפרויקט השני שלי, המקודדים הרוטוריים האלה הם "רועשים" מאוד. הם כל כך גרועים שהם פשוט לא יעבדו עם טיימרים ב"מצפן-מקודד ", הדרך הרגילה לקרוא אותם. הייתי צריך ליצור מנגנון ניתוק עם טיימר TIM2, לבדוק את המקודדים כל 100 ש"ח. טיימר זה בתורו מופעל (רק) כאשר יש פעילות כלשהי על המקודדים, הדבר נבדק בעזרת הפונקציונליות EXTI ביציאות הקלט. כעת המקודדים עובדים היטב.

וכפי שאתה יכול לראות, גם תצוגה יכולה להיות שימושית מאוד להצגת מידע על איתור באגים.

שלב 6: תצוגה ובסיס זמן

תצוגה ובסיס זמן
תצוגה ובסיס זמן

לתצוגה יש רזולוציה של 160 x 128 פיקסלים ולכן יש צורך ב -160 דוגמאות למסך אחד, הצלחתי להאיץ את ה- ADC לבצע 1.6 מיליון דוגמאות בשנייה וזה, עם המיקרו -בקר הרבה יותר מדי (עוד על כך בהמשך), נותן בסיס זמן מינימלי של 20us לחלוקה (100us למסך). כך צורת גל של 10kHz תמלא את כל המסך.

זה מהיר פי שניים מהמיני אוסצילוסקופ שהכנתי קודם. נו טוב, עכשיו זה עם שני ערוצים:-).

כאמור, התצוגה ברוחב 160 פיקסלים ולכן דרושים רק 160 ערכים למסך. אבל כל המאגרים מכילים למעשה 320 דגימות. אז ה- DMA מאחסן 320 ערכים לפני שהוא מעורר הפרעה מלאה של השידור (TC). הסיבה לכך היא שההפעלה מתבצעת בתוכנה. הדגימה מתחילה ברגע אקראי, ולכן אין זה סביר שהערך הראשון במאגר הוא המקום שבו נקודת ההדק צריכה להיות.

לכן נקודת ההדק נמצאת על ידי קריאה דרך trace_x_buffer, אם הערך נמצא בערך ההדק המבוקש en אם הערך הקודם נמצא ממש מתחתיו, נקודת ההדק_ נמצאת. זה עובד די טוב, אבל אתה צריך מאגר גדול יותר מאשר גודל התצוגה בפועל.

גם זו הסיבה שקצב הרענון בהגדרות בסיס הזמן הנמוך הוא איטי יותר ממה שניתן לצפות. כאשר אתה משתמש בהגדרת 200ms/div מסך אחד מלא בנתונים הוא שנייה אחת, אך מכיוון שכמות ההמרות כפולה מתבצעת, זה לוקח 2 שניות. בהגדרות בסיס הזמן המהיר יותר לא תבחין בכך כל כך.

TIM3 משמש ליצירת בסיס הזמן. הוא מפעיל את ה- ADC עם המהירות כנדרש על ידי הגדרת בסיס הזמן שנבחר. שעון ה- TIM3 שלו הוא 120MHz (ראה OVERCLOCKING), המספר המרבי שאליו הוא סופר (ARR) קובע כיצד הוא עולה על גדותיו או בשפת ST הוא מתעדכן. באמצעות TRGO פולסי עדכון אלה מפעילים את ה- ADC. התדר הנמוך ביותר שהוא מייצר הוא 160 הרץ, הגבוה ביותר הוא 1.6 מגהרץ.

שלב 7: ADCs ו- DMA

ADCs ו- DMA
ADCs ו- DMA

שני ה- ADC ממירים את המתח בכניסות שלהם בו זמנית, הם מאחסנים את שני ערכי 12 הסיביות האלה במשתנה יחיד של 32 ביט. אז ל- DMA יש רק משתנה אחד להמרה (כפולה) להעברה.

לכן, על מנת להשתמש בערכים אלה יש לפצל אותם לשני הערכים כך שניתן להשתמש בהם להצגת שני העקבות. כאמור, לא ניתן להגדיר ADCs ב- F103 ברזולוציות אחרות מאשר 12 סיביות. הם תמיד במצב 12 ביט ולכן המרות תמיד לוקחות את אותו מספר פולסי שעון. ובכל זאת, עם שעון יתר של ה- ADC, ניתן לבצע 1.6 דגימות MS לשנייה (ראו Extra: Overclocking).

ההתייחסות למחשבי החשמל היא Vdd, המעקה 3.3V. כדי להמיר את זה לערכים נוחים יותר (לחלוקה) חישבתי את ערכי המנחתים, כי אין לי את ערכי הנגד המדויקים שיוצאים מהחישובים האלה כמה תיקונים נעשים בתוכנה.

בפרויקט זה אני משתמש ב- DMA ב"מצב רגיל ". במצב זה ה- DMA מפסיק להעביר נתונים (מתוך ADCs לזיכרון) כאשר מספר המילים (או חצי מילים או בתים) כולן מועברות. במצב האפשרי האחר, "מצב מעגלי", ה- DMA מאפס את עצמו וממשיך להעביר נתונים ללא הפרעה. זה לא עבד עם F103, זה כל כך מהר שזה מחליף את הנתונים ב- adc_buffer לפני שאר התוכנית תוכל לקרוא אותם. אז עכשיו התהליך הוא כדלקמן:

- הגדר את ה- DMA למספר הנתונים שיש להעביר והפעל את ה- DMA

- התחל בהפעלת ה- ADC, אלה יבקשו העברות DMA לאחר כל המרה (כפולה)

- לאחר העברת מספר ההמרות שנקבע, ה- DMA מפסיק

- להפסיק מיד גם את הפעלת ה- ADC

- לעשות את כל המניפולציות הדרושות לנתונים בזיכרון

- הצג עקבות על המסך

- התחל את התהליך שוב

שלב 8: ממשק משתמש

ממשק משתמש
ממשק משתמש

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

שלב 9: בנייה ושיפורים אפשריים

בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים
בנייה ושיפורים אפשריים

אני די שמח על הפרויקט הזה. זה עובד מצוין ועושה את העבודה, אבל זה יכול להיות טוב יותר.

קופסת הפרויקטים קטנה מכדי להכיל הכל בנוחות, וכתוצאה מכך צריך לשים רכיבים מתחת לגלולה הכחולה. כדי לאפשר את הגלולה הכחולה לא ניתן היה להלחם ישירות ל"לוח הראשי ". ומכיוון שזה עשה את זה גבוה מדי הייתי צריך להסיר חלקים רבים מהגלולה הכחולה, כגון המגשרים לבחירת BOOT0 ו- BOOT1 (דברים שאני אף פעם לא משתמש בהם) ואפילו הייתי צריך להזיז את הגביש מלמעלה לתחתית ה- pcb.

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

בעיה נוספת עם הכנסת הכל לתיבת פרויקטים כה קטנה היא שהמעגלים האנלוגיים והדיגיטליים קרובים מאוד זה לזה. אתה יכול לראות שיש הרבה רעש שנראה בשני העקבות. זה אפילו לא היה לי על לוח הלחם! על ידי הזזת קווי החשמל למעגלים אנלוגיים ודיגיטליים כמה שיותר רחוק זה מזה, נעשה שיפור קטן, אך לא מספיק לטעמי. הפחתת כל ערכי הנגד במעגלים האנלוגיים אף יותר ממני (עמידות הכניסה היא 100kOhm במקום 1MOhm) לא עזרה. אני חושד שההפעלה בהגדרת בסיס הזמן המהירה ביותר (20us/div), שהיא לא נהדרת, תשתפר גם עם פחות רעש באותות.

אם תעשה את העיצוב הזה על מחשב לוח "אמיתי", עם כל חלקי ה- smd ושכבות נפרדות לאנלוגי, דיגיטלי והספק (זה 4 שכבות!) זה כנראה יעבוד טוב מאוד. הוא יהיה הרבה יותר קטן, הוא לא ישתמש בכדור כחול מלא אלא רק ב- F103 וזה יאפשר לספק לו Vdda אנלוגי נפרד (ADD) נפרד עבור ה- ADC.

כנגיעה אחרונה החלטתי לרסס את הקופסה בשחור, היא עושה שינוי מכל הקופסאות בז 'שיש לה.

שלב 10: הקוד וסרטון קצר

שלב 11: EXTRA: Overclocking

אקסטרה: שעון יתר
אקסטרה: שעון יתר

בדיוק כפי שעשיתי עם ה- F03, רציתי לראות עד כמה ניתן לנעול יתר של F103. המפרט של המיקרו -בקר הזה טוען שמהירות השעון המרבית לא תעלה על 72 מגה -הרץ (שכמובן כבר מהירה יותר מה- F030) אבל קראתי בכמה בלוגים כי שעון -יתר היה קל, אז למה לא?

הכדור הכחול מסופק עם קריסטל 8 מגה -הרץ, ה- PLL מכפיל אותו עם גורם של 9 עד 72 מגה -הרץ. ניתן להגדיל את ה- PLL עד 16 ולתת שעון של 128MHz. זו לא הייתה בעיה כלל עבור הכדור הכחול שלי, למעשה, כל הגלולות הכחולות שלי עובדות ללא בעיות ב- 128MHz.

אבל עכשיו רציתי לברר מה הגבול האמיתי. אז הסרתי את קריסטל 8MHz והחלפתי אותו באחד של 12MHz. שוב הגדלתי את מכפיל ה- PLL עד שהמיקרו -בקר נכנע לבסוף. זה היה ב 168MHz! ב- 156MHz זה עדיין עבד היטב. השארתי אותו פועל במהירות זו במשך שעות ומעולם לא ראיתי אותו מתרסק. באוסילוסקופ זה הסתפקתי ב- 120MHz, מהירות שניתן לבחור עם קריסטל 12MHz ו- PLL ב- 10, כמו גם עם קריסטל 8 מגהרץ ו- PLL ב- 15. (ראה SystemClock_Config ב- main.c)

ADCs עכשיו גם עובדים מהר יותר, יש לי אותם פועלים ב 30MHz (במקום 14), הם עדיין עבדו היטב על 60MHz, STMicroelectronics עושה קצת חומרה נחמדה!

STMicroelectronics שמה את המגבלות האלה בגיליון הנתונים מסיבה טובה, הם מבטיחים כי הבקר מיקרו עובד ב- 72MHz שצוין בכל התנאים.

אבל מכיוון שאני לא משתמש במיקרו -בקר ב -40 צלזיוס, +85 צלזיוס, על 2.0 וולט בלבד או 3.6 וולט, אני חושב שזה בטוח להעביר את זה יתר על המידה. אל תעשה זאת כאשר אתה מתכוון למכור מכשיר עם המיקרו -בקרים שלהם, לעולם אינך יודע היכן ישמשו אותו.

מוּמלָץ: