avatar_fatih88

pwm rampalanma algoritması oluşturma

Başlatan fatih88, 08 Eylül 2022, 13:41:28

fatih88

arkadaşlar hepinize iyi çalışmalar oransal valf kartı yapmaktayım (atmega328p)1024 çözünürlüğünde pwm ve anolog bilgim var  oransal valfte tüm istenenleri yaptım ama sadece ranpalanma bloğunun algoritmasını bir türlü beceremedim pwm 0-4sn aralıgında pottan ayarlanabilmeli lakin halledemedim yardımlarınız için şimdiden teşekkürler

bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

mehmet

4096 milisaniye olarak değerlendirin.
Adc okumasını 10-bit yapın.
Her 4 değer 1ms yapar.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

ete

Yanlızca pot ile 0-4sn aralığını ayarlamayı düşünmemek lazım. Birde bunun rampaya uyarlamasınada dikkat etmek gerekir.
İşe önce pot ayarına bakarak başlayalım.
ADC den 1023 okuduğunuz zaman pot maksimum ayarda olacak ve sizde ADC kaşılığını 4000 ms. (4sn) olarak okumanız gerekir.
4000/1023=3,911 bu sizin sabit çarpanınız olacak ve şayet float ile işlem yapacaksanız ,
SURE=ADC_OKUNAN * 3,911
Şayet INT değişken ile işlem yaparsanız, sabit çarpanınız 3911 olacaktır. Bu durumda hesap;
SURE=(ADC_OKUNAN x 3911)/1000

İşin rampa kısmında ise gecikme süresi hesaplanması gerekiyor.
GECIKME=SURE/MAX_DUTY yani hesaplanan rampa süresini verilecek MAX_DUTY değerine bölmek gerekiyor.

Birde örnek hesap yapalım; MAX_DUTY değerimiz 1000 olsun. Pot ile ayarladığımız rampa süremiz 3000 ms olsun. Rampa gecikmesi;
GECIKME=3000/1000=3 ms olarak hesaplanacaktır.

Ete

fatih88

Erol abi yazdığınız fonksiyonu yapıyorum benim sorunum duty değerinin büyük gelip sürenin kısa gelmesi yazdığınız algoritmayı yapmıştım lakin şöyle bir durum var örnek olarak duty 1000 sure 100 geldiği zaman  100/1000= 0,1ms(100uS)yapıyor benim problemim bura da başlıyor :) ben büyük duty ve küçük süre poblemi yaşıyorum
sanırsam valfi bu kadar uzun sürede açtırmazlar ama muadil datashettlerde 4sn yazmışlar
alttaki kod blogunda pottan gelen bilgiyi istediğim sayıya değere dönüştürebiliyorum hocam
uint32_t map(uint32_t x, uint32_t in_min, uint32_t  in_max, uint32_t  out_min, uint32_t  out_max) 
{
	return (((x - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min);
}
sure=map(pot,0,1023,0,4000);
pottan ne gelirse 0-4000 arasında bilgi alabiliyorum
eğer duty değeri süreden küçük olursa gelen pwm bilgisini for döngüsüne sokar hesaplanan süre kadar beklerim her gelen veriyi pwm icin gerekli olan registere yazarım ve toplam pwm değeri ve heaplanam süreye kadar alabileceği maksimum değere çıkar sorun sürenin duty den küçük olması :-\

bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Aslında her şey senin elinde. Süre değerin küçük çıkar ise hemen mikro saniye sistemine dönmen gerekir. Yada en baştan hesabını us cinsinden yaparsan bu dediğin sorunları yaşamazsın.
Burada asıl problem rampa süre değerinin 0 dan başlıyor olması. Halbuki min değer olmalı idi. Rampa olacak ise sıfır rampa olmamalı. Mesela rampa değeri 0,5ms ile 4000 ms aralığında olmalı gibi. Her neyse çözüm us cinsi,nden hesaplamada gözüküyor.

Ete


fatih88

Hocam sistemi us cinsinde yazıyorum lakin anlayamadığım bir durum var matemetiksel veriler çarpma bölme doğru gelmiyor anlayamadım

Erol abi eğer normalde bu valf kartlarında 0.5ms ile 4000ms olması gerekiyorsa öyle yapayım
İyi geceler
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Powered by EzPortal