12 bit ADC

Başlatan _MOD_, 23 Mart 2011, 09:40:01

Klein

PID kontrollü olması bir şey değiştirmez.  PID giriş değerine tako çıkışı yerine encoder çıkışı verirsiniz.
Encoder devir sayısını  frekans çıktısı olarak verir.   
Örneğin ,  255 pulse encoder kullanırsanız:
1 devirde 255 pulse alırsınız.  dakikada 1000 devir dönen bir motor için  dakikada 255000 pulse, saniyede 4250 pulse alırsınız. Yani 1000 devir dönen motor için encoder çıkışı  4250Hz olacaktır. 
PID girişine bu değeri veya bu değerin bir oranını verirseniz , PID de herhangi bir değişiklik yapmanıza gerek kalmaz. 

bigbey

Bu tip benzer projeyi bende yapmıştım.
projede 12volt dc motor kuıllandım. arkasında kendinden monte edilmiş pulse encoder vardı. motor 1 tur döndüğünde 24 pals veriyordu. motoru PWM ile hızını kontrol edip istenen devirde dönmesi sağlanıyor ve motor miline verilen yüke göre devir düşerse pwm artıyor motor devrini sabit tutmaya çaılışıyor.
Bu işlemi pulse encoderli bir malzeme ile rahat yapabilirsiniz.
TA6R

_MOD_

Motor sanyodenki marka bir motor ve yanlış bakmadıysak içine bir takojeneratör bağlanmış ve hız bilgisi ordan alınıyor. Sürerken de orayı kullanmam isteniyor.

z

Hızın anlık değeri kontrol altında tutulacaksa, PID nin leb demeden leblebiyi anlaması yani hatayı çok erken sezip gerekli önlemi alması için tako gerekir.

Eğer motor devrinin sondeğeri kontrol altında tutulacaksa encoder kullanılabilir. Eğer motorun örneğin yol alışındaki devir sayısı da kontrol altında tutulacaksa takodan vazgeçilemez yada çok çok yüksek çözünürlükte encoder gerekir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

_MOD_

Hız sanırım anlık olacak. Yani referans olarak rpm değeri girilecek ve motor o rpm de dönmeye çalışacak.

_MOD_

Bu arada bir adet mcp3201 entegresi aldım karaköyden. Aklıma takılan birşey var.

LCD den girilen 0-3500 arası hız bilgisi ikilik bilgiye çevrilecek. Motor bu bilgiye göre 0-3500 rpm arası dönecek.

Fakat adc 3500 rpm için üretilen voltajı 4098'e bölecek. Yani motor 3500 rpm de döneceği zaman adc' den gelen bilgi FFF olacak. Fakat lcd'den 3500 değeri girildiğinde bunun ikilik karşılığı DAC yapıyor. Bu aradaki uyuşmazlık nasıl giderilebilir?

z

Digital teknolojinin bu denli güçlü ve ucuz olmadığı dönemlerde tako bir bakıma mecburiyetti.
Şimdilerde duruma göre alternatif çözümler var. Sen en iyisi motorun uygulama alanını söyle tako gereklimi değilmi ordan anlaşılabilir.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

_MOD_

Uygulama alanı derken?   :o

Hoca proje olarak verdi  ;D

Klein

Alıntı yapılan: _MOD_ - 31 Mart 2011, 18:32:40
Bu arada bir adet mcp3201 entegresi aldım karaköyden. Aklıma takılan birşey var.

LCD den girilen 0-3500 arası hız bilgisi ikilik bilgiye çevrilecek. Motor bu bilgiye göre 0-3500 rpm arası dönecek.

Fakat adc 3500 rpm için üretilen voltajı 4098'e bölecek. Yani motor 3500 rpm de döneceği zaman adc' den gelen bilgi FFF olacak. Fakat lcd'den 3500 değeri girildiğinde bunun ikilik karşılığı DAC yapıyor. Bu aradaki uyuşmazlık nasıl giderilebilir?

Aradaki uyuşmazlıktan kasıt nedir tam anlamadım.  Sanırım kalibrasyondan bahsediyorsun.
Bunun için önce kalibreli bir takometre ve bir hız ayarlayıcı ile  ADC de en yüksek değeri okuduğun devri bul.

diyelim ki max 6000 RPM için ADC'den  4095 değerini okuyorsun. ADC de offset olmadığını varsayıyorum.

katsayı= kalibrasyon_hızı/kalibrasyon_hızında_okunan = 6000/4095 = ~1.465

Kalibrasyonu bir kez yaptıktan sonra artık bulduğumuz katsayıyı kullanarak motorun anlık devrini RPM cinsinden hesaplayabiliriz.

anlık hız = katsayı*anlık_okunan

motorumuz  3000 devirde dönüyor olsun. ADC'den okuduğımız değer 2048 olsun

Devir(RPM) = katsayı*ADC = 1.465*2048 = 3000,32 RPM

z

Alıntı yapılan: _MOD_ - 31 Mart 2011, 18:40:01
Uygulama alanı derken?   :o

Hoca proje olarak verdi  ;D

O zaman tako kullanmayı gerektiren durumlardan bahsedeyim.

- Çok düşük devir sayılarında bile kontrol gerekiyorsa,
- Geçici rejim davranışıda sıkı sıkıya kontrol altında tutulacaksa,
- Hoca, tako kullanımını şart koştuysa.

Düşük devir sayılarında encoder ile açısal hız ölçümü yapıp devir sayısını sabitlemek hele hele de stabıl olmayan mekanik yüklerde oldukça zordur.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

_MOD_

#25
Alıntı yapılan: Klein - 31 Mart 2011, 18:58:58
Alıntı yapılan: _MOD_ - 31 Mart 2011, 18:32:40
Bu arada bir adet mcp3201 entegresi aldım karaköyden. Aklıma takılan birşey var.

LCD den girilen 0-3500 arası hız bilgisi ikilik bilgiye çevrilecek. Motor bu bilgiye göre 0-3500 rpm arası dönecek.

Fakat adc 3500 rpm için üretilen voltajı 4098'e bölecek. Yani motor 3500 rpm de döneceği zaman adc' den gelen bilgi FFF olacak. Fakat lcd'den 3500 değeri girildiğinde bunun ikilik karşılığı DAC yapıyor. Bu aradaki uyuşmazlık nasıl giderilebilir?

Aradaki uyuşmazlıktan kasıt nedir tam anlamadım.  Sanırım kalibrasyondan bahsediyorsun.
Bunun için önce kalibreli bir takometre ve bir hız ayarlayıcı ile  ADC de en yüksek değeri okuduğun devri bul.

diyelim ki max 6000 RPM için ADC'den  4095 değerini okuyorsun. ADC de offset olmadığını varsayıyorum.

katsayı= kalibrasyon_hızı/kalibrasyon_hızında_okunan = 6000/4095 = ~1.465

Kalibrasyonu bir kez yaptıktan sonra artık bulduğumuz katsayıyı kullanarak motorun anlık devrini RPM cinsinden hesaplayabiliriz.

anlık hız = katsayı*anlık_okunan

motorumuz  3000 devirde dönüyor olsun. ADC'den okuduğımız değer 2048 olsun

Devir(RPM) = katsayı*ADC = 1.465*2048 = 3000,32 RPM

Motor 3500 rpm

Demek istediğim;
lcd'den tuş takımı kullanarak girilen hız bilgisi refh ve refl olmak üzere değişkene atılıyor
adc den okunan değer de addressh ve addressl olmak üzere değişkene atılıyor

lcd' den maksimum hız bilgisini girince refh ve refl ın içerisinde DAC bilgisi olacak
motor maksimum hızda döndüğünde ise addressh ve addressl nin içerisinde FFF bilgisi olacak.

yani lcd'den girilen referans bilgisi ve adc'den gelen hız bilgisi tutmayacak gibi görünüyor


Alıntı yapılan: bunalmis - 31 Mart 2011, 19:01:25
Alıntı yapılan: _MOD_ - 31 Mart 2011, 18:40:01
Uygulama alanı derken?   :o

Hoca proje olarak verdi  ;D


O zaman tako kullanmayı gerektiren durumlardan bahsedeyim.

- Çok düşük devir sayılarında bile kontrol gerekiyorsa,
- Geçici rejim davranışıda sıkı sıkıya kontrol altında tutulacaksa,
- Hoca, tako kullanımını şart koştuysa.


Evet tako kullanmamı gerektiren durumlar  :D

Klein

Eğer ADC'den aldığın ham değeri kullanırsan tutmayacak. Ya ADC çıktısını devir bilgisine çevireceksin , ya da tuştakımından girilen bilgiyi PID'de işlemeden önce ADC ye uyduracaksın.
ADC'yi nasıl devir bilgisine çevireceğiniyazdım. Diğeri de ondan farklı değil.

_MOD_

Hee ben referansla felan oynayınca olur gibi bir cevap bekliyordum. O zaman şimdi ondalıklı sayılara felan girmem gerekecek değilmi? Assembly de çalışıyorumda biraz zor oluyor.

Tagli

Mutlaka asm ile yazman gerekiyorsa floating point yerine fixed point kullanmayı dene. Böylece imkansızı biraz kolaylaştırarak gıcık kıvamına getirebilirsin :)
Gökçe Tağlıoğlu

_MOD_

#29
Fixed point pid de de karşıma çıkmıştı anlamadığım için kullanmadım. Açıkcası pid' de neden fixed pointe ihtiyac var anlamadım. Microchipin örneklerinde 256 almış frekansı. Çarpması gerekince 8 bit sola kaydırıyor, bölmesi gerekince sağa.

peki referansı arttırmak çözüm olmazmı gerçekten? yani 5 V u 4096 ya bölceğine 3500 le 4096 arasındaki orana göre bir artış yapıp onu referans olarak  versek?