falinux EZ-X5에서 서보모터 제어하기
초보인지라 어디서 어떻게 잘못되었는지도 잘 몰라서
개념이라도 잡아주십사 하고 이렇게 질문드립니다.
falinux사의 EZ-X5 보드를 사용하여 서보모터 제어를 하려고 합니다.
제가 해본것은 디바이스 드라이버를 제작하여 제어하는것 입니다.
모듈적제시 커널타이머를 등록합니다. 등록할때 20미리세컨드간격으로 타이머를 호출하고
타이머가 호출되면 미리입력된 값만큼 모터에 신호를 준후에 다시 자기자신을 등록시킵니다.
이렇게 반복적으로 20ms 마다 등록되며 등록된 함수는 일정한 길이의 신호를 쏴주도록 설정하였습니다.
일정간격마다 일정한 신호를 줌으로써 서보모터가 일정한 각도를 유지할 수 있게 되었습니다.
이것을 응용하여 버튼을 이용해서 서보모터의 각을 변화시키려고 합니다.
가장 먼저 해본것은 신호를 주는 길이 부분을 변수로 바꾸고
저 변수 값을 바꿈으로서 신호의 장단을 조절하여 모터각도를 바꾸는 것이었습니다.
하지만 이방법은 안되더군요.. 초기 입력값과 다르게 모터각도가 실행되고
모듈 제거시 커널이 다운됩니다. <- minicom을 실행시킨 윈도우 자체가 완전 먹통이 됩니다.
다른 방법은 아예 커널 타이머 자체를 여러개 만들어놓고
입력값에 따라 타이머를 갈아타는 것입니다. 이렇게 되면 신호를 주는 길이가 짧은 타이머를
실행하다가 신호를 늘리고 싶으면(각도를 바꾸고싶으면) 스위치값에 따라 더 긴 타이머로 환승하여
신호의 길이를 바꾸는 것입니다.
전자는 아예 되지를 않고 후자(타이머 갈아타기)는 어설프게나마 작동을 합니다.
하지만 한번 실행후 모듈을 제거하면 완전히 멈추거나 가상메모리 오류가 납니다.
또 한번 실행후 다시 응용프로그램을 실행시켜도 가상메모리 오류가 납니다.
심볼테이블에서도 메모리 관련 명령어를 가리켰었습니다. (잘기억이 나질 않습니다 ^^;;)
이렇게 접근하는 것이 맞는것인지요?
좀더 주의해야 할 것이 있는지요?
댓글 달기