'true blood'에 해당되는 글 1건

  1. 2008.11.28 PID 제어 2

PID 제어

잡기 2008. 11. 28. 16:45
갑자기 온도 제어계를 구성해야 하는데 딱히 생각나는게 없어 미적분만 사용했다. 무식해서, 백여 년 전부터 잘 알려져 있다는 PID(비례적분미분) 제어 방식을 모르고 있었다. 제어공학과는 인연이 멀고 그저 기억나는 건 라플라시안? PID에 관해 죽 읽어보니 내가 짠 제어 프로그램과 크게 다르지 않았다. 펌핑 업에서는 반은 PI를 사용했고 안정 구간에서는 게인 스케쥴링을 해서 배율이 약한 PI를 사용했다. 센서 AD 오차를 줄이기 위해(AD 오차 1.25 LSB + 망할 노이즈 24mv) LPF를 사용했다. 우연찮게도 미분 제어는 온도 제어에 알맞지 않다고 결론을 내렸다. PID 논문 따위를 읽어보니 그간 내가 한 삽질에 관해 일목요연하게 정리가 되어 있었다(혹시 난 천재일까?).

오버슛 0, 언더슛 0, Tr <2m, Tf<3m, 20-100도 제어, 편차 0.2도라는 그저 어처구니 없는 조건에, 첫 설계서를 보고 어안이 벙벙했던 기억이 난다.  딱 한 달 전이다. PID 제어기의 구현은 비교적 쉽지만 올바른 제어 파라미터 설정이 어려워 '개고생'이 보인다. 일단 만들고 PID 제어기의 과적분 방지를 위한 wind up을 간단히 구현했다.

첫 PI 구간에서는 적분 시간이 30초로 거의 고정되므로 Kp, Kd만 구하면 되는데 Kp는 비례구간의 상방 경직성 에너지 레벨이 변수이고 Ki는 진동을 흡수하기 위한 파라미터.  이렇게 해서 설계하고 테스트 후 현장에서 다시 테스트하자 결과가 엉망으로 나왔다. 아침에 캘리브레이션 해 놓은 다음, 점심 때 테스트한 것과 저녁 때 테스트한 결과가 달랐다.

챔버 내부의 온도가 교란에 민감한 것은 챔버와 외부의 단열이 잘 안된 탓이다. 조그만 챔버의 열 특성을 계산하는 모델 따위는 어떻게 해야 하는지 엄두가 나지 않는다.

챔버 내외부의 온도 차이가 챔버 안정성에 직접적인 영향을 끼쳤다. 작동 중 동작은 상관없으나 캘리브레이션에서 산출한 최적 제어 파라미터가 매번 조금씩 다르게 나왔다. 이것 때문에 머리가 아팠다.

그런데 그 바닥 기술자들 열에 아홉은 PID 제어를 하지 말란다. SP 별로 온도 프로파일을 떠서 최적 제어 파라미터를 표로 정리해 찾는게 장땡이란다. 시간이 엄청나게 걸리는 작업이고 그런 챔버가 1000개 라면 미친 짓이 된다. 그러면서 하는 말이, 수학 아무리 해봤자 소용없다고 한다. 맞는 말이다. 수학을 어설프게 하면 그렇게 된다.  실세계는 카오스다. 그리고 튜닝은 수학이나 알고리즘과는 또 다른 문제다. 온도별 에너지 소비량이 다른 데다가 PID 제어계의 여러 자동 튜닝 알고리즘이 찾는 비례상수나 적분상수 따위가 최적값이 아닌, 적당한 값이기 때문에 어차피 자동 튜닝은 그다지 의미가 없다.

Cohen-Coon의 알고리즘은 너무 어그레시브한데다 적용하니 오버슛이 강하게 발생해서 포기. PID 튜닝 관련 논문 중 개중 재미있었던 것은 Sigurd Skogestad가 쓴 Probably the best simple PID tuning rules in the world였다. 물론 그의 룰 대로 되지 않았다. 오히려 Ziegler?Nichols Method가 낫다. PID는 사실상 퍼지 로직과 거의 유사하다. 가만있자.. 퍼지 로직을 알고리즘 구현에서 마지막으로 사용한 것이 지금으로부터 약 15년 전... 그때 무척 유행했다. -_-
단순화한 PID code
[code] class CPIDControl { var pv; // previous error var iv; // Integral Value var iMax; // integral Maximum var iMin; // integral Minimum var Kp; // Proportional Konstant (Gain) var Ki; // Integral Konstant (Gain) var Kd; // Derivative Konstant (Gain) var Ti; var Td; function CPIDControl(p, i, d, ix, im) { Kp = 1.0; Ki = 0.0; Kd = 0.0; pv = 0.0; iv = 0.0; Ti = 1; iMax = 10000.0; iMin = 0.0; } function setupConst(p, i, d) { Kp = p; Ki = i; Kd = d; tWait = util::tick(); } function resetInt() { pv = 0.0; iv = 0.0; } function setupInt(im, ix) { iMax = ix; iMin = im; } // e : tempSet - tempRead // v : tempRead function update(v, e) { var p = Kp * e; iv += e; if (iv > iMax) iv = iMax; if (iv < iMin) iv = iMin; var i = Ki * (iv / Ti); var d = Kd * (v - pv); pv = v; return p + i + d; } } // read temperature from AD converter function getADTemp() { } // set PWM control value to output function setPWM(v) { } function main() { var cPID = new CPIDControl; var tempSet = 200.0; // set SV while (1) { var tempRead = getADTemp(); // get PV var e = tempSet - tempRead; // get error var cv = cPID.update(tempRead, e); // get control value cv = cv / 100.0; // control value scaling setPWM(cv); } } [/code]
한 달 내내 온도 제어하는 임베디드 어플리케이션 작성하다 보니 온도가 오락가락하고 머리가 어떻게 되서 현재 경제 상황을 잊어버렸다(온도 제어는 어떻게 잘 되었다).

작금의 경제 상황은 딱히 한 마디로 묘사하자면, fear left no room for other emotion쯤? (나야, 그다지 공포스럽게 긴장한 것은 아니지만, 뜻대로 안되서 짜증스럽다) 그래서 '경기침체기 글로벌 투자 전력(Conquer The Crash)'란 책을 읽었다. 2001년 엘리엇 파동 이론으로 곧 도래할 엄청 심각한 디플레이션을 예측한 작자의 글이다.  작금 경제 상황은 한 마디로 신용의 붕괴다. 

작자가 추천해주는 경제 공황 생존법을 요약하자면, 미국 재무부 채권 구입, 공매도 활용, 현금 보유, 금/은 실물 보유, 스위스/싱가폴 은행 계좌 개설 및 스위스/싱가폴 국채 구입이다. 이들 규칙대로 하고 '소파 깊숙이 몸을 파묻고 세계 금융 시장의 혼돈과 몰락을 즐긴다''.

Donnie Darko
Donnie Darko. SF라고 해야 하나? 양심상 그럴 수는 없지. 왠 토끼가 나타나 지구가 며칠 후 멸망할 꺼라고 알려준다. 그후 도니 다코의 신상 변화. 근간에 본 영화 중, 대단히 감상적이고, 과정이 악몽같고, 끝이 웃기면서도 괴상하고, 여러 장르가 섞여있고, 각기 다른 결말에 대한 해석이 가능한 복합적인 틴에이지물이다. 달리 말해 두 번은 봐야 할 훌륭한 영화다.

테리 프라쳇의 Disc World 시리즈중 호그파더(Hog father)를 EBS에서 자막 입혀 틀어준 적이 있다. 어쩌다 구해서 봤는데, 얼마 전에 보았던 The Colour of Magic보다 상태가 양호해 보인다. 어 영화에 나온 저 양반 테리 프라쳇 아닌가?  호그파더를 책으로 읽은 것 같은데, 언제 읽었고 스토리가 어떻게 돌아가는지 전혀 기억이 나지 않았다. 영화를 보고 아, 그때 그랬었지! 하는 꼴이다.

Life

Life
드라마 Life의 별난 검거 장면.

True Blood 1화를 봤다. 뱀파이어가 인간과 어울려 사는 얘기. 뱀파이어 피가 건강에 좋다고, 뱀파이어를 사로 잡아 피를 뽑는 장면이 첫 화에 나온다. 여자애를 심하게 두들겨 패는 장면도 나왔다. 개념 HBO답게 뱀파이어는 물론, 인간 여성도 폭력에 차별을 두지 않았다. True Blood와 함께 Black Books라는 영국 드라마를 봤다. 첫화를 보고 정신없이 웃었다. 생각해 보니 비슷한 코메디물이었던 IT Crowd는 대체 어떻게 된 것일까?

최근 들어 가장 기대되는 문화적(?) 성과인 Europeana Digital Library & Archive, Museum이  시간당 천만회 접근 시도로 사이트가 꾸준히~ 다운되어 12월 중순에 재개장한다는 공지를 내고 열심히 작업 중이다.  무슨 블랙 프라이데이 연말 쇼핑몰에 쳐들어간 게걸스러운 인파도 아니고...

아이를 업고 족두리봉을 거쳐 불광동으로 내려왔다. 마침 아이가 자고 있어서, '오죽 산에 오고 싶었으면 아이를 등에 업고 올까, 아이가 얼마나 고생일까?' 하는 표정으로 지나가던 등산객들이 너도나도 한 마디씩 한다. 땀을 뻘뻘 흘리며 올라가는 아빠는 안중에 없는 듯. 애 업고 암릉을 오르락 내리락 할 때는 신경이 곤두선다.  어떤 코메디 프로그램 격언대로, 해보지 않았으면 얘기도 하지 말어라.
,