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.
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ımbir programcının yardım isterken edeceği laf mı bu.
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
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.
Ete hocam detayli anlatmis.
@sadogan hocamda konuya hakimiyetlik vermiş. Çok tesekkurler guzel yorumlar icin.
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.
#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);
}
}
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);
}
}
@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.