uC 및 전류 션트로 평균 전류 측정


12

이것은 나의 첫 번째 게시물입니다. 나는 하드웨어를하려고하는 소프트웨어 녀석이므로 부드럽게하십시오 :)

회로

나는 마이크로 컨트롤러에서 저항 부하 (이 경우 가열 패드)를 전환하도록 설계된 MOSFET 및 게이트 드라이버의 무리라는 단순한 회로 (그림 참조, 지저분한 회로도는 미안합니다)를 설계하고 있습니다. 발열체는 종종 저항이 매우 낮으며 원하는 수준으로 전력을 유지하기 위해 MOSFET을 PWM을 사용하여 전환합니다.

측정

순전히 기능적인 측면 외에도 교육에 중점을 둡니다. 현재 소비에 대한 피드백을 받고 싶습니다. 그리고 나의 순진한 접근 방식은 단순히 현재 션트 센서 IC를 던지는 것입니다. 멀티 미터를 사용하여 센서의 출력 전압을 측정 할 때 실제로 전류계의 "느림"으로 인해 평균 전류 (PWM 전환 사용)와 비슷한 것을 얻습니다. 그러나 동일한 출력을 예를 들어 atmega328p ADC에 연결할 때 약간의 판독 값이 나옵니다. 여기서 속도는 PWM 구형파의 어느 곳에 나 판독 값을 배치합니다.

그래서 내 질문은 PWM으로 스위칭 할 때 (평균) 전류를 측정하는 방법은 무엇입니까?

디자인은 괜찮은 것 같지만 디자인과 uC ADC 가이 맥락에서 어떻게 사용되어야하는지에 대해 놓쳤을 수도 있습니다.

개략도


필자는 필터를 사용하여 PWM의 평균 전압을 제공 할 수 있다고 생각합니다. 이러한 필터를 설명하고 값이 PWM 주파수에 기초하여 사용할 흥미로운 기사는 이것 .
alexan_e

이 질문 에는 몇 가지 관련 답변 있습니다. 그러나 션트와 IC를 사용하여 전류를 측정하는 것에 대해서만 언급합니다. 그러나 PWM에 대한 언급은 없습니다.
Ricardo

의견 주셔서 감사합니다. @alexan_e : TI는 INA197 데이터 시트에 입력 필터를 표시하고 있지만 그 사용을 확신하지 못했습니다. 전압이 안정적이지 않을 때 갈 수 있습니다.
ltj

나는 그것이 당신의 문제에 대한 해결책이라고 생각하지만, 이것에 대한 더 많은 경험을 가진 사람이 자세한 답변을 제공하기를 원합니다.
alexan_e

출력은 가변 듀티 큐클 PWM이므로 피크 검출기 회로를 사용하고이를 ADC로 측정 할 수 있습니다.
Martin

답변:


6

때로는 단순 해 보이는 것이 그렇게 단순하지 않습니다. 측정이 매우 복잡하지만 간단한 결과를 원합니다. 측정하려는 것은 일정하지 않으며 시간에 따라 다릅니다. 요구 사항 수준에 따라 현재 소비의 하나 이상의 속성을 계산할 수 있습니다. 이러한 속성은 시스템을보다 잘 모니터링하는 데 도움이됩니다. 복잡성을 증가시키는 3 가지 솔루션을 제안합니다.

해결 방법 1 : 평균

단일 값 결과를 얻으려면-> 평균 시간을 얻으십시오. @akellyirl에서 이미 제안했듯이 저역 통과 필터를 사용하십시오. 평활 계수가있는 float y = alpha*input + (1-alpha)*y각 샘플에 대해 계산 합니다 alpha. 자세한 내용은 Wikipedia 를 참조 하십시오.

해결 방법 2 : 최대 + 평균

평균과 최대 값을 얻는 데 흥미가 있습니다. 예를 들어 최대 값을 모니터링하는 것은 구성 요소 치수 측정에 유용 할 수 있습니다.

if (y > max)
  max = y;

솔루션 3 : 표준 편차 + 최대 + 평균

왜?

아래 차트를 참조하십시오. 다른 모양의 3 가지 신호가 있습니다. 삼각형 하는 사인스파이크 신호. 그것들은 모두 같은주기, 동일한 진폭 , 동일한 평균 및 동일한 최소최대로 주기적 이다. 그러나 그들은 모양이 다르며 실제로 완전히 다른 이야기를 가지고 있습니다 ...

신호와 히스토그램

차이점 중 하나는 표준 편차입니다. 그렇기 때문에 측정을 확장하고 표준 편차를 포함하는 것이 좋습니다. 문제는 그것을 계산하는 표준 방법이 CPU를 소비한다는 것입니다. 바라건대 하나의 해결책이 있습니다.

어떻게?

히스토그램 방법을 사용하십시오 . 모든 측정의 히스토그램을 작성하고 데이터 집합의 통계 (최소, 최대, 평균, 표준 편차)를 효율적으로 추출하십시오. 히스토그램은 동일한 값 또는 동일한 값 범위를 가진 값을 그룹화합니다. 이점은 모든 샘플을 저장하지 않고 (시간이 증가 함) 제한된 수의 데이터를 빠르게 계산할 수 있다는 것입니다.

측정을 시작하기 전에 히스토그램을 저장할 배열을 만듭니다. 예를 들어 크기가 32 인 1 차원 정수 배열입니다 .

int histo[32];

전류계의 범위에 따라 아래 기능을 조정하십시오. 예를 들어, 범위가 256mA이면 히스토그램의 빈 0이 0 ~ 8mA 사이의 값으로 증가하고 빈 1이 8 ~ 16mA 사이의 값으로 증가한다는 것을 의미합니다. 따라서 나타내는 정수가 필요합니다. 히스토그램 빈 번호 :

short int index;

샘플을 얻을 때마다 해당 빈 인덱스를 찾으십시오.

index = (short int) floor(yi);

이 bin을 늘리십시오.

histo[index] += 1;

평균을 계산하려면 다음 루프를 실행하십시오.

float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
  mean = i * histo[i]; // sum along the histogram
  N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.

표준 편차를 계산하려면 다음 루프를 실행하십시오.

float std_dev = 0;

for (i=0; i < 32 ; i++) {
  std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.

히스토그램 방법의 전략은 수집 된 모든 신호 샘플 대신 몇 개의 빈에서 느린 작업을 수행하는 것입니다. 샘플 크기가 길수록 좋습니다. 자세한 내용을 보려면이 흥미로운 페이지 히스토그램, Pmf 및 Pdf를 읽으십시오 .


매우 철저하고 명확한 설명. 실용적인 수준에서 ADC 샘플링이 어떻게 "좋은 방법으로"분배되는지, 어떻게 든 PWM 신호에 고정되지 않도록하려면 어떻게해야합니까? PWM과 ADC 샘플링 모두에 Arduino (hw + sw)를 사용한다는 점을 인정해야합니다. 내장 타이머를 직접 설정해야 할 수도 있습니다. 샘플링 주파수가 PWM 주파수보다 상당히 높아야한다고 생각합니까?
ltj

1
샘플링을 시작하자마자 상황이 매우 복잡해집니다. 가장 먼저 할 일은 나이키 스트 샤논 정리입니다. 직관적 인 것은 샘플링 주파수가 높을수록 더 많은 정보가 있다는 것입니다. 그러나 기본적이기는하지만, 직관적이지 않은 것은 주파수 Fs에서 샘플링하기 전에 Fs / 2의 신호를 아날로그 / 전자 영역에서 절대 저역 통과 필터 해야한다는 것 입니다. 그렇지 않으면 앨리어싱의 영향을받습니다. 가장 높은 샘플링 주파수를 선택하는 것이 좋습니다. 가능하면 PWM 주파수의 ~ 10 배와 같은 것.
RawBean

이것은 나이키 스트 샤논 (Nyquist-Shannon) 정리에 대한 일반적인 오해로, 실제로 두 배의 대역폭으로 샘플링해야한다고 말합니다. 앨리어싱이 도움이 될 수 있습니다. 의도하지 않은 것은 아니지만 이것은 텍북의 답변처럼 보입니다. 고주파 디테일이 관련이 없을 때이 시나리오에서 ~ 10 배 PWM 샘플링을 제안하는 것은 과잉입니다.
akellyirl

1

문제를 올바르게 이해합니다. 측정에 사용하는 미터와 마찬가지로 PWM의 "평균"을 가져와야합니다.

시간 상수가 PWM주기의 10 배 이상인 A1,2,3 신호에 RC 필터를 사용할 수 있습니다. 즉, PWM주기가 10 마이크로 초인 경우 RC 시간 상수는 100 마이크로 초 여야합니다. 예를 들어 10kOhms x 10nF = 100us

더 나은 솔루션은 다음과 같이 마이크로 컨트롤러에서 신호를 디지털로 필터링하는 것입니다.

float y = (1-0.99)*input + 0.99*y; 

이 디지털 필터의 시정 수를 변경하려면 "0.99"값을 변경하십시오.


1
코드에서 앨리어싱을 수행 할 경우주의하십시오.
Andy 일명

앨리어싱이 반드시 문제가되는 것은 아닙니다. 신호를 재구성하려면 샘플링 속도가 최고 주파수의 두 배 이상이어야한다는 것을 모두 알고 있습니다. 그러나 신호가 대역 제한되면 두 배의 대역폭으로 만 샘플링하면됩니다 . 이것을 언더 샘플 릭이라고합니다. 가열 패드를 구동하기 때문에 신호의 주파수가 아마도 낮기 때문에 100에서 1000 SPS 범위의 적절한 샘플 속도가 양호해야합니다. 참조 : ni.com/newsletter/50078/en
akellyirl

언더 샘플링을 사용하는 경우 PWM 속도와 샘플 속도가 서로 프라임인지 확인하는 것이 좋습니다.
akellyirl

정확히 내 생각-ADC를 통해 측정하고 동일한 MCU에서 PWM을 생성하면 두 가지가 제 시간에 고정되는 경향이 있습니다.
Andy 일명

신호는 주파수가 낮고 주파수가 낮습니다. frq가 낮은 경우 부동 소수점 연산을 사용하는 것보다 한주기 및 평균에 걸쳐 단순히 샘플링하는 데 자원 집약도가 낮을 ​​수 있습니다.
Scott Seidman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.