Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
116
Cevap
6239
Tıklama
4
Öne Çıkarma
Cevap: Arduino çalışmalarım,,, (4. sayfa)
M
8 yıl
Yarbay
Konu Sahibi

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.



M
8 yıl
Yarbay
Konu Sahibi

İş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);

}

< Resime gitmek için tıklayın >





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

G
8 yıl
Yarbay

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;


Bu mesaja 1 cevap geldi.
M
8 yıl
Yarbay
Konu Sahibi

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.



G
8 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
M
8 yıl
Yarbay
Konu Sahibi

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.



M
8 yıl
Yarbay
Konu Sahibi

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.< Resime gitmek için tıklayın >< Resime gitmek için tıklayın >



G
8 yıl
Yarbay

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 >

M
8 yıl
Yarbay
Konu Sahibi

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ı.

< Resime gitmek için tıklayın >



M
8 yıl
Yarbay
Konu Sahibi

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;

}



G
8 yıl
Yarbay

 
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.



M
8 yıl
Yarbay
Konu Sahibi

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.< Resime gitmek için tıklayın >< Resime gitmek için tıklayın >





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


Bu mesajda bahsedilenler: @elektro_gadget
G
8 yıl
Yarbay

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



M
8 yıl
Yarbay
Konu Sahibi

Anlıyorum.İn voltajı bir şekilde ayar edilir.Ben araştırmaya devam edeyim.Bir olumlu sonuç bulursam yazarım,teşekkür ederim.




Bu mesajda bahsedilenler: @elektro_gadget
G
8 yıl
Yarbay

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?

< Resime gitmek için tıklayın >


Bu mesaja 1 cevap geldi.
M
8 yıl
Yarbay
Konu Sahibi

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?

< Resime gitmek için tıklayın >

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.



G
8 yıl
Yarbay

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



M
8 yıl
Yarbay
Konu Sahibi

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...< Resime gitmek için tıklayın >< Resime gitmek için tıklayın >



M
8 yıl
Yarbay
Konu Sahibi

İ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.
< Resime gitmek için tıklayın >< Resime gitmek için tıklayın >



G
8 yıl
Yarbay

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.