inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Dự án thực hành nhúng học qua xe scooter điện

Phân tích mã firmware của xe scooter điện (2)

상전류 읽는 타이밍 관련 문의

Đã giải quyết

44

dayday

26 câu hỏi đã được viết

0

PI 전류 제어를 적용해보려고 합니다.

전류 흐름이 'U TOP -> V BOTTOM' 일때,

1. 어떤 상의 션트저항에 흐르는 전류를 읽나요?
2. 해당 상의 전류를 읽을때 BOTTOM 스위치가 ON 되는 타이밍에 읽어야 하나요?


임베디드 stm32 hardware motordriver artwork

Câu trả lời 2

0

insid2embedded

안녕하세요.

말씀하신 구조처럼 각 상의 Low-side에 션트저항이 있는 경우라면, 현재 통전되는 Bottom 스위치 쪽의 션트 전류를 읽는 방식으로 접근하시면 됩니다.

예를 들어 6-step에서 전류 경로가 U TOP → 모터 권선 → V BOTTOM인 구간이라면 V상의 션트저항을 통해 전류가 빠져나가므로 V상 전류를 측정하시면 됩니다.

센터얼라인 PWM으로 구현한 상태에서 아래 스위치가 On일때 ADC 센싱을 하여 전류의 중간 지점에서 읽으셔야 합니다.

6-step 제어에서도 PI 전류제어 자체는 가능합니다. 현재 통전되고 있는 전류를 측정해서

전류 지령값 - 측정 전류 → PI 제어기 → PWM Duty

형태로 구성하면 됩니다. Hall 상태나 현재 Step에 따라서 U/V/W 중 어떤 상의 전류를 읽을지를 변경해주면 됩니다. 실제 BLDC 6-step 제어에서도 이런 방식의 전류제어 또는 전류제한 구조가 사용됩니다.

다만 직접 구현해보시면 생각보다 까다로운 부분이 있습니다. 6-step은 60°마다 통전하는 상이 바뀌는데, 권선에 인덕턴스가 있기 때문에 기존 상의 전류가 순간적으로 0이 되고 다음 상으로 바로 넘어가는 것이 아닙니다. 예를 들어 U→V에서 U→W로 정류되는 순간에는 V상 전류가 감소하면서 W상 전류가 증가하는 과도구간이 발생합니다. 이때 측정할 션트도 바뀌기 때문에 PI 제어기의 피드백 값이 순간적으로 흔들릴 수 있습니다.

그래서 사실 정밀하게 모터 전류를 제어하는 경우에는 일반적으로 FOC를 사용합니다. FOC에서는 3상 전류를 회전자 기준의 d-q축 전류로 변환해서 Id, Iq를 각각 PI 제어하기 때문에, 6-step에서 각 Step마다 상전류를 바꿔가며 제어하는 것보다 연속적이고 정밀하게 전류와 토크를 제어하기가 좋습니다.

그래도 공부 목적으로 6-step에서 직접 전류 PI 제어를 구현해보는 것은 굉장히 좋은 실습이라고 생각합니다. 먼저 각 Step에서 션트 전류가 정상적으로 측정되는지 확인하고, 그다음 작은 전류 지령부터 PI 제어를 붙여보시는 것을 추천드립니다.

실습할 때는 전원공급기의 전류제한을 낮게 설정해서 시작하시고, 소프트웨어에서도 최대 전류 제한과 과전류 발생 시 PWM을 바로 차단하는 보호 로직을 꼭 넣어두세요. 처음부터 큰 전류를 흘리기보다는 낮은 Duty와 작은 전류 지령부터 하나씩 확인하면서 진행하시면 좋을 것 같습니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. dayday님.

질문하신 내용처럼 Center Align PWM에서는 특정 카운트 시점에 ADC를 읽어 평균 전류를 측정하도록 타이머 이벤트를 설정합니다. 다만 코드상으로는 특정 CNT 값을 직접 비교하는 것이 아니라, TIM1의 Update Interrupt가 발생할 때마다 ADC를 읽는 구조로 보일 수 있습니다.

실제로는 타이머의 Center Align 동작과 RCR 설정에 의해 Update Event가 특정 시점, 즉 CNT = 0인 underflow 지점에 맞춰 발생하도록 구성되어 있습니다. 따라서 인터럽트가 발생할 때 ADC를 읽는다는 것은 임의의 시점마다 읽는 것이 아니라, PWM 주기 내에서 정해진 전류 샘플링 타이밍에 맞춰 읽는다는 의미입니다.

정리하면 다음과 같은 흐름입니다.

Center Align PWM 동작
→ CNT가 down-count 상태로 진행
→ RCR 설정에 따라 Update Event 발생
→ TIM1 Update Interrupt 실행
→ 인터럽트 내부에서 ADC 전류값 읽기

따라서 CNT 값을 코드에서 직접 확인하지 않더라도, 타이머 설정이 특정 카운트 시점에 Update Interrupt를 발생시키도록 되어 있기 때문에 결과적으로 일정한 타이밍에서 전류를 읽게 됩니다.

관련된 기존 답변을 참고해 주세요.

Center Align PWM 설정 코드 질문

위 답변에서는 TIM1->RCR = 1 설정을 통해 Update Interrupt를 조정하고, 전류 센싱이 CNT = ARR 시점이 아니라 CNT = 0인 underflow Update Event 시점에서 이루어진다고 설명하고 있습니다.

추가로 PWM과 ADC 샘플링 타이밍의 동기화 원리에 대해서는 아래 답변도 참고하실 수 있습니다.

전류센싱 pwm adc 동기화 관련 질문

Center Align PWM에서는 전류 파형의 중앙값을 읽기 위해 PWM과 ADC의 샘플링 타이밍을 맞추는 것이 중요합니다. ADC를 단순히 아무 시점에서 읽으면 스위칭 노이즈나 전류 리플의 영향을 받을 수 있으므로, 타이머 이벤트를 이용해 일정한 위치에서 샘플링하도록 구성합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

86, data bit순서가 바뀌어야 할것 같습니다.

0

22

1

85. pwm사용에 기본구조 이해가 같이 요구되네요

0

28

1

dc모터 회전원리

0

31

2

83. volatile로 선언한 이유가 이해 안됩니다.

0

26

1

82. 16:50초 설명에 대한 오해 및 adc mode비교 자료

0

42

2

81. 소프트웨어 작성 방법론에 조언 부탁 드립니다.

0

37

2

00. stm32cubeIDE를 회사에서도 사용하나요 ?

0

31

1

uart, tera term 실습이 잘 안됩니다.

0

49

3

80. 인터럽스와 일반함수 차이

0

35

1

79. int main(void)선언 없이 어떻게 동작하나요 ?

0

35

1

79. int main(void)선언 없이 어떻게 동작하나요 ?

0

23

1

74. 포인터 크기는얼마인가요 ?

0

34

1

73. 왜 hex를 사용하나요 ?

0

41

2

71. 40초쯤에 소리가 안납니다.

0

27

1

70. 강의에 사용되는 보드는 어떤것인가요 ?

0

49

2

00. 인버터 회로만 보고 소비전력을 예측 가능하나요 ?

0

47

1

58강, 유니폴라, 바이폴라 방식중 바이폴라가 대세라고 보면 되나요 ?

0

47

2

57강. 모터인데 왜 전압제어를 하나요 ?

0

47

2

57강. PWM은 sine을 만들어 내는 걸로 이해 하면 되나요 ?

0

44

2

49강. 제어이론의 구체적 다이어그램 설명 요청드립니다.

0

39

2

55강. dead time을 고려하면, 원래의 original신호와는 달라지지 않나요 ?

0

34

2

스위칭 주파수 설정

0

47

2

P6KE47CA 이 부품에 대해서 궁금합니다.

0

53

2

교육용 보드 쓰로틀 질문입니다.

0

76

3