PID 계수값 조정...

by 이희철 | 2017-02-11 00:33

PID시스템을 구축하긴 했는데...


수비드머신에 가장 알맞은 PID계수를 찾는 것은 커다란 문제...


Kp와 Ki 그리고 Kd값이 서로 영향을 미치면서 얼마로 정해야 할지는 수많은 실험을 해 봐야 알기 때문에...


그동안 엄창난 시간의 소모가 있었다... (물을 끓이면서 온도특성을 게속 지켜봐야 하고 실험이 끝나면 물이 식은 후 다시 계수값을 바꾸고 하는 실험은 진짜로 엄청난 시간과 노력이 필요하다...


그동안 100번이 넘는 실험을 해 보았지만...


3가지 계수값을 바꿀때마다 미묘하게 온도특성이 달라져 버려서 최상의 계수값을 찾아내지는 못했고...


수많은 실험결과를 메모해 둘 생각을 하지 않아 기록된 데이터가 몇개 없다...


실험을 거듭할 수록 미궁에 빠져드는 느낌이라 기록을 안 했는데...


그래도 감으로 적당한 계수값이라고 생각한 최종 값들을 메모해 놓은 것이 있어 올려본댜...


(아래 계수값은 절대로 최상의 값이 아니며...


그나마 실험한 것들 중에서는 가장 원하는 근사치라고 생각해서 메모를 따로 해 두었다...


(PID시스템의 계수값을 찾아내는 것만으로 박사학위 논문을 쓴 사람이 있다고 하는 것을 보면...

결코 쉽지 않은 작업인 듯 하다...)


Kp= 3000 Ki=1000 Kd=40000 -> MAX 67도 59도~63도


Kp= 3000 Ki=1000 Kd=80000 -> MAX67도 59도~64도


Kp=3000, Ki=1000, Kd=120000 -> MAX67도 59도~64도  06도부터 깜박임.


 Kp=3000, Ki=1000, Kd=150000 -> 최대67도 59도~64도 


Kp=3000, Ki=2000, Kd=200000  최대온도 67도 59도 ~ 67도 06도부터 깜박임


 Kp=3000, Ki=2000, Kd=40000  최대온도 64도  59도 63도


 Kp=3000, Ki=2000, Kd=20000 최대온도 64도 59도 63도


Kp=2000, Ki=2000, Kd=20000 최대온도 64도 59도 63도


 Kp=1000, Ki=2000, Kd=20000 최대온도 64도 59도 63도


 Kp=1000, Ki=2000, Kd=10000 최대온도 65도 59도 63도


Kp=1000, Ki=1000, Kd=5000  최대온도 65도 59오 63도


결국...


일단은 PID상수를 위의 Kp=1000, Ki=1000, Kd=5000로 설정해 놓고...

추후 시간이 나면 좀 더 보강할 생각...



P.S.

프로그램중에 myPID.Compute()함수의 위치를 바꾸었다...

PID 프로그램 수정사항

myPID.Compute()함수를 While(!timer_finish)문 안에서 매우 많은 횟수로 실행 하던 것을...




아래 의 위치로 함수를 옮겨 1초에 한번씩 온도를 읽어 들일 때마다 PID 알고리즘을 계산하도록 수정했다...


온도가 매우 서서히 올라가기 때문에 PID의 미분값이 크게 변하지 않아 Kd값을 크게 해 주어도 전체 콘트롤에 큰 영향을 미치지 못하는 듯 하다...


 









 

댓글 0

MADE BY

이희철

요리, 전자회로설계