Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

input capture

Başlatan muhittin_kaplan, 16 Eylül 2013, 18:26:23

Klein

TIMx->CNT = 0;

Not: Yukarıdaki mesajımı tekrar gözden geçir.

muhittin_kaplan

Alıntı yapılan: Klein - 04 Ekim 2013, 19:12:13
Genel zamanlama için Tick Timer kullanmıyor musun? Muhtemelen kullanıyorsun.
Tick kesmesi içinde bir pini toggle yap. Bu pini de Input Capture için kullanacağın zamanlayıcının CLK girişine bağla. Hem ekstra timer harcamazsın, hem de oldukça düşük frekanslara inersin.
gitti bir pin daha. hocam stm ile ultrasonik sensörle Uzaklık Ölçeceğim. Garip Ama deniz derya aşıp, Derede Boğuluyorum.
(Aynştandan bu yana Zaman Mekan Kavramını yitirdim zaten.)

Okudum Hocam, ekleme Mesajları aynı andamı yazmışız

Klein

İlk mesajına tekrar baktım.  Prescaler değerine ne verdiğini göremedim.
Senin 200Hz yakalamada bir sorunun olmaması gerek.
Muhtemelen prescaler değerin çok düşük.

Örn:
Yükselen kenarda CNT sıfırlandı ve saymaya başladı.   24MHZ için bölücün 24 olsun.  budurumda geçen her mikrosaniyede CNT değerin 1 artacak.  Düşen kenarda Pulse değerini aldın. Tekrar yükselen kenarda da period değerini aldın.  Frekansın 200Hz = 5mS olduğu için ,  elinde periyot değeri olarak 5000 sayısı olması gerekir.

muhittin_kaplan

#63
Bu Konu Neden Bu Kadar uzadı Anlamışda değilim de, yani input pwm ile yapabilmem gerek diye düşünüyordum.

mesaj birleştirme:: 04 Ekim 2013, 20:14:33

bu ST nin input capture örneği. Çalışıyor ama ölçemiyorum.

/* TIM3 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM3 CH2 pin (PA.01),
     The Rising edge is used as active edge,
     The TIM3 CCR2 is used to compute the frequency value
     The TIM3 CCR1 is used to compute the duty cycle value
  ------------------------------------------------------------ */

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;

  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);

  /* Select the TIM3 Input Trigger: TI2FP2 */
  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);

  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);

  /* TIM enable counter */
  TIM_Cmd(TIM3, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);

  while (1);
}

muhittin_kaplan

#64
aha anambabam usulu hc-sr4
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

int main(void)
{
	SystemInit();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_Init(GPIOC, &GPIO_InitStructure);


	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_Init(GPIOC, &GPIO_InitStructure);

	int i,z;
	float Measure;
	  while (1){
//Sorgulama sinyali için 100us lik bir duty gerekiyor.
		  GPIO_SetBits(GPIOC,GPIO_Pin_8);
		  for (i = 0; i < 0x000000F0; ++i) {

		}
		  GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		  
//Sorgulama Sinyali sonrası yaklaşık 461us bekleniyor. burada sensör echo çıkışı 1 oluyor
                for (i = 0; i < 0x00000468; ++i) {

		}
//sensör çıkışı 0 olana kadar i arttırılıyor
		  i=0;
		  z=1;
		  while(z){
			  i++;
			z=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7);
		  }
		  Measure=(i*24)/58; //24000000hz de uzaklık hesaplanıyor.

 //tekrar sorgulama ile araya boşluk koyuluyor. ana program için gereksiz olabilir başka işler yapılır.
		  GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		  		  for (i = 0; i < 0x00000FFF; ++i) {

		  		}

	  }
}

Klein

ST'nin örneğinde  TımeBase ayarları yok. Muhtemelen örneğin başka bir yerindedir. Önce TimeBse ayarlarını yap.

SpeedyX

Merhaba,
stm32f103 de PC9, PB1, PB10 ve PB11 e bağlı butonlardan birine basıldığında bir fonksiyonu çağırmak istiyorum.
EXT_INT ile optimize bir şekilde yapılabilir mi?

Diğer bir sorum da;
Pin e girilen PWM in period ve duty sini bulmak için ne önerirsiniz? Örneğin RC alıcı çıkışındaki PWM sinyalini ölçmek gibi.

Klein

Biraz önce Pulse-Period ölçümüörneği yayınladım.
Bu konunun esas meselesi 200Hz olduğu için bu frekansta denedim. sorun yok.