inflearn logo
강의

講義

知識共有

電動キックボードで学ぶ組み込み実践プロジェクト

電動キックボードのファームウェアコード分析(2)

전류 센싱 문의

解決済みの質問

22

dayday

投稿した質問数 29

0

안녕하세요.


제어쟁이님,

1. 아래에서 2048 빼주는 이유는 0A일때 2.5V 이므로, 2048을 빼주는 건가요..??

// 평균 오프셋 계산

Ias_Offset = (Ias_Offset/10) - 2048;

Ibs_Offset = (Ibs_Offset/10) - 2048;

Ics_Offset = (Ics_Offset/10) - 2048;


  1. 업카운트 50us + 다운카운트 50us 이후에 100us 마다 인터럽트가 발생하도록 설계하신게 맞나요..?? (즉, 이벤트2번 = 인터럽트1번)





임베디드 stm32 hardware motordriver artwork

回答 2

0

insid2embedded

안녕하세요.제어쟁이입니다

여기서 2048이 나오는 이유는 전류 측정 회로에서 전류가 0 A일 때의 출력 전압을 1.65 V로 잡아두었기 때문입니다. ADC의 특성과 코드의 보정 과정을 나눠서 보시면 이해하기 쉽습니다.

1. 왜 1.65 V가 2048인가요?

STM32F767의 ADC를 12비트로 사용하면 측정 결과는 0~4095, 총 4096단계로 표현됩니다. 기준 전압이 3.3 V라면 그 절반인 1.65 V는 약 2048에 해당하는 것이죠.

그런데 왜 전류가 0 A일 때 0 V가 아니라 1.65 V가 나오도록 만들었을까요?

ADC는 이 조건에서 0~3.3 V 범위의 전압을 측정하므로, 음의 전압을 그대로 입력해서 측정할 수 없기 때문입니다. 그래서 회로에서 신호에 1.65 V를 더해두고, 그 전압을 기준으로 위아래로 변하는 신호를 측정하는 것입니다.

예를 들어 원래 측정하려던 신호가 +0.2 V라면 ADC에는 1.85 V가, −0.2 V라면 1.45 V가 들어가도록 만드는 것이죠. 이후 소프트웨어에서 1.65 V를 다시 빼주면 원래 신호를 구할 수 있습니다.

2. 그러면 코드에서는 왜 평균값에서 2048을 빼나요?

첨부 코드에서는 초기화할 때 각 상의 ADC 값을 10번 읽어 합산한 뒤, 다음과 같이 계산합니다.

Ias_Offset = (Ias_Offset / 10) - 2048;

여기서 저장하려는 것은 1.65 V 전체가 아니라, 실제 영점 측정값이 기준값인 2048에서 얼마나 벗어났는지입니다.

예를 들어 전류가 흐르지 않는 상태에서 ADC 평균값이 2068로 측정됐다고 해보겠습니다. 그러면 보정값은 다음과 같습니다.

보정값 = 2068 - 2048 = 20

즉, 전류가 0 A인데도 기준보다 20만큼 높게 측정되고 있다는 뜻입니다. 따라서 이후 측정값에서 이 20을 빼주면 영점 기준을 2048에 맞출 수 있습니다.

실제 전류 계산 부분에서도 먼저 result - Ias_Offset으로 이 차이를 보정하고, 전압으로 환산한 다음 OFFSET_Volt를 빼는 순서로 처리하고 있습니다. 여기서 회로에 더해둔 1.65 V를 제거하는 것입니다.

정리하면, 처음의 평균값 - 2048은 영점 오차를 구하는 과정이고, 이후의 1.65 V 빼기는 회로에서 의도적으로 더해둔 전압을 제거하는 과정입니다. 같은 오프셋을 두 번 빼는 것이 아니라, 두 가지를 나눠서 처리한다고 이해하시면 됩니다.

0

communityai8509

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

네, 2048은 12비트 ADC에서 0A일 때의 오프셋을 제거하기 위한 값입니다.

12비트 ADC의 전체 범위는 0~4095이고, 중간값은 다음과 같습니다.

4095 / 2 ≈ 2048

전류가 0A일 때 전류 센서 출력이 ADC 기준 전압의 중간값인 약 1.65V가 되도록 설계되어 있다면, ADC 원시값은 대략 2048이 됩니다. 따라서 평균 오프셋을 계산한 뒤 2048을 빼면 0A 기준점을 0으로 맞출 수 있습니다.

Ias_Offset = (Ias_Offset / 10) - 2048;

예를 들어 평균 ADC 값이 2050이라면 오프셋은 다음과 같습니다.

2050 - 2048 = 2

이후 전류 계산에서 이 오프셋을 보정하면 센서의 영점 오차를 줄일 수 있습니다.

다만 질문하신 것처럼 실제 0A 출력이 2.5V라면 2048이 아니라 2.5V에 해당하는 ADC 값에서 빼야 합니다.

2.5V / 3.3V × 4095 ≈ 3102

즉, 실제 회로에서 0A일 때 ADC 값이 약 3102라면 다음과 같이 보정해야 합니다.

Ias_Offset = (Ias_Offset / 10) - 3102;

따라서 먼저 멀티미터로 0A 상태의 센서 출력 전압을 확인하고, 동시에 ADC 원시값을 출력해 보는 것이 정확합니다. 이 강의의 전류 측정 회로는 0A 기준점을 약 1.65V, 즉 ADC 값 약 2048에 맞춘 구성으로 설명되어 있으므로, 실제 보드의 회로 구성이나 전원·저항값이 다르다면 오프셋 값도 달라질 수 있습니다.

관련 내용은 아래 기존 질문과 답변을 참고해 주세요.

  • 전류 계산에 대한 질문입니다.
    ADC 원시값에서 오프셋을 제거하는 과정과 전류 센싱 회로의 기준 전압에 대해 설명되어 있습니다.
  • ABC 상전류 측정
    션트 저항을 이용한 상전류 측정 및 ADC 입력의 역할에 대해 확인할 수 있습니다.

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

Teleplot 문의

0

16

1

MCU 선정 관련 문의

0

18

1

키트 구매 여부

0

40

3

소형모터 구동

0

33

2

stm 클럭설정

0

42

1

36. 전력은 900W가 될것 같습니다.

0

34

1

34.제너다이오드는 전류 분배기라고 생각하면 될까요 ?

0

32

0

33.제너다이오드와 tvs다이오드 모양이 동일합니다.

0

33

0

쓰로틀 V 변하지 않음

0

49

3

풀업 저항 크기와 커패시터 용량 선정 방법

0

47

2

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

0

45

1

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

0

45

1

dc모터 회전원리

0

48

2

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

0

46

1

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

0

68

2

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

0

67

2

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

0

51

1

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

0

56

2

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

0

66

3

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

0

52

1

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

0

51

1

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

0

36

1

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

0

47

1

73. 왜 hex를 사용하나요 ?

0

53

2