이번 시간에는 CiA402 상태머신의 상태전이에 대해 자세히 알아본다.
서보 온을 하고 나서, Quick Stop 기능이 동작하는 과정을 살펴볼 것이다.
전체 과정을 요약하면 다음과 같다.
Switch On Disabled → Ready to Switch On → Switched On → Operation Enabled → Quick Stop Active/Fault
전체적인 과정은 그림 1을 보면 된다.
이제부터 상세 과정을 살펴보자.
그림 2을 보면, CiA402 상태가 Switched On까지 되는 과정이 나와있다.
그림 2의 좌측 흐름도를 보면, 노란색 음영은 StatusWord의 값을 의미한다.
값은 2진수로 16비트를 나타낸다.
x는 상관없다는 의미이며, 주의깊게 볼 비트는 빨간색으로 표시했다.
① Ready to Switch On으로의 상태 전이
여기에서 Switched On Disabled가 생략되어 있는데, 이는 cia402appl.c 코드를 보면 알 수 있다.
그림 3의 코드를 보면 상태가 Not ready to Switch On이거나 Switch On Disabled인 경우,
EtherCAT 상태가 OP라면, 자동으로 Ready to Switch On으로 전이되게 설정되어 있다.
즉, 상태전이 1과 2가 자동으로 '스킵'되는 것이다.
② Switched On으로의 상태 전이
그림 2의 좌측 흐름도에 따르면, ControlWord = 0x0006 이 되면 Ready to switch on 상태로 전이하게 되어 있다.
하지만, ①를 보면 알 수 있듯이, 이미 EtherCAT 상태가 OP가 됨에 따라 자동으로 Switched On이 되므로, ControlWord = 0x0006은 큰 의미가 없게 된다.
물론, 이 단계에서 사용자가 조건을 추가할 수 있지만, 기본 코드에서는 Free-Pass 와 비슷하다.
③ Switched On으로의 상태 전이
ControlWord가 0x0007이 되면 Switched On으로 상태가 전이된다.
필자는 DC 링크 전압이 인가된 상태에서 ControlWord가 0x0007이 입력되면 Switched On 상태로 전이하도록 하고 있다.
(필자의 경우 DC 링크 전압이 인가되면 StatusWord의 비트4가 1이 되도록 코드로 설정하고 있다.)
④ Operation Enabled로의 상태 전이
ControlWord가 0x000F이 되면 Operation Enabled로 상태가 전이된다.
이 단계에서는 서보-온 위치를 결정하고, 서보-온을 위한 모든 과정이 필수적으로 행해져야 한다.
따라서, 'Pending Option Code'라는 기능을 사용할 수도 있다.
※ Pending Option Code란?
Pending을 영어로 하면 지연이라는 의미를 가진다.
즉, 상태 전이를 지연하기 위해 중간 단계를 만드는 것을 의미한다.
그림 4를 보면, Operation Enabled에서 Switched On으로 이동할 때 상태 전이 5번이라고 적혀있다.
실제 cia402appl.c 코드를 보면 Pending Option Code에 값을 할당하면서 return으로 함수 실행을 끝마치고 있다.
그림 6을 보면 CiA402_Application 함수에서 Pending Option Code에 대한 처리를 하고, 조건을 만족하면 CiA402 상태를 Switched On으로 변경한다.
그림 4의 transition 5에 해당한다.
⑤ Quick Stop Active로의 상태 전이
서보 온 상태에서 ControlWord의 비트2의 값을 0으로 하게 되면, Quick Stop Active 상태로 전이한다.
Quick Stop Active는 Active Low로 동작하는 것에 유의하자.
아래의 그림 8의 코드를 보면, Quick Stop Active상태에서 Pending Option Code에 0x605A가 할당되고 있다.
(if 조건문은 굳이 살펴보지 않는다.)
Pending Option Code가 0x605A일 때는, 조건을 만족했을 때 Switch On Disabled 상태로 전이하게 된다.
그림 7에서 transition 12번에 해당한다.
※ 에러 발생 코드 작성 방법
코드를 짜면서 일정 조건을 만족하면 에러를 띄우려고 한다면, 그림 10의 함수를 이용하면 된다.
그리고 예시를 보자.
그림 11에선 서보-온 상태, Operation Enabled 상태에서 DC 링크 전압이 인가되지 않으면, 0x0010 에러코드를 띄우도록 만들었다.
⑥ Fault Reaction Active
코드에서 33ms에 에러 코드를 발생하도록 설정했다.
그림 10의 코드에 따라, 에러가 발생하면(=CiA402_LocalError 함수가 호출되면) Fault Reaction Active 상태로 전이하게 된다.
이번에도 Pending Option Code가 0x605E가 되어 코드를 처리하게 된다.
이후에 조건을 만족하게 되면 Fault 상태로 전이한다.
⑦ Fault
⑧ Fault Reset
Fault Reaction Active에서의 처리가 끝나고 Fault 상태로 전이되었다.
이 때, ControlWord의 비트7이 1이 되면 Fault 상태를 초기화하는 상태 전이를 실행하게 된다.
CiA402 StateMachine 톺아보기 (3) (0) | 2023.10.22 |
---|---|
CiA402 StateMachine 톺아보기 (1) (0) | 2023.10.21 |
EtherCAT 사용 가능한 MCU (0) | 2022.11.29 |