Mục lục:

Arduino Sinewave cho Biến tần: 4 bước
Arduino Sinewave cho Biến tần: 4 bước

Video: Arduino Sinewave cho Biến tần: 4 bước

Video: Arduino Sinewave cho Biến tần: 4 bước
Video: cách tạo biến tần đơn giản 6000W, 4 biến áp, sóng sin, IRFz 44n, jlcpcb 2024, Tháng mười một
Anonim
Arduino Sinewave cho Biến tần
Arduino Sinewave cho Biến tần

Trong dự án này, tôi đã tạo ra một tín hiệu SPWM (sóng sin được điều chế rộng) từ hai đầu ra kỹ thuật số pwm của arduino.

Bởi vì để tạo ra một chương trình như vậy, tôi phải nói về nhiều chức năng và thuộc tính khác của arduino, dự án đầy đủ bao gồm hình ảnh máy hiện sóng và cho các tần số khác nhau, vui lòng truy cập trang web của tôi:

eprojectszone

Bước 1: Tạo tín hiệu Pwm cho 50Hz

Để tạo ra tín hiệu 50Hz ở tần số cao hơn, điều cần thiết là phải thực hiện một số tính toán. Tần số từ arduino có thể là 8MHz, nhưng chúng tôi muốn một tín hiệu có chu kỳ nhiệm vụ thay đổi.

Để hiểu các loại chu kỳ nhiệm vụ thay đổi của arduino, bạn có thể đọc 3 phần này của cùng bài đăng 1, 2 và 3.

Giả sử tần số của chúng ta là 50Hz, nghĩa là khoảng thời gian là 20 mili giây. Vì vậy, 10ms là một nửa chu kỳ. Trong 10ms đó, chúng ta cần có nhiều xung với các chu kỳ nhiệm vụ khác nhau bắt đầu với các chu kỳ nhiệm vụ nhỏ, ở giữa tín hiệu chúng ta có các chu kỳ nhiệm vụ tối đa và kết thúc cũng với các chu kỳ nhiệm vụ nhỏ. Để tạo ra một sóng sin chúng ta sẽ sử dụng hai chân một để nửa chu kỳ dương và một cho nửa chu kỳ âm. Trong bài đăng của chúng tôi cho điều này, chúng tôi sử dụng chân 5 và 6 có nghĩa là Bộ định thời 0.

Để có tín hiệu mượt mà, chúng tôi chọn pwm đúng pha ở tần số 31372 Hz-xem bài trước. Một trong những vấn đề lớn nhất là chúng tôi tính toán chu kỳ nhiệm vụ cần thiết cho mỗi xung như thế nào. Vì vậy, do tần số của chúng ta là f = 31372Hz nên chu kỳ cho mỗi xung là T = 1/31372 = 31,8 us, do đó số xung trong một nửa chu kỳ là N = 10ms / 31,8us = 314 xung. Bây giờ để tính toán chu kỳ nhiệm vụ cho mỗi xung, chúng ta có y = sinx, nhưng trong phương trình này chúng ta cần độ để nửa chu kỳ có 180deg cho 314 xung. Với mỗi xung ta có 180/314 = 0,57deg / xung. Điều đó có nghĩa là đối với mỗi xung, chúng tôi di chuyển về phía trước với 0,57deg.

y là chu kỳ nhiệm vụ và x là giá trị của vị trí trong nửa chu kỳ nhiệm vụ. lúc đầu x là 0, sau đó x = 0,57, x = 1,14 và cứ tiếp tục như vậy cho đến khi x = 180.

nếu chúng ta tính toán tất cả 314 giá trị, chúng ta thu được một mảng 314 phần tử (gõ "int" để tính toán dễ dàng hơn bởi arduino).

Mảng như vậy là:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Bạn có thể thấy rằng giống như sóng sin, chu kỳ nhiệm vụ thấp nhất ở phần tử đầu tiên và cuối cùng và cao nhất ở giữa.

Bước 2: Chương trình Arduino cho chu kỳ nhiệm vụ thay đổi

Chương trình Arduino cho chu kỳ nhiệm vụ thay đổi
Chương trình Arduino cho chu kỳ nhiệm vụ thay đổi

Trong hình trên, chúng ta có các tín hiệu chu kỳ nhiệm vụ thay đổi với các giá trị từ mảng.

Nhưng làm thế nào để tạo ra tín hiệu như vậy ??

phần chương trình bên dưới sử dụng ngắt để thay đổi giá trị của chu kỳ nhiệm vụ

sei (); // cho phép ngắt

}

ISR (TIMER1_COMPA_vect) {// ngắt khi bộ hẹn giờ 1 khớp với giá trị OCR1A

if (i> 313 && OK == 0) {// giá trị cuối cùng từ vectơ cho chân 6

i = 0; // chuyển đến giá trị đầu tiên của vectơ (mảng)

OK = 1; // bật pin 5

}

x = sinPWM ; // x lấy giá trị từ vectơ tương ứng với vị trí i (i là 0 được lập chỉ mục) -giá trị của chu kỳ nhiệm vụ

i = i + 1; // chuyển đến vị trí tiếp theo

}

Bước 3: Xen kẽ các chân Arduino 50Hz

Xen kẽ ở các chân Arduino 50Hz
Xen kẽ ở các chân Arduino 50Hz

Beacause mỗi chân chỉ tạo ra một nửa chu kỳ nhiệm vụ để tạo ra một sóng sin đầy đủ, chúng tôi sử dụng hai chân thay thế lần lượt sau 10 mili giây chính xác (đối với 50Hz). Sự thay đổi các chân này được thực hiện ở cuối mảng - sau khi giả sử chân 5 đã tạo ra 314 xung, chân này được tắt nguồn và bật chân 6, điều này thực hiện tương tự nhưng đối với chu kỳ nhiệm vụ âm.

Vì arduino chỉ có thể tạo ra các tín hiệu tích cực nên chu kỳ nhiệm vụ âm được thực hiện trong cầu h- bạn có thể đọc ở đây về nó

Chương trình thay đổi chân:

sei (); // cho phép ngắt

}

ISR (TIMER1_COMPA_vect) {// ngắt khi bộ hẹn giờ 1 khớp với giá trị OCR1A

if (i> 313 && OK == 0) {// giá trị cuối cùng từ vectơ cho chân 6

i = 0; // chuyển đến giá trị đầu tiên của vectơ

OK = 1; // bật pin 5

}

if (i> 313 && OK == 1) {// giá trị cuối cùng từ vectơ cho chân 5

i = 0; // chuyển đến giá trị đầu tiên của vectơ

OK = 0; // bật pin 6

}

x = sinPWM ; // x lấy giá trị từ vectơ tương ứng với vị trí i (i là 0 được lập chỉ mục)

i = i + 1; // chuyển đến vị trí tiếp theo

nếu (OK == 0) {

OCR0B = 0; // tạo chân 5 0

OCR0A = x; // bật chân 6 đến chu kỳ nhiệm vụ tương ứng

nếu (OK == 1) {

OCR0A = 0; // tạo chân 6 0

OCR0B = x; // bật chân 5 đến chu kỳ nhiệm vụ tương ứng

}

}

Bước 4: Lái cầu H và lọc tín hiệu Pwm

Các tín hiệu thu được từ arduino là phần điều khiển cho các ứng dụng biến tần vì cả hai đều tích cực. Để tạo ra một sóng sin đầy đủ và một biến tần thực tế, chúng ta phải sử dụng cầu h và để xóa pwm một bộ lọc thông thấp.

Cầu H được trình bày ở đây.

Bộ lọc thông thấp được thử nghiệm với động cơ Ac nhỏ tại đây.

Đề xuất: