美文网首页
FRC | RRF004 控制舵机

FRC | RRF004 控制舵机

作者: T_K_233 | 来源:发表于2019-06-06 09:43 被阅读0次

    什么是 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分)

    要求:

    • 请将题目抄写在程序注释中。

    • 行数在 100-200 之间。

    • 不要出现所在学校的校名或师生姓名。

    • 遵守格式和注释要求。

    相关文章

      网友评论

          本文标题:FRC | RRF004 控制舵机

          本文链接:https://www.haomeiwen.com/subject/timitctx.html