이래저래 여기저기서 소스보면서 하고 있는대요
의문이 막들어서..
지금짠것들도 다 작동도 잘 안돼고 ㅜㅠ
다수 서보를 I/o포트로 제어할때 보통
시분할방식으로 한다고 하더군요
20ms의 주기에 0.7~2.3ms 의 펄스를 주면 0~180도로 회전합니다.
거이다 2.3ms안에 1을 주고 나머지 0을 주고 그다음 또 펄스주고
이렇게 2.3ms마다 넣어준다고 하더군요.
그래서 보통
처음에 오버플로우 인트럽트에 서보인덱스 이동시키고
그다음 컴페어매치로 펄스를 넣는 다는대..
제가 아직 인트럽트를 잘 이해를 못해서요
c언어라든지 이게 순차지향이라
차례대로 하지 않습니까 인트럽트가 호출되면서 그백터로 가서 그걸 실행시킨다..
라고..
그래서 인트럽트 실행시키고 그시점부터
2.3ms펄스를 8개 만들면 18.4ms 10개면 23ms 그이상이면
....시간은 더 길어 지죠..
그러니 20ms안에 서보에 정상적으로 값이 안들어 갈것 같은대 대부분
컴페어 하나에 8개 제어 신호를 주시더군요...
즉 10개 이상 펄스만들면 그다음 서보에는 정상적으로 신호가 안들어 갈것 같다는 거죠..
인트럽트 걸린시점 에서 다른 인트럽트도 같이 실행시키는 것도 아닐것인대 ..
어떻게 가능한것인지...제발 설명점 부탁드립니다.
의문이 막들어서..
지금짠것들도 다 작동도 잘 안돼고 ㅜㅠ
다수 서보를 I/o포트로 제어할때 보통
시분할방식으로 한다고 하더군요
20ms의 주기에 0.7~2.3ms 의 펄스를 주면 0~180도로 회전합니다.
거이다 2.3ms안에 1을 주고 나머지 0을 주고 그다음 또 펄스주고
이렇게 2.3ms마다 넣어준다고 하더군요.
그래서 보통
처음에 오버플로우 인트럽트에 서보인덱스 이동시키고
그다음 컴페어매치로 펄스를 넣는 다는대..
제가 아직 인트럽트를 잘 이해를 못해서요
c언어라든지 이게 순차지향이라
차례대로 하지 않습니까 인트럽트가 호출되면서 그백터로 가서 그걸 실행시킨다..
라고..
그래서 인트럽트 실행시키고 그시점부터
2.3ms펄스를 8개 만들면 18.4ms 10개면 23ms 그이상이면
....시간은 더 길어 지죠..
그러니 20ms안에 서보에 정상적으로 값이 안들어 갈것 같은대 대부분
컴페어 하나에 8개 제어 신호를 주시더군요...
즉 10개 이상 펄스만들면 그다음 서보에는 정상적으로 신호가 안들어 갈것 같다는 거죠..
인트럽트 걸린시점 에서 다른 인트럽트도 같이 실행시키는 것도 아닐것인대 ..
어떻게 가능한것인지...제발 설명점 부탁드립니다.
모터 3개를 제어한다 치면..
0~2.3ms동안에는 1번 모터에 펄스를 주고, 2.3ms~4.6ms에는 2번 모터에 펄스를 주고, 4.6ms~6.9ms에는 3번 모터에 펄스를 주는 형태가 되는것이지요... 전체 3개를 제어하는데는 20ms안에 제어되는거죠^^;
타이머 한개로 제어하게 되면 해당 모터를 제어하는 주기에 IO포트를 1, 0으로 적절히 입력을 인가해주면 됩니다.
글로 설명하기는 역시 좀 그렇네요..
같은 주기에 180도 회전에 대한 펄스를 8을 곱하면 최대주기와 같고 나머지는 다른 컴패어를 통해서
제어해서 총 3개의 컴패어를 쓰니 되더군요 ..전 이컴패어 끝나면 다음 컴패어 걸릴줄 알았는대 ..같은 타이머에서 같이 작동하는 구조인가보더군요 ... 일단 작동이 되니 그렇게 이해하고 있는대...맞는건지 ^^
이제 서보 속도만 하면 제가 원하는 제어가 될거 같습니다...감사합니다. ^^