Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: ladybird - 04 Mart 2018, 13:10:27

Başlık: Stm32f103 Pwm sorunu!
Gönderen: ladybird - 04 Mart 2018, 13:10:27
İyi pazarlar Pic proje ailesi

NUCLEO-F103RB geliştirme kartı ile pwm üzerinde çalışma yapıyorum,şöyle bir sorunla karşılaştım.
Kod bu şekil de iken (Pwm high olduğunda içi dolu oluyor, low kısımda sorun yok. Pwm değerlerini  while içine yazınca.)

/* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_TIM1_Init();
  MX_ADC1_Init();

  /* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1,adc_oku,4);
HAL_ADC_Start_IT(&hadc1);
int x=2500;

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
   
HAL_ADC_Start_IT(&hadc1);

TIM1->CCR1=x;
TIM1->CCR2=x;
TIM1->CCR3=x; 
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
 
HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Stop(&htim1,TIM_CHANNEL_2);

HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);
   



   
  }
  /* USER CODE END 3 */

}



(https://s18.postimg.cc/va040fag5/20180304_124520.jpg) (https://postimg.cc/image/va040fag5/)

Kod bu şekil de iken (While dışında yazınca çalışıyor.)

/* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_TIM1_Init();
  MX_ADC1_Init();

  /* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1,adc_oku,4);
HAL_ADC_Start_IT(&hadc1);
int x=2500;
TIM1->CCR1=x;
TIM1->CCR2=x;
TIM1->CCR3=x; 
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
 
HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Stop(&htim1,TIM_CHANNEL_2);

HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
   
HAL_ADC_Start_IT(&hadc1);


   



   
  }
  /* USER CODE END 3 */

}



(https://s18.postimg.cc/wqbmisy05/20180304_124804.jpg) (https://postimg.cc/image/wqbmisy05/)

Pwm değerleri while içinde güncelleştirmek  istiyorum ama bir türlü düzgün çıkış elde edemedim.
Başlık: Ynt: Stm32f103 Pwm sorunu!
Gönderen: ladybird - 06 Mart 2018, 19:22:42
2 Gündür araştırıyorum ama bir sonuca ulaşamadım hala.
Başlık: Ynt: Stm32f103 Pwm sorunu!
Gönderen: halil82ist - 06 Mart 2018, 19:33:47
duty değerini değiştireceksen

_HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm);

pwm duty değeri . 
kodu çalışıyor .frekans değerini değiştirmeyi hiç denemedim .
Başlık: Ynt: Stm32f103 Pwm sorunu!
Gönderen: ladybird - 06 Mart 2018, 19:49:34
Hocam hemen deneyim yazıyorum.
Başlık: Ynt: Stm32f103 Pwm sorunu!
Gönderen: ladybird - 06 Mart 2018, 20:01:30
@halil82ist Hocam bence böyle bir fonksiyon yok derleyici hata veriyor.
Başlık: Ynt: Stm32f103 Pwm sorunu!
Gönderen: halil82ist - 06 Mart 2018, 20:04:40
Cube mx ile oluşturulan fonksiyonlardan biri ben eklemedim .

pwm yazan senin oluşturacağın bir değer ona dikkat ettin mi ?

uint16_t pwm =100; gibi

@ladybird

  while (1)
  {
  /* USER CODE END WHILE */
for (pwm=5;pwm<=500;pwm++) 
  {
__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm);
HAL_Delay(10);
  }
HAL_Delay(400);  //hold for 400ms
for (pwm=500;pwm>=5;pwm--)  //brightest to darkest: 100-0% duty cycle
  {
__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm); //update pwm value
HAL_Delay(10);
  }
HAL_Delay(400);   //hold for 400ms
  /* USER CODE BEGIN 3 */

  }


duty artıp azalıyor .