BÀI 06 : PWM TRONG STM8S.


  1. Giới thiệu 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ái khái niệm về tần số, chu kì.

    Giới thiệu về PWM của STM8S : ở STM8S003F3P6 thì chỉ có 2 timer có thể phát xung là Timer1 và Timer2. Kênh timer1 là kênh chuyên dụng để phát xung để điều khiển động cơ vì nó có nhiều chế độ bảo vệ cũng như các mode phù hợp. Timer1 có thêm các kênh CHxN nó là kênh phát xung ngược lại so với các kênh CHx mục đích để điều khiển nửa cầu trên và nửa cầu dưới của mạch driver điều khiển động cơ tránh tình trạng trùng dẫn. Kênh Pwm của timer 1 cũng có thể phát xung với các tần số có độ chia nhỏ hơn so với timer 2 vì 2 thanh ghi PSC và ARR của nó đều là 16 bit.

    Biên độ của PWM trong STM8S003F3P6 phụ thuộc vào nguồn cấp của VĐK trong mức mà VĐK hoạt động được. Ngoài ra thư viện của các Mode PWM cũng khá đa dạng, nếu bạn nào có OSC(dao động kí) có thể thay đổi và quan sát các mode.

    CHÚ Ý: với 1 số kênh PWM trong STM8S003F3P6 có thể ở chế độ Remap, các bạn cứ lập trình bình thường và chú ý khi nạp cho chip(mình chỉ chỉ giới thiệu ở chế độ release).

    Ở tab Option Byte của STVP các bạn chọn thanh ghi remap tương ứng với chân remap trong datasheet, ở đây mình khoanh vùng đã thay đổi. button nạp bây giờ là all tab chứ không phải current tab nữa.

  3. Cấu hình PWM trong STM8S003F3P6.
    1. Cấu hình với Timer1 channel 1 – TIM1_CH1
      • Chương trình con cấu hình:
      • Khi cấu hình xong, tức là timer đã chạy các bạn có thể set PWM bằng hàm TIM1_SetComparex(y). Với x tương ứng từ 1->4(tương ứng với OC đã cấu hình PWM) và y là giá trị của PWM – giá trị này từ 0-> giá trị của thanh ghi ARR
    2. Cấu hình với timer1 CH1 và CH1N
      • Cấu hình chương trình con:
      • Cũng tương tự như ở trên, các bạn cũng có thể dùng hàm TIM1_SetComparex(y) để set độ rộng xung mong muốn. Chú ý là kênh CH1 và CH1N dùng chung hàm set.

      • Kết quả:

      ở trên(màu vàng) là kênh CH1, ở dưới(màu đỏ) là kênh CH1N.

    3. Ngoài ra còn 1 số mode PWM nữa, các bạn có thể thử thay đổi các thông số thanh ghi để xem được kết quả.
  4. Bài tập.
    1. Lập trình PWM với tần số 1Khz, độ rộng xung là 40% trên kênh CH1 của timer2 trên STM8S003F3P6. chú ý đây là kênh có chức năng remap.
    2. Lập trình PWM với tần số 1Khz trên timer1, độ rộng xung là 20% trên kênh CH1, 80% trên kênh CH1N, độ rộng xung là 40% trên kênh CH2, 60% trên kênh CH2N.
    3. Lập trình PWM với tần số 1Khz trên timer1, độ rộng xung là 20% trên kênh CH1, 20% trên kênh CH1N, độ rộng xung là 60% trên kênh CH2, 60% trên kênh CH2N.


    DOWNLOAD CODE

Link tải sử dụng timer1 CH1 : STVP Project IAR Project

Link tải sử dụng timer1 CH1 và CH1N : STVP Project IAR Project