CCS C dilinde, sarkacın periyodunu nasıl hesaplayabilirim?

Başlatan Ahmet+58, 16 Aralık 2018, 00:39:40

Ahmet+58

ccs dilinde sarkacın periyotunu hesaplama nasıl yapabilirim ?

ziyaretci

#1
Bence soru bir paradoks.

Benzer sorular:
-Yürürken nasıl koşarım?
-Ateş varsa su neden var?
-Kondansatör şarj oluyorsa paralel direncin değerini nasıl hesaplarım?
-ETS 2 oynamak için E sınıfı sürücü belgesini nasıl alırım?
-Ben insansam ilk insan ne kadar insandır?
.
.
.


Evet, CCS C bir programlama dilidir.

Sistem hakkında bilgi vermeniz gerekiyor. Tam olarak hangi noktadasınız? Yani sarkacın hareketini ne ile ölçtünüz? Verileri ölçtünüz de matematiksel olarak mı CCS C komutlarında yardım istiyorsunuz?


İlk aklıma gelen; öncelikle sarkaç topunun metal olduğunu varsayarsak sarkaç topunun uçtan uca alabileceği en uzun mesafesini ölçün(taban iz düşümü).

Sonra oraya bir RL hazırlayın, RL girişine bir osilasyon sinyali(AC) uygulayın R direnci üzerendeki genliği ADC ile ölçün, gerisi maksimum ya da minimum genlikler arasındaki süreyi hesaplaya kalıyor. Bu biraz detaylı bir analiz olur.

Bir diğer aklıma gelen ise sarkaç topuna bir mesafe sensörü bağlamanız. Daha sonra iki maksimum mesafe arasındaki süreyi ölçün.

Ve yahut sarkaç ipini bir loadcell'e bağlayın. Buradan ister dijital ister analog ile yine okuma yapabilirsiniz. Dijital yine aynı ADC.

Analog ile; loadcell köprüsündeki değişimi op-amp ile ilk olarak fark alıcı, sonra çıkışına türev alıcı bir op-amp koyun. Sarkacın maksimum noktalarında değişim 0(sıfır) olacağından son olarak çıkışa tekrar karşılaştırıcı op-amp kullanarak ilgili ADC'si olmayan herhangi bir denetleyici ile iki kare sinyal arasındaki süreyi hesaplayabilirsiniz. Bu da dijital ama okumak için kullandığımız analog devre işlem yükünü kendisi üstleniyor. Diğer türlü denetleyici koşacak bütün bu işlemleri ve zaman kaybı oranı artacak.

Daha bir çok yöntem bulunabilir.

Yani bunlar tamam diyorsunuz, tek CCS C de hesaplaması kaldı.

O zaman örnek bir kod vereyim;

#int_timer0
Void kesme()
{
  Set_timer0(5);
  if(basladi==1)
    Sayac++;
  Else
    {
      //sayacını oku.
      sayac=0;
    }

}

Void main()
{
  SETUP_TIMER_0(RTCC_INTERNAL | RTCC_DIV_4); //1ms ayarı 4MHz için.
  set_timer0(5);
  enable_interrupts(global);

  While(1)
  {
    if (sarkac_pin)
    {
      if(basladi!=1)
      {
        Basladi=1;
        enable_interrupts(int_timer0);
      }
      Else
      {
        Basladi=0;
      disable_interrupts(int_timer0);
      }
    }
  }
}


Telefondan bu kadar, dahada güzelleştirilebilir ve geliştirilebilir.

Epsilon

Sarkaç formülü var
T=1/2pi×karekök (L/g)
L=sarkaç boyu
g= yerçekimi ivmesi (10mt/saniye kare alınabilir)