기본적으로 허큘렉스 모터는 Serial Interface Unit 을 이용하여 RS232 시그널 입력으로 구동하게 되어 있습니다.
Serial Interface Unit은 RS232 시그널을 TTL 레벨로 컨버전 시키는 역할과, 모터 구동 전압을 전달하는 역할을 합니다.
참조페이지 :: http://lifeseed.tistory.com/89
장비의 간소화를 위해 Serial Interface Unit을 제거하고 Direct로 전원과 라즈베리파이의 UART 데이터를 입력하면 되지 않을까하여 테스트 해봤는데, 잘 동작하는 군요.
라즈베리파이 UART 설정 관련 내용은 아래 사이트를 참조하였습니다.
https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb
우선 라즈베리파이의 UART는 ttyAMA0 를통해 제어된다.
부팅시 ttyAMA0가 설정되어 사용되니, Port Open이 안된다. 따라서 부팅시 ttyAMA0를 Free 상태로 만들어주는 작업이 필요하다.
1. /boot/cmdline.txt 수정
2. /etc/inittab 수정
72 line ttyAMA0 가있는 라인 주석처리
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
3. RaspberryPI 재부팅
이제
함수를 통하여 UART Port를 Open하여 입출력 Interface로 사용가능하다.
cf) Port Open 함수
{
struct termios newtio;
// fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NONBLOCK);
fd = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NONBLOCK);
if(fd == -1) {
return false;
}
memset( &newtio, 0, sizeof(newtio) );
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
tcflush (fd, TCIFLUSH ); //reset modem
tcsetattr(fd, TCSANOW, &newtio ); //save setting
return true;
}
4. 라즈베리파이와 HerkuleX 서보모터의 연결
서보모터를 두개 이상 연결시 빈 슬롯이 두군대가 나온다.
한 곳은 모터 구동을 위한 전원 VDD/GND 를 연결하고 한 곳은 RaspberryPI로 부터 RX/TX/GND를 따와서 연결하면 된다.
참고로 라즈베리파이 확장핀 바깥쪽 끝에서 3번째 부터가 GND/RX/TX 이다.
그리고 서보 모터는 홈이 파인곳 오른쪽 부터가 GND/VDD/TX/RX 이다.
"본 제품은 동부로봇에서 후원하고 아이씨뱅큐 무상체험단 13기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다."