'2017/12/24'에 해당되는 글 3건

  1. 2017.12.24 CAN 통신이란?
  2. 2017.12.24 Qt에서 bldc-tool 컴파일 방법
  3. 2017.12.24 Qt 프로그램 소개


CAN(Controller Area Network) 프로토콜은 Bosch사에서 1986년 자동차 전장 용으로 처음 개발되었으며 1991년에 스펙 2.0이 발표되었고 현재 국제 표준 프로토콜로 성장하였습니다. 이는 호스트 컴퓨터 없이 3개 이상의 MCU나 controller, 장치들이 서로 다중 통신이 가능하며, 메시지는 우선순위 따라 ID(Identifier)를 할당하고 이 ID를 이용해 메시지를 구별합니다. 다양한 에러 감지 메커니즘이 상호 보완적으로 에러를 감지하기 때문에 높은 안정성을 보장하며, 메시지 전송 시 에러가 감지되면 자동적으로 해당 메시지를 즉시 재전송하는 기능이 있기 때문에 다른 프로토콜에 비해서 에러 회복 시간이 짧다는 것입니다.


차량에 적용하는 CAN 통신의 예제


버스가 유휴 상태인 경우 모든 CAN 노드는 메시지를 보낼 수 있고, 전송된 모든 메시지는 모든 노드에서 수신됩니다. 수신 노드는 ID 필터링 기준에 따라 메시지의 무시 여부를 판단합니다. 정교한 오류 감지 및 결함 격리 메커니즘과 문제가 발생한 메시지의 재전송으로 데이터 무결성과 일관성이 보장합니다. 또한 두 개 이상의 CAN 노드가 동시에 메시지 전송을 요청하는 경우 우선순위가 가장 높은 메시지가 즉시 버스 액세스 권한을 획득하도록 프로토콜이 보장합니다. 현재는 CAN의 안정성과 신뢰성 등 장점이 입증되어 항공기, 의료기 등에 사용되고 IoT application에서도 사용되는 추세입니다.


가장 쉽고 편리하고 익숙한 UART 통신은 별도의 transceiver가 필요없고 모든 MCU가 반드시 내장하게 됩니다. 그러나 보통 115200bps로 대략 10kbps로 느리며 한 바이트 통신이라는 단점이 있습니다. 예를 들어, 드론 제어를 할 경우에 다수의 센서 등과 같이 여러 바이트가 하나의 패킷이 되는 경우에는 패킷을 분리하는 작업이 용이하지 않다는 것입니다. 뿐만 아니라 UART는 하나의 장치와 두개의 선으로 독립적이야 하나 관성센서보드, 제어보드, 초음파센서보드, GPS, 무선통신만으로 5개를 초과하여 10가닥 이상이 필요하다는 것입니다.


CAN을 지원하는 MCU의 경우에는 한번에 8-byte 데이터를 전송하는 HW 패킷을 제공하므로 UART(보통 RS232/RS485) 통신에서는 패킷 통신을 위해 위에서 말한 것처럼 사용자가 일일이 패킷 형식을 만들어 주고 수신 받을 때도 그런 해석이 필요하지만 CAN은 8byte 데이터를 담는 HW 패킷 통신을 기본으로 함으로, 사용자는 데이터 버퍼에 데이터를 쓰고 전송만 하면 그 외 모든 처리는 하드웨어가 알아서 하므로 분산제어 분야 적용에도 용이하다는 것입니다.


CAN 통신의 특징:

1) 2선 twist pair를 이용한 전기적 differential 통신을 하므로 저가이며 전기적인 잡음에 매우 강해 신뢰성이 우수합니다.

2) 이론적으로 2,032개의 장치들을 연결할 수 있으나 CAN transceiver에 따라 최대 노드수(32, 64, 128...)는 달라 집니다.

3) 통신 버스를 공유하고 있는 CAN controller들은 모두가 마스터(master)가 될 수 있는 Multi-Master 통신을 합니다.

4) 40m 내에서 최대 1Mbps로 우수한 통신 속도를 갖습니다.

5) 8byte 데이터 전송을 하는 하드웨어 패킷을 제공합니다.

6) 다수의 MCU, DSP 등에 기본으로 내장되어 있습니다.

7) 통신 프로토콜/에러 처리를 하드웨어적으로 처리합니다.

8) PLUG & PLAY를 제공합니다.


CAN transceiver는 프레임이라는 패킷으로 CAN 네트워크에서 데이터를 전송하며, CAN 2.0B 버전 이후에 29bit 식별자를 갖는 extended data format의 간단한 설명입니다.



    • SOF(Start Of Frame) - 메시지 시작을 표시하며, 무부하 기간 이후 버스의 노드를 동기화하기 위해 사용

    • Identifier(ID, 식별자) - 메시지의 우선순위를 가리며 2진 값이 더욱 낮을수록 우선순위는 더욱 높아짐

    • RTR(Remote Transmission Request) - 원격 전송 요청 비트, 이 비트가 '0'이면 데이타 프레임이고, '1'이면 메세지가 원격 전송 요청을 의미

    • SRR(Substitute Remote Request) - 표준 프레임의 RTR 위치에 점유

    • IDE(IDentifier Extension) - 이 비트가 '0'이면 표준 CAN 식별자를 전송하고, '1'이면 확장 CAN 식별자를 전송을 의미

    • R0, R1 - 예약비트

    • DLC(Data Length Code) - 데이터 프레임의 데이터 바이트 수(0~8)

    • Data Field - 8byte(64bit) 전송 데이터, MSB부터 전송.

    • CRC(Cyclic Redundancy Check) - 16bit(15bit + 구획문자) 16bit checksum으로 오류 검출 Field.

    • ACK(ACKnowledge Field) - 2bit(1bit + 구획문자)로 오류가 없는 메시지가 전송되었다는 것을 나타냄.

    • EOF(End Of Frame Field) - 메세지(프레임) 종료 Field

    • IFS(Inter Frame Space) - 컨트롤러가 요구하는 시간의 양을 포함하며, 메시지 버퍼 영역에서 적절한 위치로 정확하게 수신된 프레임을 이동시킴


대표적인 CAN Transceiver로는 PCA82C250/C251가 있습니다.



'Flight Controller 이해 > 인터페이스' 카테고리의 다른 글

드론에서 사용되는 무선 통신  (1) 2017.03.09
TWI(I2C) 통신이란?  (0) 2014.03.24
Posted by Nature & Life


다음의 GitHub에서 bldc-tool의 소스 코드를 다운로드 합니다.

https://github.com/vedderb/bldc-tool


다음의 Qt 홈페이지에서 Qt 프로그램을 받기 위해서는 다음의 링크에서 'Get your open source package' 버튼을 클릭하여 installer 프로그램을 우선 다운로드 받아 실행시켜야 합니다.

Qt 다운로드


위 installer는 Qt 설치를 위해 필요한 콤포넌트를 설정하고 온라인으로 해당 패키지를 다운로드 하기 위한 프로그램으로 자신의 OS를 감지하여 받게 됩니다. 진행하다 보면 다운로드 하기 위한 콤포넌트를 설정하는 화면에서 아래와 같이 설정하고 진행하면 됩니다.



위 설정에서 버젼은 다른 버젼을 사용해도 무방할 것으로 생각되지만 필자는 용량의 이유로 위와 같은 컴포넌트만을 받기로 하였습니다. 필자는 Windows 10(32-bit) 환경입니다. 여기서 MinGW라는 것이 있는데 Qt는 cross platform으로 OS에 무관하며 컴파일러(예를 들어 g++, gdb, make) 등을 Linux 정신에 맞게 GNU를 사용합니다. 이를 Windows 환경에서도 사용할 수 있도록 만든 것이 MinGW이고 'Minimalist GNU for Windows'의 약자입니다. 참고로 64bit라 하여도 위 설정에서처럼 32bit를 사용해야 하며 반드시 설치하여야 합니다.


설치 후 Qt Creator를 실행시키고 메인 화면에서 'Open Project'를 클릭하여 다운로드 한 bldc-tool 폴더 내에 'BLDC_Tool.pro'를 선택하여 로드합니다. 다음은 'Tools' 메뉴에 'Options' 메뉴를 클릭합니다. 좌측 메뉴에서 'Build & Run'을 클릭하고 우측에서 'Qt versions', 'Compilers', 'Debuggers'를 아래와 같이 순차적으로 수정합니다.



위 화면에서와 같이 Qt와 MinGW가 정상적으로 설치되었다면 자동 감지(Auto-detected)되지만 그렇지 않은 경우 'Add' 메뉴로 일일이 각각 설정해 주어야 합니다. 그리고 위 화면에서 'Kits' 탭으로 이동하면 다음과 같은 화면을 볼 수 있습니다.



모든 것이 정상적이면 위와 같이 설정되고 그렇지 않으면 각 항에서 'Manage' 버튼으로 직접 수정해 주어야 합니다. 마지막으로 로드된 프로젝트 메인 화면 좌측 'Projects'를 클릭하고 빌드시 생성되는 파일들의 위치 정도를 설정해 주면 됩니다.



메인 화면의 'Build' 메뉴에서 빌드('Build All')하면 debug 폴터에 BLDC-Tool.exe 실행파일이 생성되고 'Build' 메뉴의 'Run'으로 실행시키면 됩니다. debug 폴더에서 실행 파일을 직접 클릭하여 실행시킬 수도 있는데 이 경우에는 *.dll 파일이 없다는 오류가 발생하는데 이는 정적(static)으로 빌드하였기 때문으로 배포시에 동적(dynamic) 빌드하면 해결됩니다.



Posted by Nature & Life
Software Programming/Qt2017. 12. 24. 16:05


임베디드(Embedded) 시스템을 제어하거나 테스트하기 위한 프로그램 개발에는 여러 프로그램들이 사용되어질 수 있습니다. 예를 들어 Windows 환경에서 API나 MFC를 이용하여 개발한 경우, Linux와 같은 다른 환경에서 사용하기 위해서는 다시 그 환경에 맞는 툴을 사용하여 다시 제작하여야 합니다. 그러나 Qt는 cross platform으로 Unix, Linux 그리고 Windows, MAC OS X 등등 다양한 platform과 iOS나 Android 조차에서도 다시 컴파일하면 하면 된다는 것입니다.


역사적으로 Qt는 1995년 최초 버전이 공식 배포 되었고 이후 20년간 Qt는 산업 흐름에 맞추어 기능이 확장되고 성능이 개선되어 왔으며, 해당 기간 동안 전세계 1백만명이 넘는 개발자들에 의해서 검증된 안정적이고 성숙된 제품이 되었습니다. 현재 Qt 는 GUI 개발과 더불어 응용 프로그램 개발 전반을 커버하는 1,300여개의 풍부한 라이브러리들과 다양한 개발 도구를 갖춘 종합적인 개발 프레임워크 제품으로 완성되었다고 알려집니다.



기존의 개발 환경에서는 '볼륨' 버튼도 직접 제작하거나 별도의 라이브러리를 구입해야 하지만, Qt에서는 고급스러운 GUI 환경을 덕택에 가져다 쓰면 되고 상업적인 목적이 아닌 이상 소스 코드 채 배포되며 무료이면서 어떤 제한도 없다는 것입니다. 예를 들어, Qt만의 전통적이며 강력한 GUI 개발 기능은 Qt Widget으로부터 새롭게 지원되고 있는 Qt 자체의 GUI 개발용 스크립트 언어인 Qt Quick/QML로 이어졌고, QML을 이용하면 기존의 MFC 등의 개발 도구로는 구현이 매우 어려운 에니메이션이나 3D 인터페이스와 같은 자연스러운 그래픽 효과들도 쉽고 빠르게 구현할 수 있다는 것입니다.


뿐만 아니라, 프로그램 개발에 필수적인 멀티 스레드 프로세스 통신, 네트워크, OpenGL의 3D 그래픽, HTML5 지원 통합 웹엔진, XML 데이터베이스 등 C++ 개발자가 개발 중에 필요한 요구 사항도 다양한 라이브러리에 모듈형식으로 기능별로 제공한다는 것입니다. 또한 스마트폰과 태블릿 환경에서 요구되는 기존의 물리적 버튼과 원시적인 액정 스크린이 아닌 스마트폰과 같은 터치 패널 디스플레이 탑재와 고급스럽고 풍부한 표현을 가진 UI/HMI를 총망라 하고 있다는 것입니다.


Qt 에서는 'Qt Creator' 라는 통합 IDE 환경을 이용하여 코드를 작성하게 하며 GUI 화면을 직접 디자인하고 이를 개발코드와 직접 연결시킬 수 있는 'Qt Designer', GUI 개발을 편리하게 해주는 Qt 자체의 스크립트 언어인 'QML'과 UI 개발을 할 수 있는 'Qt Quick(Qt User Interface Creation Kit', Qt로 제작된 GUI 화면의 상세한 리소스 프로파일링이 가능한 'Qt Quick Profiler', Qt 라이브러리에 대한 상세한 도움말 문서인 'Qt Assistant'를 포함합니다. 또한 Visual Stuido나 Eclipse등 친숙한 개발 환경에서도 플러그인 하여 이용할 수도 있다는 것입니다.



Qt는 C++을 기반으로 하여 주로 C++을 사용하지만, 파이썬(Python), 루비(Ruby), C, 펄(Perl), 파스칼(Pascal)과도 연동됩니다. C 보다 C++을 사용할 경우 확장이 용이하다는 장점이 있습니다. 그러므로 클래스(class) 등의 C++의 기본 개념 지식이 먼저 요구됩니다.


https://www.qt.io/



'Software Programming > Qt' 카테고리의 다른 글

UART(Serial) 통신 예제  (2) 2018.03.03
Hello world 예제  (0) 2018.03.02
Posted by Nature & Life