PWM제어는 펄스폭을 제어하여, 모터의 RPM이나 LED의 밝기를 제어하는데에 의의가 있습니다.
따라서, 제어를 하기 위해서는 펄스폭을 유동적으로 변하게 하는것이 필요합니다.
이번 포스팅에서는 CUBEMX의 초기 설정 이후, truestudio 코드 내에서 듀티비와 주파수를 변화시키는 방법을 살펴보겠습니다.
기본 설정은 이전의 포스팅과 동일한 상태입니다.
https://blog.naver.com/dongjungim20/221801142700
우선 듀티사이클을 결정하는 pulse의 값을 변화시키기 위해서는 CCR레지스터에 접근하여 그 값을 쓸 수 (Write)있습니다.
다음은 예제 코드 입니다.
/* USER CODE BEGIN 1 */
uint8_t duty=0;
uint8_t flag =0;
/* USER CODE END 1 */
=========================
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(flag == 0){//rising
while(1){
TIM2->CCR1=duty;
duty++;
HAL_Delay(10);
if(duty==255){
flag = 1;
break;
}
}
}
if(flag == 1){//rising
while(1){
//TIM2->CCR1=duty;
duty--;
HAL_Delay(10);
if(duty==0){
flag = 0;
break;
}
}
}
}
=========================================
펄스폭을 조절하여, LED의 밝기가 밝아졌다 어두워졌다 하는 동작을 구현할 수 있습니다.
유사하게, 주파수를 변화시키고자 할때는 ARR레지스터의 값을 변경해주면 됩니다.
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
uint16_t freq=60;
TIM2->ARR=1000000/freq;
}
다음코드를 작성하면, freq에 해당하는 주파수가 출력되게 됩니다.
'Programming > Embedded' 카테고리의 다른 글
[STM32F103] CDC통신을 통한 정수형데이터 전송 TIP (0) | 2022.02.19 |
---|---|
[stm32f103f8][공유] STM32F사용중 ST-Link V2 타겟보드 인식 불가현상 해결법 (0) | 2022.02.19 |
[STM32F103C8] Basic PWM (0) | 2022.02.19 |
[STM32F103C8] Timer /Counter Interrupter (0) | 2022.02.19 |
[STM32F103C8] USB Serial 통신(CDC 통신) (0) | 2022.02.19 |