Faz sırası doğruluğu

Başlatan Akaan, 11 Aralık 2022, 13:37:56

Serk@n

Komutları anladığım kadarıyla yazmaya çalıştım. Interrupts'a girdikten sonra şu üç koşul da oluşursa fazların üçünün de bağlı ve doğru olduğunu anlarız:


if (input(R_faz)==1) && (input(S_faz)==0) && (input(T_faz)==0) //1. koşul oluştu
{
delay_ms(2.22); //40 derece
if (input(R_faz)==1) &&
(input(S_faz)==1) &&
(input(T_faz)==0) //2. koşul oluştu
{
  delay_ms(2.22); //40 derece
  if (input(R_faz)==1) &&
  (input(S_faz)==1) &&
  (input(T_faz)==1) //3. koşul oluştu
  {
   printf("faz_sırası_dogru")
  }
 }
}
   
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Akaan

Öncelikle teşekkür ederim. Merak ettiğim 120derece açı tamamlandığında fazın biri tepe noktasında yada sıfır noktasındayken diğer fazlar farklı derece açıda olduğundan 3 fazında 1 vermesi gibi bir olasılık olur mu? Burda sanki a fazı 1 olmuş beklemiş b fazı 1 olmuş beklemiş c fazı 1 olmuş. Farklı hareket edip sonda eşitlenmişler gibi olmamış mı? Benmi yanlış yorumladım?

Alıntı yapılan: Serk@n - 12 Aralık 2022, 23:09:58Komutları anladığım kadarıyla yazmaya çalıştım. Interrupts'a girdikten sonra şu üç koşul da oluşursa fazların üçünün de bağlı ve doğru olduğunu anlarız:


if (input(R_faz)==1) && (input(S_faz)==0) && (input(T_faz)==0) //1. koşul oluştu
{
delay_ms(2.22); //40 derece
if (input(R_faz)==1) &&
(input(S_faz)==1) &&
(input(T_faz)==0) //2. koşul oluştu
{
  delay_ms(2.22); //40 derece
  if (input(R_faz)==1) &&
  (input(S_faz)==1) &&
  (input(T_faz)==1) //3. koşul oluştu
  {
   printf("faz_sırası_dogru")
  }
 }
}
   

Akaan

Yada 2.işlemci kullanıp şöyle yapacağım. Bu işlemcide yeterli port yok.1.koşul oluştuğunda okuyup değişkeni farklı porta atıcam 2 ve 3 içinde aynısı. Sonra atama yaptığım portlar üzerinden yorumlayıp yazdırıcam. Yazarken bile saçma geldi ama ASM örneklerini buldum anladığım kadarıyla böyle yapmışlar. Bunun basit bir çözümü mutlaka olmalı. Bulucaz bulucaz.

Serk@n

Alıntı yapılan: Akaan - 13 Aralık 2022, 05:49:22Öncelikle teşekkür ederim. Merak ettiğim 120derece açı tamamlandığında fazın biri tepe noktasında yada sıfır noktasındayken diğer fazlar farklı derece açıda olduğundan 3 fazında 1 vermesi gibi bir olasılık olur mu? Burda sanki a fazı 1 olmuş beklemiş b fazı 1 olmuş beklemiş c fazı 1 olmuş. Farklı hareket edip sonda eşitlenmişler gibi olmamış mı? Benmi yanlış yorumladım?


Tabi çözüm için çok farklı yollar olabilir. Benimkisi sadece bir fikir. Fazlara 2,22 ms. süreyle yani 40'ar derecelik açılarla bakınca durum böyle oluyor.

Fazların sırayla lojik 1'e geçmesinin sebebi sinyalin kare dalga olması. İş yerinde fırsat bulursam size resimli olarak izah edeyim. 

Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Akaan

Evet bende ondan bahsettim. Kare dalga olmasından dolayı tepe ve sıfır süreleri farklı. Üçününde aynı anda lojik 1 olduğu zamanlama yok. Örnek verdiğiniz kodda diyor ki r fazı 1 iken toplamda 6.66 MS sonra s fazı 1 olur. Doğru. Ama en altta diyor ki r s t fazları lojik 1 ise döngü doğru. 3ünü hiçbir zaman aynı anda kesmeye sokmuyoruz ve o yüzden aynı anda lojik 1 alamıyoruz. Başka bir yolu olmalı bakalım çözücez. 

Alıntı yapılan: Serk@n - 13 Aralık 2022, 07:32:17Tabi çözüm için çok farklı yollar olabilir. Benimkisi sadece bir fikir. Fazlara 2,22 ms. süreyle yani 40'ar derecelik açılarla bakınca durum böyle oluyor.

Fazların sırayla lojik 1'e geçmesinin sebebi sinyalin kare dalga olması. İş yerinde fırsat bulursam size resimli olarak izah edeyim. 



Akaan

#20
Değer okuyup başka porta atama mantıklı gelmeye başladı. Gecikmeler ile girişler okunur,

Bilgi = input(pin_rb0); //pinin lojik değeri okunur.
Veri = input(pin_rb4); //belirtilen değişkene atar.

Ozaman delay fonksiyonu  bir kere çalışacak.
Referans pini ataması rb4 e olsun yukarıdaki örnekte. O sabit.
İkinci girişimize bakacağız. 3üncü fazı hiç dikkate almayacağız zaten 2 yerine oturursa 3 doğrudur. Delay 666 dedik değişkeni pine atadık. Atadığımız pin verdiğimiz süre içinde lojik 1 olursa sıra doğru olmazsa sıra yanlış.

O zaman sizin örnekteki input(r_faz)==1 && input (s_faz)==1 ise döngü doğru işi olacak. 3üncü faz bizden değil canı cehenneme 😁😁

Akaan

Kendi yanlışımıda arada buldum 😁 ben her pini 6.66 aralıklar ile okuyorum.
LED ile kurduğum devrede doğru yanlış sırayla yanıyordu. E döngü tekrarlıyor. 6.66 da 2.faz doğru ama girişler sıfırlanınca 3.faz okuyor bu sefer yanlış ledi yanıyordu. Hataya bak. Çok basit ve 2 günümü yedi

Serk@n

Alıntı yapılan: Akaan - 13 Aralık 2022, 09:44:41Evet bende ondan bahsettim. Kare dalga olmasından dolayı tepe ve sıfır süreleri farklı. Üçününde aynı anda lojik 1 olduğu zamanlama yok. Örnek verdiğiniz kodda diyor ki r fazı 1 iken toplamda 6.66 MS sonra s fazı 1 olur. Doğru. Ama en altta diyor ki r s t fazları lojik 1 ise döngü doğru. 3ünü hiçbir zaman aynı anda kesmeye sokmuyoruz ve o yüzden aynı anda lojik 1 alamıyoruz. Başka bir yolu olmalı bakalım çözücez. 


Haklısınız. Maalesef bir mantık hatası yapmışım. Biraz iş yoğunluğum var. Kusuruma bakmayın.

Şimdi bir resim ekliyorum. Resim tam anlaşılır değil. Paintte çizdim.

Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Serk@n

Bu resme göre Faz1 kırmızı, Faz2 mavi, Faz3 yeşil. Bu durumda kodlar şu şekilde oluyor.

if (input(R_faz)==1) && (input(S_faz)==0) && (input(T_faz)==0) //1. koşul oluştu
{
delay_ms(2.22); //40 derece
if (input(R_faz)==1) &&
(input(S_faz)==1) &&
(input(T_faz)==0) //2. koşul oluştu
{
  delay_ms(2.22); //40 derece
  if (input(R_faz)==0) &&
  (input(S_faz)==0) &&
  (input(T_faz)==1) //3. koşul oluştu
  {
   printf("faz_sırası_dogru")
  }
 }
}
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Akaan

Ne kusuru olur mu öyle şey. O mantık hatası dediğiniz şey benim 2 günümü yedi ve sizin kod önüme çıkınca anladım. Kendi yazdığıma konduramamışım demekki. Bu şekliye deneyeceğim. Ama 2.22 gecikme bana her bağlantı şekliyle yanlış ledi yakacağını düşündürdü. -120 #0 #+120 derecelik açı olduğunu düşündüğümüzde 40derece fonksiyonu her bağlantıda referans fazından çıkamıyor. 3 kere koşul oluşturuyoruz her koşul 2.22 yani 40 derece. 3 koşulun toplamı 1 faz süresi ediyor. Yanlış mı düşünüyorum


Alıntı yapılan: Serk@n - 13 Aralık 2022, 10:12:11Bu resme göre Faz1 kırmızı, Faz2 mavi, Faz3 yeşil. Bu durumda kodlar şu şekilde oluyor.

if (input(R_faz)==1) && (input(S_faz)==0) && (input(T_faz)==0) //1. koşul oluştu
{
delay_ms(2.22); //40 derece
if (input(R_faz)==1) &&
(input(S_faz)==1) &&
(input(T_faz)==0) //2. koşul oluştu
{
  delay_ms(2.22); //40 derece
  if (input(R_faz)==0) &&
  (input(S_faz)==0) &&
  (input(T_faz)==1) //3. koşul oluştu
  {
   printf("faz_sırası_dogru")
  }
 }
}


Serk@n

#26
Son yazdığım kod, olur gibi görünüyor. Karışma riski yok.

Ama gönderdiğiniz linkteki çözüm çok daha güzel. Köprü diyotlarla sinüs dalgasının sıfıra geldiği an tespit edilebiliyor. Hem dahice hem de yazılım için büyük avantaj.

Kare dalganın bir dezavantajı vardı. Çünkü sinüs dalganın pozitif alandaki her durumu lojik 1 olarak görünüyordu. Bu da lojik birin yükselme anını veya düşüş anını tespit etme zorunluluğu getiriyordu. O yüzden 2,22 ms. de ısrarcı olmuştum.

Gönderdiğiniz linkteki devreyi kurarsanız bu durumda kesmeden sonra 6,66 ms. sürelerle diğer iki faza da bakıp işi bitirebilirsiniz.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Akaan

#27
Köprü diyotla yapmamamın sebebi faz kopukluğu olduğunda uyarı vermeyecek olması. Çünkü motordan bir miktar  geri besleme olacak ve işlemci faz var olarak algılayacak. Eksik fazla çalışan sistem en iyi ihtimalle motorun yanmasına sebep olacak  Sağlıklı bir sistem değil. Görünüşte daha basit daha kullanışlı ama uzun vadede veya şansın yaver gitmediği bir anda sistemin çökmesi an meselesi. Bu şekilde optolar voltaj değişimine daha duyarlı  Trafo kullanılarak sağlıklı yapılabilir. Ama işte yeterli yerim yok.

Serk@n

Burada kullanılan devre elemanları 220V.u düşürerek optonun ledini yakacak şekilde ayarlanacak. Dolayısıyla motordan gelen geri besleme hem bu voltajlara çıkamayacak hem de düzgün faz sırasında gelmeyecek.

İllaki bir parazit oluşma riski varsa, mcu faz kontrolünü birden fazla yapar, emin olunca ekrana yazar.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Serk@n

Yani her opto için köprü diyot kullanmanızın motora bir zararı veya motorun devrenize bir parazit vermesi gibi bir zararı olmaması gerekir.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Powered by EzPortal