FRC | RRF004 控制舵机

2019-06-06  本文已影响0人  T_K_233

什么是 PWM

PWM,全称脉冲宽度调制(Pulse Width Modulation),是一种将数字信号模拟成模拟信号的方法。【是的我知道这句话比较绕口】

数字信号与模拟信号

数字信号为只有两种状态的信号,比如0 或 1,开或关,True 或 False。模拟信号指的是能够在一个区间内随意变化的信号。

通过操作输出端口在短时间内的开或关,能够将输出端口的电压(比如5V)在这段时间内平均为 0V 到 5V 之间的任意电压值。

占空比

占空比是高电压信号的时间与总周期时间的比值,比如周期 5ms,信号 1ms 则占空比为 20%。

信号的波形如下图所示:

pwm.png

舵机与 PWM

常见的舵机都使用 50Hz 的控制信号,也就是周期为 20ms 的信号。

其中,5% ~ 10% 的占空比对应了舵机的 0° ~ 180° 的动作范围。

sg90pwm.png

程序

使用 WPILib 控制舵机非常简单。

首先我们需要 import 舵机的库

...
import edu.wpi.first.wpilibj.Servo;
...

之后在机器人类下面定义舵机变量

...
public class Robot extends TimedRobot {
  private Servo example_servo;
  ...
}
...

在机器人初始化方法中创建servo对象,括号中的数字是舵机在电路中连接的 PWM 端口,0~9 在 RoboRIO 上,10~19 在扩展板上

  ...
  @Override
  public void robotInit() {
    // the PWM port number is needed to create the servo object.
    example_servo = new Servo(9);
    ...
  }
  ...

之后就可以在程序中引用。下面给出了一个通过 XboxController 的按钮控制舵机的例子

  ...
  @Override
  public void teleopPeriodic() {
    if (joystick.getAButton()) {
      // set the servo to CCW maximum.
      example_servo.set(0.0);
    }
    if (joystick.getBButton()) {
      // set the servo to CW maximum.
      example_servo.set(1.0);
    }
   ...
  }
  ...

example_servo.setAngle(degree) 同样可以被用来控制舵机,degree 为角度值,0.0 ~ 180.0

作业

  1. 写出一个使用 XboxController 0号摇杆控制 PWM 2号端口的舵机角度的程序(20分)

  2. 写出一个使用 XboxController LeftBumper 按钮控制 PWM 12号端口的舵机角度的程序,要求按钮按下抬起一次舵机转动到 100°,再次按下抬起舵机转动到 30°(20分)

要求:

上一篇 下一篇

猜你喜欢

热点阅读