12강 / 20강

받침 먼저, 액체 나중 — 설정값을 코드가 움직인다

캐스케이드 제어

받침 먼저, 액체 나중 — 설정값을 코드가 움직인다
PID 하나로는 안 됩니다. PID 를 부리는 것이 따로 있어야 합니다.

/mech 9강에서 논문의 요령을 봤습니다 — 받침을 목표 너머로 몰았다가 되돌린다. 이것을 제어공학의 이름으로 부르면 캐스케이드 제어(cascade control) 입니다.

🔄
안쪽 고리
받침 온도를 잡는다. 빠르다(초 단위). 우리가 직접 미는 것
🐢
바깥 고리
액체 온도를 본다. 느리다. 직접 못 밀고 안쪽의 목표를 고쳐 준다

핵심은 바깥 고리의 출력이 안쪽 고리의 설정값이라는 것입니다. 11강의 PID 하나로는 안 되는 이유가 이것입니다.

제어 방식을 바꿔 보세요. 같은 하드웨어로 도달 시간이 얼마나 달라지는지 보입니다.
불러오는 중…
구조만 바꿔도 한 사이클에 수 초가 줄고, 서른 사이클이면 분 단위가 됩니다.
Python 브라우저에서 실행

코드로 옮길 때 지킬 것 둘

① dt 는 재서 쓴다
“0.1초마다 돈다” 고 가정하면 안 됩니다. 파이썬은 그것을 보장하지 않습니다(2강). time.monotonic() 으로 실제 지난 시간을 재어 적분·미분항에 넣으십시오.
② 바깥 고리는 느리게
바깥이 안쪽보다 빠르면 두 고리가 서로 싸웁니다. 안쪽이 자리를 잡을 틈을 줘야 합니다 — 보통 다섯 배 이상 느리게 돕니다.

두 고리 모두 파이썬으로 넉넉합니다. 안쪽이 1~10 Hz, 바깥이 0.2~1 Hz 면 되고, 이것은 2강에서 본 “주기가 허용 지터의 열 배 이상이면 안전” 규칙을 한참 만족합니다.

🤔 확인 문제
캐스케이드 제어에서 바깥 고리의 출력은 무엇이 되는가?
🤔 확인 문제
PID 에서 dt 를 상수로 가정하면 안 되는 까닭은?