Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => MikroC ARM => Konuyu başlatan: LukeSkywalker - 04 Mayıs 2014, 11:24:07

Başlık: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: LukeSkywalker - 04 Mayıs 2014, 11:24:07
STM32f407 mikrodenetleyicisinin referans manueli incelenirse, sıcaklık sensöründen okunan değerin hesaplanabilmesi için bir formül verildiği görülür. Bu formülde katsayı değerleri yerine konulduğunda aşağıdaki hali alır;

Voltage = (VolADC * 3300) / 4095;
temp = ((Voltage - 760) / 2.5) + 25;


Yukarıdaki bilgiler ışığında kodlarımızı yazalım.
int okunan,Voltage,temp,ort;
long toplam;
char cnt;

char readbuff[64];
char writebuff[64];
char binler,yuzler,onlar,birler ;

void main() {
HID_Enable(&readbuff,&writebuff);
ADC1_Init();
ADC_CCR.TSVREFE=1;
while(1)
{
for(cnt=0;cnt<100;cnt++)
{
okunan=ADC1_Read(16);
toplam+=okunan;
delay_ms(5);
}
ort=toplam/100;
toplam=0;
Voltage = ((long)ort * 3300) / 4095;
temp = ((Voltage - 760) / 2.5) + 25;

onlar=((temp/10)%10)+48;
birler=(temp%10)+48;

writebuff[0]=onlar;
writebuff[1]=birler;
writebuff[2]='°';
writebuff[3]='C';
writebuff[4]='\r';
writebuff[5]='\n';
HID_Write(&writebuff,64);
}

}
void kesme() iv IVT_INT_OTG_FS ics ICS_AUTO {
USB_Interrupt_Proc();
}


Sıcaklık, celcius cinsinden tamsayı şeklinde gösterilmiştir.

MikroC'nin Tools sekmesi altındaki Hid Terminal programcığı ile işlemcinin sıcaklığına ait değerler izlenebilir.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: X-Fi - 04 Mayıs 2014, 11:50:52
Sabit katsayılar ile yapılan hesaplamada sıcaklığın farklı çiplerde 10 dereceye kadar saptığını gördüm.

Hafızadaki fabrika kalibrasyon değerleri ile hesaplatırsanız +- 1 derece hassasiyet ile doğru sıcaklık ölçümünü sağlarsınız.

iyi çalışmalar.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: LukeSkywalker - 04 Mayıs 2014, 14:48:36
Fabrika kalibrasyon değerleri ile alakalı bilgi göremedim reference manualde. 
Zaten bu sensörün mutlak sıcaklık ölçümü için kullanılamayacağını, sadece sıcaklık değişimlerini ölçmek için kullanılabileceğini söylemiş.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: X-Fi - 04 Mayıs 2014, 16:45:36
(http://i.hizliresim.com/nPELOV.png)

Bu konuyu öylece geçiştirmeden önce bir düşünün, öğrenmek için 0< derece şeklinde bir sıcaklık yazdırırsınız iş biter, işe yaramaz sadece çalışır. Ama bu yeterlimi bence değil araştırınca görülüyor ki piyasada 2$ ın altında bulacağınız bütün sensörler için kalibrasyon yapmanız gerekecek. Böyle olunca basit diye düşündüğünüz sensör bazen tasarımı ve maliyeti etkileyebiliyor.

iyi çalışmalar.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: LukeSkywalker - 04 Mayıs 2014, 17:19:45
Kalibrasyonun öneminin farkında olmakla beraber
Alıntı YapBu konuyu öylece geçiştirmeden önce bir düşünün, öğrenmek için 0< derece şeklinde bir sıcaklık yazdırırsınız iş biter, işe yaramaz sadece çalışır.
cümlenizde ne ifade etmeye çalıştığınızı anlamadım. Bendeki dökümanda kalibrasyon bilgileri yok. İsterseniz zahmet edip bakabilirsiniz. Sanırım döküman revize edilmiş.
http://www.mediafire.com/view/9zbydfyzn46yu46/hard.pdf (http://www.mediafire.com/view/9zbydfyzn46yu46/hard.pdf)
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: X-Fi - 04 Mayıs 2014, 17:55:51
Orada söylemek istediğim sıcaklığın negatif değerlere de inebileceğiydi sanırım bunuda önemsiz buldunuz.

Evet katalogda revizyon a gidilmiş.

iyi çalışmalar.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: LukeSkywalker - 04 Mayıs 2014, 18:06:16
Bu kodu paylaşma amacım, işlemci içerisindeki sensörün varligindan haberdar olmayanlari haberdar etmek, nasil okunabilecegini de basit bir kodla gostermekti. İklimlendirme sistemi tasarlama amaci gütseydik negatif işareti de gostermenin zor olmayacagi da zaten kodu okuyan kisiler tarafindan gorulebilir.
İlginiz icin tesekkurler. En azindan dokumanin revize edildigini gormus oldum.
Kalibrasyon ve negatif kismini da siz eklerseniz daha ogretici bir paylasim yapmis oluruz.
İyi calismalar.
Başlık: Ynt: STM32F407VG Dahili Sıcaklık Sensörü.
Gönderen: yey - 01 Şubat 2019, 09:49:43
aynı uygulamayı usb HID ve uart terminalinde yaptım usb HID de 42  gelen sıcaklık değeri uart terminalinde 21 geliyor. stm32f407 deki bu iki birim hakkında bilmem gereken bir detaymı var acaba, ya da önemsizmi bu uygulama, sadece haberleşme yaptırabildiğimize bakıp geçmekmi gerek?


char ddd;
#define ledk gpiod_odr.b14
#define ledy gpiod_odr.b12

int okunan,Voltage,temp,ort;
long toplam;
char cnt;
char binler,yuzler,onlar,birler ;

void main() {
gpio_digital_output(&gpiod_odr,_gpio_pinmask_14);
gpio_digital_output(&gpiod_odr,_gpio_pinmask_12);

  UART4_Init_Advanced(115200,_UART_8_BIT_DATA,_UART_NOPARITY,_UART_ONE_STOPBIT,&_GPIO_MODULE_UART4_PC10_11);
  delay_ms(100);
  UART4_Write_Text("start");
 

ADC1_Init();
ADC_CCR.TSVREFE=1;
while(1)
  {
  for(cnt=0;cnt<100;cnt++)
  {
    okunan=ADC1_Read(16);
    toplam+=okunan;
  delay_ms(5);
  }
  ort=toplam/100;
  toplam=0;
  Voltage = ((long)ort * 3300) / 4095;
  temp = ((Voltage - 760) / 2.5) + 25;

  onlar=((temp/10)%10)+48;
  birler=(temp%10)+48;
  if (temp>25)
      {ledk=1;
      ledy=0;}
  else
      {ledk=0;
      ledy=1;}
  UART4_Write(onlar);
  UART4_Write(birler);
  UART4_Write_Text("°C""\r""\n");
  delay_ms(1000);
}
}