STM32F103 bluepill TIM4 enkoder mod sorunu.

semih_s

Hobici
Katılım
16 Aralık 2020
Mesajlar
2,014
Merhaba. Daha evvel kolayca çalıştırdığım enkoder modu şu anda çalışmıyor ve nedenini anlayamıyorum. MIG kaynak mak. motoru için yaptığım testte enkoderi input olarak kullanıyordum.


Şimdi bir türlü çalıştıramadım.

Enkoder sinyalini mcu bacaklarından kontol ettim ve aşağıdaki gibi:
1730827702714.jpeg


cube ide kullanıyorum.
tim4 için konfigürasyonum aşağıdaki gibi:
1730828760940.png
1730828723671.png



Kullandığım TIM4 init kodu aşağıdaki gibi, bu kod ide'nin ürettiği kod.

Kod:
/* TIM4 init function */
void MX_TIM4_Init(void)
{

  /* USER CODE BEGIN TIM4_Init 0 */

  /* USER CODE END TIM4_Init 0 */

  TIM_Encoder_InitTypeDef sConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM4_Init 1 */

  /* USER CODE END TIM4_Init 1 */
  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 0;
  htim4.Init.CounterMode = TIM_COUNTERMODE_DOWN;
  htim4.Init.Period = 65535;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
  sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC1Filter = 0;
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC2Filter = 0;
  if (HAL_TIM_Encoder_Init(&htim4, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM4_Init 2 */

  /* USER CODE END TIM4_Init 2 */

}

Aşağıdaki kodu, sorunu tespit etmek için hazırladım. Enkoderi okuduğum döngüde, döngünün çalıştığını görmek için bir de sayaç var:

Kod:
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2C1_Init();
  MX_I2C2_Init();
  MX_TIM1_Init();
  MX_TIM4_Init();
  MX_TIM3_Init();
  MX_ADC1_Init();
  MX_ADC2_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
    HAL_Delay(10);
    lcd_init();
    lcd_backlight(1);
    lcd_enable(1);
    HAL_Delay(100);
    TIM4->CNT=1000;
    TIM1_1MHZ_Init();
    while(ENKODER_BUTON_OKU)    // enkoder tuşuna basılana kadar çalışır.
    {
        if(TIM1->CNT>2499) // 2.5ms periyotta çalışır.
        {
          TIM1->CNT=0;
          lcd_tarama();
          bufferu16_1=TIM4->CNT;
          lcd_print_cur(0,0,"TIM4->CNT=");
          lcd_print_int(bufferu16_1,5);
          lcd_print_cur(1,0,"sayaç:");
          lcd_print_int((bufferu16_0++)/400,6);
        }
    }

Döngü çalışıyor- TIM4->CNT' ye atadığım değeri okuyup yazdırabiliyorum, saniye sayacı çalışıyor ama enkoder modda olmasına rağmen enkoder hareketlerine tepki vermiyor.

1730829236117.jpeg


Neyi gözden kaçırıyorum?
 
i/o'da bir problem olup olmadığını da test ettim:
Kod:
if(TIM1->CNT>2499) // 2.5ms periyotta çalışır.
        {
          TIM1->CNT=0;
          lcd_tarama();
          bufferu16_1=TIM4->CNT;
          lcd_print_cur(0,0,"TIM4->CNT=");
          lcd_print_int(bufferu16_1,5);
          lcd_print_cur(1,0,"sn:");
          lcd_print_int((bufferu16_0++)/400,6);
          lcd_print_cur(1,8,"AB");
          lcd_print_int(((ENC_A_GPIO_Port->IDR)>>7)&1u,1);
          lcd_print_int(((ENC_B_GPIO_Port->IDR)>>6)&1u,1);

        }
    }
 

Ekler

  • enkoder_dert.mp4
    1.4 MB
Etrafını alkolle tinerle yıkamayı dene. Eğer yanlış görmüyorsam her yeri pasta/flux kalıntısı.
Enkoder başa bela bir şey. Çok uğraştırıyor insanı.
 
Etrafını alkolle tinerle yıkamayı dene. Eğer yanlış görmüyorsam her yeri pasta/flux kalıntısı.
Enkoder başa bela bir şey. Çok uğraştırıyor insanı.
Evet, enkoderi söke taka o hale geldi. Sinyali takip ediyorum hem skopla hem de lcd'de input sinyalini doğru okuyor alet. enkoder modu ile ilgili kodlamada sorun var gibi görünüyor.
 

Forum istatistikleri

Konular
7,581
Mesajlar
126,793
Üyeler
3,071
Son üye
vip6618com

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top