Chọn chip và timer, nhập tần số PWM và duty, công cụ trả về Prescaler, Counter Period và Pulse để điền vào STM32CubeMX, kèm clock tree từ SYSCLK tới timer.

Công thức tần số và duty PWM

f_PWM = f_TIM / ((PSC + 1) × (ARR + 1))
duty  = CCR / (ARR + 1)

Ở chế độ PWM mode 1, bộ đếm chạy từ 0 tới ARR. Chân ra ở mức cao khi bộ đếm nhỏ hơn Pulse (CCR) và xuống mức thấp khi đạt CCR. Vì vậy ARR quyết định tần số, còn CCR quyết định duty.

Ví dụ: PWM 1 kHz, duty 25 % trên Blue Pill

TIM2 nhận 72 MHz. Chọn PSC = 71 để timer đếm 1 MHz, ARR = 999 để một chu kỳ có 1000 tick, tức 1 kHz. Duty 25 % là CCR = 250.

72 000 000 / ((71 + 1) × (999 + 1)) = 1 000 Hz

Số mức duty

Duty chỉ chỉnh được theo từng bước 1 / (ARR + 1). ARR = 999 cho 1000 mức, đủ cho LED và động cơ. Khi tăng tần số PWM, ARR nhỏ lại và số mức giảm theo: với clock 72 MHz, PWM 1 MHz chỉ còn 72 mức. Công cụ ưu tiên giữ ít nhất 1000 mức nếu tần số cho phép.

Clock timer lấy ở đâu?

Clock vào timer đi từ SYSCLK qua AHB Prescaler, rồi APB Prescaler. Nếu APB Prescaler khác 1 thì clock timer được nhân 2. Hình clock tree trong công cụ vẽ đúng các khối này như tab Clock Configuration của STM32CubeMX để bạn đối chiếu.

Bài viết liên quan