Arduino Uno를 사용하여 펄스 계산

Arduino Uno를 사용하여 파형 발생기에서 펄스를 계산하려고합니다. 파형 발생기는 다음 설정으로 설정됩니다.

  • 파형 유형 : 펄스
  • 주파수 : 20Hz (50ms)
  • 진폭 : 3.0Vpp
  • 오프셋 : 0V
  • 너비 = 5ms

지금까지는 직렬 모니터에 0 만 표시됩니다.

여기 지금까지 시도한 것입니다.

1) pulseIn () 및 pulseInLong () 사용-> 성공하지 않음

2) 배선 연결 확인-> 멀티 미터를 사용하여 확인하고 올바르게 연결되어 있습니다.

3) 파형이 생성되고 있는지 확인하기 위해 오실로스코프를 연결합니다.-> 아래 그림과 같이 파형이 생성되고 있습니다.

참고 : 파형 발생기는 오실로스코프의 일부입니다.

파형 발생기

연결 다이어그램

내 코드는 다음과 같습니다.

volatile int IRQcount; int pin = 2; int pin_irq = 0; //IRQ that matches to pin 2 int result = 0; void setup() { // put your setup code here, to run once: Serial.begin (115200); pinMode(2, INPUT); attachInterrupt(pin_irq, IRQcounter, FALLING); } void IRQcounter() { IRQcount++; } void loop() { // put your main code here, to run repeatedly: cli();//disable interrupts IRQcount = 0; sei();//enable interrupts delay(500); cli();//disable interrupts result = IRQcount; sei();//enable interrupts Serial.print(F("Counted = ")); Serial.println(result); } 

댓글

  • 기본 설정 여부는 ' 알 수 없습니다. 입력 부 pinMode(pin, mode)를 사용해야합니까?
  • " 낮음 " 파형의 일부가 0V 또는 -1.5V입니까?
  • ' 스코프 사진에서 신호의 낮은 레벨은 -1.5V입니다. , 높은 수준은 1.5V입니다. 1.5 볼트는 아두 이노에서 로직 하이로 인식하기에는 전압이 너무 낮을 수 있습니다.
  • 아두 이노 입력에 친절하려면 신호 발생기를 5Vpp로 설정하고 오프셋을 +로 변경해야합니다. 2.5V이므로 신호는 0 ~ + 5V 사이에서 전환됩니다 (Arduino Vcc가 5V라고 가정). 마이크로 컨트롤러의 디지털 입력은 음으로 구동되지 않아야합니다.
  • 알겠습니다. 지연을 다음으로 변경했습니다. 250ms 그래서 결과 = 5를 보았지만 이제는 다시 500ms로 변경했고 이제 결과 = 10을 봅니다. 펄스 카운트가 올바른지 확인하는 방법을 설명해 주시겠습니까?

답변

  1. Peter Bennett와 다른 사람들이 지적했듯이 처음에는 3Vpp를 설정했거나 + 1.5V에서 -1.5v로 교번하는 펄스를 설정했습니다. . Arduino 컨트롤러의 전기적 특성 에 따라 1.5V는 “1”로 읽히는 것을 보장하지 않습니다. Vcc의 0.6 이상이어야합니다. 따라서 irq 핀은 에지 전환을 인식 할 수 없으며 대신 항상 “0”을 읽습니다. 또한 손상을 방지하기 위해 I / O 핀에 -ve 전압을 구동해서는 안됩니다. !!
  2. 펄스 주파수는 20Hz 또는 초당 20 펄스입니다. 500ms 지연으로 0.5 초당 발생하는 펄스 수를 계산하므로 result 값은 10이어야합니다. 이것이 직렬 모니터에 표시되는 것입니다.

답변

From “스코프 사진, 신호의 로우 레벨은 -1.5 볼트이고 하이 레벨은 1.5 볼트입니다. 1.5 볼트는 아두 이노가 로직 하이로 인식하기에는 너무 낮은 전압 일 것입니다.

또한 Arduino 디지털 입력은 음의 전압에 의해 손상 될 수 있습니다. 대부분의 디지털 IC의 입력은 접지와 양의 공급 전압 사이의 입력입니다.

Arduino가 + 5V에서 작동하는 경우 신호 발생기를 5Vpp로 설정하고 + 2.5V 오프셋으로 신호를 Arduino 내에 유지해야합니다. ” s 입력 전압 제한.

논리 High로 인식 되려면 입력 전압이 0.7Vcc 또는 3.5V 이상이어야합니다. 낮은 전압은 High로 인식되지 않을 수 있으므로 인터럽트를 트리거하지 않습니다.

코멘트

  • 5Vpp로 설정했지만 + 2.5V 오프셋으로 인해 카운트 수에 변동이 생기고 오프셋이 없으면 일관된 펄스 수 판독이 예상됩니까? 나는 그렇게 생각할 것이다
  • Arduino에서 입력 레벨을 확인하십시오. 로우 레벨은 접지에 (또는 매우 가깝게), 하이 레벨은 아두 이노 '의 포지티브 공급에 가까워 야합니다. 이것은 제가 가정하는 5V라고 가정합니다.

답변

루프를 통해 매번 IRQcount를 재설정합니다.

댓글

  • ' 괜찮다고 생각합니다. 카운터를 제로화하고 인터럽트를 활성화하고 지연 한 다음 지연이 끝날 때 인터럽트 수를 인쇄합니다.
  • 그 '는 문제가되지 않습니다.
  • li>
  • delay ()의 단위는 무엇입니까? 저는 ' Audrino를 프로그래밍하지 않지만 틱 또는 ns입니까?
  • @ mjh2007 밀리 초이므로 ' 충분히 길다.
  • Arduino delay()는 ms 단위입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다