Haberler:

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

Ana Menü

Stm32f103 Pwm sorunu!

Başlatan ladybird, 04 Mart 2018, 13:10:27

ladybird

İ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 */

}




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 */

}





Pwm değerleri while içinde güncelleştirmek  istiyorum ama bir türlü düzgün çıkış elde edemedim.
"Bana ait sözcükler olsun isterdim. Ama kullandığım bu sözcükler, bilmiyorum kaç bilinçte sürüklendi." Jean Paul Sartre

ladybird

2 Gündür araştırıyorum ama bir sonuca ulaşamadım hala.
"Bana ait sözcükler olsun isterdim. Ama kullandığım bu sözcükler, bilmiyorum kaç bilinçte sürüklendi." Jean Paul Sartre

halil82ist

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 .

ladybird

Hocam hemen deneyim yazıyorum.
"Bana ait sözcükler olsun isterdim. Ama kullandığım bu sözcükler, bilmiyorum kaç bilinçte sürüklendi." Jean Paul Sartre

ladybird

@halil82ist Hocam bence böyle bir fonksiyon yok derleyici hata veriyor.
"Bana ait sözcükler olsun isterdim. Ama kullandığım bu sözcükler, bilmiyorum kaç bilinçte sürüklendi." Jean Paul Sartre

halil82ist

#5
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 .