class PWM -- điều chế độ rộng xung¶
Lớp PWM xuất tín hiệu điều chế độ rộng xung trên một Pin. Đây là API PWM hiện đại, đa cổng; trên các camera OpenMV STM32 nó bao bọc cơ chế kênh pyb.Timer bên dưới, vì vậy mỗi thực thể PWM chiếm dụng một kênh timer.
Ví dụ sử dụng:
from machine import PWM, Pin
# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)
pwm.duty_u16(32768) # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000) # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000) # 3 us pulse
pwm.deinit()
Hàm khởi tạo¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Khởi tạo một đối tượng
PWMđiều khiểndest(mộtPintrên OpenMV cams). Các đối số từ khóa tương đương với việc gọiinit()ngay sau khi khởi tạo:freq-- tần số PWM tính bằng Hz.duty_u16-- chu kỳ nhiệm vụ theo tỉ lệduty_u16 / 65535.duty_ns-- độ rộng xung tính bằng nanosecond.invert-- nếuTrue, đảo ngược cực tính đầu ra.
Chỉ được truyền tối đa một trong hai
duty_u16/duty_nstại một thời điểm. Việc đặtfreqcó thể ảnh hưởng đến các thực thểPWMkhác dùng chung timer bên dưới (đúng trên STM32 -- mọi kênh của một TIM nhất định đều chạy ở cùng tần số).Các phương thức¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Cấu hình lại đầu ra PWM. Chỉ các đối số được cung cấp mới được cập nhật; các đối số khác giữ nguyên giá trị trước đó. Xem phần hàm khởi tạo để biết ý nghĩa của từng đối số.
- freq() int¶
- freq(value: int, /) None
Lấy hoặc đặt tần số PWM.
Không có tham số, trả về tần số hiện tại tính bằng Hz.
Với một tham số
value, đặt tần số về giá trị đó tính bằng Hz. Có thể némValueErrornếu tần số nằm ngoài phạm vi đạt được của timer bên dưới.
- duty_u16() int¶
- duty_u16(value: int, /) None
Lấy hoặc đặt chu kỳ nhiệm vụ dưới dạng giá trị 16-bit không dấu trong phạm vi
0--65535.Không có tham số, trả về chu kỳ nhiệm vụ hiện tại.
Với một tham số
value, đặt chu kỳ nhiệm vụ thànhvalue / 65535của chu kỳ.0luôn thấp,65535luôn cao.
- duty_ns() int¶
- duty_ns(value: int, /) None
Lấy hoặc đặt trực tiếp độ rộng xung tính bằng nanosecond.
Không có tham số, trả về độ rộng xung hiện tại.
Với một tham số
value, đặt thời gian mức cao của mỗi chu kỳ thànhvaluenanosecond. Hữu ích cho các đầu ra kiểu servo nơi độ rộng xung là đại lượng có ý nghĩa thay vì tỉ lệ chu kỳ nhiệm vụ.
Giới hạn¶
Tần số PWM và độ phân giải chu kỳ nhiệm vụ phụ thuộc lẫn nhau trên mọi timer phần cứng: ở tần số cao, ít bước đếm hơn phù hợp trong một chu kỳ và do đó ít bit thấp hơn của
duty_u16có ý nghĩa.Tần số PWM đạt được phụ thuộc vào nguồn xung nhịp và bộ chia trước của timer. STM32 TIM2 / TIM5 là 32-bit trên hầu hết các linh kiện (và TIM3 / TIM4 cũng vậy trên STM32N6), cho phạm vi tần số và chu kỳ nhiệm vụ rộng hơn; các timer còn lại là 16-bit. Xem sổ tay tham khảo MCU liên quan để biết phạm vi chính xác.
Trên STM32, nhiều kênh
PWMtrên cùng một TIM dùng chung tần số. Việc đặtfreq()trên một thực thể sẽ thay đổi đầu ra của mọi kênh khác được gắn vào TIM đó.