시립대 분들은 스텝트레이서 작업시에 T/C를 몇개나 사용하시나요?

T/C를 4개 모두 써볼생각인데 그렇게되면 성능에 문제가 생길수도 있나요? 


그리고 모터드라이버쪽과 다른부분의 GND를 분리할때 어떤식으로 분리를 하시나요? 그냥 선을 따로 쓰시는건지, 아니면 0옴저항이나 비드같은걸 다시는지 궁금합니다.

조회 수 :
8794
등록일 :
2013.08.19
07:03:57 (*.188.119.223)
엮인글 :
http://zetin.uos.ac.kr/xe/index.php?document_srl=219613&act=trackback&key=171
게시글 주소 :
http://zetin.uos.ac.kr/xe/219613

'19' 댓글

김상현

2013.08.19
09:04:43
(*.62.162.44)
profile
모터 양쪽과 센서 합해서 3개의 타이머를 사용합니다
굳이 4개를 쓰셔도 상관없을것같은데 각 인터럽트의 소스가 avr이 처리하기 부담스러운 주기로 동작하여야한다면 문제가 생길 것 같습니다 그라운드 분리는 선을 따로 배치하는 것 같은데 혹시 비드같은 것을 사용하는 회원이 있다면 답변부탁드립니다

이재영

2013.08.19
09:40:09
(*.16.22.200)
profile

저희는 Timer0, 1, 3 이렇게 3개를 Timer/Counter Control Register를 통해 사용하고 있습니다.

성능에 문제가 생긴다는게 인터럽트 간 충돌을 말씀하시는 것 같은데, Atmega128 데이터시트를 보시면 인터럽트마다 순위가 정해져 있고, 또 동시에 발생했을 경우 순위에 따라 차례대로 실행되기 때문에 성능에 문제가 생길 염려는 없습니다.

또한, 인터럽트 수행중 다른 인터럽트가 발생할 경우, 현재 실행되고 있는 모든 인터럽트를 종료하고 더 높은 순위의 인터럽트를 수행하는 것 같습니다. nested interrupt는 지원되지 않는 것으로 알고 있는데, 이건 데이터시트를 좀 더 봐야하겠습니다.^^;;;;


GND 분리는 그냥 선을 따로 사용하여 분리합니다. 모터드라이버쪽 GND만 배터리 단자로 직접 연결합니다.

 

 

Atmega128 datasheet 첨부합니다.

첨부 :
ATmega128.pdf [File Size:6.35MB/Download16]

equation

2013.08.19
10:23:45
(*.188.119.223)

모터를 제어할때 T/C 1,3을 통해서 제어를 하고있는데요. 이때 한쪽모터에 T/C하나씩 할당을 해주고 있습니다. 이렇게 되면 양쪽의 모터가 인터럽트가 매번 따로 걸리게 되서 약간의 문제 이를 보정해주고 싶은데요. 괜찮은 방법이 없을까요?

윤상필

2013.08.19
13:32:05
(*.16.166.224)

스텝모터의 경우 현재 잡고있는 상에서 다음 상으로 넘어갈때 동일한 각도를 움직이게 되고

이는 모터의 고유 스펙이기 때문에 저희가 바꿀수 없습니다

따라서 모터의 회전속도를 조절하기 위해서 현재 상에서 다음 상으로 넘어가는 시간을 길고 짧게 조절하며

회전속도를 제어하는 방식을 사용합니다


트레이서의 경우 방향 조절을 자동차처럼 steering wheel을 쓰지 않고 두 모터의 속도차를 이용하기 때문에

두 모터는 각각 속도조절을 할 수 있도록 해야 하고 이를 위해 두개의 타이머를 이용해 모터를 제어합니다

인터럽트가 걸릴때마다 다음 상을 잡게 하고 다음 인터럽트가 걸리는 시간을 조절해 모터의 속도를 결정해줍니다


따라서 스텝 트레이서를 만들기 위해서 양쪽 모터 인터럽트가 독립적으로 동작함은 어쩔 수 없는데

만약 주기적으로 제어해 줘야 할 어떤 코드나 제어기를 사용하고 있다면

센서 인터럽트 주기에 맞추는 방식으로 변경하시는게 좋을것 같습니다


정확히 어떤 문제가 생기는지 모르겠어서 이정도 답변밖에 드릴수 없네요

이재영

2013.08.19
14:35:23
(*.16.22.200)
profile

저희도 양쪽 모터 각각에 인터럽트를 하나씩 할당하여 독립적으로 움직이고 있습니다. 인터럽트가 1회 발생할 때마다, 한 스텝모터의 상을 다음상으로 움직여주는 방식으로 사용하고 있는데요, 양쪽 모터에 인터럽트가 따로 걸리는게 어떤 점에서 문제를 일으키는지 잘 모르겠습니다.. 혹시 인터럽트의 주기가 문제가 되는 것은 아닌지요..?

equation

2013.08.20
10:31:25
(*.188.119.223)

머리속에 지금 개념이 잘 정립되지 않은 상태에서 질문을 드려서 그런가 질문이 조금 애매했네요..

T/C 1에서 왼쪽모터, T/C3에서 오른쪽모터 이런식으로 구동을 하는데, 그러면 왼쪽모터와 오른쪽모터의 인터럽트 걸리는 주기가 독립적이게 되지않습니까. 그 상황에서 왼쪽모터, 오른쪽모터 가속테이블의 인덱스 값을 올리고 내리는 것을 서로 관련이 있게 한다던가 그렇게 어디서 들은 것 같은데 그 부분에 관해서는 알고있으신게 있으신지요..

김상현

2013.08.20
13:23:57
(*.16.22.200)
profile

양쪽 모터 인터럽트가 각각 한번싹 걸렸을 때 인덱스를 한번 올린다거나 인터럽트가 어느쪽이든 두번 걸렸을때 한번 인덱스를 조절하거나 하는 방법이 있습니다. ㅎㅎ

equation

2013.08.20
14:36:26
(*.188.119.223)

아! 감사합니다 ㅎㅎ

equation

2013.08.20
17:56:57
(*.188.119.223)

저.. 혹시 시립대의 스텝트레이서는 저러한 방법을 쓰나요? 아니면 그냥 두개 인덱스를 따로따로 조절되게 그냥 놔두나요?

김상현

2013.08.20
18:58:45
(*.214.148.49)
profile

인덱스를 조절한 테이블은 하나밖에 없어서 당연히 저런 방법을 쓰나 보통 처음엔 쓰라고 해도 안쓰고 인덱스 조절을 한쪽 모터 인터럽트에만 놓고 있다가 나중에 서로 경쟁하다 진사람부터 쓰더라구요 ㅎㅎ 미리미리 써야돼는데 ..

이재영

2013.08.20
20:03:48
(*.16.22.200)
profile

처음 만들 때 두 모터 중 한 인터럽트에만 테이블 조절 코드를 넣어놓고 씁니다...ㅋ 그러다가 트레이서가 잘 못가는 것을 깨닫고, 말씀드린 동시 조절 방법을 쓰게 됩니다. ㅎㅎ

equation

2013.08.20
20:24:42
(*.188.119.223)

저같은 경우는 각각의 모터 인터럽트에서 각각 좌우 따로따로 인덱스 값을 올려주고 있는데요.

두분이 말씀하시는 방법과 다른 방법인것 같은데 좀더 구체적으로 말씀해주실수 있으신지요..


그리고 2차주행을 할때 거의 직선구간의 끝에서 감속하는 것같던데 이는 테이블 인덱스 값을 크게 줄여준느 것인가요? 아니면 감속을 위한 급격한 가속도의 테이블을 하나 더 만들어서 사용하시는 건가요? 아니면 또 다른 방법이 있는건가요? ㅠㅠ

김상현

2013.08.21
01:22:56
(*.62.163.32)
profile
좌우 모터 따로 인덱스를 올린다는 말이 이해가 잘 안갑니다 .. 2차주행은 보이기만 그렇게 보이는거에요

equation

2013.08.21
07:16:19
(*.245.179.75)

T/C1이 왼쪽모터를 구동하는데 쓰이는 인터럽트고, T/C3이 오른쪽모터를 구동하는데 쓰이는 인터럽트라 하면요.

목표속도가 300이라고 했을때, 각각의 인터럽트 내에는 왼쪽모터, 오른쪽모터의 속도를 결정하는 값이 있고, 이 값은 OCR값에 들어가게 됩니다. 이 값들이 목표속도보다 작을때 각각 T/C1이 인터럽트 걸릴때마다 T/C1에서 왼쪽모터 속도를 계산하는 데에 관여하는 변수를 ++시켜주어 왼쪽 모터 속도를 증가(감소)시켜주고, T/C3이 인터럽트 걸릴때마다 T/C3에서 오른쪽모터 속도를 계산하는 데에 관여하는 변수를 ++시켜주어 오른쪽 모터 속도를 증가(감소)시키는 방식을 말하고 있습니다.

오현찬

2013.08.21
09:16:33
(*.70.52.173)

 가속도테이블이라는 것은 모터가 로터의 회전속도에 따른 토크의 한계가 일정하지 않기 때문에 이를 미리 고려하여 계산된 값을 저장해놓은 값입니다. 이를 이용하면 테이블에서 값을 불러오는 것만 가지고도 각 속도마다 다음 속도(다음 타이머값)로 변할 때의 적당한 값을 사용할 수 있기 때문입니다. 이를 제대로 적용하기 위해서 좌우 모터가 각각 한 스텝씩(인터럽트가 한번씩) 이동(발생)하는 것을 기준으로 테이블의 인덱스에 변화를 주고 있습니다. 턴에서의 좌우 속도가 다른 경우까지 고려하게 되면 좌우 모터의 이동한 스텝의 수를 더한 값이 2가 될 때마다 인덱스에 변화를 주는 것입니다.
 가감속 구간이 다르게 보이는 경우는 가속/감속안전구간의 길이가 다르기 때문입니다. 가속의 경우 모터의 위치보다 센서보드의 위치가 앞에 있는 시립대트레이서의 특성상 로봇이 턴에 있는 상황에서 직진마크를 인식하고 가속하는 경우가 있기 때문에 이를 방지하고자 가속안전구간을 두어 몸체가 직진구간에 들어온 이후에 가속하도록 한 것입니다. 반대로는 센서보드가 턴마크를 볼때 몸체는 직진에 있기 때문에 이를 이용하여 조금이라도 더 기록이득을 보기위해서 감속안전구간을 더 작게 두는 것을 본 것 같습니다.

- 잘못된 표현이 있어 수정하였습니다. -

equation

2013.08.21
09:45:16
(*.245.179.75)

평균적으로 한바퀴라함은 인터럽트 한번이 걸릴때 스텝모터의 경우 1-2상 여자방식을 쓸때 400번의 인터럽트가 걸려야 한바퀴를 돌텐데 그러면 400번의 인터럽트가 걸리는 동안 같은 인덱스 값을 유지한다는 말인가요?

equation

2013.08.21
09:36:34
(*.245.179.75)

아 ㅎ 가속도 테이블을 모터별로 따로 쓴다는 것이 아니구요. 테이블은 같은 것을 쓰되  속도에 관련된 각각의 타이머 내의 속도 변수가 개별적으로 증가감소한다는 말이었습니다.


앞에서 말씀해주신 동시조절방법이나 양쪽 모터 인터럽트가 각각 한번씩 걸릴때 인덱스를 증가시킨다는 방법은

예를 들어 코너에서는 양쪽의 모터의 속도가 다른데, 이는 곧 양쪽 모터의 인터럽트가 걸리는 주기가다르다는 말이라고 생각됩니다. 이의 경우 만약 오른쪽 코너에서는 오른쪽모터가 천천히돌고, 왼쪽모터가 빨리 돌게 되는데요. 이때 오른쪽모터의 인터럽트가 왼쪽모터의 인터럽트에 비해 발생 빈도수가 10배라고 가정했을시에, 양쪽모터인터럽트가 각각 한번씩 걸릴때 인터럽트를 증가한다고 하면 왼쪽모터의 경우 한번 인덱스가 바뀌고 나면 인터럽트가 10번정도 걸렸을때 오른쪽모터의 인터럽트가 걸리게 되고, 그럼 이때까지 왼쪽모터는 10번의 인터럽트 동안 같은 인덱스를 유지하고 있는다는 말인가요? 

김상현

2013.08.21
10:14:21
(*.214.148.49)
profile

코너에서 인덱스를 변화시켜서 속도를 조절하는 것이 아닙니다.

 

인덱스를 변화시킨 다는 것은   , 가속 감속을 할때이고

 

코너에서는 현재 인덱스에 의한 속도에서   , 포지션에 따른 양쪽 모터의 속도 비율을 다르게  주는 것입니다.

 

속도를 다르게 주는 것은 아웃풋 컴페어 레지스터 값을 실시간으로 변화시키는것이지 인덱스를 변화시켜 속도 변화를 주지 않습니다.

 

 

equation

2013.08.21
11:51:38
(*.245.179.75)

이제 조금씩 머리속에서 그림이 그려지네요.

정리해서 한번 잘 적용해보도록하겠습니다.

친절한 답변 감사합니다 ^^

문서 첨부 제한 : 0Byte/ 500.00MB
파일 제한 크기 : 500.00MB (허용 확장자 : *.*)
옵션 :
:
:
:
:
List of Articles
번호 제목 글쓴이 날짜 조회 수
41 단국대학교 MAZE 입니다. 올해 트레이서 대회 관련 문의 드립니다. [4] MAZE_18 2018-03-27 4807
40 이번 라인트레이서 기록인증서와 참가확인서 문의드립니다 [2] 유감임다 2017-08-31 3996
39 어...질문해도 괜찮은 질문일지는 모르겠지만... [3] windseraphim 2015-10-26 4381
38 안녕하세요 질문드립니다 [1] 붕붕이 2015-07-20 4053
37 우편물 주소 요청 [1] 재활용쓰레기 2015-07-16 4431
36 라인트레이서 영상 관련해서 글 남깁니다. [2] 정용호 2015-05-18 4014
35 초보자 질문이요 [7] windseraphim 2014-08-21 4633
34 규정 관련 질문드립니다. [4] windseraphim 2014-08-02 4263
33 질문드립니다! [1] LeeMG 2014-07-27 3982
32 안녕하세요 질문하나만 부탁드릴게요 ㅜㅜ [2] 쿠하스 2014-07-21 4251
31 안녕하세요~ 고려대학교 하드웨어 동아리 kuhas입니다. [8] 쿠하스 2014-07-19 4459
30 안녕하세요 고려대학교 하드웨어 동아리 kuhas입니다~ [1] 쿠하스 2014-07-15 4321
29 안녕하세요 단국대학교 MAZE입니다~~ [3] MAZE육근호 2014-07-04 4397
28 안녕하세요 경남대학교 로봇동아리입니다. [3] ljy8287 2014-06-21 4393
27 안녕하세요 동양미래대학 Micro Mouse 동아리입니다. [8] Practice 2013-08-19 7471
» 질문 하나만 더드려도 될까요? [19] equation 2013-08-19 8794
25 ope-5685에 관해서 질문 드릴것이 있습니다. [2] equation 2013-08-18 10049
24 압축공기와 노즐을 이용한 부상이동장치에 관해 관심있으신 분 찾습니다. 환경온도계 2013-08-13 7040
23 라인 트레이서 대회에 대해 질문 드려봅니다 [1] HelpMe 2013-05-14 11890
22 안녕하세요. [3] equation 2012-08-20 13786



XE Login