Wednesday, June 6, 2018

Oscilloscope를 Galvano laser처럼!

오실로스코프를 공부하다 우연히 본 oscilloscope drawing show!

신기했다. 갈바노 레이저 쇼를 보는것 같았다.

원리는 간단한데 오실로스코프의 2채널 입력을 X-Y 모드로 전환하여 보는 것이다. 물론, 각 채널의 입력 전압을 적절히 조절하여,  한 채널은 X축에서 움직이게, 나머지 채널은 Y축에서 움직이게 각 채널의 전압을 잘 조절하면 된다.

관련 자료를 찾다가 다음 싸이트를 발견하였다. 아두이노로 구현된 예제여서 바로 적용해 보았다.

http://www.qsl.net/w/w2aew/code/

그러나, 해당 예제는 Uno에서 잘 동작하지 않았는데, 원인은 아두이노  때문이었다. 전압을 제어하기 위해서는 DAC가 필요한데, 아두이노 우노에는 DAC가 달려있지 않다. 그래서 PWM방식으로 analog를 흉내낸다. 그러나 오실로스코프는 입력 전압의 PWM을 그대로 표시한다!

물론, DAC를 따로 가지고있거나 DAC가 달린 아두이노 듀에 이상에서는 프로그램만으로 갈바노가 잘 구현될 것이다. 그러나 PWM방식인 우노는 PWM을 진짜 analog처럼 보이게 해야한다.  이런 상황이 더흥미로운것은 어쩔 수 없나보다.

기본적인 아이디어는 PWM을 ripple이라고 생각하고 capacitor를 사용하여 전압의 떨림을 안정시키는 것이다.

w2aew 블로그의 내용이 바로 그에 대한 것인데 잘 동작하지 않아 약간의 수정을 시도하였다.

1. capacitor 추가 → 선분의 직진성 개선

2. PWM 속도 향상 → 적은 용량의 capacitor에서도 ripple이 더 잘 사라지게 함. cap용량이 크면 ripple은 사라지지만 필요한 신호도 사라진다.

Uno에서 analogWrite는 PWM으로 처리되고 이것은 capacitor를 통해서도 잘 보간되지 않는다. 아마도 기본 PWM을 ripple로 볼 때 매우 간격이 넓기 때문일 것이다. 그래서 더 빠른 속도의 PWM이 필요하다.

Uno의 5,6번 핀은 다른 핀들의 두 배 속도인 960Hz이지만 추가한 cap으로도 보간되기에는 여전히 턱없이 느린 속도로 보인다. 다행이 Uno의 PWM속도를 변경할 수가 있었다.

5,6번 핀(Fast PWM)에 해당하는 타이머의 분주를 1로 바꾸어 최대 클럭으로 동작시키면 62500Hz로 동작하고, 추가된 cap으로 잘 보간된다.

타이머 설정 변경:

TCCR0B = (TCCR0B & 0b11111000) | 0x01;

xy주사선의 이동 시간이 길 수록 전압이 보간될 시간이 충분하므로 x, y축에 더 평행해진다. 그러나 한 화면의 리프레시 속도가 느려지므로 flickering도 함께 심해진다.

PWM 방식이 아닌 real DAC를 사용하는 Arduino DUE같은 경우는 문제가 없다.

PWM 방식만 지원하는 우노라도 외부 DAC를 사용하거나, R-2R Ladder 기법을 사용하여 DAC를 구현하여도 된다.

만일 SoundCard를 사용할 수 있으면 가장 정교한 DAC를 사용할 수 있을 것이다. 문제는 이에 대한 나의 호기심은 여기까지 라는거.

drawing_bb20160826_23321120160826_232936

[동영상]
https://photos.google.com/photo/AF1QipPR8KY7hXMVWNGn_bpCRa0mvadd4EW9Hna63F-7

No comments:

Post a Comment