2017년 8월 20일 일요일

[3] 하위 레벨 설계 - 톱니파 구현

[2] 하위 레벨 설계
1. 톱니파 만들기
(1)PWM으로 아날로그 전압 만들기
pwm.png


아날로그 출력이 없는 보드에서 DAC를 하는 가장 간단한 방법은 PWM을 이용하는 것이다. 간단한 RC회로를 연결하고 PWM의 듀티비을 조절하면 원하는 아날로그 값을 만들 수 있다. 하지만 라즈베리 파이 보드의 default clock frequency가 19.2MHz이기 때문에 가장 빠른 톱니파를 만들어 낸다고 해도 1초에 1프레임의 이미지도 만들어 낼 수 없기 때문에 이것은 사용하기 적합하지 않다.


영상 갱신 횟수: 19.2MHz / 512 / 512 / 512 = 0.143Hz
<참고 - -PWM to analog converter http://dlnware.com/theory/Digital-analog-converter-DAC>


(2) DAC 칩 사용하기
6.png
<출처-Paul Scherz and simon Monk 저 PRACTICAL ELECTRONICS FOR INVENTORS (p.821)>


DAC를 하려면 위 그림의 오른쪽에서 보는 것과 같이 컨트롤러에서 디지털 신호를 주기 위해서 나타내고자 하는 비트 만큼 핀을 써야 하는 문제점이 있었다. 이것을 해결하기 위해서 SIPO 레지스터 (Serial-Input-Pareller-Output shift register)를 이용하면, digital 신호의 병렬 입력을 직렬 입력으로 바꿀 수 있다.
디바이스 끼리의 통신 중에 이러한 방법을 사용하는 것들의 종류가 몇 가지 있다. 이 중에서 동기화 방식을 쓰는 기법이  SPI 통신이다. SPI 통신은 신호를 입력할 때 클럭(CLK)과 데이터 입력 선만 있으면 몇 비트가 되던지 간에 디지털 신호를 DAC에 보낼 수 있게 된다.


찾아보니 SPI 통신 용 DAC IC가 있었다. 출력이 전류인 형태와 전압인 형태가 있었고 디지털 입력  비트 수도 여러가지가 있었다. 찾아보니 10-bit DAC 칩이 있었는 데, 속도를 좀 더 빠르게 하기 위해서 12-bit DAC보다는 10-bit DAC를 쓰는 것이 좋기 때문에 이 칩을 사용하기로 결정했다.


10bit를 쓰려고 보니 실제 해상도는 512*512 px로 하는 것이 맞는 것 같다. 그래서 목표 해상도가 원래 400*400px 이었는 데, 512*512로 바뀌었다.


2. 시료의 관찰 영역을 좌표로 변환
    pin2.png


[그림 1]은 시료 상에 스캔할 범위를 실제 길이로 보여주고 있다. 우리의 목표를 상기하자.
화면 크기: 10cm
배율: 100배
목표 시료의 크기: 1mm
pixel: 512*512
probe size : 1mm/512 = 1.953125um
우리는 시료 상에서 파란색으로 표시된 관찰 영역을 전자빔으로 스캔하여 모니터 화면 상에서 보게 될 것이다. 이 관찰 영역은 범위가 커지거나 축소될 수 있고 상하좌우로 평행이동도 가능하다. 이 영역이 시료 상에서 확대되는 최대 길이, 또는 관찰 영역이 움직일 수 있는 한계 공간을 78mm로 정하였다.
스캔 신호의 톱니파는 원래 컨트롤러에서 나오는 0V~5V 신호에 스캔할 범위에 따라서 톱니파의 Vpp가 조절되는 데, 이것의 최대 전압 범위를 -20V ~ 20V로 설정하였다. 최대 전압 범위가 늘어날 수록 관찰 영역이 움직일 수 있는 한계 공간은 늘어난다.
[그림 2]는 관찰 영역을 좌표로 나타낸 것이다. [그림 1]처럼 길이 단위로 관찰 영역을 표현하는 것은 계산이 복잡하고 직관적이지 않기 때문에, 최소 프로브 사이즈를 1로 하여 2차원 좌표로 나타낼 것이다. X, Y축 모두 좌표 범위가 -20000 ~ 0 ~ 20000이다. 좌표 1칸 당 전압 분해능은 1mV가 되기 때문에 가장 작은 영역을 볼 수 있는 스캔신호의 톱니파 Vpp는 512mV이다.


3. 톱니파를 확대/축소 하는 범위
스캔 시스템의 블록 다이어그램을 상기 시켜보자.
Final_block.png
컨트롤러에서 나오는 톱니파는 [multiple]에서 M(Magnification)값의 비율로 확대 또는 축소되었다.  (Vin - Vp/2) * M
앞서 이야기 했던 좌표에서 가장 작은 관찰 영역의 크기는 512*512이고 가장 큰 관찰 영역의 크기는 40000*40000 이었다. 좌표에서 1칸은 1mv이므로 512*512 크기의 영역을 볼 때 톱니파의 Vpp는 512mV이고 40000*40000 영역을 볼 때는 톱니파 Vpp가 40V이다.  이를 바탕으로 톱니파에 곱해지는 M값의 최소값과 최대값을 구해보자.


가장 작은 관찰 영역을 보는 경우, M = 0.512V/5V = 0.1024
두 배, M = 1.024V/5V = 0.2048
세 배, M = 1.536V/5V = 0.3075
. . .
78배, M = 39.936V/5V = 7.9872

가장 큰 관찰 영역을 보는 경우, M = 40V/5V = 8


10. 톱니파 만드는 데 Arduino Due 고려
SPI 통신으로 DAC 칩을 제어해서 톱니파를 만드는 방법의 다른 대안인  Arduino Due를 이용해서  톱니파를 만들어내는 방법에 대해 생각해보자.

<출처 - Arduino Due Datasheet http://www.atmel.com/images/atmel-11057-32-bit-cortex-m3-microcontroller-sam3x-sam3a_datasheet.pdf> 네모 박스 안에 있는 것은 데이트 시트에 있는 것임.

Due의 master clock(MCK)가 84MHz이기 때문에 위의 Arduino Due의 데이터시트에 의하면 DACC Clock frequency는 42MHz이다. 여기서 이 DACC가 25번 일 때 데이터 하나를 출력 할 수 있다. 따라서 초당 영상 경신 횟수는 약 6회가 나왔다.
1/42 *25 * 400 * 400 = 156038us
1/0.156038Hz = 6.4Hz

그리고 DAC의 Analog 출력값의 최소치가 0V이고 최대치가 5V이어야 하는 데 Due를 사용하면 최소치는 Vadvref * 1/6이고 최대치는 Vadvref * 6/5이기 때문에 안된다. 결국 아두이노 쓰는 것은 최악이기 때문에 라즈베리에서 소프트웨어적으로 DAC와 통신을 해서 톱니파를 생성하기로 결정했다.

댓글 없음:

댓글 쓰기

clear images were obtained