EP&C News UPDATED. 2017.10.24 화 17:28

상단여백
HOME EM OPINION 칼럼
아담 테일러의 MicroZed: Zynq를 이용한 간편한 IR 비전 구현
정환용 기자 | 승인 2017.09.25 13:48

[EPNC=정환용 기자] 아담 테일러(Adam Taylor)는 공인 엔지니어이자 엔지니어링 및 기술 연구소(Institute of Engineering and Technology)의 연구원일 뿐 아니라 자일링스의 Zynq SoC에 관한 유명 단행본인 마이크로제드 크로니클(MicroZed Chronicles)의 저자다.

그는 레이다부터 보안 크리티컬 제어 시스템에 이르는 다양한 솔루션을 구현했으며, 이 과정에서 이미지 처리와 암호화에 대한 많은 정보를 제공해 왔다. 이 글을 통해 아담 테일러가 직접 알려주는 IR 비전 구현 방법에 대해 알아보자.

Arty Z7 보드를 이용한 열 이미징 시스템 구현
임베디드 비전은 많은 경우 전자기 스펙트럼의 가시 영역에 국한돼 사용되고 있지만, 적외선은 우리를 주변 물체에서 나오는 열방출을 볼 수 있게 해주는 EM 스펙트럼의 또 다른 이미징 분야로 인기를 얻고 있다. 특히 조도나 낮은 경우나 야간, 그리고 화재감지부터 군사나 보안까지 다양한 애플리케이션에서 IR에 대한 관심이 특히 높다.

이 글에서는 디질런트(Digilent)의 Zynq-기반 ‘Arty Z7 dev’ 보드를 통해 플리어(FLIR) Lepton IR’ 카메라를 작동시키는 방법을 살펴보겠다. 디질런트의 Arty Z7을 선택한 이유는 HDMI 출력 포트가 내장돼 Lepton IR 카메라의 이미지를 디스플레이에 직접 출력할 수 있기 때문이며, 이외에도 Arty Z7 보드는 Lepton 카메라로 직접 연결하는 데 사용할 수 있는 Arduino/chipKIT 실드 커넥터(Shield connector)를 제공하기 때문에 많은 노력을 기울이지 않고도 간편하게 구성할 수 있다는 것이 장점이다.

플리어의 Lepton IR 카메라는 80x60픽셀(Lepton 2) 또는 160x120픽셀(Lepton 3) 해상도를 제공하는 장파 적외선(LWIR) 카메라 모듈이다. 이 카메라는 마이크로 볼로미터(Microbolometer) 기반 열 센서로 구성돼 있으며, 이 센서는 HgCdTe 기반 센서와는 달리 극저온 냉각 없이 작동한다. 마이크로 볼로미터는 IR 방사선이 부딪칠 때 각 픽셀이 저항을 변경하는 방식으로 작동하며. 이 저항 변화가 바로 화면에서 온도를 표현한다. 일반적으로 마이크로 볼로미터 기반 열 영상기(Thermal imager)는 HgCdTe 기반 영상기에 비해 해상도는 낮지만 훨씬 쉽고 간단하게 열 이미징 시스템을 만들 수 있다.

Arty Z7 보드로 Lepton 카메라를 작동하려면, Lepton 카메라 모듈을 장착하기 위한 브레이크아웃(Breakout) 모드가 필요하다. 이 아웃 보드는 전원 연결을 단순화하고, 카메라의 제어와 비디오 인터페이스를 시작해 Arty Z7의 실드 커넥터에 직접 연결할 수 있게 해준다.

[그림 1] 디질런트의 Arty Z7 dev 보드 레이아웃.
[그림 2] 디질런트의 Arty Z7 dev 보드는 Lepton IR 카메라를 간단히 장착할 수 있다.

Lepton은 2개의 선으로 이뤄진 인터페이스를 통해 제어되며, 이는 I2C(Inter-Integrated Circuit)와 매우 흡사하다. 이러한 유사성으로 인해 카메라에 명령을 보내기 위해 EMIO를 통해 Zynq I2C 컨트롤러를 이용할 수 있다. 카메라는 SPI를 통한 비디오(VoSPI)를 이용해 14비트 영상 출력을 공급한다. 이 비디오 인터페이스는 SCLK나 CS, MISO 신호를 이용한다. 카메라 모듈은 슬레이브로 가정된다. 하지만, VoSPI 트랜잭션에서 각 픽셀에 대해 16비트의 데이터를 수신해야 하므로, 8비트 데이터로만 작동하는 Zynq SoC의 PS(처리 시스템)에 SPI 주변 기기를 이용할 수 없다.

대신, 표준 SPI와 작동하도록 제대로 구성된, Zynq SoC의 PL(Programmable Logic)에서 예시된 AXI QSPI IP 블록을 이용할 수 있다. 이는 Zynq SoC의 I/O 중심 임베디드 설계가 왜 그렇게 쉬운지를 보여주는 간단한 예다. 구성할 수 있는 IP 블록 또는 작은 HDL 코드로 만나게 되는 모든 I/O 요건을 수용할 수 있다.

 

HDMI 출력 구현
이를 실제로 구현하면 브레이크아웃 보드에서 카메라 모듈을 제어하고 PS 메모리 공간에 비디오를 수신할 수 있다. 수신된 이미지를 표시하려면 PS DDR SDRAM으로부터 이미지를 읽고 HDMI를 통해 출력하는 비디오 파이프라인을 만들 수 있어야 한다.

가장 간단한 방법은 디질런트 깃허브(GitHub)에 나와 있는 HDMI 출력 레퍼런스 설계도를 업데이트하는 것이다.

이 설계도를 업데이트 하려면 다음 과정을 따르면 된다.

① 16비트 표준 SPI를 위해 구성된 AXI QSPI를 추가

② PS I2C 라우팅, EMIO를 통한 신호를 구동

③ I2C와 SPI I/O를 모두 Arty Z7 보드의 실드 커넥터로 맵핑

이 과정을 모두 수행하면, Zynq 프로세서 코어에서 실행되는 소프트웨어를 업데이트해 카메라 모듈을 제어하고, VoSPI를 수신해 HDMI 출력 채널을 구성할 수 있다.

이 예에서는 브레이크아웃 보드와 실드 커넥터의 SDA와 SCL 핀이 정렬할 수 있도록 카메라 모듈에 브레이크아웃 보드를 연결한다. 이는 VoSPI를 위해 실드 커넥터의 IO10~IO13핀을 이용할 수 있다는 의미다. 해당 신호는 이 애플리케이션에서는 사용되지 않으므로 SPI 인터페이스의 MOSI가 될 수 있는 IO11은 이용하지 않는다.

하지만 이 접근법을 이용하려면 Arty Z7의 실드 커넥터가 A핀에서 필요한 5V를 공급할 수 없으므로, 브레이크아웃 보드와 카메라 모듈에 추가 전원 신호를 제공해야 한다. 따라서 Zynq I/O 핀에 연결한다. 반대편의 실드 커넥터의 5V 핀에서 나온 와이어를 이용해 Lepton 브레이크아웃 보드의 5V 전원 입력에 전원을 공급한다.

하드웨어를 작동하고, Vivado 설계를 재구축하고 나면 SDK를 열고 이미지를 표시하는 데 필요한 소프트웨어를 업데이트할 수 있다. 

 

열 영상기용 소프트웨어의 구현
Lepton 열 영상 IR 카메라용 Vivado 설계가 완료되고 브레이크아웃 보드가 Arty Z7 dev 보드에 연결되면, 다음 단계는 이미지를 수신해 표시할 수 있도록 소프트웨어를 업데이트하는 것이다. 보드의 VDMA 출력을 정확하게 구성하기 위해 HDMIout 레퍼런스 소프트웨어 애플리케이션을 이용할 수도 있다. 시험, 패턴 생성 기능만 제거하고 플리어 제어와 출력 기능을 써 넣으면 된다.

이 기능은 다음과 같은 과정을 통해 진행된다.

① BSP를 생성했을 때 제공된 XIICPS와 XSPI API를 이용해 I2C와 SPI 주변기기를 구성한다. Lepton 카메라로 통신하려면 I2C 어드레스를 0x2A로 설정하고, ‘CPOL=1’, ‘CPHA=1’과 마스터 작동을 위해 SPI를 구성해야 한다.

② Lepton 카메라 모듈이 준비됐는지 판단하기 위해 I2C 인터페이스를 통해 통신할 수 있게 되면, 상태 레지스터(Status register)를 읽어들여야 한다. 이 레지스터를 읽을 때 카메라가 제대로 구성돼 준비된 상태라면, Lepton 카메라는 0x06으로 응답한다.

③ 카메라 모듈이 준비된 상태에서 이미지를 읽고 메모리에 저장할 수 있다. 이를 위해 여러 번 SPI 읽기를 수행한다.

④ 이미지를 캡처하면, 저장된 이미지를 VDMA에서 액세스한 메모리 위치로 옮겨서 이미지를 표시할 수 있다.

Lepton 카메라로부터 이미지를 성공적으로 읽으려면, VoSPI 출력을 동기화해 이미지의 첫 번째 라인의 시작을 찾아야 한다. 카메라는 각 라인을 160바이트 블록(Lepton 2) 또는 2개의 160바이트 블록(Lepton 3)으로 출력하고, 각 블록은 2바이트 ID와 2바이트 CRC로 구성된다. 이 ID를 이용해 이미지를 캡처하고, 유효한 프레임을 파악해 이미지 스토어 내에 저장할 수 있다.

 

Lepton 카메라의 최적화와 설정 변경
3단계와 4단계를 수행하면 화면에 표시된 이미지의 크기를 늘릴 수 있다. 이 예를 위해 사용된 Lepton 2 카메라의 해상도는 겨우 80x60픽셀이다. 이 이미지는 모니터에 표시되면 매우 작을 수 있으므로 각 픽셀과 라인을 8배로 출력해 이미지를 640x480 픽셀로 확대할 수 있다. 이렇게 확대(Scaling)할 경우 화면이 모자이크화돼 보일 수 있지만, 화면에서 쉽게 식별할 수 있는 더 큰 이미지를 생성할 수 있다.

하지만, 출력을 최적화하도록 Lepton 카메라 모듈을 구성하지 않았으므로, 확대 자체로는 최고의 이미지 화질을 제시하지 못한다. 카메라 모듈에서 최고 화질의 이미지를 얻으려면, 출력 이미지의 화질과 명암에 영향을 미치는 AGC(자동 이득 제어)와 픽셀 대 픽셀 변동을 제거하기 위한 플랫 필드(Flat-field) 보정과 같은 패러미터를 구동하기 위해 I2C 명령어 인터페이스를 이용해야 한다.

카메라 모듈의 설정을 쓰거나 다시 읽으려면, 다음과 같이 데이터 구조를 만들고 그 구조를 카메라 모듈에 써야 한다. 설정을 다시 읽고 있다면, I2C 읽기를 수행하여 패러미터를 다시 읽을 수 있다. 각 16비트 액세스는 2개의 8비트 명령어가 필요하다.

명령어 워드를 어드레스 ‘0x00 0x04’에 기록한다

모듈 ID, 명령어 ID, 유형과 보호 비트로부터 형성된 명령어-워드 데이터를 생성한다. 이 워드는 카메라의 어떤 요소를 다루고 싶은지, 명령어를 읽고, 쓰거나 수행하고자 하는지 카메라 모듈에게 알린다.

어드레스 ‘0x00 0x06’에서 데이터 길이 레지스터에 작성하거나 읽을 워드의 수를 기록한다.

데이터 워드의 수를 어드레스 ‘0x00 0x08~0x00 0x26’에 기록한다.

 

[그림 3] 모니터 화면에 출력된 8배 확대된 열 영상.

이 시퀀스를 이용해 최고의 성능을 얻을 수 있도록 Lepton 카메라를 구성할 수 있다. 업데이트된 프로그램을 수행하면, [그림 3]과 같은 열 영상 이미지를 얻을 수 있다. 이 이미지는 8배 확대된 이미지다.

마지막으로 화면에 출력된 이 이미지를 실제로 활용할 수 있도록 MiniZed dev 보드로 이 설계를 통합하고 이미지를 무선 네트워크를 통해 전달하도록 구성하면 된다.

본 기사의 모든 코드는 깃허브(GitHub)를 통해 제공되며, 예제에 사용된 Arty Z7 보드는 국내에서는 이니프로를 통해 구입할 수 있다. 

#마이크로제드#디질런트#자일링스#보드

정환용 기자  hyjeong@epnc.co.kr

<저작권자 © EP&C News, 무단 전재 및 재배포 금지>

정환용 기자의 다른기사 보기
icon인기기사
여백
여백
여백
여백
여백
여백
여백
여백
icon
여백
여백
여백
신제품
여백
여백
여백
여백
여백
Back to Top