lớp DAC -- chuyển đổi số sang tương tự¶
DAC xuất điện áp tương tự từ 0 V đến 3,3 V trên một trong hai kênh DAC của STM32.
Trên mọi OpenMV Cam STM32 có pyb.DAC (M4 / M7 / H7 / H7 Plus / Pure Thermal), các kênh được nối như sau:
Kênh DAC |
Chân header |
Chân STM32 |
|---|---|---|
|
(không có trên header) |
|
|
|
|
OpenMV Cam N6 không có ngoại vi DAC; pyb.DAC không khả dụng trên bo mạch đó.
Ví dụ sử dụng:
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
Để xuất sóng sine liên tục:
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)
Để xuất sóng sine liên tục ở độ phân giải 12-bit:
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)
Hàm khởi tạo¶
- class pyb.DAC(port: int | Pin, bits: int = 8, *, buffering: bool | None = None)¶
Tạo một đối tượng DAC mới.
portcó thể là một đối tượngPin, hoặc một số nguyên (1hoặc2) để chọn kênh DAC 1 hay 2. Chân vật lý mà mỗi kênh được dẫn tới phụ thuộc vào OpenMV Cam.bitslà số nguyên chỉ định độ phân giải, có thể là 8 hoặc 12. Giá trị tối đa được chấp nhận bởiwrite()vàwrite_timed()là(2**bits) - 1(255 với 8-bit, 4095 với 12-bit).Tham số buffering chọn hành vi của bộ đệm op-amp đầu ra DAC, mục đích là giảm trở kháng đầu ra. Có thể là
Noneđể chọn mặc định (bộ đệm được bật choDAC.noise(),DAC.triangle()vàDAC.write_timed(), và tắt choDAC.write()),Falseđể tắt hoàn toàn bộ đệm, hoặcTrueđể bật bộ đệm đầu ra.Khi bộ đệm được bật, chân DAC có thể dẫn tải xuống 5KΩ. Ngược lại, trở kháng đầu ra tối đa là 15KΩ: do đó để đạt độ chính xác 1% mà không có bộ đệm, tải đặt vào phải nhỏ hơn 1,5MΩ. Sử dụng bộ đệm làm giảm độ chính xác, đặc biệt ở các cực biên của dải đo.
Phương thức¶
- init(bits: int = 8, *, buffering: bool | None = None) None¶
Khởi tạo lại DAC. bits có thể là 8 hoặc 12. buffering có thể là
None,FalsehoặcTrue; xem hàm khởi tạo ở trên để biết ý nghĩa của tham số này.
- noise(freq: int) None¶
Tạo tín hiệu nhiễu giả ngẫu nhiên. Một mẫu ngẫu nhiên mới được ghi vào đầu ra DAC theo tần số đã cho.
- triangle(freq: int) None¶
Tạo sóng tam giác. Giá trị ở đầu ra DAC thay đổi theo tần số đã cho và tăng/giảm qua toàn bộ dải 12-bit (lên và xuống). Do đó tần số của chính sóng tam giác lặp lại nhỏ hơn 8192 lần.
- write(value: int) None¶
Truy cập trực tiếp đầu ra DAC. Giá trị tối thiểu là
0; tối đa là(2**bits) - 1, trong đóbitsđược đặt khi tạo đối tượng DAC hoặc quainit().
- write_timed(data: bytes | bytearray | 'array.array', freq: int | Timer, *, mode: int = DAC.NORMAL) None¶
Khởi tạo một chuỗi truyền từ RAM sang DAC sử dụng truyền DMA. Dữ liệu đầu vào được xử lý như mảng byte ở chế độ 8-bit, và mảng half-word không dấu (mã kiểu mảng 'H') ở chế độ 12-bit.
freqcó thể là số nguyên chỉ định tần số ghi mẫu DAC, sử dụng Timer(6). Hoặc có thể là đối tượng Timer đã được khởi tạo dùng để kích hoạt mẫu DAC. Các timer hợp lệ là 2, 4, 5, 6, 7 và 8.modecó thể làDAC.NORMALhoặcDAC.CIRCULAR.Ví dụ sử dụng cả hai DAC cùng lúc:
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)
Hằng số¶