BÀI 07: PWM TRONG STM32F103.


  1. Sơ lược về lý thuyết.
  2. PWM(pulse- with modulation) hay còn gọi nôm na là “băm xung” hay “điều khiển độ rộng xung” là ứng dụng phổ biến và thường dùng trong lĩnh vực điều khiển động cơ. Một ví dụ đơn giản để hiểu về độ rộng xung là mức độ sáng tắt của LED, ở tần số mà mắt người có thể nhìn thấy thì nó là độ chênh lệch giữa mức sáng và tắt của 1 đèn khoảng thời gian lặp đi lặp lại(vd đèn sáng 5s, tắt 3s lặp đi lặp lại thì chu kì sẽ là 8 giây); với tần số cao mắt người không thể nhìn thấy thì ta sẽ thấy LED sáng mờ hay sáng rõ đó là do tổng thời gian sáng/ tổng thời gian tắt trong khoảng thời gian lớn hay nhỏ mà mắt người nhìn thấy(tính bằng đơn vị nhỏ như ms).

    Khi tìm hiểu về PWM chúng ta cần tìm hiểu kĩ một số khái niệm cơ bản như:

    • Duty cycle : tỷ lệ phần trăm xung ở mức cao.
    • Period : là chu kì xung(bao gồm tổng thời gian mức cao + mức thấp).
    • Pulse width là giá trị của mức cao so với period.
    • PTO là xung vuông có 50% thời gian cao, 50% thời gian thấp.
    • Biên độ xung: là giá trị điện áp của xung khi ở mức cao.
    • Các khái niệm về tần số, chu kì.

    Giới thiệu về PWM của STM32f103: ở VĐK này có 4 kênh timer là TIM1,TIM2,TIM3,TIM4 để phát PWM, mỗi kênh đó có 4 channel nhỏ nữa, riêng TIM1 có thêm 4 channel đảo nữa. Tùy từng ứng dụng mà có thể sử dụng phối hợp nhiều kênh cũng như nhiều channel nhỏ khác nhau. TIM1 là timer đặc biệt tạo ra riêng để ưu tiên cho việc phát xung với nhiều mode bảo vệ cũng như điều khiển riêng. Nó có các kênh PWM đảo vd( CH1 – CH1N) giúp tránh tình trạng trùng dẫn với nửa cầu H trên và nửa cầu H dưới của mạch driver điều khiển động cơ. Nó có chế độ one-pulse để xuất ra 1 xung hay nhiều xung với số xung đếm được, ngắt input để bảo vệ động cơ, có mode hỗ trợ encoder và cảm biến Hall.

    Sử dụng PWM chủ yếu là để điều khiển động cơ, khi điều khiển cần chú ý là mỗi loại động cơ đều có cơ cấu điều khiển khác nhau, tần số điều khiển cũng khác nhau. Cần chú ý về mục đích điều khiển là tốc độ, vị trí, moment… để xuất xung với tần số và chu kì thích hợp.

    Trên STM32f103 thì cần chú ý là sử dụng PWM của timer nào thì cần tra datasheet để biết ngõ ra của timer đó là chân nào, có Remap hay trùng với các chân đặc biệt không.

  3. Cấu hình với thư viện chuẩn của ST.
    1. B1- Cấp lock và khai báo các định nghĩa quan trọng.
    2. B2- cấu hình chân output của timer - Khởi tạo timer base.
    3. B3- cấu hình chức năng output compare sử dụng cho PWM, Enable timer, pwm.
    4. Sử dụng hàm điều chỉnh duty cycle.
    5. Hàm TIM_SetComparex(TIMy,z); được dùng để điều chỉnh độ rộng xung của kênh PWM đang cấu hình SetComparex tương ứng với channel x của TIMy với giá trị z. Độ rộng xung được tính dựa trên:

      • z/TIM_Period*100% với TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
      • (1 - z/TIM_Period )*100% với TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

      Chúng ta có thể điều khiển độ rộng xung với tần số cao hơn, tuy nhiêu ở tần số cao thì phải có Oscilloscope để quan sát dạng sóng ra. Nếu phát xung với tần số thấp thì có thể quan sát bằng mắt thường với độ chính xác tương đối. Chúng ta có thể thay đổi các tham số truyền vào để quan sát và hiểu các dạng PWM xuất ra.

  4. Một số thanh ghi quan trọng.
  5. Ở đây Vd là sử dụng TIM4 nên mình sẽ sử dụng thanh ghi của TIM4. TIM2,3,4 giống nhau và khác đôi chút với TIM1.

    1. TIMx_CCER – TIMx capture/compare enable register.
    2. 4 cặp bit tương ứng với 4 channel của 1 Timer. CCxE : cho phép output xung ra bên ngoài hay không. CCxP cho phép xuất mức PWM ở mức cao hay thấp vd CC4P = 0 thì khi Duty cycle =100% thì điện áp output = 3V3, CC4P = 1 thì khi Duty cycle =100% thì điện áp output = 0V.

    3. TIMx_CCMRx- TIMx capture/compare mode register x.
      • OcxM: lựa chọn mode Output cho chân PWM. Giá trị tương ứng từ 000 ->111 với các mode như PWM1, PWM2, Frozen, Toggle...
      • OCxPE: bit này cho phép bộ đếm tự động lặp lại sau khi thực hiện xong đếm lần 1.
      • OcxFE: bit này sử dụng cho mode Input capture: đo tín hiệu xung đầu vào với các xung có tần số cao.
      • CCxS: bit này cho phép lựa chọn là ngõ vào hay ngõ(Capture/Compare) ra tương ứng với các mode.
    4. TIMx_CCRx – TIMx Capture/Compare register.
    5. Nếu là mode output thì nó sẽ so sánh với thanh ghi CNT và xuất ra giá trị PWM, giá trị được làm mới khi có update xảy ra. Nếu là mode input: nó sẽ chứa giá trị đọc về của giá trị đọc cuối cùng.

  6. Bài tập.
    1. Cấu hình PWM với dyty cycle 20%, tần số 1Hz trên chanel1,2,3,4 của TIM2.
    2. Cấu hình PWM với dyty cycle 20%, tần số 1Hz trên chanel 1(20%) và chanel 1N(80%) của TIM1.
Link tải chương trình cấu hình PWM TIM4_CH4