介紹
伺服電機
伺服電機是一種用於精確控制角旋轉的電動裝置。它用於需要精確控制運動的應用中,例如控制機械臂的情況。
伺服電機的旋轉角度是通過向其施加 PWM 信號來控制的。
通過改變 PWM 信號的寬度,我們可以改變電機的旋轉角度和方向。多采用 50Hz PWM 來控制伺服電機的軸位。
有關伺服電機及其使用方法的更多信息,請參閱傳感器和模塊部分中的伺服電機主題。
基於 NodeMCU 的 ESP8266 可用於控制伺服電機。NodeMCU 的 GPIO 上有一個 PWM 功能,我們可以使用它來控制伺服電機。
要了解 NodeMCU PWM,請參閱 帶有 Arduino IDE的 NodeMCU PWM或帶有 ESPlorer IDE 的 NodeMCU PWM。
接口圖
連接伺服電機與 NodeMCU
例子
使用電位計控制伺服電機的位置。
此處,電位計用作伺服電機的軸位置控制裝置。我們可以利用 NodeMCU 的 ADC 功能來讀取電位器。
要了解 NodeMCU ADC,請參閱 帶有 Arduino IDE的 NodeMCU ADC或帶有 ESPlorer IDE 的 NodeMCU ADC。
對於伺服電機,我們在 NodeMCU 的 D2 引腳上創建了一個 50Hz 的 PWM 信號。要將伺服電機的軸位置控制在 180 度以內,需要將其 PWM 佔空比控制在 5% 到 10% 之間。我們得到了一些 PWM 佔空比的實用值,這些佔空比從 2.5% 到 10.75% 不等,以將伺服電機的軸位置控制在 180 度以內。
我們可以用 Lua 腳本或 C/C++ 語言為 NodeMCU DevKit 編寫代碼。我們使用 ESPlorer IDE 用 Lua 腳本編寫代碼,使用 Arduino IDE 用 C/C++ 編寫代碼。要了解更多信息,請參閱 使用 ESPlorer IDE 開始使用 NodeMCU(對 NodeMCU 使用 Lua 腳本)和使用 Arduino IDE 開始使用 NodeMCU(對 NodeMCU 使用基於 C/C++ 語言的 Arduino 草圖)。
用於伺服的 Arduino 草圖
uint8_t ServoMotorpin = D2;
void setup(){
analogWrite(ServoMotorpin, 512);
analogWriteFreq(50); /* Set PWM frequency to 50Hz */
}
void loop(){
uint16_t dutycycle= analogRead(A0); /* Read potentiometer to control servo motor */
if(dutycycle> 1023) dutycycle = 1023;
dutycycle = 25+((85*dutycycle/1023)); /* make it in range 20 to 110 */
analogWrite(ServoMotorpin, dutycycle); /* Write duty cycle to pin */
delay(100);
}
此外,伺服電機庫隨帶有 ESP8266 封裝的 Arduino IDE 一起提供。要打開 Servo 示例,請轉到 File -> Examples -> Servo(esp8266) -> Sweep,如下圖所示。
根據示例草圖中的應用更改伺服銷。
伺服電機的 Lua 腳本
ServoControlPin = 2
PWMfrequency = 50 -- Set PWM frequency
PWMDutyCycle = 512 -- Set PWM duty cycle in between 0-1023
pwm.setup(ServoControlPin, PWMfrequency, PWMDutyCycle)-- Setup PWM
pwm.start(ServoControlPin) -- Start PWM on control pin
while true do
POT_read = adc.read(0) -- Read pot using ADC
if POT_read> 1023 then-- Limit PWM to max of duty cycle
POT_read = 1023
end
POT_read = 25+((85*POT_read/1023))--make it in range 20 to 110
--we got practical range in 0.5% to 2.15% of 50Hz PWM
pwm.setduty(ServoControlPin, POT_read)-- set PWM duty cycle
tmr.delay(10000)
end
資料來源:https://www.electronicwings.com/nodemcu/servo-motor-interfacing-with-nodemcu
沒有留言:
張貼留言