Adc okunan değer ile doğrusal orantili pwm frekans artirimi

Başlatan sifirzero, 17 Mayıs 2020, 17:37:23

sifirzero

Adc okunan değer ile doğrusal orantili pwm frekans artirimi nasil yapabiliriz. Kendin denedim tam tersi bir sonuç aliyorum. Lm35 sicaklik artikca frekans azaliyor. Bu değeri dogrusal yönde hareket ettirmek icin ne yapabiliriz. Yardimci olurmusunuz.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

OG

Alıntı yapılan: sifirzero - 17 Mayıs 2020, 17:37:23Adc okunan değer ile doğrusal orantili pwm frekans artirimi nasil yapabiliriz. Kendin denedim tam tersi bir sonuç aliyorum. Lm35 sicaklik artikca frekans azaliyor. Bu değeri dogrusal yönde hareket ettirmek icin ne yapabiliriz. Yardimci olurmusunuz.
Ne denedin arkadaşım, neyi denedin, ne yazdın, nasıl yaptın...
denedim olmadı... yardım
bir programcının yardım isterken edeceği laf mı bu.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

PWM sinyalinde genellikle değişken olan Duty değeridir. Frekans değişimi ancak özel durumlarda istenecek bir şeydir. Eminmisin Frekans değişikliği olacağından.
Üsteli ortada ne şema var nede detay vermişsin. Bu nasıl bir PWM sinyalidir. Nerden çıkıyordur.
Sen nasıl hesap yaptında olmuyor. Bunları bildirmen gerekiyorki doğru cevabı alasın.
KOnu başlığı CCSC olduğuna göre bir işlemcin var ve muhtemelen oradan çıkan PWM sinyalini kast ediyorsun. Adcden okunan değeri (0-1023) direk formülünde kullanırsan nasıl kullandığına bağlı olarak sıcaklık duty azalabilir ama tersini yapak istiyorsan okunan değeri 1023 den çıkartıp o şekilde kullanırsan tersi olacaktır.
Örnek verelim.
Duty hesabında direk ADC değerini kullandığın zaman ;
(100/1023)=0,098 gibi bir çarpan bulursun.
Diyelimki okunan değer 300  , 300 *0,098 =29,4 o halde duty değerin 29,4 olacak demektir.
Şimdi aynı hesabı okunan değer 800 iken yapalım.
800 *0,098 = 78,4 yani duty değeri 78,4 olacak demektir.

Sıcaklık arttıkça duty değeri de artıyor gördüğün gibi.
Şimdi yöntemi değiştirelim.
Okunan değer 300 iken hesabı şöyle yapalım; (1023-300)*0,098= 70,8 gibi bir değer elde edildi.
ADC değeri 800 iken aynı hesabı yapalım  (1023-800)*0,098=21,8
görüleceği üzer sıcaklık arttıkça ADC okuma değeri artacak ve buna karşılık gelen duty hesap değeride küçülecektir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

sadogan

Analdığım kadarı ile periyot sayıcı tmr2 başlatma değerini değiştiriyor, bu değeri değiştirince
pwm çözünürlüğü buna bağlı olarakta  frekansı değişiyor.

sifirzero

Ete hocam detayli anlatmis. @sadogan hocamda konuya hakimiyetlik vermiş. Çok tesekkurler guzel yorumlar icin.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

Yapmak istediğim proje. Cep telefonun jak ile termometre yapma. Sicaklik artikca uygulamadaki okudugum değer azaliyor. Her sicaklikta frekansi sabit kalmasi gerekli diye dusunuyorum. 
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

#include <12f683.h>     
#fuses NOWDT,INTRC_IO,NOMCLR,BROWNOUT
#device ADC=10

#use delay (clock=4000000) 

unsigned long int bilgi,okunan;
float isi;

 
void main ( )
{
   set_tris_a(0x01);
   setup_adc(adc_clock_INTERNAL);
   setup_adc_ports(sAN0); 
   setup_ccp1(CCP_PWM);  
   setup_timer_2(T2_DIV_BY_16,bilgi,1); 
   set_pwm1_duty(25);
   while(true) 
   {
   
   set_adc_channel(0);
   okunan=read_adc();
   bilgi = 1023 / okunan;
   //isi=read_adc();
   //bilgi= isi * 0.0048875855327468 * 100;
   delay_us(30);
   setup_timer_2(T2_DIV_BY_16,bilgi,1); // Timer2 ayarları yapılıyor
   set_pwm1_duty(25);
}
}
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sadogan

Bahsetiginiz işlemi yapmak için pwm peryodu deyil pwm duty i değiştirmelisiniz.
#include <12f683.h>     
#fuses NOWDT,INTRC_IO,NOMCLR,BROWNOUT
#device ADC=10

#use delay (clock=4000000) 

unsigned long int bilgi,okunan;
float isi;

 
void main ( )
{
   set_tris_a(0x01);
   setup_adc(adc_clock_INTERNAL);
   setup_adc_ports(sAN0); 
   setup_ccp1(CCP_PWM);  
   setup_timer_2(T2_DIV_BY_1,255,1);  
   set_pwm1_duty(0);
   while(true) 
   {
   
   set_adc_channel(0);
   delay_us(30);
   okunan=read_adc();
   bilgi = okunan;
   delay_ms(10);
   set_pwm1_duty(bilgi);
}
}

sifirzero

@sadogan  pwm periyodu ile duty beraber artirabilirmiyiz. Kodunu denedim artima işlemini frekans olarak yapmiyor. Voltaj olarak yapiyor. İlgilendiğin çok teşekkür ederim.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir