본문 바로가기

[ST_MICRO]/STM32F0

STM32 CubeMX - PWM HAL Code 테스트

STM32 CubeMX - PWM HAL Code 테스트






STM32F0의 TIMx 클럭은 PCLK가 소스가 된다. 쵀대 48Mhz로 설정 가능













STM32CubeMX 를 이용하여 TIM1, TIM3 설정탭에서 PWM을 설정한다.






파라 미터 설정은 적정한 값으로 설정한다.


10khz 주파수로 PWM 출력을 하려면 어떻게 설정 해야 할까?
10Khz는 100us 이므로 ARR 레지스터에 100us가 되는 값을 설정하면 된다.

먼저 48Mhz를 48로 나누어 1Mhz -> 1us로 되도록 하고 ARR값에 100을 넣으면 100us 가 된다. (주의 사항은 0부터 시작하므로 1을 빼준 값을 설정해야 한다.)







  //프리스케이일
  TIM1->PSC = 48-1;

  //주파수 편경
  freq = 100;// 100us
  TIM1->ARR = freq-1;

  //펄스폭 가변
  TIM1->CCR1 = freq/2-1;





이렇게 설정하고 구동 시켜보면 10khz 주파수로 PWM 출력 되는것을 확인 할 수 있다.





그럼 STM32F0에서 최대 PWM 주파수는 얼마 까지 가능할까?

48Mhz -> 0.20833333ns 이므로 100단계 PWM을 생각 한다면 480Khz 정도 될것 같다.



1Mhz로 PWM출력을 내려고 하면 50단계도  되지 않는 수준이다.

8비트 해상도 256단계 정도로 설정한다면 최대 187.5Khz정도 이다.




STM32 PWM출력 Start

//PWM CH1 Start

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);




STM32 펄스폭 및 주파수 설정

  //펄스폭 가변

  TIM1->CCR1 = 50-1;



  //주파수 변경

  TIM1->ARR = 100-1;





STM32F0 PWM 테스트 코드

int main(void)

{


  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* Configure the system clock */

  SystemClock_Config();


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  MX_TIM1_Init();


  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);


  //펄스폭 가변

  TIM1->CCR1 = 50-1;


  //주파수 변경

  TIM1->ARR = 100-1;


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


  }

  /* USER CODE END 3 */


}





반응형