class DAC – המרה מדיגיטלי לאנלוגי¶
ה-DAC מוציא מתחים אנלוגיים בין 0 V ל-3.3 V באחד משני ערוצי DAC של STM32.
בכל OpenMV Cam מבוססת STM32 שחושפת את pyb.DAC (M4 / M7 / H7 / H7 Plus / Pure Thermal) הערוצים מחווטים באופן הבא:
ערוץ DAC |
פין מחבר (header) |
פין STM32 |
|---|---|---|
|
(לא במחבר) |
|
|
|
|
ל-OpenMV Cam N6 אין התקן היקפי DAC; pyb.DAC אינו זמין בלוח זה.
דוגמת שימוש:
from pyb import DAC
dac = DAC(1) # create DAC channel 1
dac.write(128) # write a value to the DAC (approximately 1.65 V)
dac = DAC(1, bits=12) # use 12-bit resolution
dac.write(4095) # output maximum value, 3.3 V
כדי להוציא גל סינוס רציף:
import math
from pyb import DAC
# create a buffer containing a sine-wave
buf = bytearray(100)
for i in range(len(buf)):
buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf)))
# output the sine-wave at 400Hz
dac = DAC(1)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
כדי להוציא גל סינוס רציף ברזולוציה של 12 ביט:
import math
from array import array
from pyb import DAC
# 128-sample sine wave, half-word samples centred at 2048 (12-bit mid).
N = 128
buf = array("H", (
2048 + int(2047 * math.sin(2 * math.pi * i / N))
for i in range(N)
))
# Output the sine wave at 400Hz.
dac = DAC(1, bits=12)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)
בנאים¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
בניית אובייקט DAC חדש.
portיכול להיות אובייקטPin, או מספר שלם (1או2) הבוחר את ערוץ DAC 1 או 2. הפין הפיזי שאליו מנותב כל ערוץ תלוי ב-OpenMV Cam.bitsהוא מספר שלם המציין את הרזולוציה, ויכול להיות 8 או 12. הערך המרבי שמקבלותwrite()ו-write_timed()הוא(2**bits) - 1(255 עבור 8 ביט, 4095 עבור 12 ביט).הפרמטר buffering בוחר את התנהגות חוצץ היציאה של מגבר ה-DAC (op-amp), שמטרתו להפחית את עכבת היציאה. הוא יכול להיות
Noneכדי לבחור בברירת המחדל (חציצה מופעלת עבורDAC.noise(),DAC.triangle()ו-DAC.write_timed(), ומושבתת עבורDAC.write()),Falseכדי להשבית חציצה לחלוטין, אוTrueכדי להפעיל חציצת יציאה.כאשר החציצה מופעלת פין ה-DAC יכול להניע עומסים עד 5KΩ. אחרת יש לו עכבת יציאה של 15KΩ לכל היותר: כתוצאה מכך, כדי להשיג דיוק של 1% ללא חציצה נדרש שהעומס המוחל יהיה קטן מ-1.5MΩ. השימוש בחוצץ גובה מחיר בדיוק, במיוחד בקצוות הטווח.
מתודות¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
אתחול מחדש של ה-DAC. bits יכול להיות 8 או 12. buffering יכול להיות
None,FalseאוTrue; ראו את הבנאי לעיל למשמעות פרמטר זה.
- triangle(freq: int) None¶
יצירת גל משולש. הערך ביציאת ה-DAC משתנה בתדר הנתון ועולה ויורד לאורך כל טווח 12 הביט (למעלה ולמטה). לכן תדר גל המשולש החוזר עצמו קטן פי 8192.
- write(value: int) None¶
גישה ישירה ליציאת ה-DAC. הערך המינימלי הוא
0; המרבי הוא(2**bits) - 1, כאשרbitsנקבע בעת יצירת אובייקט ה-DAC או באמצעותinit().
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
התחלת התפרצות (burst) מ-RAM ל-DAC באמצעות העברת DMA. נתוני הקלט מטופלים כמערך בייטים במצב 8 ביט, וכמערך חצאי-מילים ללא סימן (typecode של מערך »H«) במצב 12 ביט.
freqיכול להיות מספר שלם המציין את התדר שבו לכתוב את דגימות ה-DAC, באמצעות Timer(6). או שהוא יכול להיות אובייקט Timer שכבר אותחל המשמש להפעלת דגימת ה-DAC. טיימרים תקפים הם 2, 4, 5, 6, 7 ו-8.modeיכול להיותDAC.NORMALאוDAC.CIRCULAR.דוגמה לשימוש בשני ה-DAC בו-זמנית:
dac1 = DAC(1) dac2 = DAC(2) dac1.write_timed(buf1, pyb.Timer(6, freq=100), mode=DAC.CIRCULAR) dac2.write_timed(buf2, pyb.Timer(7, freq=200), mode=DAC.CIRCULAR)
קבועים¶