Şimdi Ara

Arduino çalışmalarım,,, (4. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
118
Cevap
3
Favori
5.899
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
4 oy
Öne Çıkar
Sayfa: önceki 23456
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • quote:

    Orijinalden alıntı: elektro_gadget

    Arduinonun hazır fonksiyonları ile detaylı şekilde frekans/genlik ayarlamak zor. Register seviyesine inmek gerekebilir. Hangi arduinoyu kullanıyorsunuz?

    Merhaba;Şu anda UNO ve MEGA kullanıyorum.Ama yakın zamanda genel olarak NANO kullanacağım.Çünkü maliyet olarak daha uygun.
  • İşin aslı FB(feed back) olması önemli olan.Kontrolsuz yani analog girişine göre çıkış olmasa problem değil.Ekleyeceğim cod örneğinde görüldüğü gibi 2x50Hz sonuç alıyorum.
    Ben istiyorum ki analog referansa göre out genlik oranını azaltayım.
    // 2x50Hz Digital out put by malisert32
    void setup()
    {
    pinMode(12, OUTPUT);
    pinMode(13, OUTPUT);

    }

    void loop()
    {
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
    delayMicroseconds(42700);
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    delayMicroseconds(42700);

    }

    Arduino çalışmalarım,,,



    < Bu mesaj bu kişi tarafından değiştirildi malisert32 -- 31 Ağustos 2017; 0:41:31 >




  • Tam olarak istediğin şeyi anlamasam da aşağıdaki kod 2 çıkış ile 50hz lik pwm üretir. Deneme şansım yok ama çalışması lazım. Çıkışları 9 ve 10 numaralı pinlerden alacaksın (arduino uno için).

    DDRB |= 0x06;
    ICR1 = 625;
    TCCR1A = 0xA2;
    TCCR1B = 0x14;

    Genlik 0 ile 625 arasında olabilir. 9. pin için OCR1A, 10. pin için OCR1B kullanacaksın. Misal 9'dan %50 duty cycle almak için;

    OCR1A = 312;
  • quote:

    Orijinalden alıntı: elektro_gadget

    Tam olarak istediğin şeyi anlamasam da aşağıdaki kod 2 çıkış ile 50hz lik pwm üretir. Deneme şansım yok ama çalışması lazım. Çıkışları 9 ve 10 numaralı pinlerden alacaksın (arduino uno için).

    DDRB |= 0x06;
    ICR1 = 625;
    TCCR1A = 0xA2;
    TCCR1B = 0x14;

    Genlik 0 ile 625 arasında olabilir. 9. pin için OCR1A, 10. pin için OCR1B kullanacaksın. Misal 9'dan %50 duty cycle almak için;

    OCR1A = 312;

    Teşekkür ederim,elinize sağlık.Yalnız benim istediğim;analog bir uyartım ile genliği kontrol etmek istiyorum.Frekans 50 Hz. sabit, genlik değişken olacak.Aynen pot bağlantısını düşünelim.Ör;analog0'a bağlı bir pot ile voltaj değiştikçe genlik değişecek,ben bu ilişkiyi kuramıyorum.Yazılımla 50 Hz. ve yine yazılımla bu 50 Hz.in genliğini istediğim ayara getiriyorum ama bu işimi görmüyor.




  • Sizin yaptığınız 50hz tamamen yazılımla yapılmış. Böyle yaparsanız cpu başka hiçbir işe yetişemez. Başka bişey yapmaya çalışırsanız frekans bozulur. Benim verdiğim kodda böyle sorunlar yok. Gelelim probleme.

    Okunan analog değeri çıkış genliğine orantılıyacağız ama ters orantı? Yani okuduğumuz voltaj düşükse genlik (+5V) daha geniş olacak?

    Öyleyse basit bir formül işimizi görür. Yukarıda verdiğim koddan devam edelim.

    const float x = 625.0 / 1023.0; // Bu global değişken olursa daha iyi.

    unsigned int voltaj = 1023 - analogRead(A0);
    OCR1A = OCR1B = x * voltaj; // İki kanalda aynı genlik.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Sizin yaptığınız 50hz tamamen yazılımla yapılmış. Böyle yaparsanız cpu başka hiçbir işe yetişemez. Başka bişey yapmaya çalışırsanız frekans bozulur. Benim verdiğim kodda böyle sorunlar yok. Gelelim probleme.

    Okunan analog değeri çıkış genliğine orantılıyacağız ama ters orantı? Yani okuduğumuz voltaj düşükse genlik (+5V) daha geniş olacak?

    Öyleyse basit bir formül işimizi görür. Yukarıda verdiğim koddan devam edelim.

    const float x = 625.0 / 1023.0; // Bu global değişken olursa daha iyi.

    unsigned int voltaj = 1023 - analogRead(A0);
    OCR1A = OCR1B = x * voltaj; // İki kanalda aynı genlik.

    Eyvallah,tekrar teşekkür ederim.
    Voltajı artı yada eksi yönünden ayar ederim sorun değil.Sizin yazdığınız kodları uygulamaya çalışacağım sonucu en kısa sürede paylaşırım.




  • analog= uyartımına uyumlu genlik değişiyor ama maalesef iki çıkışta aynı anda sürülüyor,yani bir HIGH diğeri LOW olmalı ve genlikte aynı oranda olmalı.Giriş voltajı düşük ve yüksek zamanı doluluk oranını gösteren 2 farklı resimle aldığım sonucu göstermeye çalıştım.Arduino çalışmalarım,,,Arduino çalışmalarım,,,




  • Sinyaller aynı uzunlukta olacak ama birbirlerinin tersi olacak? Öyleyse B kanalını invert edelim.

    TCCR1A = 0xA2; yerine
    TCCR1A = 0xB2;
    yazıp deneyin.


    Yazdığınız kodu da koyun bakalım hata olmasın.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 1 Eylül 2017; 1:2:52 >
  • Merhaba;benim PC'ye bir haller oluyor.Dün sizin kod yazılımlı çalışan .ino dosyasını D'ye kaydetmiştim.Aynı dosyayı bu gün açtığımda boş .ino sayfası çıkıyor hayret.
    Bende yeniden derleyip en son yazdığınız düzeltmeyi yapıp çalıştırdığımda; OCR1A = OCR1B = x * voltaj satırında hata verdi.Eklediğim resimde durum görülüyor.Oysa aynı satır dün çalışmıştı.

    Arduino çalışmalarım,,,




  • Resimde görülüyor ama kodları ayrıca ekliyorum.

     

    void setup()
    {
    pinMode (9,OUTPUT);
    pinMode (10,OUTPUT);
    pinMode (A0,INPUT);
    }

    void loop()
    {
    DDRB |= 0x06;
    ICR1 = 625;
    TCCR1A = 0xB2;
    TCCR1B = 0x14;
    OCR1A = 312;

    unsigned int voltaj = 1023 - analogRead(A0);
    OCR1A = OCR1B = x * voltaj;

    }
  •  
    const float x = 625.0 / 1023.0;

    void setup()
    {
    pinMode (9, OUTPUT);
    pinMode (10, OUTPUT);
    pinMode (A0, INPUT);

    ICR1 = 625;
    TCCR1A = 0xB2;
    TCCR1B = 0x14;
    }

    void loop()
    {
    OCR1A = OCR1B = x * analogRead(A0);
    }


    Biraz daha sadeleştirdim. x tanımlanmamış, onu ekledim. Gereksizleri çıkardım.
  • Eyvallah hocam,pro. çalıştı,tek problem her uyartım voltajı değişiminde(analog0) 2 çıkışın birinin genliği değişiyor,yani sonuca ulaşamadık henüz ama iyice yaklaştık diyorum.Demek istediğimi resimlerle anlatmaya çalıştım.
    Benim istediğim;2 çıkışında genliği % 50 ile başlayacak uyartım voltajı değiştikçe genlik düşecek,azalacak.Tabi 2 çıkışında aynı anda genliği etkilenecek yani azalacak.Diyelim ki analog0 voltajı 4,5VDC iken % 50 çıkış veriyorsa 0,2-0,3VDC olduğunda % 1'e genlik düşsün,,,0,1 voltlarda genlik sıfır olsun.Yam da tam tersi voltaj da olabilir.Yani (analog0 uyartım)artı volt yükseldikçe genlik azalabilir.Elinize sağlık tekrar teşekkür ederim.Arduino çalışmalarım,,,Arduino çalışmalarım,,,



    < Bu mesaj bu kişi tarafından değiştirildi malisert32 -- 1 Eylül 2017; 16:36:4 >




  • Yaptığımız şey şu. Giriş voltajına doğru orantılı olarak pinlerin genliğini değiştiriyoruz. Yani analog voltaj arttıkça genlik artar. Yanlız 9. pin high olarak genişlerken 10. pin invert olduğu için low olarak genişler. Yani bu pinler HER ZAMAN birbirinin zıttıdır. İstediğiniz bu değil miydi?

    Bir de 4.5 voltta %50 genlik olmaz, %90 olur. Çünkü 4.5V, 5V'un %90'nı dır. Eğer farklı voltaj aralıklarında farklı genlik istiyorsanız bunun için yazılımla oynamak gerekir. Bizim yaptığımız direkt orantı.

    TCCR1A register'ının değerleriyle oynayarak farklı çıkışlar elde edebilirsiniz. Tabi iki çıkışında aynı olması mantıklı olmaz.
     
    ------- 9. pin - 10. pin
    0xA2 H H
    0xB2 H L
    0xE2 L H
    0xF2 L L
  • Anlıyorum.İn voltajı bir şekilde ayar edilir.Ben araştırmaya devam edeyim.Bir olumlu sonuç bulursam yazarım,teşekkür ederim.
  • Sorunu çözemezsek strese girerim. Hocam istediğin şu aşağıdaki resimdeki şey değil mi? Eğer buysa sadece şu soruya detaylı bir cevap ver sorunu çözelim.

    Max genlik % kaç olacak? %50 mi, %100 mü yoksa başka bişey mi?
    Max genliğe kaç volt ile ulaşacak? 1v, 3v, 5v?

    Arduino çalışmalarım,,,
  • quote:

    Orijinalden alıntı: elektro_gadget

    Sorunu çözemezsek strese girerim. Hocam istediğin şu aşağıdaki resimdeki şey değil mi? Eğer buysa sadece şu soruya detaylı bir cevap ver sorunu çözelim.

    Max genlik % kaç olacak? %50 mi, %100 mü yoksa başka bişey mi?
    Max genliğe kaç volt ile ulaşacak? 1v, 3v, 5v?

    Arduino çalışmalarım,,,


    Max. % 50 genlik ile başlayıp analog-in voltajı sıfırdan(GND'den)başlayıp yükseldikçe genlik azalsın.3-3,5 VDC'lerde genlik sıfıra düşsün.Hatda bu max. voltajı ayar edebilelim.Ör; analogWrite(ledPin, val / 0.4); bu yazılımdaki 0.4 rakamını 4 yaparsam daha geniş voltaj aralığında genliğin değiştiği gibi...Kolay gelsin.




  • Hocam arduinoda AREF diye bir pin var. Oraya bir referans voltaj veriyorsun, ona göre ölçüm yapacak. Kaç voltta %50 genlik istiyorsan oraya o voltajı vereceksin. Böylece max voltaj ayarlanabilir olacak.

    Koddan max genlik seviyesini değiştirebilmen de mümkün. "#define MAX_GEN 50.0" yazan yerdeki 50.0'yi istediğin sayı ile değiştirebilirsin. Bir dene bakalım ne olacak.


     
    #define MAX_GEN 50.0

    const float x = (MAX_GEN / 100.0) * 625.0 / 1023.0;

    void setup()
    {
    analogReference(EXTERNAL);
    pinMode (A0, INPUT);
    pinMode (9, OUTPUT);
    pinMode (10, OUTPUT);

    ICR1 = 625;
    TCCR1A = 0xB2;
    TCCR1B = 0x14;
    }

    void loop()
    {
    OCR1A = OCR1B = x * (1023 - analogRead(A0));
    }




  • Hocam size de baya zahmet verdik kusura bakmayın..Sonuç maalesef aynen öncekiler gibi,Aref voltajını 2,06V'da sabit tutuyorum.Pot ile analog0'dan voltajı değiştiğinde 2 uç nokta voltajında dalga şekli aynen resimlerdeki gibi...Arduino çalışmalarım,,,Arduino çalışmalarım,,,




  • İstediğim yazılım sonucu eklediğim resimlerdeki gibi olmalı.Bu resimlerde SG3526 ile 50Hz. inverter çalışmasından 2 farklı kesit var.RD pini ile genliğini değiştiriyoruz ama maalesef FB ile bunu yapmıyor.Diğer entegreler de bunu yapmak yerine çalışmayı anlık durdurup başlattığı için bozuk sinüslü inverter yapmış oluyoruz namı diğer modifiye sinüs inverter oluyor.
    2 çıkışın da genliği aynı anda ve aynı oranda değişmesi gerekiyor.
    Arduino çalışmalarım,,,Arduino çalışmalarım,,,




  • Yazılımla uğraşmak benim için zevkli iş, isteyerek yapıyorum ama elektronik bilgim kıt olduğu istenilen şeyi anlamakta zorlanıyorum.

    Şimdi hocam en başta zaten 2 çıkışı da aynı yapmıştık ta olmaz demiştin ya? Biri high biri low olacak demiştin. Ben de çıkışlardan birini tersine çevirmiştim, ama yanlış anladım heralde. Çıkışları eşitlemek için;
    TCCR1A = 0xA2;

    yapman yeterli. Ancak bu son koyduğun resimlerden anladığım kadarıyla istediğin şey ikisi de değil. Sinyallerden biri diğerinin ortasına konumlanmış. Eğer istediğin buysa arduinoda bunu yapmak kolay olmaz.
  • 
Sayfa: önceki 23456
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.