첫 회로 구성 완료

2009.08.23 21:45 from programming
"소프트웨어 개발자의 하드웨어 개발기" 두번째 글입니다.

ARM Cortex M3 기반의 LM3S8962 개발보드에 블루트스 모듈, 3차원 가속도 센서 모듈을 연결하는데 성공했습니다. 전원공급과 배선 납땜조차 어떻게 해야하는지 모르는 상황에서 이래저래 하다보니 기대이상 잘 됐습니다. PWM 생성해서 서보모터 제어하는데에도 성공했습니다. 

DSC_6172

완성한 1차 보드의 모습. 맨 왼쪽은 JTAG 인터페이스, 가운데가 LM3S8962개발보드, 맨 우측이 블루트스 통신 모듈, 그 아래가 3차원 가속도 센서입니다. 기판 아래쪽에는 전원 공급과 서보모터를 연결하는 핀을 배치했습니다. 

하나하나 직접 만들려면 꽤나 어려운 일일텐데, 고맙게도 모듈화가 너무 잘 되어있어서, 필요한 모듈을 사다가 연결만 하면 되는 수준이었습니다. 이제 납땜은 일시 중단하고, 소프트웨어 개발을 본격적으로 해봐야겠습니다.
 
(저 보드는 프로토타입이랍시고 대강대강 만들었는데, 한번 하고 나니, 다시 하고 싶지는 않아서, 그냥 저걸로 그냥쓸까도 생각중입니다. 아마도 이걸로 끝나지는 않겠지만요)

여기까지 만들면서 어리석은 궁금증이 많았는데, 이래저래 찾아보고, 또 가까운 전문가(!)들에게 물어봐가며 해결했습니다. 제가 궁금했던 부분과 그 해결사항을 나름대로 적어봅니다. (학창시절이었다면, 자료 찾아보기도 쉽지 않았을텐데, 요새는 위키페디아에 이런정보들도 아주 잘 나와있더군요. 위키페디아 덕을 톡톡히 보고 있습니다. 이하는 제멋대로 이해한 내용이며, 정확한 내용을 위해서는 위키페디아를 보시는게 좋을것 같습니다) 

Q. 서보모터를 제어하기 위해서는 PWM (Pulse-Width Modulation)방식을 쓴다고 하는데, 대체 PWM이 무엇인가?
A. 1과0의 값을 넣어주는 주기와 길이에 따라 그 중간값을 표현하는 방식입니다.


위 그림으로부터 단순하게 이해하면, T주기 내에서 Ymax로 표현된 값이 지속된 시간 DT만큼의 비율로 표현 값을 이해할 수 있습니다. 예를들어 D.T가 T의 절반이라면 0.5로 해석하고, T와 같다면 1.0, 계속 Ymin이라면 0.0이라고 이해할 수 있는 것입니다.

제가 구매한 서보모터의 사양을 보면, 20ms주기 T에서, 1.5ms동안 High신호를 주고, 나머지를 Low로 주면 중립위치를 지키고, 1.0ms ~ 2.0ms 범위에서 High값을 주면 해당 값에 맞게 서보모터의 각도가 변화합니다.  즉, 20ms중에 앞부분 일부만을 사용해서 결과값을 사용하는 것이죠.

Q. 회로도들을 보면 캐퍼시터를 끼워넣는 곳이 많은데, 캐퍼시터의 역할은?
A. 전류를 안정화합니다. 

캐퍼시터의 역할이 여러가지 있는것 같은데, 제가 본 회로도에서의 역할은 전류흐름 안정화였습니다. 각종 대학서적을 봐도, 캐퍼시터의 종류와 특성은 잘 나와있으나, 왜 쓰는지에 대한 얘기를 찾기 어려웠습니다. 나와있어도, 저로서는 이해하기 어려웠습니다만, 결국 이해한 내용은 매우 간단합니다. 소프트웨어쪽으로 치자면 버퍼링입니다. 버퍼사이즈가 너무 적으면, 중간중간 데이터가 끊기는 상황이 생길 것이고, 사이즈가 너무 크면, 버퍼링하는 시간이 길어지겠죠. 적절한 크기에 맞는 캐퍼시터를 택하는것이 적절한 버퍼사이즈 정하는 것과 비슷한 문제인 것 같았습니다. 

DC전원을 공급하더라도, 그때그때 상황에 따라 전류가 튈 수 있는데, 이로 인한 오동작을 막기 위해 캐퍼시터를 중간에 병렬로 끼워주면, 안정화를 돕는 것 같습니다. 

Q. 서보모터를 제어하기위해서는 4.8V~6V사이의 전압을 공급해야하는데, MPU에서 나오는 PWM신호(아마도 3.3V)를 공급해서도 제어할 수 있는가?
A. 연결해보니 잘됩니다.

LM3S8962보드는 공급전압이 3.3V입니다. 각종 출력핀의 전압도 3.3V이지 않을까 생각되는데요, (지금생각해보니 측정해보면 되는군요ㅠ.ㅠ), 그렇다면, PWM출력신호도. 3.3V일 가능성이 높았습니다. 이 신호를 그대로 써도 서보모터가 정상 작동할지가 궁금했었습니다. 자료도 찾아보고, 주변의 전문가(!)들에게 물어보니, 아마도 될거 같으니, 한번 연결해 보라는 답변을 들었습니다. 

찾아보니, 이런 디지틀 입출력값을 TTL(Transistor-Transistor Logic)방식이라고 하는데, 0V~5V의 범위에서 0V~0.8V로 연결되면 Low(0), 2.2V~5.0V로 연결되면 High(1)로 나누어 판단하는 기준이었습니다. 즉, 만약 3.3V로 High신호가 나간다고 하더라도, 5V TTL기준에서 2.2V이상의 기준에 걸리기 때문에, 통신에는 문제가 없게 되는거죠. 


이 정도가 이제까지 가장 궁금했던 내용인데, 오늘 프로토타입 보드를 완성하면서 모두 해결되었습니다. 이렇게 저렇게 다 수가 생기는군요. 


-- Special Thanks to 도니형 & 근용군

Posted by hatemogi 트랙백 0 : 댓글 5

티스토리 툴바