Stm32 external interrupt parazit

Başlatan sımışka, 29 Eylül 2020, 09:30:33

sımışka

Merhaba,

Optokuplorler ve stm32f103 ile tasarlamış oldugum bir devre var, opto girişinde direnç , kapasitör , ve paralel hızlı bir direnç var , çıkışı 74hc14 ile alıp işlemciye bağlıyorum. Çok yüksek hızlarda gayet güzel sayıyor, fakat şöyle bir sorun var. Kart makineye bağlı ve makinede ki sensorden üretilen ürün sayısını sayıyor. Stm de harici interrupt ile saydiriyorum, makine kapatılıp açıldığında sapıtıyor, ürün geçişi olmadığı halde ürün varmış gibi parazit 50, 100 vs sayıyor. Giriş 5-24v arasını sayabiliyor, sensorumuzde 24v sinyal üretiyor. Bu durumu yazılımsal nasıl yönetebilirim ?

Erol YILMAZ

Giriste 1 zamaninin min x sn olmasini set ederseniz glitchlerden etkilenmeden sayarsiniz.

sımışka

Ne sıklıklarla 1 geldigine göre mi yoksa 1 de kalma süresi mi hocam ?
1 de kalma süresini nasıl ölcebilirim  ?

Erol YILMAZ

1 de kalma süresine bakarak   gerçek sinyalle paraziti ayırmak mantıklı.

1'de kalma süresini nasıl ölçebilirsin?
Yazılımına uygun bir algoritma oluşturman lazım.

z

#4
Sensorun onunden gecen nesnelerin hizi nedir?

Semani cizersen basit bir kac eklenti ile de halledilebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sımışka

Alıntı yapılan: Erol YILMAZ - 29 Eylül 2020, 13:21:411 de kalma süresine bakarak   gerçek sinyalle paraziti ayırmak mantıklı.

1'de kalma süresini nasıl ölçebilirsin?
Yazılımına uygun bir algoritma oluşturman lazım.
Sensör CNC makinesine bağlı, parça bittiğinde 1 puls veriyor. Makine ortamını aslında tam bilmiyorum yurt dışında şu an, puls in periyodunu ölçemiyorum o yüzden tam olarak.1 de kalma süresine göre arayüz programına  ms cinsinden filtreleme için zaman girilmesi için bir alan koydum. Ordakiler deneyerek doğru değeri bulup set ettirmeye çalıştıracağım. Harici kesme ile bir değişkeni arttırıyorum, aynı zamanda pinin 1 veya 0 olmasını bir timer içerisinde okuyarak 1 de kalma süresini bulabilirim diye düşünüyorum. Bu değerin altındaki durumlarda harici interupt altındaki değeri arttırmayacağım. Timer altındaki girişin 1 olma süresi boyunca external interrupt ta pasifte kalmalı sanırım.

sımışka

Alıntı yapılan: z - 29 Eylül 2020, 13:57:48Sensorun onunden gecen nesnelerin hizi nedir?

Semani cizersen basit bir kac eklenti ile de halledilebilir.
Tam bir bilgi yok ama 1 saniye cıvarında nesne sensör önünden geçmekte hocam. Aslında geçmekte mi onu da bilmiyorum, CNC makinesi içerisindeki 1 sensörden bu değer alınıyor, ürün bittikten sonra 1 veriyor, düzeneği ben kurmadım, firmada makine ile ilgili bilgi vermiyor.

z

#7
Ext interrupt i kullanma, timeri saniyede 1000 kez int uretecek sekilde kur.

A senin okumak istedigin portun pininden aldigin bilgi olsun.

Gerekli kod parcacigini yazarak ilgili pin 1 ise A=1, ilgili pin 0 ise A=0 olsun.

unsigned int a, sayildi, sayac, MalzemeSayisi;

Timer interrupt rutininde asagidaki isleri yapacaksin.

if (a==1)
  {
    if (sayac<255) sayac++;
  }
else
  {
    if (sayac>0) sayac--;
  }

if (sayac>200)
  {
    if (sayildi==0)
       {
         sayildi=1;
         MalzemeSayisi++;
       }   
  }

if (sayac<50) sayildi=0;

Bu hem digital bir filitreleme yapar hem de hysteresiz.

Parcanin gecis hizina bagli olarak karsilastirma degerleri yada int cakma hizi ile oynaman gerekir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

JOKERAS

Capture Compare İnterruptı Kullan.