STR710을 이용한

로봇 기술(RT, Robot Technology)은 산업용 이송 장치, 조립용 다관절 로봇팔, 가공용 정밀 서보 등에서 이미 오래 전부터 사용되고 있다. 이 로봇 기술이 현재는 휴머노이드라는 새로운 명칭 아래 컨수머(Consumer), 엔터테인먼트(Entertainment), 에듀케이션(Education) 등의 산업 분야로 확산되고 있으며, 그 가속력은 우리의 상상을 초월하고 있다.로봇 기술이 일반에게 알려지기 시작한 것은 1999년 일본의 소니(Sony) 사에서 4족 자율 보행 강아지 로봇인 아이보(AIBO)를 출시하면서부터라고 할 수 있다. 당시 25만 엔(250만 원)이라는 고가의 판매 가격에도 불구하고 아이보는 지금까지 약 10만여 대가 판매되는 기록을 세웠다. 이때부터 인간과 유사하게 움직이는 소형 이족 보행 로봇의 개발 및 상품화가 충분히 가능하다는 자신감이 로봇 업계 전반에 확산되기 시작하였다. 물론 그 이전에도 혼다(Honda) 사의 아시모(ASIMO)와 같은 이족 보행 로봇이 존재하였지만, 크기나 가격 면에서 일반에게 다가서기에는 무리가 있었다고 할 수 있다.이에 21세기를 이끌어갈 새로운 휴머노이드 산업에서 가장 핵심이 되는 로봇 컨트롤러(RC, Robot Controller)를 32bit ARM 기반의 플래시 MCU인 STMicroelectronics의 STR710을 이용하여 인간의 움직임과 유사한 이족 보행 로봇에 적용해보도록 하겠다.STR710 MCU이족 보행 로봇의 컨트롤러를 개발하기 위해서는 각 관절 부위에 사용되는 서보 모터를 제어하기 위한 제어 신호 생성, 균형 유지를 위한 센서 입출력, 로봇 제어를 위한 조종기 또는 PC와 통신 등의 제어부를 구성하여야 한다. 이를 단일 MCU에 모두 포함시키기 위해서는 다음과 같은 사양이 요구된다.● 빠른 Instruction Clock Speed● 다수의 Timer● 높은 정도(Resolution)의 A/D 컨버터(Converter)● 직렬 통신(UART)● 많은 Flash, RAM Memory● 다수의 입출력 Port 및 변환 가능한 출력 Level● 편리한 개발 환경 및 디버그(Debug) 지원현재 소형 이족 보행 로봇에는 제어 프로그램 개발이 손쉬운 8bit급 MCU가 많이 쓰이고 있으며, 기본적인 기능 구현만을 감안한다면 8bit급의 MCU 만으로도 충분히 개발이 가능하다고 할 수 있다. 그러나 지금과 같이 빠른 속도로 로봇 기술 발전하고 있는 상황에서 머지않아 8bit급의 MCU 만으로는 다양한 기능을 포함한 로봇의 개발이 어려울 것임을 분명하다.앞에서 언급한 사양을 만족하고 향후 보다 많은 확장성을 지원하기 위하여 32bit 프로세스(Process) RISC MCU인 STMicro- electronics의 STR710을 이용하여 컨트롤러 메인 회로를 구성하였으며, 개발에 사용된 STR710은 그림 1과 같은 내부 구조(Arch- itecture)와 표 1과 같은 특징(Characteristics)을 갖추고 있다.특히 32개까지의 서보 모터 제어 시그널을 동시에 전송할 수 있는 전체 37개의 32bit 레지스터(Register), 각각 256Kbyte와 64Kbyte를 갖춘 플래시(Flash)와 램(RAM), 그리고 내부적으로 Upscale을 적용하여 48MHz의 빠른 Clock Speed를 지원하는 장점을 갖추고 있어 로봇 컨트롤러 개발이 최적의 솔루션(Solution)이라고 할 수 있다.개발 환경이족 보행 로봇의 컨트롤러를 개발하기 위해 사용된 개발 환경은 다음 표 2와 같다. 컴파일러의 경우, Resonance 사의 GNU 기반 RIDE, ARM 사의 RealView Development Kit, IAR 사의 IAR Embedded Workbench, Keil 사의 MDK-ARM Tool 중, 디버깅 과정에서 Interrupt 및 Timer Simulation 및 Instruc- tion Cycle Timing 측정이 가장 용이한 MDK-ARM Tool을 이용하였다. ARM Core 기반 MCU의 공통점이 디버깅 과정에서 JTAG Protocol이 ARM Core 영역 밖의 Peripheral에 대해서는 Interrupt 시의 자동 분기와 Timer Counter의 Break 등을 지원하지 못한다는 것이다. 이를 해결하기 위해 MDK-ARM에서는 강력한 Simulation 환경을 지원하며, 이 환경 내에서는 디버깅 과정에서 Interrupt 분기, Timer Counter Break, Instruction Cycle Timing을 모두 사용할 수 있다. 이로 인하여 서보 모터 제어를 위해 정확한 PWM Timing을 계산 및 확인하여야 하는 개발 과정에서 많은 시간을 절약할 수 있다.이족 보행 로봇 컨트롤러의 회로 구성개발된 이족 보행 로봇의 컨트롤러는 다음과 같이 7가지 영역으로 구성되어 있다. 실제 구성된 회로 및 컨트롤러 구성은 다음 그림 2와 같다.● STR710을 위한 메인 영역● 3.3V, 5.0V, 7.0V 생성을 위한 전원 영역● 서보 모터 제어 및 자이로 센서 시그널 입출력을 위한 3.3V to 5.0V 전압 변환 영역● 블루투스(Bluetooth) 및 RS-232 통신 영역● 균형 제어를 위한 자이로(Zyro) 센서 영역● 프로그램 다운로딩 및 디버깅을 위한 JTAG 영역● 서보모터 입출력 영역메인 영역메인 영역은 앞서 기술한 STR710으로 구성되며 18MHz 오실레이터에 의해 외부 Clock을 입력 받아 내부적으로 4배 Upscale를 적용하여 ARM Core 및 Peripheral 모두 48Mhz로 구동되도록 하였다.전원 영역STR710에 전원을 인가하기 위한 3.3V 출력, 서보 모터 제어 시그널을 인가하기 위한 5.0V 전원 영역은 각각 정전압 레귤레이터(LDO)인 LM1117S-3.3V와 LM1117S-5.0V로 구성되어 있다(LM1117 시리즈는 동일한 Pin 배치 및 주변 회로 구성을 가지는 STMicroelectronics의 LD1085-33과 LD1085-50으로 구성할 수 있다). 7.0V 출력은 충전지에서 직접 서보 모터 전원부에 연결토록 하여 이족 보행 로봇 구동 시보다 큰 토크를 얻을 수 있도록 하였다.전압 변환 영역STR710은 동작 전압으로 3.3V를 사용한다. 이로 인하여 Peripheral GPIO 전압 또한 3.3V로 출력되도록 되어 있다. 그러나 서보 모터의 제어 시그널은 TTL 5.0V로 되어 있어 3.3V 입력으로 제어 시 제어 시그널의 정확한 전달이 어려울 수 있다(실제 테스트에서는 STR710 GPIO의 3.3V Push-Pull 출력을 직접 서보 모터 제어 시그널로 사용하여도 문제가 없었다). 이를 해결하기 위하여 전압 레벨 변환 트랜시버(Transiver)인 74ALVC164245를 STR710 GPIO 출력과 서보 모터의 제어 시그널 입력 간의 전압 레벨업 버퍼(Voltage Level-up Buffer)로, 자이로센서 출력과 STR710 GPIO 입력 간의 레벨다운 버퍼(Voltage Level-down Buffer)로 각각 사용하였다. 74ALVC164245는 8bit×2 = 16bit의 Port를 가지고 있으며 상위 8bit와 하위 8bit를 독립적으로 설정할 수 있어 3.3V 전압과 5.0V 전압간의 레벨 변환 목적으로 매우 적합한 IC라 할 수 있다. 74ALVC164245는 다음 표 3과 같은 특성을 가지고 있다.통신 영역본 이족 보행 로봇은 외부 조종기에서 입력되는 무선 통신을 통하여 동작하도록 설계되었다. 기본적인 통신 프로토콜은 RS232C를 사용하며, 무선 통신으로는 블루투스 Protocol을 사용하여 이족 보행 로봇과 조정기 간의 간섭, 거리 등에서 오는 문제를 해결하였다.STR710의 UART Port에 연결된 RS23C IC로는 3.0V~5.5V까지 범용적인 사용이 가능한 사이펙스(Sipex) 사의 SP3232E를 사용하였다(SP3232E는 동일한 Pin 배치 및 주변 회로 구성을 가지는 STMicroelectronics의 ST3232로 구성할 수 있다).무선 통신은 Bluetooth Specification V1.1을 지원하는 이니티움(INITIUM) 사의 Promi-ESD를 사용하였다. Promi-ESD는 초소형 블루투스 송수신 모듈로 RS-232C를 사용하는 장비 간의 무선 통신을 가능토록 한다. 이를 통하여 추가적인 회로 구성없이 Promi-ESD를 바로 SP3232E에 연결하여 쉽게 무선 통신 영역을 구성할 수 있다.균형 센서 영역일반적인 이족 보행 로봇은 오픈 루프(Open-Loop) 방식으로 동작하도록 되어 있다. 이로 인하여 로봇의 동작 중 외부의 힘 또는 바닥 면의 경사에 의해 발생하는 로봇의 기울어짐에 대한 피드백(Feedback)을 처리하지 못함으로써 넘어지거나 원하는 동작을 수행하지 못하는 문제가 자주 발생한다. 이를 해결하기 위하여 개발된 이족 보행 로봇에는 하이텍(Hitec) 사의 RC(Remote Control)용 서보 모터에 적용되는 GY-130 자이로를 적용하였다. GY-130 자이로는 피에조(Piezo) 압전 효과를 이용하여 회전 부위에 대한 회전 속도에 비례하는 펄스(Pulse)를 출력한다. 출력 펄스를 시간에 대해 적분하면 회전량이 계산되며, 미분하면 회전각속도를 계산할 수 있어 원하는 데이터를 얻을 수 있다(GY-130은 현재 단종된 제품으로 추가 생산이 되고 있지 않다. 그러나 다른 RC 서보 모터용 자이가 GY-130과 동일하게 동작하므로 대체하여 적용할 수 있다).RC용 자이로는 일반적으로 RC 헬리콥터의 주 회전축에 대한 꼬리날개(Tail Wing) 부위의 회전을 감지하여 흔들림을 방지하거나 RC 자동차의 회전 주행시 드래프트(Draft) 기술을 사용하기 위해 일반적으로 사용되지만, 이족 보행 로봇에 적용하여 외부 자극에 반발하여 균형을 유지하기 위한 센서로 적용이 가능하다. 이족 보행 로봇의 경우에도 다리를 회전축으로 상체가 앞뒤로 회전하면서 균형을 잃게 되는 원리를 감안하면 RC용 자이로가 좋은 센서 역할을 담당할 수 있다.RC용 자이로가 하나의 서보 모터 당 하나의 자이로가 필요한데 반해, 개발된 이족 보행 로봇에서는 STR710의 Timer Input Capture 기능을 통하여 기준 펄스에 대한 회전 속도 변화량을 계산하여 메모리에 저장함으로서 여러 개의 서보 모터를 동시에 제어할 수 있도록 하였다.JTAG 영역개발된 이족 보행 로봇 컨트롤러에는 프로그램 다운로딩 및 디버깅을 수행하기 위해 JTAG Connection 회로를 기본으로 포함하였다. 이로 인하여 추후 로봇 컨트롤러뿐만 아니라 일반적인 목적의 STR710 개발 보드로서도 활용이 가능하다.서보 모터 입출력 영역STR710의 GPIO2의 0~15의 16개 Port를 서보 모터 제어를 위한 Output Port로 구성하였다. STR710이 48개의 GPIO Port를 가지고 있어 추후 회로 변경을 통하여 48개까지의 서보 모터 제어가 가능한 점을 감안하면, STR710은 로봇 컨트롤러뿐 아니라 일반적인 목적의 서보 모터 컨트롤러로서도 가장 적합한 MCU라고 할 수 있다.이족 보행 로봇 컨트롤러의 프로그램 구성개발된 이족 보행 로봇의 컨트롤러는 한 개의 STR710 MCU만으로 무선 RS232 통신, 서보 모터 제어, 자이로 센서 입출력 등의 모든 작업을 수행한다. STR710의 빠른 Instruction Cycle, 32bit 입출력, 그리고 강력한 Interrupt 처리 등으로 인하여 하나의 MCU만을 이용하였음에도 불구하고, 전체 MCU Cycle 중 30%만을 사용하며, 나머지 70%는 외부 조종기 입력을 대기하는 유휴 상태로 유지한다.프로그램 메모리 구조이족 보행 로봇 컨트롤러의 메인 프로그램은 8Kbyte 용량으로, STR710의 256Kbyte Flash Memory 영역인 0x4000 0000~0x4000 2000번지에 존재한다. 프로그램 수행 중 필요한 변수 처리를 위하여 RAM 메모리 영역인 0x2000 0000~0x2000 1000번지를 동적 메모리로 사용하며 서보 모터 각도 데이터 변수, 무선 통신 송수신 데이터 변수, 자이로 센서 데이터 변수 등이 존재한다. 바로 이어지는 RAM Memory 영역인 0x2000 1000~0x2000 5E00번지에는 이족 보행 로봇을 움직이기 위한 각 서보 모터의 Motion Table이 존재한다. 이 Motion Table은 이족 보행 로봇 컨트롤러에 전원이 들어오기 전에는 존재하지 않다가 전원이 들어오거나 Reset 시 Startup Code에서 Flash Memory 영역에 저장되어 있는 각각의 서보 모터 각도 Data를 10msec 단위로 RAM영역으로 옮겨 저장하여 Motion Table을 완성하게 된다.현재 이용되고 있는 로봇 컨트롤러들이 대부분 Flash Memory에 미리 Motion Table을 저장하는데 반해, 이번에 개발된 이족 보행 로봇 컨트롤러는 Flash Memory에 Motion Table의 전단계인 각도 데이터만을 저장함으로써 전체 프로그램 크기가 8Kbyte밖에 되지 않는다. 또한 초기 Startup시 Motion Table의 로딩(Loding)에도 약 0.3msec밖에 소요되지 않아 이에 따른 지연 현상도 보이지 않는다.서보 모터 제어 프로그램 구조이족 보행 로봇 컨트롤러의 프로그래밍에서 가장 중요한 부분이 서보 모터 제어라고 할 수 있다. 얼마나 부드럽게 움직일 것인지, 얼마나 빠르게 움직일 것인지, 주변 센서와 Intero- peration을 할 것인지 등을 먼저 결정하여야 한다. 개발된 이족 보행 로봇 컨트롤러는 다음과 같은 성능을 가지고 있다.● 서보 모터 각도 분해능 : 1/1024°● 서보 모터 제어 신호 인가 주기 : 0.01 msec × 16 Servo, 0.001 msec × 1 Zyro● 서보 모터 제어 방식 : PWM(Pulse Width Modulation)현재 일반적인 이족 보행 로봇 컨트롤러가 8Bit 연산에 따른 1/256° 정도의 분해능을 가지는 것에 비하면 개발된 이족 보행 로봇 컨트롤러는 STR710의 32bit 연산 및 빠른 Clock Speed에 의해 4배의 향상된 정밀도를 가지고 있다.서보 모터 제어를 위해서는 일반적으로 PWM 방식을 사용한다. PWM 방식은 1.5msec의 하이펄스(High Pulse)를 기준으로, 0.7~2.3msec High Pulse를 서보 모터 각도 제어 시그널로 이용하는 방식이다.PWM 시그널의 반복 주기는 이론적으로 2.3msec~∽msec 이지만, 실제 사용을 위해서는 약 10msec~20msec 사이를 이용한다(일부 디지털 서보 모터의 경우, 내장된 모터 컨트롤러 MCU에 의해 1회의 High Pulse만으로도 모터 Bridge회로에 연속적인 자체 주기로 시그널을 전달하는 기능을 가지고 있어 반복 주기에 따른 외부의 연속적인 시그널이 필요 없는 경우도 있다).개발된 이족 보행 로봇 컨트롤러는 정밀한 PWM 시그널을 생성하기 위하여 Timer0의 Output Compare Interrupt를 사용한다. PWM 제어 루틴을 처리하기 위한 Interrupt는 1.56usec당 1회씩 실행되어 전체 서보 모터에 PWM 시그널을 전달토록 하였다. STR710이 외부 16MHz(내부 48MHz) Clock에서 1 Instruction Cycle당 약 0.02usec가 소요되는 것을 감안하면 1회 Interrupt당 78 Instruction이 실행 가능하다. 이 78 Instruction 동안 전체 16개의 서보 모터에 PWM 시그널을 전달하기 위하여 Interrupt 처리 루틴은 ARM Assembly를 이용하여 프로그램하였다.통신 프로그램 구조STR710은 2개의 Programming 가능한 General UART를 2개 가지고 있다. UART0는 RS232 통신을 블루투스 무선 통신으로 변환해주는 Promi-ESD와 연결되어 있어 STR710의 서보 모터 제어 프로그램에서 입력 데이터로 사용한다. UART0는 Interrupt Priority를 #2로 지정하여 #3으로 지정된 Timer 0 Interrupt보다 낮은 우선순위로 지정하였다. 전체 프로그램에서 Timer 0 Interrupt가 가장 높은 Priority를 가지며, 이는 정확한 Cycle에 의해 PWM 시그널을 생성해야 하는 서보 모터 제어 프로그램에 영향을 주지 않도록 하기 위함이다.자이로 프로그램 구조RC 서보 모터용 자이로 센서는 입력 펄스와 출력 펄스가 필요하다. 주어진 입력 펄스에 대해 피에조 압전 효과에 의해 측정된 전압의 변위를 입력 파형에 더하여 출력 파형으로 내보내게 된다. STR710에서 자이로 센서로 출력되는 기준 펄스는 STR710의 Timer1 PWMO 모드를 사용하여 Pulse를 생성하며, 자이로 센서에서 STR710으로 입력되는 펄스는 STR710의 Timer3 PWMI 모드를 사용하여 Pulse Period를 계산토록 하였다. 또한 이렇게 측정된 자이로 센서의 출력 Pulse는 0x2000 0000 번지에 있는 각 서보 모터의 각도 데이터에 저장되어 동작중인 서보 모터의 구동 각도를 변경하도록 하였다. 또한 각 서보 모터 각도 데이터의 최상위 Bit를 Zyro 적용 여부를 판단하는 Bit로 지정하여 선택적으로 적용이 가능토록 하였다.이족 보행 로봇 적용이족 보행 로봇 컨트롤러의 동작 테스트는 미니로봇 사에서 출시된 로보노바(Robonova)에서 수행하였다. 로보노바는 16개의 서보 모터로 구성되어 16 자유도를 가지고 있으며, 알루미늄 프레임을 사용하여 견고한 외관을 갖추고 있다. 특히 16개의 서보 모터는 하이텍(Hitec) 사의 로봇 전용 서보를 사용하여 PWM 방식에 의한 제어 및 RS232 직렬 통신 방식에 의한 제어가 모두 가능하다(이족 보행 로봇 컨트롤러의 다음 버전에는 직렬 통신에 의한 서보 모터 제어 기능을 포함 예정이다).동작 테스트 결과 32Bit MCU의 빠른 처리 속도에 의하여 매우 빠른 움직임을 구현하였으며, 180/1024。(약 0.18。)의 서보 각도 분해능을 가짐으로써 매우 부드러운 움직임을 보여 주었다(그림 15 참조). 이는 32bit급 MCU가 이족 보행 로봇에 적용될 경우, 보다 인간과 유사한 움직임 및 정밀도를 보여줄 수 있다는 좋은 예라고 할 수 있다.개발된 이족 보행 로봇 컨트롤러는 테스트가 수행된 로보노바 이외에도 PWM 방식을 사용하는 아날로그 및 디지털 방식의 모든 서보 모터를 제어할 수 있도록 설계되었으므로 이족 보행 로봇 뿐 아니라 여러 가지의 응용 분야에 적용할 수 있다.결론이족 보행 로봇 구동 컨트롤러 개발을 통하여, STMicroelec- tronics의 32Bit ARM7 기반 Flash MCU STR710이 일반 산업용뿐 아니라 연구용, 완구용, 가정용 로봇 등의 메인 MCU로서 매우 적합하다는 것을 확인할 수 있었다. 앞으로 보다 많은 분야에서 STR 시리즈의 MCU가 광범위하게 쓰이기를 바란다.마지막으로 이번 컨테스트 참가 과정에서 많은 도움을 주신 STMicroelectronics 최경화 차장님, 그린칩스의 윤지환 팀장님, BSI의 심교만 대리님, 아이지시스템의 전룡 연구원님에게 진심으로 감사의 마음을 전하며, 다음 기회에는 보다 진보된 시스템을 소개하고자 한다.■ Core- ARM7TDMI 32-bit RISC CPU- 59 MIPS @ 66 MHz from SRAM- 45 MIPS @ 50 MHz from Flash■ Memories- Up to 256Kbytes Flash program memory(10 kcycles endurance, 20 yrs retention) - 16K bytes Flash data memory(100 kcycles endurance, 20 yrs retention) - Up to 64 Kbytes RAM- External Memory Interface (EMI) for up to 4 banks of SRAM, Flash, ROM- Multi-boot capability■ Clock, Reset and Supply Management- 3.0 to 3.6V application supply and I/O interface- Internal 1.8V voltage regulator for core supply- Clock input from 0 to 16 MHz- Embedded RTC oscillator running from external 32 kHz crystal- Embedded PLL for CPU clock- Realtime Clock for clock-calendar function- 5 power saving modes: SLOW, WAIT, LPWAIT, STOP and STANDBY modes■ Nested interrupt controller- Fast interrupt handling with multiple vectors- 32 vectors with 16 IRQ priority levels- 2 maskable FIQ sources■ Up to 48 I/O ports- 30/32/48 multifunctional bidirectional I/O lines- Up to 14 ports with interrupt capability■ 5 Timers- 16-bit watchdog timer- 3 16-bit timers with 2 input captures, 2 output compares, PWM and pulse counter modes- 16-bit timer for timebase functions■ 10 Communications Interfaces- 2 I2C interfaces (1 multiplexed with SPI)- 4 UART asynchronous serial interfaces- Smart Card ISO7816-3 interface on UART1- 2 BSPI synchronous serial interfaces- CAN interface (2.0B Active)- USB v 2.0 Full Speed (12Mbit/s) Device Function with Suspend and Resume support- HDLC synchronous communications■ 4-channel 12-bit A/D Converter- Sampling frequency up to 1KHz- Conversion range: 0 to 2.5V■ Development Tools Support표 1. STR710의 특징■ Wide supply voltage range- A port: 1.2 to 3.6V- B port: 1.2 to 5.5V■ Direct interface with TTL levels■ Bidirectional flow control■ Control inputs voltage range from 2.7V to 5.5V■ CMOS low power consumption■ 16-bit (dual-octal) translating transceiver표 3. 74ALVC164245의 특성
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지