什么是 PWM
PWM辽俗,全稱脈沖寬度調(diào)制(Pulse Width Modulation),是一種將數(shù)字信號模擬成模擬信號的方法施戴”陂牛【是的我知道這句話比較繞口】
數(shù)字信號與模擬信號
數(shù)字信號為只有兩種狀態(tài)的信號,比如0 或 1任内,開或關(guān)撵渡,True 或 False。模擬信號指的是能夠在一個(gè)區(qū)間內(nèi)隨意變化的信號死嗦。
通過操作輸出端口在短時(shí)間內(nèi)的開或關(guān)趋距,能夠?qū)⑤敵龆丝诘碾妷海ū热?V)在這段時(shí)間內(nèi)平均為 0V 到 5V 之間的任意電壓值。
占空比
占空比是高電壓信號的時(shí)間與總周期時(shí)間的比值越除,比如周期 5ms节腐,信號 1ms 則占空比為 20%外盯。
信號的波形如下圖所示:
舵機(jī)與 PWM
常見的舵機(jī)都使用 50Hz 的控制信號,也就是周期為 20ms 的信號翼雀。
其中饱苟,5% ~ 10% 的占空比對應(yīng)了舵機(jī)的 0° ~ 180° 的動(dòng)作范圍。
程序
使用 WPILib 控制舵機(jī)非常簡單狼渊。
首先我們需要 import 舵機(jī)的庫
...
import edu.wpi.first.wpilibj.Servo;
...
之后在機(jī)器人類下面定義舵機(jī)變量
...
public class Robot extends TimedRobot {
private Servo example_servo;
...
}
...
在機(jī)器人初始化方法中創(chuàng)建servo對象箱熬,括號中的數(shù)字是舵機(jī)在電路中連接的 PWM 端口,0~9 在 RoboRIO 上狈邑,10~19 在擴(kuò)展板上
...
@Override
public void robotInit() {
// the PWM port number is needed to create the servo object.
example_servo = new Servo(9);
...
}
...
之后就可以在程序中引用城须。下面給出了一個(gè)通過 XboxController 的按鈕控制舵機(jī)的例子
...
@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)
同樣可以被用來控制舵機(jī),degree 為角度值米苹,0.0 ~ 180.0
作業(yè)
寫出一個(gè)使用 XboxController 0號搖桿控制 PWM 2號端口的舵機(jī)角度的程序(20分)
寫出一個(gè)使用 XboxController LeftBumper 按鈕控制 PWM 12號端口的舵機(jī)角度的程序糕伐,要求按鈕按下抬起一次舵機(jī)轉(zhuǎn)動(dòng)到 100°,再次按下抬起舵機(jī)轉(zhuǎn)動(dòng)到 30°(20分)
要求:
請將題目抄寫在程序注釋中蘸嘶。
行數(shù)在 100-200 之間良瞧。
不要出現(xiàn)所在學(xué)校的校名或師生姓名。
遵守格式和注釋要求亏较。