各馬達控制

 Victor SPX                       Talon SRX                       SparkMAX    

 

馬達控制器種類

一般馬達普遍使用Victor SPX

 

NEO使用SparkMAX

 

Falcon 500內建Talon FX與Talon SRX寫法幾乎相同

Victor SPX

宣告

//Port填入馬達腳位
private VictorSPX MotorController = new VictorSPX(Port);

初始化

//恢復出廠設定
MotorController.configFactoryDefault();	
//設定加速時間(從靜止到最高速)(單位:s)
MotorController.configOpenloopRamp(kMotorRampRate); 
//設定馬達停止模式(Brake/Coast)(煞車/滑行)
MotorController.setNeutralMode(NeutralMode.Brake); 
//設定反轉值(旋轉方向是否反轉)(Reversed填入true/false)
MotorController.setInverted(Reversed);	

輸出

//Speed填入百分比輸出(0~1)(ControlMode還有很多模式以後再教)
MotorController.set(ControlMode.PercentOutput, Speed);

Talon SRX/FX

宣告

//Port填入馬達腳位
//TalonFX
private TalonFX MotorController = new TalonFX(Port);
//TalonSRX
private TalonSRX MotorController = new TalonSRX(Port)

初始化

//恢復出廠設定
MotorController.configFactoryDefault();	
//設定加速時間(從靜止到最高速)(單位:s)
MotorController.configOpenloopRamp(kMotorRampRate); 
//設定馬達停止模式(Brake/Coast)(煞車/滑行)
MotorController.setNeutralMode(NeutralMode.Brake); 
//設定反轉值(旋轉方向是否反轉)(Reversed填入true/false)
MotorController.setInverted(Reversed);	

輸出

//Speed填入百分比輸出(0~1)(ControlMode還有很多模式以後再教)
MotorController.set(ControlMode.PercentOutput, Speed);

SparkMAX

宣告

//Port填入馬達腳位 因為NEO是無刷馬達 所以MotorType選kBrushless
private CANSparkMax MotorController  = new CANSparkMax(PortID, MotorType.kBrushless);

初始化

//恢復出廠設定
MotorController.restoreFactoryDefaults();
//設定加速時間(從靜止到最高速)(單位:s)
MotorController.setOpenLoopRampRate(kMotorRampRate); 
//設定馬達停止模式(kBrake/kCoast)(煞車/滑行)
MotorController.setIdleMode(IdleMode.kBrake); 
//設定反轉值(旋轉方向是否反轉)(Reversed填入true/false)
MotorController.setInverted(Reversed);	

輸出

//Speed填入百分比輸出(0~1)
MotorController.set(Speed);

要求

  1. 引入函示庫
  2. 在四個子系統各別宣告一顆馬達,初始化並在setSpeed(double speed)內輸出
  3. 在Constants.java內,利用enum列舉出各馬達的腳位與反轉值(腳位隨便設,不要重複就好,反轉值都設true)

模板

package frc.robot.subsystems;

import edu.wpi.first.wpilibj2.command.SubsystemBase;

public class VictorSpxSubsystem extends SubsystemBase{
    
    public VictorSpxSubsystem(){

    }

    public void setSpeed(double speed) {
        
    }
}

範例

package frc.robot.subsystems;

import com.ctre.phoenix.motorcontrol.ControlMode;
import com.ctre.phoenix.motorcontrol.NeutralMode;
import com.ctre.phoenix.motorcontrol.can.VictorSPX;

import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.Constants.PortID;

public class VictorSpxSubsystem extends SubsystemBase{
    
    //Port填入馬達腳位
    private VictorSPX MotorController = new VictorSPX(PortID.VictorSpx.value);

    public VictorSpxSubsystem(){
        //恢復出廠設定
        MotorController.configFactoryDefault();	
        //設定加速時間(從靜止到最高速)(單位:s)
        MotorController.configOpenloopRamp(0.5); 
        //設定馬達停止模式(Brake/Coast)(煞車/滑行)
        MotorController.setNeutralMode(NeutralMode.Brake); 
        //設定反轉值(旋轉方向是否反轉)(Reversed填入true/false)
        MotorController.setInverted(PortID.VictorSpx.reversed);	
    }

    public void setSpeed(double speed) {
        //Speed填入百分比輸出(0~1)(ControlMode還有很多模式以後再教)
        MotorController.set(ControlMode.PercentOutput, speed);
    }
}

繳交方式

4個子系統(作業1 作業名:子系統)、Constants.java(作業2 作業名:Constants.java)、vendordeps(作業3 作業名:vendordeps)

上傳google表單(四個子系統一起上傳在同一份作業、vendordeps內的所有函示庫也是)

馬達控制

By team7497

馬達控制

  • 149