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

מחולל צורות גל Arduino: 5 שלבים (עם תמונות)
מחולל צורות גל Arduino: 5 שלבים (עם תמונות)

וִידֵאוֹ: מחולל צורות גל Arduino: 5 שלבים (עם תמונות)

וִידֵאוֹ: מחולל צורות גל Arduino: 5 שלבים (עם תמונות)
וִידֵאוֹ: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, יולי
Anonim
מחולל צורות גל Arduino
מחולל צורות גל Arduino

עדכון בפברואר 2021: בדוק את הגרסה החדשה עם 300x קצב הדגימה, המבוסס על ה- Raspberry Pi Pico

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

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

להלן תיאורו של אחד נוסף בעל התכונות הבאות:

* צורות גל מדויקות: פלט 8 סיביות באמצעות R2R DAC, צורת 256 דוגמאות

* מהיר: קצב דגימה של 381 קילוהרץ

* מדויק: טווח תדרים של צעדים של 1 מגה -הרץ. מדויק כמו קריסטל הארדואינו.

* הפעלה קלה: צורת גל ותדר מתכווננים עם מקודד סיבוב יחיד

* מגוון רחב של אמפליטודות: מיליוולט עד 20V

* 20 צורות גל מוגדרות מראש. פשוט להוסיף עוד.

* קל להכנה: Arduino Uno או Nano plus רכיבים סטנדרטיים

שלב 1: שיקולים טכניים

יצירת אות אנלוגי

חסרון אחד של ה- Arduino Uno ו- Nano הוא בכך שאין לו ממיר דיגיטלי לאנלוגי (DAC), כך שלא ניתן לגרום לו להפיק מתח אנלוגי ישירות על הפינים. פתרון אחד הוא סולם R2R: 8 פינים דיגיטליים מחוברים לרשת נגדים כך שניתן להגיע ל 256 רמות פלט. באמצעות גישה ישירה ליציאה, Arduino יכול להגדיר 8 סיכות בו זמנית עם פקודה אחת. עבור רשת הנגדים, יש צורך ב -9 נגדים עם ערך R ו- 8 עם ערך 2R. השתמשתי ב- 10kOhm כערך ל- R, ששומר על הזרם מהפינים ל- 0.5mA או פחות. אני מניח שגם R = 1kOhm יכול לעבוד, מכיוון שהארדואינו יכול לספק 5mA לכל סיכה, 40mA ליציאה. חשוב שהיחס בין הנגדים R ל- 2R יהיה באמת 2. זה מושג בקלות רבה ביותר על ידי הצבת 2 נגדים בעלי ערך R בסדרה, בסך הכל ל -25 נגדים.

מצבר שלב

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

דגימה מהירה

הפרעות מאפשרות לדגום בזמנים מוגדרים היטב, אך תקרת ההפסקות מגבילה את תדירות הדגימה ל ~ 100kHz. לולאה אינסופית לעדכון השלב, דגימת צורת הגל והגדרת הסיכות לוקחת 42 מחזורי שעון, ובכך משיגה קצב דגימה של 16MHz/42 = 381kHz. סיבוב או דחיפה של המקודד הסיבוב גורמים לשינוי סיכה ולהפרעה היוצאת מהלולאה כדי לשנות את ההגדרה (צורת גל או תדר). בשלב זה מחשבים מחדש את 256 המספרים במערך כך שלא צריך לבצע חישובים אמיתיים של צורת הגל בלולאה הראשית. התדר המרבי המוחלט שניתן לייצר הוא 190kHz (מחצית מקצב הדגימה) אבל אז יש רק שתי דגימות לתקופה, כך שאין הרבה שליטה על הצורה. הממשק לפיכך אינו מאפשר להגדיר את התדר מעל 100kHz. ב 50kHz, יש 7-8 דגימות לכל תקופה וב -1.5 kHz ומתחת לכל 256 המספרים המאוחסנים במערך נדגמים בכל תקופה. עבור צורות גל שבהן האות משתנה בצורה חלקה, למשל גל הסינוס, אין דילוג על דגימות. אך לגבי צורות גל עם קוצים צרים, למשל גל מרובע עם מחזור עבודה קטן, קיימת הסכנה כי בתדרים מעל 1.5 קילוהרץ חסר מדגם אחד יכול לגרום לכך שצורת הגל לא תתנהג כצפוי

דיוק התדירות

המספר שבאמצעותו תוספת השלב בכל מדגם הוא פרופורציונלי לתדר. לפיכך ניתן להגדיר את התדר לדיוק של 381kHz/2^32 = 0.089mHz. בפועל כמעט אף פעם אין צורך בדיוק כזה, כך שהממשק מגביל את הגדרת התדר בצעדים של 1 מגהרץ. הדיוק המוחלט של התדר נקבע על פי הדיוק של תדר השעון Arduino. הדבר תלוי בסוג הארדואינו אך רובם מציינים תדר של 16.000MHz, כך שדיוק של ~ 10^-4. הקוד מאפשר לשנות את היחס בין התדר ותוספת הפאזה לתיקון עבור סטיות קטנות מהנחת 16MHz.

חוצץ והגברה

לרשת הנגד יש עכבת פלט גבוהה, ולכן מתח המוצא שלה יורד במהירות אם מצורף עומס. ניתן לפתור זאת על ידי חיץ או הגברה של הפלט. כאן, החוצץ וההגברה מתבצעות באמצעות אופמפ. השתמשתי ב- LM358 כי היו לי כמה. זהו מסלול אופטי איטי (קצב ירידה של 0.5V למיקרו -שנייה) כך שבתדירות גבוהה ובמשרעת גבוהה האות מתעוות. דבר טוב הוא שהוא יכול להתמודד עם מתח קרוב מאוד ל 0V. מתח המוצא עם זאת מוגבל ל- ~ 2V מתחת למסילה, כך ששימוש בהספק +5V מגביל את מתח היציאה ל -3V. מודולי Step-up הם קומפקטיים וזולים. הזנה +20V לאופamp, היא יכולה לייצר אותות עם מתח של עד 18V. (הערה, הסכמטי אומר LTC3105 כי זה היה הצעד היחיד שמצאתי בפריטינג. במציאות השתמשתי במודול MT3608, ראה תמונות בשלבים הבאים). אני בוחר להחיל הנחתה משתנה על הפלט של ה- DAC R2R ולאחר מכן להשתמש באחד משני האופקים כדי לחץ את האות ללא הגברה והשני להגברה ב- 5.7, כך שהאות יכול להגיע לתפוקה מרבית של כ 20V. זרם הפלט מוגבל למדי, ~ 10mA, ולכן ייתכן שיהיה צורך במגבר חזק יותר אם האות הוא להניע רמקול גדול או אלקטרומגנט.

שלב 2: רכיבים נדרשים

למחולל צורות גל הליבה

ארדואינו אונו או ננו

צג LCD בגודל 16x2 + גוזם 20kOhm ונגד מסדרת 100Ohm לתאורה אחורית

מקודד סיבוב 5 פינים (עם כפתור משולב)

25 נגדים של 10 קאוהם

למאגר/מגבר

LM358 או אופמפ כפול אחר

מודול הגדלה המבוסס על MT3608

נגד משתנה של 50 kOhm

נגד 10kOhm

נגד 47kOhm

קבל 1muF

שלב 3: בנייה

בְּנִיָה
בְּנִיָה
בְּנִיָה
בְּנִיָה

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

למקודד שהשתמשתי בו יש 5 סיכות, 3 בצד אחד, 2 בצד השני. הצד עם 3 סיכות הוא המקודד בפועל, הצד עם 2 פינים הוא כפתור המשולב. בצד 3 הפינים, יש לחבר את הסיכה המרכזית לאדמה, את שני הפינים האחרים ל- D10 ו- D11. בצד 2 פינים, סיכה אחת צריכה להיות מחוברת לקרקע והשנייה ל- D12.

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

R - אות גולמי מה- R2R DAC

B - אות שנאגר

A - אות מוגבר

אות T - טיימר מהפין 9

G - קרקע

+ מתח 'גבוה' חיובי ממודול ההגברה

שלב 4: הקוד

הקוד, שרטוט של ארדואינו, מצורף וצריך להעלות אותו לארדואינו.

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

הקוד מגדיר אות 1 קילוהרץ על פין D9 עם TIMER1. זה שימושי כדי לבדוק את תזמון האות האנלוגי. כך הבנתי שמספר מחזורי השעון הוא 42: אם אני מניח 41 או 43, ומפיק אות 1 קילוהרץ, ברור שיש לו תדר שונה מהאות שבסיכה D9. עם הערך 42 הם תואמים בצורה מושלמת.

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

המהדר אומר: "סקיצה משתמש ב -7254 בתים (23%) משטח האחסון של התוכנית. המקסימום הוא 30720 בתים. משתנים גלובליים משתמשים ב 483 בייט (23%) של זיכרון דינאמי, ומשאירים 1565 בתים למשתנים מקומיים. המקסימום הוא 2048 בתים". אז יש מספיק מקום לקוד מתוחכם יותר. היזהר כי ייתכן שיהיה עליך לבחור "ATmega328P (מטען אתחול ישן)" להעלות בהצלחה ל- Nano.

שלב 5: שימוש

ניתן להפעיל את מחולל האותות פשוט באמצעות כבל ה- Mini-USB של ה- Arduino Nano. הדבר נעשה בצורה הטובה ביותר באמצעות בנק חשמל, כך שלא תהיה לולאת קרקע מקרית עם המכשיר שאליו הוא יכול להיות מחובר.

כאשר הוא מופעל הוא ייצור גל סינוס של 100 הרץ. על ידי סיבוב הכפתור, ניתן לבחור באחד מ -20 סוגי הגלים האחרים. על ידי סיבוב תוך לחיצה, ניתן להגדיר את הסמן לכל אחת הספרות של התדר, ולאחר מכן ניתן לשנות אותו לערך הרצוי.

ניתן לווסת את המשרעת באמצעות הפוטנציומטר וניתן להשתמש באות הנאגר או באות מוגבר.

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

לתדרים נמוכים מאוד ניתן לדמיין את הפלט באמצעות LED בסדרה עם נגד 10kOhm. ניתן לשמוע תדרי אודיו באמצעות רמקול. הקפד להגדיר את האות קטן מאוד ~ 0.5V, אחרת הזרם הופך גבוה מדי והאות מתחיל להיחתך.

מוּמלָץ: