임베디드 소프트웨어 공모대전 수상작 ➄ 첨단 의료 서비스 과제 부문 최우수상

글 : CIS Lab(한국기술교육대학교 전자공학과 이선호 외 3명)  /  자료제공 : 임베디드소프트웨어산업협의회 (www.kwsic.or.kr)

Software 개요

사람의 팔(상완 이두박근, 상완 삼두박근)로부터 근전도 신호를 추출하여 이 신호를 필터링하고 처리하여 액츄에이터를 동작시킴으로써, 무거운 물체를 쉽게 들 수 있도록 도와주는 로봇 팔 기구를 제작하였다.

개발 목적

사람의 팔에서 근전도 신호를 추출하여 사람의 팔 동작을 도와주는 외골격 로봇 팔을 제작한다. 팔이 불편하거나 근력이 부족한 노약자를 도와 무거운 물건을 쉽게 들 수 있으며 의약, 건축, 군용, 산업 등 여러 분야에서 사람이 들 수 있는 무게 이상의 물체를 옮길 때 활용 될 수 있다.

Software 내용

1. 구성



2. 기능

►하드웨어 기능

 1) EMG 신호 Sensing
EMG 신호란 사람의 근육 활동을 직접적으로 반영하여 나타낼 수 있는 중요한 생물학적 신호이다. EMG는 많은 근육 섬유로부터 나오는 전기적인 신호를 측정하는 것이다. 이것은 피부에 직접 부착되어 근육이 활동할 때 나오는 전기적 신호를 추출하기 때문에 비교적 정확하다.

따라서 사용자의 피부 표면의 EMG 신호를 체크하면 로봇의 움직임을 미리 예측할 수 있다. 피부 표면에 부착되어 근전도 신호를 추출하는 센서는 Ag/Cl 패치와 바이폴라 스냅전극을 이용하여 추출한다.


 
 Ag/Cl 패치의 부착위치는 다음과 같다. 


상완 이두근은 팔의 굽힘 동작에 관여를 하는 근육이고 상완 삼두근은 팔의 폄 동작에 관여를 하는 근육이다. 상완 이두근과 상완 삼두근에 각각 활동전극과 참조전극을 부착하여 그 두 전극의 미세 전압 차이를 측정하여 로봇의 입력 신호로 이용한다.

활동 전극과 참조전극은 5mm정도 떨어진 위치에 부착한다. 접지전극의 부착위치는 특별히 정해진 것은 아니지만 활동 전극과 참조전극과 떨어질수록 좋다. 따라서 팔목에 접지전극을 부착하여 사용하였다.

2) 회로부



EMG 신호를 추출하여 이 신호를 입력으로 하는 회로부를 구성하였다. 순서는 차동증폭, Notch Filter, HPF, LPF, Clipping 회로 이다.
 
·차동증폭

                                  차등증폭 회로


                                INA126 내부 회로

활동전극과 참조전극 사이의 전압을 증폭하는 차동증폭회로로 INA126을 사용하였다. 이 신호는 0.01~10mV로 매우 작은 값이기 때문에 증폭이 필요하다. 이 IC의 데이터시트를 이용하여 증폭도를 계산해 보면 G = 5+(80KΩ/100) = 805이다. 따라서 Vout = [Vin(3pin) - Vin(2pin)]*G 이므로 약 805배 증폭된 출력신호를 얻을 수 있다.
 
·Notch Filter



노치 필터(Notch Filter)는 특정 주파수에서 급격한 감쇠성을 가지고 있는 필터이다. 상전 전압에 존재하는 60Hz의 주파수 대역을 제거하기 위해 이 필터를 사용하였다.

·High Pass Filter & Non-inverting Amplifier


                                                 High Pass Filter


                                                     Low Pass Filter

근육에서 나오는 신호의 범위는 최소 10Hz, 최대 2,000Hz의 범위이다. 하지만 스펙트럼 분석기를 이용하여 측정한 결과 일반적으로 사용되는 신호의 주파수 범위는 20~450Hz이다. 따라서 그 이외의 주파수는 잡음이라고 생각하고 HPF와 LPF를 사용하여 나머지 범위의 신호를 차단하였다. HPF를 사용하여 20Hz 이상의 주파수만을 통과, LPF를 사용하여 450Hz 이하의 주파수만을 통과하도록 설계하였다.

·Clipping 회로


                                                 Low Pass Filter
 
신호 처리를 위해 사용한 TMS320F28X DSP 모델은 ADC 기능을 사용하기 위한 아날로그 입력 신호 범위가 0~3V이다. 하지만 차동증폭회로, Notch Filter, HPF, LPF를 거친 신호는 이 범위 밖의 값도 가지고 있으므로 신호를 그대로 받아들여 DSP의 ADC 기능을 사용할 수 없다. 따라서 DSP의 입력신호를 0 ~ 3V의 범위를 가지도록 하기 위해 Clipping 회로를 사용하였다.


                                    Gain Control & Level Shift 된 신호

3) DC Motor 제어




·모듈 제어 표



- /Enable 신호 : 0일 때 동작 / 1일 때 동작안함
- Dir : 1일 때 정방향 / 0일 때 역방향
- PWM : 1인 상태가 길면 Fast / 0인 상태가 길면 Slow

►소프트웨어 기능

1) 근육과 기구 동작의 관계
 - 1CH : 이두근    - 2CH : 삼두근



·이두근 신호와 삼두근 신호 모두 나올 때 굽힘 동작
·이두근 신호만 나올 때 굽힘 동작
·삼두근 신호만 나올 때 폄 동작
·두 신호 모두 나오지 않을 때 정지 동작
 
2) DSP -  TMS320F28X





3) 동작 알고리즘(CH1, CH2)
 
  ① 근전도 신호 기준레벨 검출
       ·목적 : 사용자마다 근전도 신호가 다르기 때문에 기준레벨 검출
       ·방법 : 프로그램 시작과 동시에 5초간의 근전도 신호 (ADC 값 2000000번) 중 가장 높은 신호를 검출
  ② 근전도 신호 100ms에 ADC값 100개를 받는다.
  ③ 100ms동안의 ADC값 최대값을 검출
  ④ 100ms동안의 최대값이 기준레벨 값보다 높다면 동작 ON
  ⑤ 100ms동안의 최대값이 기준레벨 값보다 낮다면 동작 OFF



      ·기본 상태에서의 DSP에서 확인한 값 ,
        좌측 2개의 그래프에서 중간에 있는 선이 기준 레벨
        좌측 상단 그래프 : Ch1 : 이두박근
        좌측 하단 그래프 : Ch2 : 삼두박근
        우측 상단 그래프 : Ch1 : 이두박근
        우측 하단 그래프 : ch2 : 삼두박근
        가장 오른쪽 변수 상태창 : 가장 아래쪽 3개 : Direction. Enable, PWM

      


3. 프로그램 사용법(Interface)


►DSP(TMS320F28X) 사용법
  1) 환경 설정


 
2) 프로그램 실행 방법
  
 ① 압축 해제
·주어진 파일을 C:EMG_Robot_Arm에 압축을 해제한다.



 ② CCS 실행
 ·CCS를 실행하여 Project-Open으로 CIS_Robot_Arm.pjt 파일을 연다.

 ③ JTAG connect
 ·JTAG을 DSP모듈과 연결한 후 모듈에 전원을 넣고 Alt+C를 눌러 JTAG을 연결한다.



④ 컴파일
·F7키를 눌러 프로젝트를 컴파일 한다



⑤ 다운로드
·2812 On chip flash programmer를 실행시키고     프로그램을 다운로드 한다.

 ※ 플래쉬에 올라가 있기 때문에 Stand-Alone으로 실행이 된다.

4. 개발환경

1) 개발 언어
·C 언어

2) 개발 Tool
·Code Composer Studio v3.3, OrCAD, PSpice, MultiSim, SolidWorks, Power Mill

3) 개발 환경
·Windows XP

5. 프로그램 설명

►파일구성

- Project name : CIS_Robot_Arm.pjt
- included files : (헤더 파일)
 DSP281x_Adc.h
 DSP281x_CpuTimer.h
 DSP281x_DefaultISR.h
 DSP281x_DevEmu.h
 DSP281x_Device.h
 DSP281x_ECan.h
 DSP281x_Ev.h
 DSP281x_Examples.h
 DSP281x_GlobalPrototypes.h
 DSP281x_Gpio.h
 DSP281x_Mcbsp.h 
 DSP281x_PieCtrl.h
 DSP281x_PieVect.h
 DSP281x_Sci.h
 DSP281x_Spi.h
 DSP281x_SWPrioritizedlsrLevels.h
 DSP281x_SysCtrl.h
 DSP281x_Xintf.h
 DSP281x_XIntrupt.h

- Source :
 DSP281x_Adc.c
 DSP281x_CodeStartBranch.asm
 DSP281x_DefaultIsr.c
 DSP281x_GlobalVariableDefs.c
 DSP281x_PieCtrl.c
 DSP281x_PieVect.c
 DSP281x_SysCtrl.c
 DSP281x_usDelay.asm
 CIS_Lab.c
 DSP281x_Headers_nonBIOS.
 F2812_EzDSP_RAM_lnk.

► 함수별 기능

1) CIS_Lab.c

- InitSysCtrl() : Watchdog setting, 동작 속도 결정, Initialize the peripheral clocks

- InitPieCtrl() : PIE회로에 의해 확장된 모든 인터럽트 벡터를 비활성화, 관련 flag all clear

- InitPieVectTable() : PIE회로에 의해 확장된 인터럽트 벡터와 기본 ISR을 연결, 벡터를 확장영역으로 복사

- InitAdc() : initializes ADC to a known state
 : ADCENCLK bit : to powerup the ADC
 : 5ms delay : ADC가 powerup되기 위한 시간
 : ADC powerup
 : 20us delay : First ADC conversion time

- main() : InitSysCtrl(), InitPieCtrl(), InitPieVectTable(), InitAdc() 호출
 : ADC에 공급되는 클럭 설정 (high-speed-prescaler)
 : Disable CPU interrupts and clear all CPU interrupt flags
 : Initialize GPIO(General Purpose Input/Output)
 : Enable ADCINT in PIE
 : Configure ADC
 : Assumes EVA Clock is already enabled in InitSysCtrl()
 : Wait for ADC interrupt

- adc_isr() : ADC interrupt service routine
 : 최초 실행 후 2,000,000번의 ADC된 값을 토대로 동작 기준 레벨로 결정, 2,000,000번 측정한 값 중 가장 큰 값을 동작 기준 레벨로 결정
  (ref_vol_1, ref_vol_2)
 : 2채널에서 나오는 값을 ADC하여 크기가 100인 배열에 저장
 : 저장된 배열 값 중 최댓값을 가장 마지막 배열 주소에 저장
 : 배열의 가장 마지막 값을 동작의 기준을 판단하는 변수 max_v1, max_v2에 저장
 : max_v1, max_v2값과 기준 레벨(ref_vol_1, ref_vol_2)에 따른 동작 신호 출력
 : 동작 신호 = Direction , Enable, PWM Signal

- pwm_init() : PWM period set

►응용 분야


►기타
추진 문제점 및 해결방안 & 기술적 한계점

·패치를 통해 EMG 신호를 추출할 때, 원하지 않는 신호(Noise)까지 모두 포함되어 있어서 필터(High-pass Filter, Low-pass Filter, Notch Filter)를 사용하여 Noise를 제거했다.

·굽힘·폄 동작 구현하기위해 와이어, 모터, 액츄에이터, 유압실린더 중 액츄에이터의 직선운동을 축을 중심으로 한 회전운동으로 바꾸는 것이 토크나 안정성 면에서 가장 낫다고 생각하여 선정하게 되었다.

·기구부에서 무게를 전달 받는 부분의 내구성 문제 :
사람이 몸에 착용하기 때문에 경량화를 위해서 알루미늄을 사용하였는데, 어느 정도 이상의 무게(약 15kg)를 들어 올리려고 하면 기구부가 휘어져버리는 일이 발생하였다. 토크의 분산과 지지를 위해 알루미늄 봉을 힘을 받는 곳에 부착하여 힘을 분산시켰다.

·사람마다 기본 근전도 신호의 크기가 다르기 때문에, 알고리즘에 의해 고정된 값으로 비교하여 동작을 결정할 경우 피실험자가 바뀔 때마다 설정을 바꿔야하는 문제점이 있었다. DSP 코딩을 통해 초기 동작전원 인가 시 일정한 시간동안 피실험자의 기본 근전도 신호(아무힘도 주지 않은 대기 상태에서의 근전도 신호의 크기)값을 측정하여 이를 기준으로 삼아 동작 신호를 제어하게 되었다.

·오랜 시간 전극을 부착할 경우 전해질이 증발하여 정확한 근전도 신호를 측정할 수가 없게 된다. 어느 정도의 시간이 지나면 전극을 교체해 주어야 한다. 


 
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지