2011-06-15 5 views
1

전압을 나타내는 float (2.5 - 7.5 범위)에서 주어진 입력을받는 램프를 제어하기 위해 RS232를 사용하는 시스템이 있습니다. 컨트롤은 센서가 감지하는 밝기 인 0에서 6000 범위의 출력을 제공합니다.컨트롤러 입출력 밸런싱 기술

내가 원하는 것은 밝기 값을 지정할 수 있도록 시스템 밸런스를 조정할 수 있어야하고 시스템은이를 달성하는 전압 값에서 균형을 유지해야합니다.

특정 출력을 얻으려면 전압 입력이 무엇인지 찾아내는 표준 알고리즘이나 기술이 있습니까? 나는 반복적으로 값을 시도하는 알고리듬을 생각해 보았고 각각의 시도에서 결정된 출력 값을 얻기 위해 더 나은 새로운 값을 결정했다. (내 경우 엔 3000).

필요한 전압 값은 시스템에 따라 다르며 램프 수명에 따라 달라 지므로 완전히 자동으로 수행해야합니다.

그냥 기술이나 알고리즘의 이름을 찾고 있지만 의사 코드는 올바르게 작동합니다. :)

+0

아마도 chiphacker.com에서 더 나은 행운을 빕니다. – leppie

답변

1

예를 들어 2.5에서 7.5 사이의 모든 전압을 시도하여 시스템을 보정하십시오. 0.1V 단위로 증가시키고 센서 출력을 기록합니다.

예 : 3000을 원하는 밝기 레벨로 설정하고 가장 가까운 밝기를 제공하는 전압을 선택한 다음 원하는 밝기에 도달 할 때까지 센서 출력을 기준으로 조금씩 증가/하강 조정하십시오. 때때로 정확도가 떨어지는 교정 된 값을 기준으로 재 보정하십시오.

+0

이것이 우리가 해왔 던 방식입니다. 우리의 문제는 그러한 작은 증분으로 범위를 확인하는 데 너무 많은 시간이 걸린다는 것입니다. 내가 게시 한 솔루션은 원하는 밝기 값에 얼마나 가까운 지에 따라 전압 증가 크기를 조정합니다. – Mozy

+0

아 - 천천히 생각하지 못했지만, 램프 밝기가 안정화되는 것을 기다리는 동안 '워밍업'또는 '쿨 다운'기간이 있다고 생각합니다. 위의 멋진 솔루션, Mozy - good ol 'Wikipedia! –

1

좀 더 위키 피 디아 검색 후 나는이 발견 가중치 (기 및 Kd를)의 "필수"요소를 제거하고 조정함으로써

Control loop feedback mechanism:

previous_error = setpoint - actual_position 
integral = 0 
start: 
    error = setpoint - actual_position 
    integral = integral + (error*dt) 
    derivative = (error - previous_error)/dt 
    output = (Kp*error) + (Ki*integral) + (Kd*derivative) 
    previous_error = error 
    wait(dt) 
goto start 

[편집]

을의 루프가 완벽하게 작동합니다.

1

나는 물리학에 전혀 관여하지 않지만, 전압과 밝기 사이의 관계가 다소 선형에 가깝다고 가정 할 수 있다면 표준 바이너리 검색을 사용할 수 있습니다.

이 외에도 이것은 의 표준 예제 중 하나 인 inverted pendulum을 생각 나게합니다.