İ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.
2 Gündür araştırıyorum ama bir sonuca ulaşamadım hala.
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 .
Hocam hemen deneyim yazıyorum.
@halil82ist Hocam bence böyle bir fonksiyon yok derleyici hata veriyor.
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 .