현장 센서의 신호는 전력 서지, 낙뢰 또는 기타 EMI(전자기 간섭) 소스로 인한 노이즈와 접지 전위 차이에 의해 영향을 받을 수 있습니다. 이러한 문제 대부분을 피하는 한 가지 방법은 현장으로부터 완전한 절연을 사용하는 것입니다.
입력 센서의 절연에는 현장 장치와 절연 회로 자체에 전원을 공급하기 위한 별도의 전원 공급 장치가 필요합니다.
자세한 내용은 제 블로그에 게시된 글을 참조하세요: https://ardupiclab.blogspot.it/
소스 코드
아두이노 인터페이스 및 프로그램
아두이노는 두 가지 방식으로 주파수를 측정할 수 있습니다:
펄스인(pulseIn()) 함수를 사용한 주기 측정
CPU 타이머/카운터를 사용한 주파수 측정 (특수 라이브러리 필요)
첫 번째 방법은 pulseIn() 함수를 두 번 사용하여 신호의 HIGH 시간과 LOW 시간을 마이크로초 해상도로 측정합니다. 두 측정값의 합이 신호의 주기입니다. 5kHz 신호의 경우 주기는 200μs = HIGH 시간 + LOW 시간 = 125+75μs입니다. 시간 해상도가 상대적으로 낮고 프로그램 명령 시간의 영향을 받아 측정 정확도도 떨어집니다. 이 방법의 장점은 측정 속도가 측정된 주기보다 약간 빠르다는 것입니다. 단점은 정확도가 낮은 것 외에도 전력망 노이즈(50 또는 60Hz)에 가장 민감합니다.
이러한 이유로 주기 측정보다 주파수 측정을 선호합니다. 측정 시간은 더 길지만 더 높은 정밀도와 정확한 샘플링 시간을 얻을 수 있습니다. 또한 전력망 주기의 배수인 측정 주기를 선택하면 탁월한 노이즈 내성을 가집니다.
마틴 나브라트(Martin Nawrath) KHM LAB3의 FreqCounter 라이브러리를 사용합니다:
https://interface.khm.de/wp-content/uploads/2009/01/FreqCounter_1_12.zip
이 라이브러리는 타이머/카운터 1을 사용하여 T1/PD5/디지털 핀 5의 상승 에지에서 펄스를 카운트하고, 타이머/카운터 2를 사용하여 1ms 인터럽트로 게이트 타임을 생성합니다.
전력망의 50 또는 60 사이클 기간 동안 카운트를 중재하기 위해 게이트 타임을 1000ms로 선택했습니다. 이 경우 아두이노 우노보다 5배 더 높은 해상도를 얻습니다.
#include
void setup() {
Serial.begin(9600); // 시리얼 포트 연결
Serial.println("옵토 절연 아날로그 입력");
}
long int frq;
void loop() {
FreqCounter::f_comp = 0; // 보정값 0 설정
FreqCounter::start(1000); // 게이트 타임 1000ms로 카운트 시작
while (FreqCounter::f_ready == 0) // 카운터 준비 대기
;
frq = FreqCounter::f_freq; // 결과 읽기
Serial.println(frq); // 결과 출력
delay(100);
}
회로도
이 회로는 약 20mV~5V의 입력 전압 또는 4~20mA 전류(점퍼 W1 삽입 시)를 받아들입니다. 병렬로 연결된 두 저항 R2와 R3은 약 250Ω 값을 주어 4~20mA 전류 입력에 대해 1V~5V를 만듭니다.
아두이노 우노와 회로를 연결하는 데 단 세 개의 와이어와 하나의 저항만 필요합니다. 옵토커플러 출력은 2.2kΩ 풀업 저항을 통해 아두이노의 +5V에 연결된 디지털 입력 D5에 연결해야 합니다.
10V 입력 범위가 필요하면 15V 전원 공급이 필요하므로 7808 레귤레이터를 7815로 교체해야 합니다. 트랜스포머 T1도 센서에 전원을 공급해야 하므로 적절한 전압과 출력을 가져야 합니다. 트리머 P1은 약 1kHz/V의 변환 계수를 얻도록 조정해야 합니다.