Mạch tạo Arduino SPWM - Chi tiết mã và sơ đồ

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng ta tìm hiểu cách tạo điều chế độ rộng-xung sóng sin hoặc SPWM thông qua Arduino, có thể được sử dụng để tạo mạch biến tần sóng sin thuần túy hoặc các thiết bị tương tự.

Các Arduino mã do tôi phát triển và nó là mã Arduino đầu tiên của tôi, ... và nó trông khá đẹp



SPWM là gì

Tôi đã giải thích rồi cách tạo SPWM bằng opamps trong một trong những bài viết trước đây của tôi, bạn có thể xem qua nó để hiểu cách nó có thể được tạo ra bằng cách sử dụng các thành phần rời rạc và về tầm quan trọng của nó.

Về cơ bản, SPWM là viết tắt của điều chế độ rộng xung sóng hình sin, là một loại điều chế xung trong đó các xung được điều chế để mô phỏng dạng sóng hình sin, do đó điều chế có thể đạt được các đặc tính của sóng hình sin thuần túy.



Để thực hiện SPWM, các xung được điều chế với độ rộng ban đầu hẹp hơn, dần dần sẽ rộng hơn ở trung tâm của chu kỳ, và cuối cùng kết thúc hẹp hơn ở cuối để kết thúc chu kỳ.

Nói chính xác hơn, các xung bắt đầu với độ rộng hẹp nhất dần dần rộng hơn với mỗi xung tiếp theo và rộng nhất ở xung trung tâm, sau đó, trình tự tiếp tục nhưng với một điều chế ngược lại, đó là các xung bây giờ dần dần bắt đầu hẹp hơn cho đến khi chu kỳ kết thúc.

Video Demo

Điều này tạo thành một chu kỳ SPWM và điều này lặp lại xuyên suốt ở một tốc độ cụ thể được xác định bởi tần số ứng dụng (thường là 50Hz hoặc 60Hz). Thông thường, SPWM được sử dụng để điều khiển các thiết bị công suất như mosfet hoặc BJT trong bộ biến tần hoặc bộ chuyển đổi.

Mô hình điều chế đặc biệt này đảm bảo rằng các chu kỳ tần số được thực hiện với giá trị điện áp trung bình thay đổi dần dần (còn gọi là giá trị RMS), thay vì tạo ra các xung đột ngột Hi / điện áp thấp như thường thấy trong các chu kỳ sóng vuông phẳng.

Điều này dần dần sửa đổi PWM trong SPWM được thực thi một cách có chủ đích để nó sao chép chặt chẽ mô hình tăng / giảm theo cấp số nhân của một dạng sóng hình sin hoặc sóng sin tiêu chuẩn, do đó có tên là sinewave PWM hoặc SPWM.

Tạo SPWM với Arduino

SPWM đã giải thích ở trên có thể dễ dàng thực hiện bằng cách sử dụng một vài phần rời rạc và cũng có thể sử dụng Arduino, điều này có thể sẽ cho phép bạn có được độ chính xác hơn với các chu kỳ dạng sóng.

Mã Arduino sau có thể được sử dụng để triển khai SPWM dự kiến ​​cho một ứng dụng nhất định.

Chúa ơi !! trông rất lớn, nếu bạn biết cách rút ngắn nó, bạn chắc chắn có thể thoải mái làm điều đó khi kết thúc.

// By Swagatam (my first Arduino Code)
void setup(){
pinMode(8, OUTPUT)
pinMode(9, OUTPUT)
}
void loop(){
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(2000)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
//......
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(2000)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
}
//-------------------------------------//

Trong bài đăng tiếp theo, tôi sẽ giải thích cách sử dụng trình tạo SPWM dựa trên Arduino ở trên để tạo một mạch biến tần sinewave thuần túy ....hãy đọc tiếp!

Mã SPWM trên đã được ông Atton cải tiến thêm để nâng cao hiệu suất của nó, như được đưa ra dưới đây:

/*
This code was based on Swagatam SPWM code with changes made to remove errors. Use this code as you would use any other Swagatam’s works.
Atton Risk 2017
*/
const int sPWMArray[] = {500,500,750,500,1250,500,2000,500,1250,500,750,500,500} // This is the array with the SPWM values change them at will
const int sPWMArrayValues = 13 // You need this since C doesn’t give you the length of an Array
// The pins
const int sPWMpin1 = 10
const int sPWMpin2 = 9
// The pin switches
bool sPWMpin1Status = true
bool sPWMpin2Status = true
void setup()
{
pinMode(sPWMpin1, OUTPUT)
pinMode(sPWMpin2, OUTPUT)
}
void loop()
{
// Loop for pin 1
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin1Status)
{
digitalWrite(sPWMpin1, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = false
}
else
{
digitalWrite(sPWMpin1, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = true
}
}
// Loop for pin 2
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin2Status)
{
digitalWrite(sPWMpin2, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = false
}
else
{
digitalWrite(sPWMpin2, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = true
}
}
}




Trước: 8X Overunity khỏi Joule Thief - Thiết kế đã được chứng minh Tiếp theo: Mạch biến tần Arduino Pure Sine Wave với mã chương trình đầy đủ