#4.1_Băm xung PWM
Băm xung PWM rất quan trọng trong thực hành điện tử. Nó có mặt rất nhiều trong đời sống, điều khiển độ nhanh chậm của động cơ, điều xung, điều áp cho đến ổn định tốc độ động cơ… Bài viết STM32 cơ bản này sẽ giới thiệu về PWM dùng thư viện HAL.
———————————
Cùng xem bài viết bên dưới.
Nội dung thực hành | Băm xung PWM
- Trong ví dụ này, tiếp tục sử dụng TIM4 channel 1 để tạo xung PWM do nó tương ứng với chân PD12 (gắn với 1 LED trong kit STM32F411).
CCR và ARR là 2 thanh ghi quyết định độ rộng xung của PWM trong STM32. Trong ví dụ ta chọn xung có TPWM = 100µs -> FPWM = 10kHz (FPWM là FREQUENCY).
- APB TIM CLOCK: Sử dụng APB1 Timer clock với tần số 100MHz
- PRESCALER: Hệ số chia được chọn là 100 – 1 cùng với ARR để tạo xung PWM có TPWM = 100µs
- FREQUENCY: Tần số PWM, để có TPWM = 100µs ~ FPWM = 10KHz
- DUTY: Độ rộng xung, kết quả cuối cùng ta hướng đến, với ARR = 100, muốn tạo xung có độ rộng 40% -> CCR = 40;
- Ví dụ này tìm hiểu về datasheet về PWM của STM32. Khi đã nắm rõ về các thanh ghi và công thức sử dụng thì trong tất cả các ví dụ sau này, bạn đều có thể áp dụng 1 cách thành thạo.
Thực hành HAL_TIM_PWM_Start
Cấu hình chân
Dao động ngoài và mạch nạp như thường lệ. Tiếp theo chọn tần số của vi điều khiển là 100MHz. Ta băm xung với chu kỳ TPWM = 100µs, theo công thức ở phần A, ta tính được các hệ số PRE_S và PRE_A là 100 – 1 và 100 – 1. TIM4 channel tương ứng với chân LED PD12 trong STM32F411 Discovery.
Khởi tạo code và thư viện stm32f4xx_HAL_TIM.c
Sau khi cấu hình chân xong ta tiến hành khởi tạo code. Sau đó vào stm32f4xx_HAL_TIM.c để tìm các hàm sẽ sử dụng.
Các hàm HAL_TIM sử dụng trong ví dụ.
Hàm Reload():
Chức năng hàm Reload đơn giản là để xung PWM lặp đi lặp lại từ 0% -> 100% tương ứng với độ sáng của LED tại chân PD12.
- Hàm while (1):
Lúc này LED sẽ sáng dần sáng dần, và cứ thế lặp đi lặp lại.
Phần cứng và code trong bài viết
Phần cứng tiếp tục sử dụng STM32F411, phần mềm sử dụng là stm32cubeIDE. File code ví dụ các bạn tải về bên dưới. Phần mềm để theo dõi xung đầu ra PWM là Logic 2.3.4.3 sử dụng kèm với phần cứng Logic 24M 8CH.
Trong bài sau ta sẽ sử dụng HAL_TIM_IC_Start để đọc xung PWM đầu vào rồi tính tần số và độ rộng xung PWM. Các bài viết khác cùng chuyên mục trong “STM32 cơ bản“.
Các chuyên mục khác:
Bạn có thắc mắc gì trong bài viết không?
Đánh giá và để lại bình luận bên dưới nhá.