Universal Havya Kontrolcüsü Tasarımı

ortalama konusunda da şüpheliyim ben. Ölçüm hatalarının önemli bir problem olacağını düşünmüyorsak bence hesaplanan değer geriden geleceği için tepki süresini epey geciktirebilir, daha önemlisi PID'yi çok yanıltabilir.

PICO daki ADC nin arada bir uçuk bir pals üretme gibi bir sorunu var. O yüzden ortalama almadan işi yapmak pek mümkün görünmüyor. Tabi arada bir gelen bir pikin PID i nasıl etkileyeceğini bilmiyorum. Belki de PID bundan etkilenmez. Etkileneceğini varsayarsak, belli sayıda ortalama almak gerekir. Tabi ortalama almak da tepki süresini arttırıyor. O yüzden alman gereken ortalama sayısı arttıkça, PWM frekansını da arttırmak lazım ki tepki süresinden bir kaybın olmasın.

Şöyle bir yapı kullanılabilir:

PWM frekansını gene 1 kHz yaparsın. PWM kesmesinde geriye dönük 10 örneğin ortalamasını alırsın. Bu ortalamayı da raw ADC count olarak bir globale yazarsın. 10 kesmede bir de başka bir flag set edersin.

Ana döngüdeki program da bu flag'ı görünce yeni bir PID değeri hesaplar ve sonucu PWM ye yazar. Bunu yazarken de uygun bir şekilde yapmak lazım. Doğrudan PWM hardware'ine yazacağına kesmeye söylersin "yeni PWM hesapladım, müsait bir zamanda yazılmasını arz ederim" diye :)
 
"yeni PWM hesapladım, müsait bir zamanda yazılmasını arz ederim"
atmega'da OCR registerine (PWM periyodu registeri) yapılan değişiklikler yapılandırma ayarlarına göre ya "Top" count'tadeğerde ya da "bottom" count'ta güncelleniyordu timer tarafından(PWM modda çalışırken).
 
Saniyede yüzbinlerce kez okunabilir MAX6675.
Fakat bu okumanın tek yolu beslemesini kesip vermek nizami okumada 200ms altında cevap veremiyor versede son okuduğu değeri döndürüyor.

ama beslemesini 1kHz'de bir npn ile açıp kapatıyorum saniyede binlerce kez okunabiliyor.
 
MAX bizim için avantaj ama ben sevmedim MAX'i.
ısıstma anında INF döndürmesi vs. avantaj ama ciddi kalibrasyon istiyor OP-AMP da çok daha az kalibrasyon gerekiyordu.
real sıcaklık 350 dereceyken MAX ile 282 okuyoruz.
 
MAX bizim için avantaj ama ben sevmedim MAX'i.
ısıstma anında INF döndürmesi vs. avantaj ama ciddi kalibrasyon istiyor OP-AMP da çok daha az kalibrasyon gerekiyordu.
real sıcaklık 350 dereceyken MAX ile 282 okuyoruz.
100 derece kaynayan su ile yapılan bir kalibrasyon ne kadar yeterli olur. Sonuçta linear bir tepki veriyor. Ama onda da 2. bir referansa ihtiyaç duyuyoruz.
 
PICO daki ADC nin arada bir uçuk bir pals üretme gibi bir sorunu var. O yüzden ortalama almadan işi yapmak pek mümkün görünmüyor. Tabi arada bir gelen bir pikin PID i nasıl etkileyeceğini bilmiyorum. Belki de PID bundan etkilenmez. Etkileneceğini varsayarsak, belli sayıda ortalama almak gerekir. Tabi ortalama almak da tepki süresini arttırıyor. O yüzden alman gereken ortalama sayısı arttıkça, PWM frekansını da arttırmak lazım ki tepki süresinden bir kaybın olmasın.

Şöyle bir yapı kullanılabilir:

PWM frekansını gene 1 kHz yaparsın. PWM kesmesinde geriye dönük 10 örneğin ortalamasını alırsın. Bu ortalamayı da raw ADC count olarak bir globale yazarsın. 10 kesmede bir de başka bir flag set edersin.

Ana döngüdeki program da bu flag'ı görünce yeni bir PID değeri hesaplar ve sonucu PWM ye yazar. Bunu yazarken de uygun bir şekilde yapmak lazım. Doğrudan PWM hardware'ine yazacağına kesmeye söylersin "yeni PWM hesapladım, müsait bir zamanda yazılmasını arz ederim" diye :)
Ortalamaya karşı değilim üstat. Ama kayan ortalamaya karşıyım. çünkü 5-10 döngü geriden gelecek. Onun yerine örnek sayısını arttırarak her kesmede 3-5 örnek ile ölçüm yapınca süre nasıl etkileniyor bir bakmak lazım sanki. ESP32 ile denedim şimdi. Bir okuma ortalama 84 us sürüyor. 5 okuma bize ekleriyle %5 civarında bir duty kaybettireceğini varsayabiliriz.
 
Ortalamaya karşı değilim üstat. Ama kayan ortalamaya karşıyım. çünkü 5-10 döngü geriden gelecek. Onun yerine örnek sayısını arttırarak her kesmede 3-5 örnek ile ölçüm yapınca süre nasıl etkileniyor bir bakmak lazım sanki. ESP32 ile denedim şimdi. Bir okuma ortalama 84 us sürüyor. 5 okuma bize ekleriyle %5 civarında bir duty kaybettireceğini varsayabiliriz.
MAX normal şartlarlarda hızlı okutmuyor kendini.
Ama şöyle bir detayını yakaladım beslemesi geldiği an okuduğunu nerdeseyse 5us sonra yazıyor sonra zaman istiyor.
fakat bu hızlı okumanın bir dezavantajı oluyor her uyandığında TC yi yakalayamıyor bazen -25 derece söyleyebiliyor zaten pek hoş olacak bir okuma yöntemi değildi bu.

yine op-amp'a döneceğim ama artık ileri geri gitmekten sonraki adımda yapacaklarımı kaçırıyorum.
sıcaklığı okunabilir hale getirsem benim PID yazılımı üstüne biraz düşülse harika çalışacak.
berbat değerler üreten arabanın hız bilgisinde bile kararlı çalıştırdım o yazılımı.
 
Ahmet picoya arka arkaya 10 okuma yaptırırı mısın ne kadar sürüyor, merak ettim.


C:
long adcValue = 0;
int n = 10;
long mics = micros();
for(int i=0;i<n;i++)
    adcValue = adcValue + analogRead(adcPin);
adcValue = adcValue /n;
mics = micros() - mics;
Serial.printf("[adc: %d] [ %d us]",adcValue,mics);
 
Ahmet picoya arka arkaya 10 okuma yaptırırı mısın ne kadar sürüyor, merak ettim.


C:
long adcValue = 0;
int n = 10;
long mics = micros();
for(int i=0;i<n;i++)
    adcValue = adcValue + analogRead(adcPin);
adcValue = adcValue /n;
mics = micros() - mics;
Serial.printf("[adc: %d] [ %d us]",adcValue,mics);
133MHz.
55us.

birde overclock yapıp deneyelim.
150Mhz o.c.
52us

300MHz'e kadar o.c. yapabiliyorum ama 150'den sonra soğutma istiyor.
 
Ortalamaya karşı değilim üstat. Ama kayan ortalamaya karşıyım. çünkü 5-10 döngü geriden gelecek. Onun yerine örnek sayısını arttırarak her kesmede 3-5 örnek ile ölçüm yapınca süre nasıl etkileniyor bir bakmak lazım sanki. ESP32 ile denedim şimdi. Bir okuma ortalama 84 us sürüyor. 5 okuma bize ekleriyle %5 civarında bir duty kaybettireceğini varsayabiliriz.

Önemli olan ne kadar sıklıkla veri alıyoruz. Eğer 1 kHz PWM kullanıp 10 tane geçmişe dönük ortalama alırsak, saniyede 100 tane sıcaklık ölçmüş oluyoruz ve bu bence yeter de artar, çünkü 10 ms de sıcaklık artışı ihmal edilebilecek kadar azdır diye düşünüyorum.

Bu arada ESP nin ADC si çok yavaşmış. Benim Renesas RA6M2 deki 12 bit ADC nin dönüştürme süresi 0.4 μs ...
 
133MHz.
55us.

birde overclock yapıp deneyelim.
150Mhz o.c.
52us

300MHz'e kadar o.c. yapabiliyorum ama 150'den sonra soğutma istiyor.
Renesas çok iyiymiş. Ama ölçüm başına 5.5us/okuma da kötü değil bence. 5 ortalama alsak 30us sürse %0.3 duty yapar ADC ölçümü. Gayet iyi bence.

Önemli olan ne kadar sıklıkla veri alıyoruz. Eğer 1 kHz PWM kullanıp 10 tane geçmişe dönük ortalama alırsak, saniyede 100 tane sıcaklık ölçmüş oluyoruz ve bu bence yeter de artar, çünkü 10 ms de sıcaklık artışı ihmal edilebilecek kadar azdır diye düşünüyorum.

Bu arada ESP nin ADC si çok yavaşmış. Benim Renesas RA6M2 deki 12 bit ADC nin dönüştürme süresi 0.4 μs ...
Olabilir, ikisini de deneriz. PID'nin tepkisine göre karar veririz. Sonuçta 3-5 satır kod değişecek.
 
Renesas çok iyiymiş. Ama ölçüm başına 5.5us/okuma da kötü değil bence. 5 ortalama alsak 30us sürse %0.3 duty yapar ADC ölçümü. Gayet iyi bence.


Olabilir, ikisini de deneriz. PID'nin tepkisine göre karar veririz. Sonuçta 3-5 satır kod değişecek.
Abi sende yapacak mısın havayı?
Aşağı yukarı bir sayı çıkarıyorum da.
 
Ofset eklemek konusunda da fikrinizi almak isterim.

Offset ve lineerlik hakkaten çok kötüymüş ESP32 nin ADC sinde. Eğer belli bir numune için zamanla ve sıcaklıkla fazla değişkenlik göstermiyorsa, offset sorunu, girişteki opamp'e belli bir offset vererek giderilebilir (opamp toplayıcı devre). Lineerlik sorunu da, mevcut lineerlik hatasını gideren bir lookup table ile giderilebilir, ama bu tabloyu hazırlamak çok zor olur. SCPI protokolü ile çalışan hassas multimetre lazım ki binlerce ölçümü yapıp tabloyu hazırlayasın.
 
50us kadar düşürebildim
150MHz.

C++:
#define adcPin A0
long adcValue = 0;
int n = 10;

void setup(void) {
  pinMode(adcPin, INPUT);
  Serial.begin(115200);
  Serial.print('A');

  while(1){
  while (BOOTSEL) {   
    long mics = micros();
    for (int i = 0; i < n; i++)
    adcValue = adcValue + analogRead(adcPin);
    adcValue = adcValue / n;
    mics = micros() - mics;
    Serial.printf("[adc: %d] [ %d us]", adcValue, mics);
   }
  }
}
void loop(){}
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,953
Mesajlar
118,765
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top