ADUC7026 ile genişletilebilir veri toplama projesi yapıyor

Başlatan Ziya, 12 Ağustos 2006, 15:40:11

Ziya

ADuC7026 üzerinde bulunan 12 kanal 12 bitlik ADC kullanılarak genişletilebilir bir veri toplama kartı ve bu kart ile uyumlu çalışacak PC programına başlıyoruz. Matlab ve Labview için gerekli eklentiler yapılarak bu kartımız bu yazılımlar ile de çalışabilir hale gelecektir.

Projenin bir sonraki aşamasında 4 kanal 12 bitlik DAC ilave edilerek analog çıkış sağlanacak, genel amaçlı MIMO kontrol sistemi kurgulanacaktır.

Nihai hedef bir plc tasarımı olacaktır.

Bu konu hakkında paylaşmak istediğiniz bilgileri lütfen bu başlık altında toplayalım.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Basta aklima gelen sorular sunlar :
- Kart bilgisayarin içine mi monte edilecek (PCI,PCI-EX, ISA) yoksa disardan USB, RS232 mi olacak?
-  Pc için dll nasil yazilir?

ADuc tarafinda örnekleme frekansimizi yüksek tutabiliriz: 1ms veya 100us.

Ziya

Alıntı yapılan: "picusta"Basta aklima gelen sorular sunlar :
- Kart bilgisayarin içine mi monte edilecek (PCI,PCI-EX, ISA) yoksa disardan USB, RS232 mi olacak?
-  Pc için dll nasil yazilir?

ADuc tarafinda örnekleme frekansimizi yüksek tutabiliriz: 1ms veya 100us.
Kartı dışarıda olacak şekilde düşünmüştüm. PCI bus yapısına uydurabilirmiyiz bilmiyorum. O durumda zaten genişletme işi de zor olur. ADuC7026 da USb yok. 2 adet UART var. Bir tanesi tam modem kontrollerini de içeriyor (modem kontrolleri kullanılırsa fakat spi ve i2c leri kullanamıyoruz o zaman). UART'ların 115200 bpse çıktığını biliyorum ama daha yüksek hıza çıkar mı bilmiyorum. UART'ın boudrate generatorunde fractional generator kısmı var ve hatası çok düşük baud rate üretiyor. Acaba çok daha yükseklere çıkarmı diye bakmak lazım. Örnekleme sıklığı 10 ms olursa belki gerek kalmayabilir. ADuC7026 örneklemesi en fazla 1 megasample/sec oluyormuş. Çok yüksek bir hız.

DLL yazma işini Delphi kullananların bilmesi lazım (ben bilmiyorum). Yeni bir proje oluştururken belirlenen seçeneklerden birisi dll. C++ Builder ile delphi zaten aynı (biri pascal, diğer, c versiyonu) ve dll yazılması gerekiyorsa c++ Builder kullanılabilir. PC tarafı arayüz için örnek olsun diye gönderdiğim Genii ye bakabildiniz mi?
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

Analyzer

Selam,

Birebir aynı projeyi (mcu'ya kadar aynı) düşünüyordum. PC interface'i için ben C++ Builder'da yardımcı olabilirim. Beraber elektronik kısmını çözelim yeter :)

Analyzer
Üşeniyorum, öyleyse yarın!

Ziya

Selam Analyser hocam.

Sizin PC tarafı desteğinize ihtiyacımız var.

Haberleşme için muhtemelen seri portu kullanacağız. Ancak kanal sayısı arttıkça en küçük örnekleme aralığında verileri aktarmakta güçlük çekebiliriz. O nedenle hızlı bir haberleşme yöntemi geliştirmeliyiz. 115200 bps ile sanıyorum saniyede 10k bilgi gönderebiliriz. Her bir bilgiyi 2 bayt düşünsek saniyede 5k sample bilgi gönderilebilir. Yani her bir bilgi 500 mikrosaniyede gönderilecek demektir. Genii deki gibi en küçük örnekleme sıklığımız 10ms olsa iki örnekleme işlemi arasında 20 örnek değeri aktarılabilir. Bu durumda bu hızla ancak bir karttaki 12 ADC bilgisi gönderilebilir. Belki biraz daha uğraşırsak 2 kartın bilgisi (24 ADC okuma bilgisi) gönderilebilir.

Bu işlemciler yüksek hızlarda çalıştığı için belki içeride örnekleme sayısı arttırılıp moving average vs. işlemleri de yaptırılabilir.

http://www.ontrak.net/  ticari data acquisition kartlar. ( Labview bağlantıısı http://www.ontrak.net/labview.htm )

Sizin düşünceleriniz nelerdir?
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

Analyzer

Selam Ziya hocam,

Valla benim şahsi kanaatim iletişim işini ya USB'ye bırakalım ya da PC'den bağımsız "stand-alone" bir uygulama yapalım. PLC panellerini ve HMI panellerini inceleme fırsatım oldu içerisinde bir adet 100-120 pin arası mcu var (+biraz yeşillik direnç kondansatör vb.) ve HMI (bu genelde dokunmatik ekran oluyor) ile güzel iş çıkartıyor.
Eğer PC tabanlı yapalım diyorsanız üzerinde usb olan bir ARM7 seçelim. Mesela LPC2148 bu iş için uygun gibi. 60 mips hızı var. Thermocouple modülü için de mesela MAX6675 kullanılabilir. Yazılımı için güzel görünümlü birşeyler yaparız orası mesele değil ;) Eğer pc'den bağımsız yapalım derseniz bir HMI seçelim ve iletişim protokolünü loglayıp çözelim. (Yalnız bundaki sıkıntı kısıtlı grafik kullanımı ve yapısı+fazla maliyet)

Analyzer
Üşeniyorum, öyleyse yarın!

Ziya

Bahsettiğin operatör paneli gibi fakat içerisindeki (mesela 1 GB olan) flash belleğe kayıt yapan bir şey mi? İstendiğinde ethernet üzerinden yedeklenebilecek kayıtlar tutuluyor. Renkli grafik ekranda bunlar izlenebiliyor da. Buna benzer basit bir şey yapılabilir. Ama verileri PC ye aktaran bir logger da yapılabilir. Ya da kaydı önce ekleyeceğimiz flash belleğe kaydeder, oradan uart üzerinden PCye aktarabiliriz. Önce bunu halledelim sonra daha komplex yapılara girelim.

Gerçi daha önceden de belirttim bu ara programlayıcı ile uğraşıyoruz, buna zaman ayırmam zor olur. Fakat başlangıç olması açısından konuyu açtım.

Proje şimdilik basitinden başlasın. Ekran ikinci aşamada konur. Programlanabilir MIMO kontrolörler üçüncü aşamada. ...

İşlemci seçimi mutlaka önemli ancak her işlemcide her özelliği bir arada bulmak zordur. ADuC7026 da ADC kanalları 12 bit, yanlış hatırlamıyorsam lpclerde 10 bit. İsterseniz doğrudan philips ARM7 lerle de başlayabiliriz.

Kalite yönetim sistemlerinde belirlenen yıllık hedefler ulaşılabilir ve ölçülebilir olmalı der. Biz de ilk başlangıcı ADuC ile yapalım. Veriler ya doğrudan PCye gelsin, ya da önce flash belleğe, sonra PC ye. Bu ikinci şekilde ADC kanal sayısını ilave kartlarla genişletmek mümkün olur. Şimdilik hedef bu olsun. Uygun mudur?
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

Analyzer

Selam,

Olur hocam farketmez bana :) Hani PC'ye aktarırken biraz hızlanalım diye USB demiştim. Bende ADUC sample'ları var, sanırım çoğumuzda da var. Yalnız eğer sensör olarak özelleşmiş cihazlar kullanacaksak (termokupl örneğini vermiştim) özel arabirim varsa piyasada onu kullanalım.
Programlayıcıyı yakından takip ediyorum. Belki PC yazılım kısmında ihtiyaç olursa yardımcı olmaya çalışırım ;) Uygun bir vaktinizde beraber blok diagramını çizelim.

Analyzer

Edit : ADUC'un sitedeki deneme board'unu yapıp deneyelim olmazsa..
Üşeniyorum, öyleyse yarın!

Ziya

Alıntı yapılan: "Analyzer"A.S. ...Yalnız eğer sensör olarak özelleşmiş cihazlar kullanacaksak (termokupl örneğini vermiştim) özel arabirim varsa piyasada onu kullanalım.
Şimdilik ADC okusun. Yani belki endüstriyel 4-20 mA akım gönderen transmitterlar bağlanabilir.
Alıntı YapProgramlayıcıyı yakından takip ediyorum. Belki PC yazılım kısmında ihtiyaç olursa yardımcı olmaya çalışırım ;) Uygun bir vaktinizde beraber blok diagramını çizelim.
Donanım kısmını öncelikle tamamlamak gerekiyor. Sonra mcu tarafında belirli kütüphaneleri hazırlarız. O arada PC ve mcu iş paylaşımını konuşuruz. Şimdi sanki erken gibi ve komplex işlemci ya da epromların programlanması nasıl olacağı henüz şekillenmedi.
Alıntı YapEdit : ADUC'un sitedeki deneme board'unu yapıp deneyelim olmazsa..
Ben yaptım. Gerçi sadece bir örnek program yükledim. Çalışıyor. İkinci için de kart çıkarttım fakat sadece işlemciyi monte ettim. Diğer elemanları monte etmek zor olacak. İlkinin de pin headerlarını lehimlemedim daha. Belki ribon kablo ile uzatma yaparım.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Genii programina söyle bir baktim ama çalistirmadim. bi sürü dll, dosya. Daha detayli bakarim.

Aduc 70XX serisinin dezavantaji USB olmamasi, RAM 8k ve 62K flash. Ayrica Vectored Interrupt Controller olmamasi da kötü.
Ama en iyi tarafi tek çip üzerinde 12 bit adc ve 12 bit DAC olmasi, bu özellikler ARM7 çekirdegi ile birlestirilince, gömülü kontrol uygulamasi yapmak piyasadaki için en uygun çip gibi.

Bu yüzden bu uygulamada Aduc kullanilmasindan yanayim.

LPC 2148 USB olmasi güzel, üstelik internette dolasirken ARM7 için en çok uygulamayi  LPC islemciler için yapilmis oldugunu gördüm.

Termokupl kullanmak için ms'lik örneklemeye ihtiyaç yok. Termik olaylar daha ataletli oldugundan bazen 0.5 saniyelik örnekleme süresi yeterli oluyor. Mekanik sistemler için 10ms iyi bir deger.
Bu yüzden ilk etapta kart 10ms l'ik örnekleme yaparsa yeter (her örneklemede 8 örnegin ortalamasi alinacak). Daha sonra söyle bir fonksyon düsünebiliriz : 12 giristen 1 tanesi kritik onu 1ms lik aralarla örnekleyebiliriz.  
Bu ölçümleri bilgisayara seri asenkron olarak gönderebiliriz. Daha sonra USB'ye FT232 veya USB'li PIC sayesinde USB portundan gönderebiliriz, veya USB'li islemci seçeriz. USB'yi de böylece ögrenmis oluruz (Bunalmis hocamin yaptiklari bize çok yardimci olacak)
PC tarafindaki program tam olarak nasil olacak bilmiyorum, dll olur diye tahmin ediyorum.
Elektronik kisim için ise interface olarak +10V..-10V, differansiyel girisler, 4-20ma akimlar düsünülebilir. Bu interface kartlarini (analog veriyi 0...3.3V'ta çeviren) Anakartin üzerine takilir sekilde yapmak sistemi daha esnek yapar. Ayrica Encoder girisleri, buton, tll gibi dijital girislerde olmasi fena olmaz.
Karti genisletebilir yapmak içinde mecbur SPI, I2C kullanacagiz. Böylelikle ayni tür bir karta veya USB arabirimine baglanabilir.

Ziya

Merhaba,
Genii de bir sorun var ya da win98 gerektiriyor sanırım. Demo driver kartı yükleyemiyor. Dolayısıyle kart olmadan varmış gibi yapamıyor. Kısaca yüklü olan kartın kaynaklarını kullanmak amacıyla  strategy editor de analog input, dijital input, dijital output, timer, display gibi objeler ekleyip, okuma işlemlerini (display için AI,DI,DO, uzer prog vs.) hangi kartın hangi girişinden alacağını vs. belirtebiliyorsunuz. Genii run dediğinizde de ekranda getirdiğiniz grafik barlar, display ler vs. hepsi aldıkları bilgileri göstermeye başlıyor. İsterseniz harddiske kaydediyor. Bu işin içine görsellik katıyor. Yoksa aynen alıp dosyaya da saklayabiliriz. Ama böyle bir program arayüzü geliştirsek fena olmaz yani.

ADuC7026 işlemcide USb yok ama belki 115200 den yüksek hızlara çıkılabiliyordur. Henüz bakamadım. Olmazsa başka çareler araştırırız. Vectored interrupt controller ARM7 çekirdeğinde değil mi? Yani oluşan 6 çeşit interrupta göre işelmcide 24 bayt tutan alanda her bir interuptın oluşması halinde gideceği adresler kayıtlıdır. İnterrupt gerçekleştiğinde o dresteki 32 bitlik bilgi (daha doğrusu interrupt rutinin yerleştirildiği yerin adresi) Program Counterine yüklenir. Bu ARM7'nin çekirdeğinin içinde böyle. ARM7 kullanan her işlemcide de böyle. Hatta interrupt için gidilen rutinde status registeri working registerler vs. bilgilerini saklamaya gerek yok. Çünkü her interruptın ve normal işleyişin status, working registerleri vs. farklı.

tasarım anakarta arabirim eklentileri yapılabilecek şekilde olur sizin de dediğiniz gibi. Fakat ADCler için diferansiyel giriş olayına bakmamız gerekir. Bu durumda ADC giriş sayımız azalabilir. Belki analog multiplexing gerekebilir.

Dijital girişler, harici sayaç, dahili sayaç özellikleri eklenecek. Hızımız yeterli olursa kart üzerinde, olmaz ise bilgisayar üzerinde PID kontrolör objesi ekleyebiliriz (SISO yada MISO).

Her bir adc kanalının örnekleme sıklığı müstakilen belirtilecek. Bir de işlemci üzerinde 2 blok programlanabilir mantık dizileri var. Belki bunları da PC den programlanabilir bir şekle sokabiliriz.

Güzel fikirler geliyor. Biraz daha gelsin de toparlayalım ve speclerimizi oluşturalım.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Evet ARM çekirdeginde her çalisma modu için (user, IRQ, FIQ, Abort vs.. ) ayri stacklar var.
Ama benim demek istedigim çevre birimleri IRQ olusturdugunda, islemci  ayni PIC gibi tek adrese gitmesi, sonra IRQSTA'ya bakip ona göre PWM interrupt'mu, timermi vs.. programci bakmali. En azindan datasheet'en böyle anladim (daha yeniyim).
Datasheetten çikardigim baska bi sonuçta 2 ADC pini 1 differansiyel giris olarak ayarlanabilir. Olmadi OPAMP'lar ile diferansyel yapariz.

kullanici arayüzü de modüller olmali, simdilik bunu 3 degisik programla yapabiliriz: C++builder, Matlab ve Labview. Asil is bu arayüzü windows(veya baska bir isletim sistemi) çekirdegi vasitasiyla mikrodenetleyicimizle haberlestirmek.
Arayüzde zaman'a göre grafik çizdirme fonksyonu mutlaka olmali.

önce verileri arayüz sayesinde alip gönderelim sonra kontrol algoritmalarimizi koyariz. Benim koymayi düsündügüm algoritmalar RST, durum geri beslemesi, gözlemci, parametreleri dinamik olarak degisen filtreler (LQR, Kalman, nonlineer). Bu algoritmalari koymadan önce sistem analizi ve tanimi yapmak için verilerin Matlab'da toplanmasi sart.
PLA'lar da gerçekten ilginç bir özellik de, nasil en iyi sekilde kullanilir onu bilmiyorum. PLA'larin çikisi diger pin veya IRQ için kullanilabilir.

Ziya

Örnek programlara bakıyordum ben de. Bizim universal programlayıcı için kullanacağımız lcd ekranı ADuC'a bağlayıp deneyecektim. Biizm çevirmeye başladığımız fakat bıraktığımız bir döküman vardı. Çeviri odasında ARM7 altında linki var. Gerçi LPClere yönelik ama interrupt kısımları ARM7 çekirdeği. Aslında ARM7 de bir de TDMI var bu nedir bilmiyorum. Sanki harici interrupt kaynakları için 16 vektör tanımlanabiliyor diye hatırlıyorum. Uzun zaman oldu ve o kısımlar çevrilmemişti. Bir kere daha bakmak lazım.

Kullanıcı arayüzü modüler olacak. Display vs. gibi objeler eklenince o objelerin dll leri devreye girecek. Haberleşme seri porttan olacak çaresiz. Baud rate generator kısmına sanki daha yüksek hızlara çıkmak mümkün görünüyor (CD 2 seçilirse ve DL 1 gibi, hatayı da fractional brgenerator kısmıyla indirebiliriz.)
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

Analyzer

Selam,

C++ Builder diyorum :) (Kaçamak oldu biraz ama ne yapayım ben de bu mereti iyi sayılacak derecede biliyorum)

Analyzer
Üşeniyorum, öyleyse yarın!

Ziya

Hocam, benim de tercihim C++Builder. Bunda yazılan kodlar Linux'a da taşınabilir (gerçi o şimdiki sorunumuz değil). C++Builder'i ben de kullandım. Kütüphaneleri çok fazla bilmesem de işimi görecek şeyleri helpten bularak halledebiliyorum bir derece.

Matlab ve labview haberleşme standartı var mı bakmak lazım. Dün linkini verdiğim bir sitede seri haberleşmeli kartları labview ile kullanmışlar. Bazı komut setlerini de vermişler. Belki standarttır. Deneriz :D
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey