الفئة DAC -- التحويل من الرقمي إلى التناظري¶
يُخرج DAC جهداً تناظرياً يتراوح بين 0 فولت و3.3 فولت على إحدى قناتي DAC في STM32.
في كل OpenMV Cam قائمة على STM32 وتوفّر pyb.DAC (M4 / M7 / H7 / H7 Plus / Pure Thermal) تكون القنوات موصّلة كما يلي:
قناة DAC |
دبوس الترويسة |
دبوس 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، والغرض منه هو خفض ممانعة الخرج. يمكن أن تكون
Noneلاختيار الوضع الافتراضي (التخزين المؤقت مُفعَّل لـDAC.noise()وDAC.triangle()وDAC.write_timed()، ومعطَّل لـDAC.write())، أوFalseلتعطيل التخزين المؤقت كلياً، أوTrueلتفعيل التخزين المؤقت للخرج.عند تفعيل التخزين المؤقت يمكن لدبوس DAC قيادة أحمال تصل إلى 5 كيلوأوم. وإلا فإن له ممانعة خرج تبلغ 15 كيلوأوم كحد أقصى: وبالتالي فإن تحقيق دقة 1% بدون تخزين مؤقت يتطلب أن يكون الحمل المطبّق أقل من 1.5 ميغاأوم. ويؤدي استخدام المخزن المؤقت إلى انخفاض في الدقة، خصوصاً قرب طرفي المدى.
الطرائق¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
إعادة تهيئة DAC. يمكن أن يكون bits إما 8 أو 12. ويمكن أن يكون buffering إما
NoneأوFalseأوTrue؛ راجع المُنشئ أعلاه لمعرفة معنى هذه المعلمة.
- noise(freq: int) None¶
توليد إشارة ضوضاء عشوائية زائفة. تُكتب عينة عشوائية جديدة إلى خرج DAC عند التردد المحدد.
- 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¶
تبدأ دفعة من ذاكرة RAM إلى DAC باستخدام نقل DMA. تُعامَل بيانات الدخل كمصفوفة من البايتات في وضع 8 بت، وكمصفوفة من أنصاف الكلمات غير المُوقَّعة (رمز نوع المصفوفة '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)
الثوابت¶