pwm 출력으로 led 밝기 조정

clock : 64MHz
Prescaler : 6400-1
ARR : 100-1
CCR1 : 100-1

PA0(pwm output) : OUTPUT LED
PA4, PB5,8,10 : SW1:4

Timer2: channel 1 (pwm generation ch1)

ccr1(pwm pulse) 초깃값 100-1

확대해야 잘 보임

 

밝기가 조정되는걸 눈으로 체감하려면 주파수를 높여야한다. arr 값을 100-1로 설정하여 arr이 reload되는 시간을 0.01초로 바꾸었다. 그리고 pwm의 pulse값을 스위치로 조정하며 밝기를 변경하였다.

 

 

스위치를 누르면 ccr1의 값이 변경되면서 밝기가 조정된다.

CCR값을 조정하는 방법은 세가지다.
1. oc 설정 구조체 선언 후 구조체.Pulse 에 값 조정
2. HAL_TIM_SET_COMPARE 함수로 값 변경
3. TIMx->CCRx 직접 레지스터 값 변경

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	//TIM_OC_InitTypeDef sConfigOC = {0};

	switch(GPIO_Pin){

		case GPIO_PIN_8 :
			//sConfigOC.Pulse = 10-1;
			TIM2->CCR1 = 100-1;
			//HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 25-1);
			break;
		case GPIO_PIN_4 :
			//sConfigOC.Pulse = 30-1;
			TIM2->CCR1 = 66-1;
			//HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 50-1);
			break;
		case GPIO_PIN_5 :
			//sConfigOC.Pulse = 50-1;
			TIM2->CCR1 = 33-1;
			//__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 75-1);
			break;
		case GPIO_PIN_10 :
			//sConfigOC.Pulse = 100-1;
			TIM2->CCR1 = 0;
			//__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 100-1);
			break;
		default :
			break;
	}

	/*
	  if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
	  {
	    Error_Handler();
	  }
	  */
}
/* USER CODE END 4 */



// 타이머2 PWM 채널1 시작
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

// 스위치 인터럽트
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

 

/* USER CODE BEGIN 2 */

  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

  /* USER CODE END 2 */

 

'ARM' 카테고리의 다른 글

온도센서(LM35) 를 이용한 ADC  (0) 2022.04.26
printf 실수(float) 출력  (0) 2022.04.25
Timer PWM 이용한 LED 출력  (1) 2022.04.24
Timer Output Compare로 LED 출력  (1) 2022.04.24
Timer로 1초간격으로 led 토글  (0) 2022.04.24

+ Recent posts