stm32 de belirli gerilim degerleri ölçülebilir mi?

Başlatan cebeci52, 22 Ağustos 2014, 00:41:03

cebeci52

stm32f4 ile sadece 0-1 v , 1-3 v, 3-5 v arasında 3 seçimden birini yapıp mesela sadece 1 ile 3 v arasındaki  gerilim degerini adc(PA1) den ölçebilirmiyim yazılımda yapacagım bir algoritmayla. yapılabilirse nasıl?

0-5 v ölçüp lcd de gösteren program şu şekilde.

sbit LCD_RS at GPIOE_ODR.B8;
sbit LCD_EN at GPIOE_ODR.B10;
sbit LCD_D4 at GPIOE_ODR.B4;
sbit LCD_D5 at GPIOE_ODR.B5;
sbit LCD_D6 at GPIOE_ODR.B6;
sbit LCD_D7 at GPIOE_ODR.B7;

int sayi=0,mV=0;
char txt[64],volt[64],kk;
char gelen,i=0;

int ADC_Olcum(char kanal)
{
unsigned long temp=0;
char k=0;
for (k=0;k<128;k++)
{
  temp+=ADC1_Get_Sample(kanal);
}
return temp>>7;
}

void LCD_Yaz(int okunan_deger)
{
mV=okunan_deger*0.7130;
if(mV>=10000)
  volt[0]=(mV/10000)+48;
  else volt[0]=' ';
  volt[1]=(mV%10000)/1000+48;
  volt[2]='.';
  volt[3]=(mV%1000)/100+48;
  volt[4]=(mV%1000)%100/10+48;
  volt[5]=(mV%1000)%100%10+48;

  Lcd_Out(2,1,volt);
  Lcd_Out(2,8,"V");

  }
  void usb_yaz()
  {
    char i=0;
    for(i=0;i<8;i++)
    txt=volt;
    UART3_Write_Text(txt);
  }
  void usb_kesme()
  {
    kk=UART3_Read();
    if(kk=='v')
    usb_yaz();
  }
 
   void main()
   {
   GPIO_Digital_Output(&GPIOE_BASE,_GPIO_PINMASK_9);
   GPIOE_ODR.B9=0;
   
   UART3_Init_Advanced(9600,_UART_8_BIT_DATA, _UART_NOPARITY,_UART_ONE_STOPBIT, & _GPIO_MODULE_USART3_PD89);
   
   Lcd_init();
   ADC1_init();
   ADC_Set_Input_Channel(_ADC_CHANNEL_1);
   Lcd_Cmd(_LCD_CURSOR_OFF);
   Lcd_Out(1,1,"Voltmetre");
   while(1)
   {
  // delay_ms(1000);
   sayi=ADC_Olcum(1);
   LCD_Yaz(sayi);
   usb_kesme();

   
   }




Kabil ATICI

adc bildiğim kadar besleme gerilimine kadar ölçebilir. Daha yüksek gerilimi ölçmek için gerilim bölücü direnç veya opamp kullanmak gerekir.

üst sınır için Vref+ konusunu inceleyebilirsiniz. Alt sınır konusunda da Vref- konusunu inceleyebilirsiniz. Bu bazı işlemcilerde sanırım yok. Gerçi 12 bit gibi bir çözünürlüğü var.
ambar7

cebeci52

şu an 0 ile 5v arası ölçebiliyorum. amacım sadece 1 ile 3 v arası degerleri  yada 3 ile 5v arası degerleri istedigiğimde nasıl ölçebilirim. yani seçim olmasını istiyorum.

Kabil ATICI

lm385 gibi referans üreteclerini ister analog anahtar (kayıpları göz önüne alman gerekir) ister reed röle ile (işlemcin ile kontrol ederek) işlemcinin Vref ucunu bağlayarak ölçüm aralığını düzenleyebilirsin.
ambar7

cebeci52

konuya yeni başlamış biri olarak dediklerinden bişey anlamadım. Vref ucu hangisi , nasıl baglanır ayrıntılı basit anlatacak yok mu. 

Kabil ATICI

Elektronikten anlamıyorum desene şunun adına

   
bunların işlemci bacakları ile kontrol edilen anahtar olduğunu düşün.
                 \ (B1)
0Vo--------  \--------+ 
                 \    (B2)   |
1Vo--------  \--------+  (Vref+ 1V altında verilmiyor- veri kağıtlarına bak.)
                 \    (B3)   |
2Vo--------  \--------+
                 \    (B4)   |
3Vo--------  \--------+-------o Vref x   (bazı işlemcilerde Vref+ var bazılannda ek olarak Vref- var)
                 \   (B5)    |
4Vo--------  \--------+
                 \   (B6)    |
5Vo--------  \--------+
referans gerilimleri

İşi basitleştirelim yukarıdaki bacaklara röle bağladığımızı varsayalım. (Nasıl bağlandığına internetten bak) Burada gördüğünde o rölelerin kontakları. Kontaklara rölenin bağlı olduğu bacağın ismi verdik kolaylık olsun diye)

Şimdi Vref+ için 1V ile 5V aralığında Hangin gerilimi seçmek istersek örneğin 2V gerilimi o zaman B3 bacağındaki röleyi çektiririz ve kontak kapanır Vref ucuna 2V gelir. 3V için diğer tüm röleleri bıraktırıp sadece B4 bacağındaki  röleyi çektiriyoruz ve B4 kontağı kapatılıyor ve Vref ucunda 3V olmuş oluyor. Tabi işlemcinin adc registerlerinde ic Vref yerine harici Vref seçilmiş olması gerekiyor.

Aynı olay Vref- içinde uygulanıyor. O zaman kontrol bacakları  örneğin B7,B8,B9,B10,B11 olabilir.

Bu arada bu sadece ARM işlemciye özgü bir durum değildir, Vref bacağı bulunan tüm adc'ler için uygulanır. Hatta işlemciler için.
ambar7

cebeci52

üstat anlamadım yine de sagol. amacım herhangi bi eleman röle felan baglamadan yazılımla yapılabilir mi bu iş

ayhan_eee

Amacın sadece 1-3 arası değerleri LCD 'de mi göstermek?Oysa eğer sadece, yine 0-5 ölç.Elde ettiğin değer istediğinaralıkta ise ekrana bas dersin.

Kabil ATICI

çözünürlüğü düşürmeyi göze alırsa olur.

Yoksa iç referans gerilimi bildiğim kadarı ile ayarlanamıyor. Dış refens gerlimi PWM gibi bir olayla ayarlanabilir tabii birde bunu anlatmak var.Referans gerilimi önemlidir. Dalgalanma olursa ölzüm sonucunu etkiler. ondan sonra sonuçlar dansöz gibi kıvırır durur.
ambar7

cebeci52

amacım zaten 0-5 v arası degerleri ölçmek ama istedim degeri ekranda göstersin örnegin 3v-5v arası yada 1v-2v arası ama nasıl