Center Align PWM 설정 코드 질문
제일 마지막 문장 두개 질문있습니다.
While(! (TIM1->CR1 & 0x0010) ); // TIM1 underflow event?
TIM1 -> RCR = 0x0001; // 50us period update (RCR = 1)
코드 주석을 보면 TIM1이 Downcount 상태가 된 후 50us(Half PWM Period 두번) 후에 업데이트 이벤트를 발생시킨다고 되어있는데
이러면 전류 센싱을 CNT가 ARR에 도달할때 하게 되는게 아닌가요?
아니면 CNT = ARR-1 상태에서 50us 지난 후 다음 UEV에서 전류센싱이 발생한다고 해석해야할까요?
답변 1
0
안녕하세요, 제어쟁이입니다.
먼저 while(!(TIM1->CR1 & 0x0010)); 부분은 엄밀히 말하면 underflow event flag를 보는 코드는 아닙니다.0x0010은 TIM1_CR1의 DIR bit라서, TIM1 카운터가 down-counting 상태가 되었는지를 확인하는 코드입니다.
이 코드에서는 TIM1을 먼저 center-aligned PWM으로 동작시킨 뒤, 카운터가 down-counting 상태가 된 것을 확인하고 나서 TIM1->RCR = 1을 설정합니다.
이렇게 카운터 동작이 시작된 후 RCR을 설정하면 update event가 ARR 쪽이 아니라 CNT=0, 즉 underflow 쪽에 맞춰 발생하도록 의도한 것입니다.
따라서 전류 센싱은 CNT가 ARR에 도달하는 시점에서 수행된다고 보면 안 됩니다.
이 코드의 의도는 ARR 도달 시점이 아니라 CNT가 0으로 내려온 underflow update event에서 TIM1 update interrupt가 발생하고, 그 interrupt 안에서 전류 ADC를 읽는 구조입니다.
RCR=1은 center-aligned PWM에서 overflow/underflow update 후보 중 한 번을 건너뛰어서 update interrupt 주기를 50 us로 만드는 설정입니다.
정리하면 다음과 같습니다.
while문: underflow event를 직접 기다리는 것이 아니라 down-count 상태 진입을 확인RCR=1: update interrupt를 50 us마다 한 번으로 제한
RCR 설정 위치: 카운터 시작 후 설정해서 update event를 underflow 쪽으로 정렬
전류 센싱 시점: CNT=ARR이 아니라 CNT=0 underflow update event 시점

주파수 응답 특성 그래프 튜닝 방식
0
28
2
USART 통신 문의
0
30
2
전동 킥보드에 사용되는 f767 고출력 모델 문의
0
32
3
모터 선정 질문
0
43
2
블루투스 핀 배열 질문
0
44
1
PCB 배선 연결 실수로 인한 증상 검토 요청 건.
0
55
2
ABC 상전류 측정
0
44
1
전동킥보드 펌웨어 코드 분석
0
55
3
전류센싱 pwm adc 동기화 관련 질문
0
45
1
BLDC / PMSM 문의
0
55
2
쓰로틀 측정 값
0
52
1
전류 측정
0
48
1
모터 와이어링
0
46
2
키트(고출력)과 BLDC 모터가 도착했습니다.
0
62
2
소형 BLDC 모터 관련
0
54
2
PCB 구매 관련
0
50
2
PCB 레이아웃 질문
0
43
2
수업관련
0
52
2
벅 컨버터 스위치 off 상태일 때 흐름
0
54
2
PCB 발주
0
57
1
32. MOSFET의 특성과 동작 영역 강의 내용 중 P=I^2R질문
0
38
2
LDO 선정 이유
0
45
1
벅컨버터 사용 및 그라운드 분리
0
78
2
EEPROM I2C 풀업저항
0
63
2





