QC

Pulse width Modulation (PWM) in STM32F103C8

 Pulse width Modulation (PWM) in STM32F103C8


Trong phần trước, chúng ta đã biết về chuyển đổi ADC bằng STM32. Trong hướng dẫn này, chúng ta sẽ tìm hiểu về PWM (Điều chế độ rộng xung) trong STM32 và cách chúng ta có thể điều khiển độ sáng của đèn LED hoặc tốc độ của quạt DC bằng kỹ thuật PWM.

Chúng ta biết rằng có hai loại tín hiệu: Analog và Digital. Tín hiệu tương tự có điện áp như (3V, 1V ... vv) và tín hiệu kỹ thuật số có (1 ’và 0’s). Đầu ra của cảm biến là tín hiệu tương tự và những tín hiệu tương tự này được chuyển đổi thành tín hiệu kỹ thuật số bằng cách sử dụng ADC, bởi vì vi điều khiển chỉ hiểu kỹ thuật số. Sau khi xử lý các giá trị ADC đó, một lần nữa đầu ra cần được chuyển đổi thành dạng tương tự để điều khiển các thiết bị tương tự. Để làm được điều đó, chúng tôi sử dụng một số phương pháp nhất định như bộ chuyển đổi PWM, Digital sang Analog (DAC), v.v.

What is PWM (Pulse with Modulation)?

(PWM (Pulse with Modulation) là gì?).

  PWM là một cách để điều khiển các thiết bị tương tự bằng cách sử dụng giá trị kỹ thuật số như điều khiển tốc độ của động cơ, độ sáng của đèn LED, v.v. Chúng ta biết rằng động cơ và đèn LED hoạt động dựa trên tín hiệu tương tự. Nhưng PWM không cung cấp đầu ra tương tự thuần túy, PWM trông giống như tín hiệu tương tự được tạo ra bởi các xung ngắn, được cung cấp bởi chu kỳ nhiệm vụ.

Duty cycle of the PWM

Phần trăm thời gian mà tín hiệu PWM vẫn ở mức CAO (đúng giờ) được gọi là chu kỳ nhiệm vụ. Nếu tín hiệu luôn BẬT, nó đang ở trong chu kỳ làm việc 100% và nếu nó luôn tắt thì đó là chu kỳ làm việc 0%.
Duty Cycle =Turn ON time/ (Turn ON time + Turn OFF time)

PWM in STM32

STM32F103C8 có 15 chân PWM và 10 chân ADC. Có 7 bộ định thời và mỗi đầu ra PWM được cung cấp bởi một kênh kết nối với 4 bộ định thời. Nó có độ phân giải PWM 16-bit (216), tức là các bộ đếm và biến có thể lớn đến 65535. Với tốc độ đồng hồ 72MHz, đầu ra PWM có thể có khoảng thời gian tối đa khoảng một phần nghìn giây.

Vì vậy, giá trị 65535 cung cấp TỐC ĐỘ SÁNG ĐẦY ĐỦ của đèn LED VÀ TỐC ĐỘ ĐẦY ĐỦ của Quạt DC (100% Chu kỳ hoạt động)
Tương tự, giá trị 32767 cho NỬA SÁNG SÁNG CỦA LED VÀ TỐC ĐỘ NỬA của Quạt DC (50% Chu kỳ làm việc)
Và giá trị 13107 cho (20%) ĐỘ SÁNG VÀ (20%) TỐC ĐỘ (20% Chu kỳ nhiệm vụ)


  Trong hướng dẫn này, chúng tôi sử dụng chiết áp và STM32 để thay đổi độ sáng của đèn LED và tốc độ của quạt DC bằng kỹ thuật PWM. Màn hình LCD 16x2 được sử dụng để hiển thị giá trị ADC (0-4095) và biến đã sửa đổi (giá trị PWM) là đầu ra (0-65535).

Components Required

  • STM32F103C8
  • DC fan
  • ULN2003 Motor Driver IC
  • LED (RED)
  • LCD (16x2)
  • Potentiometer
  • Breadboard
  • Battery 9V
  • Jumper Wires
Quạt DC: Quạt DC được sử dụng ở đây là quạt BLDC từ PC cũ. Nó yêu cầu nguồn cung cấp bên ngoài nên chúng tôi đang sử dụng pin một chiều 9V.

IC điều khiển động cơ ULN2003: Nó được sử dụng để điều khiển động cơ theo một chiều vì động cơ là một chiều và cũng cần nguồn điện bên ngoài cho quạt. Tìm hiểu thêm về Mạch điều khiển động cơ dựa trên ULN2003 tại đây. Dưới đây là sơ đồ pic của ULN2003:




Các chân (IN1 đến IN7) là các chân đầu vào và (OUT 1 đến OUT 7) là các chân đầu ra tương ứng. COM được cung cấp Điện áp nguồn dương cần thiết cho các thiết bị đầu ra.

Đèn LED: Đèn LED màu ĐỎ được sử dụng phát ra ánh sáng ĐỎ. Bất kỳ màu sắc có thể được sử dụng.

Chiết áp: Hai chiết áp được sử dụng, một là dùng để phân áp cho ngõ vào analog vào ADC và một là dùng để điều khiển độ sáng của led.

Pin Details of STM32


Như chúng ta có thể thấy các chân PWM được chỉ định ở dạng sóng (~), có 15 chân như vậy, các chân ADC có màu xanh lục, 10 chân ADC ở đó được sử dụng cho các đầu vào tương tự.

Circuit Diagram and Connections




Kết nối của STM32 với các thành phần khác nhau được giải thích như sau:

STM32 với đầu vào tương tự (ADC)

Chiết áp hiện diện ở phía bên trái của mạch được sử dụng như bộ điều chỉnh điện áp điều chỉnh điện áp từ chân 3,3V. Đầu ra từ chiết áp, tức là chân giữa của chiết áp được kết nối với chân ADC (PA4) của STM32.

STM32 với đèn LED

Chân đầu ra STM32 PWM (PA9) được kết nối với chân dương của đèn LED thông qua một điện trở nối tiếp và một tụ điện.

LED với điện trở và tụ điện

Một điện trở mắc nối tiếp và một tụ điện song song được kết nối với đèn LED để tạo ra sóng tương tự chính xác từ đầu ra PWM vì đầu ra tương tự không thuần túy khi được tạo trực tiếp từ chân PWM.

STM32 với ULN2003 & ULN2003 với Quạt

Chân đầu ra STM32 PWM (PA8) được kết nối với chân Đầu vào (IN1) của IC ULN2003 và chân đầu ra tương ứng (OUT1) của ULN2003 được kết nối với dây âm của DC FAN.

Chân dương của quạt DC được kết nối với chân COM của IC ULN2003 và pin ngoài (9V DC) cũng được kết nối với chân COM tương tự của IC ULN2003. Chân GND của ULN2003 được kết nối với chân GND của STM32 và cực âm của pin được kết nối với cùng một chân GND.

STM32 with LCD (16x2)

LCD Pin NoLCD Pin NameSTM32 Pin Name
1Ground (Gnd)Ground (G)
2VCC5V
3VEEPin from Centre of Potentiometer
4Register Select (RS)PB11
5Read/Write (RW)Ground (G)
6Enable (EN)PB10
7Data Bit 0 (DB0)No Connection (NC)
8Data Bit 1 (DB1)No Connection (NC)
9Data Bit 2 (DB2)No Connection (NC)
10Data Bit 3 (DB3)No Connection (NC)
11Data Bit 4 (DB4)PB0
12Data Bit 5 (DB5)PB1
13Data Bit 6 (DB6)PC13
14Data Bit 7 (DB7)PC14
15LED Positive5V
16LED NegativeGround (G)
Một chiết áp ở phía bên phải được sử dụng để kiểm soát độ tương phản của màn hình LCD. Bảng trên cho thấy kết nối giữa LCD và STM32.



Programming STM32

#include <LiquidCrystal.h>     // include the LCD library
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;  //mention the pin names to with LCD is connected to 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  //Initialize the LCD

const int analoginput   = PA4;  // Input from potentiometer                          
const int led           = PA9;  // LED output
const int fan           = PA8;  // fan output

void setup() 
{
    lcd.begin(16,2);     //Getting LCD ready
    lcd.clear();  //Clears LCD
    lcd.setCursor(0,0);  //Sets cursor at row0 and column0
    lcd.print("CIRCUIT DIGEST");   //Displays Circuit Digest
    lcd.setCursor(0,1);          //Sets Cursor at column0 and row1
    lcd.print("PWM USING STM32");   //Displays PWM using STM32
    delay(2000);       // Delay yime
    lcd.clear();       // Clears LCD
    pinMode(analoginput, INPUT);   // set pin mode analoginput as INPUT
    pinMode(led, PWM);           // set pin mode led as PWM output
    pinMode(fan, PWM);            // set pin mode fan as PWM output
}    
   

void loop()

   { 
    int valueadc = analogRead(analoginput);     //gets analog value from pot and store in variable,converts to digital          
    int result = map(valueadc, 0, 4095, 0, 65535); //maps the (0to4095 into 0to65535) and stores in result variable
    pwmWrite(led, result);           //puts resultin PWM form
    pwmWrite(fan, result);           //puts resultin PWM form
    lcd.setCursor(0,0);             //Sets cursor at row0 and column0
    lcd.print("ADC value= ");           // prints the words in ""
    lcd.print(valueadc);           //displays value
    lcd.setCursor(0,1);             //Sets Cursor at column0 and row1
    lcd.print("Output =   ");          //prints the words in ""
    lcd.print(result);           //displays value result
 }















Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...