#4.2_PWM Input | Đọc xung PWM

Đọc xung PWM

Đọc xung PWM ở đây là đọc giá trị của 1 xung PWM đưa vào vi điều khiển. Xác định được tần số và độ rộng xung của nó. Ví dụ STM32 cơ bản lần này sẽ tạo ra 1 xung PWM sau đó đọc giá trị của xung PWM vừa tạo.

———————————

Cùng xem bài viết bên dưới.

Nội dung thực hành | Đọc xung PWM

  • Trong ví dụ STM32 cơ bản này, kit STM32F411 sẽ được sử dụng. Dùng 2 TIMER là TIM1 và TIM2, TIM1 phát ra xung PWM có tần số 10kHz, độ rộng xung 40%. TIM2 sẽ dùng chức năng Input Capture để đọc giá trị PWM của TIM1.

1 số đặc điểm về PWM Input trong datasheet về PWM input mode timing nói về cách đo độ rộng và chu kỳ xung PWM. Ngoài ra còn có các thiết lập khi cấu hình Input Capture như trong hình ảnh bên dưới, để tìm hiểu sâu và chi tiết ta tìm và đọc datasheet STM32f4xx.

Đầu tiên là PWM input mode timing, đây là lý thuyết của việc đọc xung PWM trong STM32, có 2 kênh CH1 và CH2. 2 kênh sẽ được thiết lập bắt sườn lên và sườn xuống khác nhau. Mục đích khi dùng sườn lên là để bắt được chu kỳ PWM. Sườn xuống thì dùng vào việc bắt độ rộng của xung PWM. Phần cấu hình chi tiết như Capture filter và Capture Prescaler không dùng trong ví dụ cơ bản này. Chúng dùng giúp chức năng Input Capture phù hợp trong từng dự án.

Lý thuyết trong datasheet hơi khó hiểu cho đến khi ta đọc phần B. Khi thực hành cấu hình chân và TIMER chúng ta sẽ nắm rõ ngay phần lý thuyết khô khan này.

Thực hành HAL_TIM_IC_START

Cấu hình chân

Đầu tiên là dao động và mạch nạp, tiếp theo sẽ là TIM1 để băm xung PWM như ví dụ trước, hệ số PRE_S và PRE_A sẽ vẫn là 100 – 1, do đó xung PWM từ TIM1 có tần số 10kHz.

Tiếp theo là TIM2, chế độ sử dụng là PWM input on CH1. Lúc này kênh CH1 sẽ bắt sườn lên (Rising Edge), cụ thể là đọc chu kỳ xung PWM, còn CH2 sẽ bắt sườn xuống (Falling Edge) để đọc độ rộng xung. Hệ số PRE_S của TIM2 là 0 để khả năng bắt xung nhanh nhất (tần số 100MHz từ APB1).

  • Chú ý sườn lên, xuống của CH1 và CH2 để sang phần 2, lập trình.
  • Nhớ chọn ngắt cho TIM2.
  • Hệ số PRE_S ở TIM1 và TIM2 dễ nhầm lẫn.

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

Đọc xung PWM
Hàm ngắt trong Input Capture (Click để phóng to)

Khi vào ngắt, nếu đúng kênh CH1 đã chọn thì bắt đầu các hoạt động. Đầu tiên dùng CH1 đọc giá trị chu kỳ PWM. Khi đọc xong (giá trị này ≠ 0) sẽ bắt đầu đọc giá trị từ CH2 ~ độ rộng xung. Tần số được tính theo công thức trong phần A. Hệ số Prescaler ở đây là của TIM2, tránh nhầm lẫn sang của TIM1 dẫn đến kết quả không chính xác.

STM32 cơ bản
Kết quả debug ví dụ (Click để phóng to)

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.


Trong bài viết tiếp theo ta sẽ dùng HAL_ADC để đọc giá trị biến trở. Sử dụng bộ chuyển đổi từ tương tự sang số 12bit của STM32.

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á.

4.5/5 - (2 bình chọn)

Similar Posts

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *