İçindekiler:
- Adım 1: 50Hz için Pwm Sinyali Oluşturma
- Adım 2: Değişken Görev Döngüsü için Arduino Programı
- Adım 3: 50Hz Arduino Pinlerinde Değişken
- Adım 4: Bir H Köprüsü Sürmek ve Pwm Sinyalini Filtrelemek
Video: İnvertörler için Arduino Sinewave: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
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ı
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
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:
Steam Punk UPS'inizi Wi-fi Yönlendiriciniz için Saatlerce Çalışma Süresi Elde Etmek İçin: 4 Adım (Resimlerle)
Wi-fi Yönlendiriciniz için Saatlerce Çalışma Süresi Elde Etmek İçin UPS'inizi Steam Punk: Yönlendiricinizi ve fiber ONT'yi çalıştıran transformatörlerin onu geri dönüştürebilmesi için UPS'nizin 12V DC pil gücünü 220V AC güce dönüştürmesi konusunda temelde nahoş bir şey var. 12V DC! Ayrıca [tipik olarak
555 Zamanlayıcı Atmega328'i Kesintiye Uğratmak İçin Sinyal Yaymak İçin: 7 Adım
555 Zamanlayıcı Sinyali Kesinti Vermek İçin Atmega328: Bu devrenin temel amacı enerji tasarrufu yapmaktır. Bu yüzden, arduino hakkında konuşmayacağım çünkü kartın kendisinin nihai bir ürün için gereksiz güç yükü var. Gelişim için harikadır. Ancak, batt üzerinde çalışan nihai projeler için pek iyi değil
COVID 19 için Uygulanan Arduino için Sıcaklık Sensörü: 12 Adım (Resimlerle)
Arduino için Sıcaklık Sensörü Applied for COVID 19: Arduino için sıcaklık sensörü, insan vücudunun bir işlemcisinin sıcaklığını ölçmek istediğimizde temel bir unsurdur. Arduino ile sıcaklık sensörü, ısı seviyesini alıp ölçmek için temas halinde veya yakın olmalıdır. İşte böyle
Kulüpler, Öğretmenler için Makerspaces vb. için basit "Robot Kiti": 18 Adım
Kulüpler, Teachers Makerspaces vb. için Basit "Robot Kiti": Fikir, "Orta TN Robotik Sanatlar Topluluğu" üyelerimiz için küçük ama genişletilebilir bir kit oluşturmaktı. Özellikle çizgi takibi ve hızlı yolculuk gibi yarışmalar için kit etrafında atölye çalışmaları planlıyoruz. Bir Arduino ekledik
Arduino için 6 Buton İçin 1 Analog Giriş Kullanın: 6 Adım
Arduino için 6 Düğme için 1 Analog Giriş Kullanın: Arduino'm için nasıl daha fazla Dijital Giriş elde edebileceğimi sık sık merak etmişimdir. Kısa süre önce birden fazla dijital giriş getirmek için Analog Girişlerden birini kullanabilmem gerektiği aklıma geldi. Hızlı bir arama yaptım ve insanların nerede olduğunu buldum