:
:XS128
제어 객체에 대한 기본 설명
제어 목표
플랭크는 처음에 가장 높은 위치까지 스스로 진동할 수 있고 가장 높은 위치에서 움직이지 않거나 아주 작은 범위에서 운동할 수 있다 플랭크가 외부 간섭을 받았을 때(동전이나 손 등의 두드려서 수직으로 위로 향하는 위치에서 벗어날 수 있음) 자동으로 목표 위치로 회복개체 기본 매개변수 및 제어 방법 선택 제어
모터 PWM 제어 주파수 10KHz 이유 주파수 특별 시간에 전기 기계는 사구가 비교적 작지만 전기 기계의 특성이 비교적 딱딱하고 공간을 차지하는 비례가 적으면 비교적 큰 속도를 낼 수 있으며 속도 조절 정밀도를 제어하기 어렵다(조절 파라미터에 어려움을 가져온다). 주파수 시간에 전기 기계가 전류가 끊긴 상태에서 작동할 수 있어 클릭에 해롭고 전기 기계가 발생하는 소음이 비교적 크다 제어 주기 0.5ms 제어 시스템을 2 이벤트로 나누고 이벤트 1은 속도 제어(외환), 이벤트 2는 각도 제어(내환), 외환 제어 주기는 100ms, 내환 제어 주기는 1ms로 나눈다.이벤트 2에서 모터 PWM 출력이 수행됩니다.그러므로 1ms당 1회 PWM파를 출력하는 것과 같다
이유 제어 주기가 너무 작고 시스템이 흔들린다.제어 주기가 너무 크고 시스템 반응이 제때에 이루어지지 않는다 이곳의 통제 주기는 참고 선배의 통제 주기 레벨 2 PID 선택 각도 루프 PID 위치
속도링 PID 증가 속도링의 출력은 각도링의 입력으로 하고 이때 각도링의 초기 설정값은 250이기 때문에 위치식 PID 알고리즘을 사용하면 각도를 처리해야 한다.
기진 진동대가 수직으로 아래로 내려갈 때 진동각이 어느 각도값보다 작을 때 고정된 비례를 차지하는 PWM파를 출력하고 진동각이 어느 값보다 크면 전기기계 진동 과정에서 진동대의 방향을 판단하여 진동대가 어느 방향에서 진동하든 전기기의 회전 방향은 그 방향을 따라 계속 진동을 가속화시킬 수 있다. 실현 방법: 플랭크의 각도와 운동 방향을 동시에 판단하고 제어 코드if( (PID4Pend.GetVal < LimA) || ( PID4Pend.GetVal >= ( 500 - LimA ) ) )
{
OutDuty = 1200;
if(PendDir==1) dir=2;
else dir=1;
}
if( (PID4Pend.GetVal < (500 - LimA)) && (PID4Pend.GetVal > 260 ))
{
OutDuty = 0;
}
if( (PID4Pend.GetVal > LimA) && (PID4Pend.GetVal < 240 ))
{
OutDuty = 0;
}
SetMotorVoltage( OutDuty , dir );
인코더 읽는 방식 외부 중단 고려 사항 초기화 시 외부 중단 우선 순위를 최대로 설정
직렬로 들어갈 때 중단되거나 정시에 중단될 때 다시 호출EnableInterrupts
해야 중단 진동대가 진동할 때 0의 편향이 생기기 때문에 인코더의 값이 점점 원점에서 멀어진다(진동이 발생하고 여기에 대응하는 250).해결 방법: Z로 복원하여 Z상 펄스 저전기가 평소에 대응하는 펄스 개수를 기록하고 Z상 외부에서 촉발을 중단할 때마다 펄스 계수의 값을 직접 바꾼다. 인코더는 A, B, Z에 저항을 더해야 하기 때문에 소프트웨어를 통해 저항을 설정하면 된다. 속도링의 출력 방식 슬로프 출력 현재 채택하고 있는 방식은 이런 방식으로 얻은 출력량을 비탈의 방식에 따라 계속 비틀어 출력한다 단계 점프 출력 아직 시도하지 않았음 디버그 과정 중 발생한 문제
전기 사구의 처리 계산 출력의 차지 비례가 사구의 차지 비례보다 작을 때 전기 기계는 돌아가지 않는다 현재 채택된 방법은 이런 방법 모터의 출력 차지 비례가 사구 차지 비례보다 작을 때 모터는 최소 속도에 따라 운동 계산된 점공비의 출력 점공비를 일차 함수 관계에 따라 출력한다. 예를 들어OutDuty = 0.94 * OutDuty + 0.06
그 중에서 0.06은 전기 기계 사구에 대응하는 점공비이다.
시스템의 동태와 안정성에 대한 조화 문제문제설명: PI제어를 사용할 때 플랭크는 자유하수에서 수직으로 위로 올라가는 위치로 자동으로 플랭크할 수 있고 90도 범위(일반적으로 45도 범위내)에서 운동할 수 있다. 이는 시스템의 안정성이 요구에 도달한 것을 의미한다. 이때 외력으로 플랭크를 떨게 하면 떨림이 시간이 비교적 많고 플랭크는 안정으로 돌아갈 수 있지만 비교적 크면 안정으로 돌아갈 수 없다.예를 들어 PID의 제어 각도 범위를 초과하도록 방해를 가한다.PD 제어를 사용할 때 플랭크는 스스로 진동을 일으킬 수 있고 외부의 간섭을 받아 비교적 잘 회복될 수 있지만 90도 범위 내에서 유지할 수 없고 어느 방향을 따라 천천히 회전한다. 즉, 그의 성능이 요구에 도달하지만 안정적인 성능은 요구에 부합되지 않는다. 해결 방법: 플랭크가 PID의 제어 모델에 있을 때 PI 제어를 사용하여 시스템의 안정적인 지표를 만족시키고 시작 모델에 있을 때(즉 세로로 위로 향하는 각도가 어느 값보다 크다) PD 제어를 사용하여 시스템의 동적 요구를 만족시킨다. 일부 파이프 풋 정의
직렬 포트
PS0 -> RXD0 PS1 -> TXD0 L298N 드라이브
IN1 -> PB1 IN2 -> PB0 ENA-> PP1 코더
플랭크 인코더 A상(블랙 라인): PA0(GPIO 읽기 방향) B상(백선): PH0(외부 인터럽트 읽기 펄스)Z상(오렌지선): PH1(외부 인터럽트 리셋 작업) 블루 라인: GND 브라운: VCC(5V~12V) 회전기 인코더1,2:안 받아도 돼pin3: VCC는 100옴의 저항(유동 제한)과 이 파이프 발을 통해 연결pin4: PA1(GPIO 읽기 방향)pin5: PH2(외부 인터럽트 읽기 펄스) pin6 :GND 프로그래밍 방법에 대한 설명
네.c 파일에 정의되어 있습니다.h 파일에서 extern으로 설명하기 이 변수를 인용하려면.h 파일에서 #include를 사용하거나 extern int value