Kapalı Döngü Kontrolü Başlarken
Kapalı Döngü Kontrolünün Kurulması
REVLib'de kapalı döngü kontrolüne SPARK'ın PID Denetleyici nesnesi aracılığıyla erişilir. Bu nesne her motora özeldir ve PID kazançlarını ve kapalı döngü sabitlerini izler. Ayrıca motorunuzu yapılandırmak ve kontrol etmek için gereken tüm yöntemleri içerir. Aşağıda gösterildiği gibi erişilebilir:
// initialize the motor (Flex/MAX are setup the same way)
CANSparkFlex m_motor = new CANSparkFlex(deviceID, MotorType.kBrushless);
// initialize the PID controller
SparkPIDController m_pidController = m_motor.getPIDController();API Belgeleri: CANSparkFlex, SparkPIDController
// initialize the motor (Flex/MAX are setup the same way)
rev::CANSparkMax m_motor{deviceID, rev::CANSparkMax::MotorType::kBrushless};
// initialize the PID Controller
rev::SparkPIDController m_pidController = m_motor.GetPIDController();API Belgeleri: CANSparkMax, SparkPIDController
Motorunuzu Kapalı Döngü kontrol modunda sürmek için, PID Denetleyici nesnesini adlandırın ve ona aşağıda gösterildiği gibi bir ayar noktası (kontrol modunuzun gerektirdiği birimlerde bir hedef: konum, hız veya akım) ve bir kontrol modu verin:
// Set the setpoint of the PID controller in raw position mode
m_pidController.setReference(setPoint, CANSparkBase.ControlType.kPosition);API Belgeleri: setReference, ControlType
// Set the setpoint of the PID controller in raw position mode
m_pidController.SetReference(SetPoint, rev::CANSparkBase::ControlType::kPosition);API Belgeleri: SetReference, ControlType
Yukarıda verilen örnek, motoru konum kontrol modunda çalıştırır; bu sadece yapılandırılmış enkoderdan motorun mevcut konumunu okuyan ve dönüşlerde bir ayar noktası alan klasik bir PID döngüsüdür.
Yanlış ayarlanmışsa çok hızlı ve beklenmedik şekilde hareket edebileceklerinden, motorları Kapalı Döngü modlarında çalıştırırken dikkatli olun.
PID Sabitleri ve Yapılandırması
Bir PID döngüsünü çalıştırmak için birkaç sabit gereklidir. Daha gelişmiş bir kontrolör için daha da fazla parametrenin ayarlanması ve düzenlenmesi gerekir.
Slotlar
SPARK MAX ve SPARK Flex'in her biri, her biri kendi sabitler setine sahip 4 kapalı döngü slotuna sahiptir. Bu yuvalar 0-3 arasında numaralandırılmıştır. Yuva numarasını parametre ayarlama yöntemlerinin her birine bir argüman olarak iletebilirsiniz. Ayar noktasını uygularken, slot numarasını iletin ve motor kontrol ünitesi uygun yapılandırmaya geçecektir.
PID Parametreleri
Bir PID kontrolörünün 3 temel parametresi veya kazancı vardır. Bu kazançlar ve bunların nasıl ayarlanacağı hakkında daha fazla bilgi için PID Ayarlamaya Başlarken bölümüne bakın.
Bu kazançlarSparkPIDController nesnesi üzerinde aşağıda gösterildiği gibi yapılandırılabilir:
// Set the P value of the PID controller on slot 0 to 0.25
m_pidController.SetP(kP);
m_pidController.SetI(kI);
m_pidController.SetD(kD);
m_pidController.SetIZone(kIz);
// Set the minimum and maximum outputs of the motor [-1, 1]
m_pidController.SetOutputRange(kMinOutput, kMaxOutput);API Belgeleri: SparkPIDController
// Set the P value of the PID controller on slot 0 to 0.25
m_pidController.SetP(kP);
m_pidController.SetI(kI);
m_pidController.SetD(kD);
m_pidController.SetIZone(kIz);
// Set the minimum and maximum outputs of the motor [-1, 1]
m_pidController.SetOutputRange(kMinOutput, kMaxOutput);API Belgeleri: SparkPIDController
F Parametresi
SPARK motor kontrolörleri serisi ayrıca hız ileri beslemesi olan bir F terimi de sunar. Bu, her motor tipine özgüdür ve motorun hız sabitinin (Kv), başka bir deyişle 1/Kv'nin tersi alınarak hesaplanabilir.
NEO Vortex için bu değer 1/565'tir. Bu sadece hız tabanlı bir kontrol döngüsü çalıştırırken gereklidir (hız modu, Akıllı Hareket ve Akıllı Hız). F parametresi aşağıda görüldüğü gibi ayarlanabilir:
// Set kFF
m_pidController.SetFF(1/Kv);API Belgeleri: SparkPIDController
// Set kFF
m_pidController.SetFF(1/Kv);API Docs: SparkPIDController
F parametresi yalnızca hız tabanlı bir PID kontrolörü kullanılırken ayarlanmalıdır ve istenmeyen davranışlardan kaçınmak için aksi takdirde sıfıra ayarlanmalıdır.
Akıllı Hareket Parametreleri
SparkPIDController için yalnızca Smart Motion ve Smart Velocity için geçerli olan başka bir parametre seti daha vardır. Bunlar, Smart Motion tarafından oluşturulan hareket profillerini yapılandırmanıza ve ayarlamanıza olanak tanır. Aşağıda görüldüğü gibi ayarlanabilirler:
// Set Smart Motion / Smart Velocity parameters
int smartMotionSlot = 0;
m_pidController.setSmartMotionMaxVelocity(maxVel, smartMotionSlot);
m_pidController.setSmartMotionMinOutputVelocity(minVel, smartMotionSlot);
m_pidController.setSmartMotionMaxAccel(maxAcc, smartMotionSlot);
m_pidController.setSmartMotionAllowedClosedLoopError(allowedErr, smartMotionSlot);API Belgeleri: SparkPIDController
// Set Smart Motion / Smart Velocity parameters
m_pidController.SetSmartMotionMaxVelocity(maxVel);
m_pidController.SetSmartMotionMinOutputVelocity(minVel);
m_pidController.SetSmartMotionMaxAccel(maxAcc);
m_pidController.SetSmartMotionAllowedClosedLoopError(allowedErr);API Belgeleri: SparkPIDController
Bu parametrelerin Akıllı Hareket ve Akıllı Hız dışındaki modlar üzerinde etkisi yoktur
Last updated
Was this helpful?