전류 센싱 문의
안녕하세요.
제어쟁이님,
1. 아래에서 2048 빼주는 이유는 0A일때 2.5V 이므로, 2048을 빼주는 건가요..??
// 평균 오프셋 계산
Ias_Offset = (Ias_Offset/10) - 2048;
Ibs_Offset = (Ibs_Offset/10) - 2048;
Ics_Offset = (Ics_Offset/10) - 2048;
업카운트 50us + 다운카운트 50us 이후에 100us 마다 인터럽트가 발생하도록 설계하신게 맞나요..?? (즉, 이벤트2번 = 인터럽트1번)
回答 2
0
안녕하세요.제어쟁이입니다
여기서 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
안녕하세요, 인프런 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

