TỔNG QUAN VỀ INVERTER SINEWAVE
Một inverter sine wave là một thiết bị điện tử chuyển đổi dòng điện liên tục (DC) thành dòng điện xoay chiều (AC) với dạng sóng sine wave. Điều này rất quan trọng vì nhiều thiết bị điện tử đòi hỏi dòng điện xoay chiều với dạng sóng sine wave để hoạt động đúng cách, như các máy móc, thiết bị y tế, và hệ thống năng lượng mặt trời.
Các sóng sine với pha và biên độ tùy ý được gọi là hàm sine và có dạng tổng quát:
y(t) = A sin(ωt + φ) = A sin(2πft + φ)
Trong đó:
- A: biên độ, là độ lệch cực đại của hàm so với không.
- t: biến số độc lập thực, thường đại diện cho thời gian tính bằng giây.
- ω: tần số góc, tỉ lệ thay đổi của đối số của hàm theo radian mỗi giây.
- f: tần số thông thường, số lần dao động (chu kỳ) xảy ra trong mỗi giây.
- φ: pha, xác định (theo radian) vị trí của dao động trong chu kỳ tại t = 0.
Khi φ khác không, toàn bộ hình dạng sóng có vẻ như được dịch chuyển ngược lại trong thời gian bởi lượng φ/ω giây. Giá trị âm biểu thị sự trễ, và giá trị dương biểu thị sự tiến bộ.
Thêm hoặc trừ 2π (một chu kỳ) vào pha sẽ cho kết quả là một sóng tương đương.
VAI TRÒ CỦA ARDUINO
Arduino là một bo mạch vi mạch mở nguồn được phát triển để dễ dàng lập trình và tạo ra các dự án điện tử. Với sức mạnh tích hợp và khả năng kết nối với nhiều loại cảm biến và thiết bị khác nhau, Arduino là một nền tảng lý tưởng để xây dựng các dự án inverter sine wave.
SƠ ĐỒ NGUYÊN LÝ
- Arduino: Arduino sẽ đảm nhận vai trò điều khiển chính trong mạch, tạo ra các tín hiệu PWM để điều khiển TLP250 và thông qua đó, điều khiển các MOSFETs trong mạch cầu H.
- TLP250 (Optocoupler): TLP250 sẽ cách điện giữa Arduino và các MOSFETs trong mạch cầu H, bảo vệ vi điều khiển khỏi nhiễu và dao động từ phần công tắc.
- Mạch Cầu H: Mạch cầu H sẽ bao gồm bốn MOSFETs được kết hợp thành cấu trúc hình chữ H, được điều khiển bởi TLP250 thông qua Arduino.
THIẾT KẾ MẠCH INVERTER 12V – 220V SÓNG SINE CHUẨN
- Arduino: Kết nối các chân điều khiển của Arduino với đầu vào của TLP250.
- TLP250: Kết nối các đầu ra của TLP250 với cổng điều khiển của các MOSFET trong mạch cầu H.
MỘT SỐ HÌNH ẢNH 3D
LẬP TRÌNH TRÊN ARDUINO IDE
int i = 0;
int x = 0;
bool OK = 0;
#define led_on digitalWrite(2, HIGH)
#define led_off digitalWrite(2, LOW)
float h = 0;
int volvalue=0;
int battvalue=1024;
int temp=0;
int sinPWM[] = {0, 16, 32, 48, 65, 81, 97, 113, 129, 145, 161, 177, 192, 208, 224, 239, 255, 270, 286, 301, 316, 331, 346, 361, 376, 390, 405, 419, 434, 448, 462, 475, 489, 503, 516, 529, 542, 555, 567, 580, 592, 604, 616, 628, 639, 651, 662, 672, 683, 693, 704, 714, 723, 733, 742, 751, 760, 768, 777, 785, 793, 800, 807, 814, 821, 828, 834, 840, 845, 851, 856, 861, 865, 870, 874, 877, 881, 884, 887, 890, 892, 894, 896, 897, 898, 899, 900, 900, 900, 900, 899, 898, 897, 896, 894, 892, 890, 887, 884, 881, 877, 874, 870, 865, 861, 856, 851, 845, 840, 834, 828, 821, 814, 807, 800, 793, 785, 777, 768, 760, 751, 742, 733, 723, 714, 704, 693, 683, 672, 662, 651, 639, 628, 616, 604, 592, 580, 567, 555, 542, 529, 516, 503, 489, 475, 462, 448, 434, 419, 405, 390, 376, 361, 346, 331, 316, 301, 286, 270, 255, 239, 224, 208, 192, 177, 161, 145, 129, 113, 97, 81, 65, 48, 32, 16};
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(12, INPUT);
cli();
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1);
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1=0x00;
ICR1=900;
OCR1A=0x00;
OCR1B=0x00;
sei();
}
ISR(TIMER1_OVF_vect) {
if (i > 175) {
i = 0;
OK = !OK;
if(OK==0) TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
else TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
if(volvalue>512 && h>0.1) h-=0.01;
if(volvalue<512 && h<0.99) h+=0.01;
battvalue=analogRead(A0);
}
x = h * sinPWM[i];
i = i + 1;
if (OK == 0) {
OCR1A = x;
}
if (OK == 1) {
OCR1B = x;
}
if(i==150)
{
volvalue=analogRead(A1);
}
}
void loop() {
if(digitalRead(12)==LOW)
{
while(digitalRead(12)==LOW){}
Serial.print("Button press");
Inverter();
}
}
int Inverter()
{
temp=0;
battvalue=1024;
led_on;
h=0.1;
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TIMSK1=0x01;
OCR1A=OCR1B=0x00;
while(1)
{
if(battvalue<575) //Low batt protect
temp++;
else temp=0;
if(temp>10)
{
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TIMSK1=0x00;
OCR1A=OCR1B=0x00;
while(1)
{
led_on;
delay(200);
led_off;
delay(200);
if(digitalRead(12)==LOW)
{
while(digitalRead(12)==LOW){}
Inverter();
}
}
}
if(digitalRead(12)==LOW) // Button off
{
while(digitalRead(12)==LOW){}
led_off;
while(1)
{
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TIMSK1=0x00;
OCR1A=OCR1B=0x00;
if(digitalRead(12)==LOW)
{
while(digitalRead(12)==LOW){}
Inverter();
}
}
}
if(h>0.99 && volvalue<100) //Short protect
{
digitalWrite(3, HIGH);
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TIMSK1=0x00;
OCR1A=OCR1B=0x00;
while(1)
{
led_on;
delay(200);
led_off;
delay(200);
if(digitalRead(12)==LOW)
{
while(digitalRead(12)==LOW){}
Inverter();
}
}
}
}
}
Giải thích đoạn code:
- Khai báo biến và macro:
int i = 0;
,int x = 0;
,bool OK = 0;
: Khai báo biến để sử dụng trong chương trình.#define led_on digitalWrite(2, HIGH)
: Macro để bật đèn LED (chân số 2).#define led_off digitalWrite(2, LOW)
: Macro để tắt đèn LED.
- Khai báo các biến và mảng:
float h = 0;
: Biếnh
để điều chỉnh biên độ của sóng sine.int volvalue=0;
,int battvalue=1024;
,int temp=0;
: Các biến đọc giá trị từ cảm biến.int sinPWM[] = {...};
: Mảng chứa các giá trị để tạo ra sóng sine bằng PWM.
- Hàm setup():
- Thiết lập chân I/O.
- Khởi tạo các cài đặt cho Timer1, sử dụng để tạo PWM.
- Kích hoạt các ngắt (interrupts).
- Hàm loop():
- Kiểm tra trạng thái của nút nhấn. Nếu nhấn, gọi hàm
Inverter()
.
- Hàm Inverter():
- Thiết lập và điều chỉnh các thông số của mạch inverter.
- Kiểm tra và bảo vệ nếu pin nút nhấn, pin cảm biến thấp hoặc quá ngắn.
- Quay lại chế độ loop chính sau khi thực hiện các công việc bảo vệ.
Nguồn: Mạnh Quân Inverter