İçindekiler:

İnvertörler için Arduino Sinewave: 4 Adım
İnvertörler için Arduino Sinewave: 4 Adım

Video: İnvertörler için Arduino Sinewave: 4 Adım

Video: İnvertörler için Arduino Sinewave: 4 Adım
Video: Arduino İnverter Tam Sinus (deneme1) 2024, Kasım
Anonim
İnvertörler için Arduino Sinüs Dalgası
İnvertörler için Arduino Sinüs Dalgası

Bu projede, iki arduino pwm dijital çıkışından bir SPWM (sinüs dalgası darbesi geniş modülasyonlu) sinyali ürettim.

Çünkü böyle bir program yapmak için arduino'nun diğer birçok işlevi ve özellikleri hakkında konuşmam gerekiyor, osiloskop görüntüleri dahil olmak üzere tüm proje ve farklı frekanslar için lütfen web sitemi ziyaret edin:

eprojectszone

Adım 1: 50Hz için Pwm Sinyali Oluşturma

Daha yüksek frekansta 50 Hz'lik bir sinyal üretmek için bazı hesaplamalar yapmak gereklidir. Arduino'dan gelen frekanslar 8MHz'de olabilir, ancak değişken görev döngüsüne sahip bir sinyal istiyoruz.

Arduino'nun değişken görev döngüsü türlerini anlamak için aynı gönderi 1, 2 ve 3'ün bu 3 bölümünü okuyabilirsiniz.

Frekansımızın 50Hz olduğunu varsayalım, bu da zaman periyodunun 20ms olduğu anlamına gelir. Yani 10ms yarım döngü periyodudur. Bu 10ms'de küçük görev döngüleriyle başlayan farklı görev döngülerine sahip birçok darbeye ihtiyacımız var, sinyalin ortasında maksimum görev döngülerimiz var ve ayrıca küçük görev döngüleriyle bitiriyoruz. Bir sinüs dalgası oluşturmak için iki pin kullanacağız. pozitif yarı döngü ve bir negatif yarı döngü için. Bunun için yazımızda Zamanlayıcı 0 anlamına gelen 5 ve 6 numaralı pinleri kullanıyoruz.

Düzgün bir sinyal için 31372 Hz frekansında faz doğru pwm'yi seçiyoruz - önceki gönderiye bakın. En büyük sorunlardan biri, her darbe için gerekli görev döngüsünü nasıl hesapladığımızdır. Yani frekansımız f=31372Hz olduğundan, her darbenin periyodu T=1/31372=31.8 us, yani yarım döngü için darbe sayısı N=10ms/31.8us=314 darbedir. Şimdi her darbe için görev döngüsünü hesaplamak için y=sinx'imiz var, ancak bu denklemde dereceye ihtiyacımız var, bu nedenle yarım döngü 314 darbe için 180 derecedir. Her nabız için 180/314=0.57deg/nabız var. Bu, her darbe için 0,57 derece ile ilerlediğimiz anlamına gelir.

y görev döngüsü ve x yarı görev döngüsündeki konumun değeridir. ilk başta x 0'dır, bundan sonra x=0.57, x=1.14 vb. x= 180'e kadar devam eder.

314 değerin tümünü hesaplarsak, 314 eleman dizisi elde ederiz ("int" yazın, arduino tarafından daha kolay hesaplanır).

Böyle bir dizi:

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};

Bir sinüs dalgası gibi, görev döngüsünün ilk ve son elemanda en düşük ve ortada en yüksek olduğunu görebilirsiniz.

Adım 2: Değişken Görev Döngüsü için Arduino Programı

Değişken Görev Döngüsü için Arduino Programı
Değişken Görev Döngüsü için Arduino Programı

Yukarıdaki resimde diziden değerlerle değişken görev döngüsü sinyallerine sahibiz.

Ama böyle bir sinyal nasıl yapılır?

programın aşağıdaki kısmı, görev döngülerinin değerlerini değiştirmek için kesintileri kullanır.

sei();// kesmeleri etkinleştir

}

ISR(TIMER1_COMPA_vect){// zamanlayıcı 1, OCR1A değeriyle eşleştiğinde kesintiye uğrar

if(i>313 && OK==0){// pin 6 için vektörden son değer

i=0;// vector(dizi)'nin ilk değerine git

OK=1;//pin 5'i etkinleştir

}

x=sinPWM;// x i pozisyonuna karşılık gelen vektörden değeri alır(i sıfır indekslidir)-görev döngüsünün değeri

i=i+1;// sonraki konuma git

}

Adım 3: 50Hz Arduino Pinlerinde Değişken

50Hz Arduino Pinlerinde Değişken
50Hz Arduino Pinlerinde Değişken

Her pin tam sinüs dalgası oluşturmak için sadece yarım görev döngüsü oluşturduğundan, tam 10msaniyeden sonra (50Hz için) birbiri ardına değişen iki pin kullanıyoruz. Bu pin değişikliği dizinin sonunda yapılır - diyelim ki pin 5 314 darbe ürettikten sonra bu pin kapatılır ve negatif görev döngüsü için aynı şeyi yapan pin 6 etkinleştirilir.

Arduino sadece pozitif sinyaller üretebildiğinden, h köprüsünde negatif görev döngüsü yapılır - buradan okuyabilirsiniz

Pin değiştirme programı:

sei();// kesmeleri etkinleştir

}

ISR(TIMER1_COMPA_vect){// zamanlayıcı 1, OCR1A değeriyle eşleştiğinde kesintiye uğrar

if(i>313 && OK==0){// pin 6 için vektörden son değer

i=0;// vektörün ilk değerine git

OK=1;//pin 5'i etkinleştir

}

if(i>313 && OK==1){// pin 5 için vektörden son değer

i=0;//vektörün ilk değerine git

OK=0;//pin 6'yı etkinleştir

}

x=sinPWM;// x i pozisyonuna karşılık gelen vektörden değeri alır(i sıfır indekslidir)

i=i+1;// sonraki konuma git

if(Tamam==0){

OCR0B=0;//pin 5 0 yap

OCR0A=x;//pim 6'yı karşılık gelen görev döngüsüne etkinleştir

eğer(Tamam==1){

OCR0A=0;//pin 6 0 yap

OCR0B=x;//pim 5'i karşılık gelen görev döngüsüne etkinleştir

}

}

Adım 4: Bir H Köprüsü Sürmek ve Pwm Sinyalini Filtrelemek

Arduino'dan elde edilen sinyaller, her ikisi de pozitif olduğu için inverter uygulamalarının kontrol kısmıdır. Tam sinüs dalgası ve pratik bir invertör yapmak için bir h köprüsü kullanmamız ve pwm'yi bir alçak geçiren filtreyi temizlememiz gerekir.

H köprüsü burada sunulmaktadır.

Düşük geçişli filtre, küçük Ac motorlarla test edildi - burada.

Önerilen: