'BIM-433(418)'을 이용한 시리얼 RF 통신

2007/11/12 10:20 로보트
  이번 동아리 전시회 때 로봇축구의 팀원으로 RF 통신을 해보았다.

  RF 모듈은 Radiometrix(http://www.radiometrix.co.uk )의 BIM-433모델을 사용했다. RF 통신으로 흔히 사용되는 모듈로 우리나라에서도 흔히 쓰이는 듯하다.
  'BIM-433-40'은 Euro Version이고, 'BIM-418-40'은 UK Version이다. 기능은 똑같아서 쌍으로 사용하면 된다.

  기본적으로 컴퓨터 Serial Port에 연결하여 송신하고, 로봇에서 수신하는 방식을 사용하기로 했다. 단방향은 전환 시간이라든지 노이즈가 가장 덜 타기 때문에 사용이 쉽다고 한다.

사용자 삽입 이미지

  송신부를 회로를 보면 'Transmitter Enable'로 설정되어 항상 데이터를 전송하고 있다. 그래서 수신부의 'Carrier Detect' 핀을 찍어보면 항상 Low로 떨어져 있다.
 
  "RS232" Serial Data 전송 방법은 데이터시트 뒷부분에 나오나 Radiometrix사이트 App note에 자세히 나온다.
http://www.radiometrix.co.uk/apps/apnt101.htm 

 실제 데이터를 전송하기 전에 아래의 순서로 헤더 코드를 붙여준다.

Preamble -> UART Sync -> Start Code

Preamble - '0x55(고주파 데이터)'를 대략 3ms 이상 전송한다.
UART Sync - '0xFF'를 1, 2 바이트 전송한다.
Start Code - 고유한 시작코드를 전송한다. 수신부에서는 이 신호를 기점으로 실제 데이터를 받을 준비를 한다.

  RF 통신의 특성상 데이터가 저주파성분(0xFF나 0x00)을 띨 때 노이즈가 생길 확률이 높아진다. 따라서 0(mark), 1(space) 비트 비율이 50:50이 되도록 맞추길 강조한다. 그래서 데이터시트에서는 3가지의 인코딩 방법을 추가로 설명해 주었다. 총 전송 데이터의 양이 늘어나는 대신 에러율이 적어 속도를 높일 수 있다.
 

  일단 로봇축구에서는 많은 데이터나 높은 속도가 요구되지 않기 때문에 인코딩 방법은 추가로 사용하지 않았다.

  CPU로 사용된 TMS320F2808의 SCI 핀과 RF 모듈을 연결하였으나 문제가 발생했다. CPU의 SCI핀은 기본 HIGH 상태에서 LOW로 떨어지는 시점을 시작으로 인식했으나, BIM-433의 RXD(RF->CPU)핀은 기본이 LOW였다.  신호의 극성은 맞으나 초기상태가 틀려 문제가 발생했다.

  RXD Pin을 풀업해도 BIM-433의 내부저항으로 신호가 풀업이 되는 것이 아니고 중간에 뜨게 된다. 그래서 버퍼를 사용하려 했느나 'Enable'을 연결할 핀이 없어 못하는 중에 동아리 선배분이 도와주었다^^.

 문제점은 CPU(TMS320F2808)에서 SCI(UART) 에러 처리를 하지 않았던 것. 첫 비트가 HIGH->LOW가 아니라서 Rx 오류가 발생하게 되는 데, 이 오류를 클리어 해주면 다음 데이터 부터는 정상적으로 받을 수 있다는 것이다. 즉, Rx 에러 비트를 클리어해줌으로서  첫 바이트는 오류로 버리고 다음 바이트부터 데이터를 정상적으로 받을 수 있었다.


 
  또한 PC와 CPU간의 통신 시 데이터 형을 구조체로 선언하여 바이트 오더와 정렬을 하여 간편하게 받아오고 싶었으나, TMS320F2808의 데이터 크기와 메모리 구조가 PC와 차이점이 커서 결국 변수 하나하나 넣어주는 방식을 사용하게 되었다. TMS320F2808에서 sizeof의 크기가 일반적인 것과 달라 고생했다. 결국 하윤이형이 찾아 줘서 넘어갔다.

  Note: TMS320C28x Byte Is 16 Bits

By ANSI/ISO C definition, the sizeof operator yields the number of bytes required
to store an object. ANSI/ISO further stipulates that when sizeof is applied to char,
the result is 1. Since the TMS320C28x char is 16 bits (to make it separately
addressable), a byte is also 16 bits. This yields results you may not expect; for
example, size of (int) = = 1 (not 2). TMS320C28x bytes and words are equivalent
(16 bits).
2007/11/12 10:20 2007/11/12 10:20
  1. 진이  2007/12/24 15:53     댓글주소  수정/삭제  댓글쓰기
    안녕하세요 구성하신 회로에 궁금한점이 있어 이렇게 덧글 남깁니다. 제가 2812로 테스트중인데 rxd와 txd를 Yarmini님께서 구성하신 회로데로 물려도 되는지 궁금해서 문의드립니다. 저는 rxd를 저항을 이용해서 5v->3.3v 레벨로 변환했고 txd를 바로 연결했는데 오류가 좀 많이 있어서요. dsp의 SCI와 연결할때 Yarmini님께서 구성하신 회로데로 바로연결해도 문제없을까요?
    • Yarmini  2007/12/24 23:44     댓글주소  수정/삭제
      안녕하세요^^ 메일주소 남겨주시면 더 좋았을텐데^^;;
      처음에는 3.3V로 바꿔줘야 하지 않을까.. 하다가 일단 그냥 달아봤는데요.
      별 문제 없이 동작하더라구요.

      전 BPS 4800으로 느린속도를 사용하였기 때문에 오류가 적었을 수도 있네요^^
  2. 진이  2007/12/25 17:42     댓글주소  수정/삭제  댓글쓰기
    감사합니다. ^^ 느린속도로 하니 오류가 거의 없어졌습니다. 덕분에 크리스마스는 집에서 보냅니다~ ^^; 그럼 즐거운 연말 크리스마스 보내세요~ ^^ ~
  3. 준이  2007/12/27 12:54     댓글주소  수정/삭제  댓글쓰기
    안녕하세요 yarmini님...제가 이번에 RF통신에 입문하게되었는데요...정말 왕초보에요...혼자 공부해서 시작해나가야하는데...어떻게 시작을 해야할지 감이안와서요...그리구 위의 회로는 yarmini님이 직접 만드신거죠? 전 BIM-418을씁니다...aj53s@nate.com으로 답글주세요...궁금한거있음 계속 여쭤바도 될런지 ^^; 참고로 데이터 시트는 볼줄압니다...
  4. 주이  2008/07/16 17:29     댓글주소  수정/삭제  댓글쓰기
    안녕하세요~ rf통신을 공부하고 있는 학생인데요 ㅋ 일단 하드웨어는 만든다고 만들었는데.. 근데 셀렉트에 저항 꼭 달아야하나요?? 그리구.. 프로그래밍을 코드비젼을 사용해서 하는데 아무리 찾아도 저랑 같은 조건인 프로그램은 없더라구요.. ㅜㅅㅜ 혹시 간단한 회로 테스트 할만한 프로그램 있으면 알려주심 안될까요?? 대충 개념은 있는데.. 값을 전송할때 한 핀을 통해서 직렬로 전송하는게 쫌 이해가 안되네요;; 어떻게 프로그램해야지 그렇게 나가는지;; 도움좀 주시면 감사하겠습니다~
    제 메일 주소는 yellow79012@naver.com 이에요~ 부탁드려요 ^^ㅋ
  5. 동혁  2008/10/09 14:34     댓글주소  수정/삭제  댓글쓰기
    안녕하세요?저도 이것과 비슷한 것을 만드려고하는데요..제가 워낙 초보라서 어려움이 많이있습니다. 이것저것 여쭤보려고하는데..우선 어떤 부품들을 사용하셨는지 궁금합니다. hyuck96@nate.com으로 메일주시면 감사하겠습니다. 그럼 수고하세요^^

[010v4] PID제어시 QEP설정과 센서값 적분 입력

2007/07/20 23:42 로보트

PID 제어를 위해 2811 코드를 참고로 포팅하다 보니

QEP를 0으로 변경시에 초기화 명령어를 사용하지 않고, 2811처럼 Count Register에 0을 입력 하였더니,

가끔씩 0으로 초기화가 되지 않는 문제 발생. 이것때문에 PID제어시 톡톡 튀는 증상이 있었다.

----

센서 입력 방식을 기존의 절대값에서 하윤이형의 적분 방식으로 변경 시도.

ADC Sequence에 입력을 동일하게 8개를 설정한 후

한번에 연속적으로 8번 ADC하여 값을 구하는 방식을 사용.

이때 Sequence Clock을 조정하여 시간차를 구함.


설계가 간단하여 코드가 기존의 방식과 별로 차이가 없을 듯 하다.


그런데 현재 적분과 관계없이 센서값이 일정 값이상 들어오면 ADC값이 안들어오는

문제가 있다.

----

마우스 이름은 '010v4' 5글자인데. VFD는 4글자다...

마우스의 Display화면에 마우스 이름을 다 넣지 못하다니..

큰일이 아닌것 같지만서도.. 몬가 찜찜한 문제.

스크롤 방식을 짜던가, 010v4의 닉네임을 만들어야겠다ㅋ

----


하나하나 의외로 발생하는 문제들 때문에 진도가 잘 나가지 않고 있다.

휴.. 서울대회가 얼마 안남았는데..

 

2007/07/20 23:42 2007/07/20 23:42
  1. koguryo  2007/07/21 10:16     댓글주소  수정/삭제  댓글쓰기
    sequence clock은 머여? ACQ_PS로 안해? 그리고
    continuous cascaded sequential samping 이 편하지 않나? 인터럽트 모드 쓰면 8번 구하고 나서 자동 인터럽트 걸리게 하믄 될텐데...
    • Yarmini  2007/07/23 22:40     댓글주소  수정/삭제
      아.. ADC 클럭하고 ACQ_PS클럭 조정하면서 했어요^^ 자동 인터럽트 방식 안쓰고요. 그냥 기존의 타이머로 돌리는 것을 그대로 사용하되 한번에 하나씩 ADC하는 것을 한번에 8번씩 하는 것으로 바꿨어요. 버그도 잡고 이제 보정해야죠`

[010v4] TMS320F2808 Port Pulldown으로 고생

2007/07/03 14:40 로보트

사용자 삽입 이미지
Canon DIGITAL IXUS 65 | 1/50sec | F2.8


센서부를 제외한 보드 조립을 완료하여 JTAG을 연결, 테스트 해봤다.

통신까지는 잘 되는데, Monitor Program으로 점프 뛰는 명령어에서 예외 처리가 발생.

진행이 되지 않는다. 기존 테스트 보드에서와 결과가 비슷하여 온갖 사항을 다 점검하여 시도해 봤으나 잡히지 않았다. 결국 하루 종일 고생하고 새로운 PCB에 다시 최소한의 부품으로 조립하게 되었는데, 잘 되는 것이 아닌가..

원인을 검토 해 본 결과 스위치로 쓸 포트를 풀다운 하면 그런 증상이 발생 하였다. 보통 스위치포트에는 풀업 저항을 연결 하는데 난 스위치가 눌릴 때 'HIGH'상태로 하고 싶어 풀다운 저항을 연결하였었다. 풀업으로 바꾸니까 바로 정상 동작!

GPIO13, 14포트의 초기 풀다운 시의 원인은 좀 더 살펴 봐야 겠다.


(순식간에 보드가 두장이 됬네...)

2007/07/03 14:40 2007/07/03 14:40

[010v4] TMS320F2808 테스트 보드 완성, 모니터프로그램 동작

2007/04/16 08:46 로보트

 몇일전에 완성된 TMS320F2808 PCB를 사용할 테스트 보드를 완성했다.
(사실.. 2575 레귤레이터 붙인 거 밖에 없다)

 TMS320F2808을 굽기 위해 Realsys의 RealDSP-UT 6pin Serial 커넥터를 연결하여 Rom-Writing을 하려 했으나 이상하게 내 PCB만 동작이 안됬다. 이래저래 문제점을 찾아봐도 원인은 나오지 않았다.
 
 결국 혹시나하여 하윤이형의 JTAG 디버거로 연결하여 구동하니 Rom-writing이 정상적으로 동작하였다.
CPU는 정상 동작 중이었으며 어떤 이유에서인지 RealDSP-UT와 통신이 안됬던 것 같다. 일단 문제점 찾는 것은 패스.

 일단 모니터 프로그램을 구웠으니 앞으로 시리얼로 통신하며 개발 할 수 있게 되었다.

사용자 삽입 이미지
HD1A | Program | 0ssec | F3.5 | 35mm equiv 38mm | ISO-100

사용자 삽입 이미지
HD1A | Program | 0ssec | F3.5 | 35mm equiv 38mm | ISO-100

사용자 삽입 이미지
HD1A | Program | 1/14sec | F3.5 | 35mm equiv 38mm | ISO-100



 참고로 초기 TMS320F2808 Chip은  부팅 시 연속적으로 Watchdog Reset이 발생 하여 Reset Pin 파형이 High에서 Low(while OscClock*512 cycle)로 떨어졌다가 올라갔다가 한다.

2007/04/16 08:46 2007/04/16 08:46
  1. 병기  2007/04/23 17:14     댓글주소  수정/삭제  댓글쓰기
    허접때기 저거하는데 하루가 걸리다니 ㅋㅋㅋ

[010v4] TMS320F2808 PCB보드 조립

2007/04/13 01:58 로보트
*

  각 종 센서 테스트를 하기 위해 TMS320F2808 PCB보드를 조립했다. 워낙 CPU가 잘 나간다고 하길래 샘플 신청이 가능한 것으로 하기로 했다. JTAG Cable이 없어서 구워보지는 못하고 내일 해야 겠다.

*
  발광 각도가 적고 수광 각도를 크게 해야한다고 하윤이형이 얘기해줬다. 일정 거리 떨어진 경우 발광이 출력하는 각도를 벽에 반사되서 돌아오는 걸 모두 받으려면 수광 각도가 커야한다는 것은 맞는 것 같다. 흠.. 문제는 다른 벽에 반사된 센서값도 들어온다는 단점이 있다.

*

아쉬움, 열정, 목표..

이것이 마우스를 다시 하는 이유다.




2007/04/13 01:58 2007/04/13 01:58
menu openmenu close