Pi4j:SG90 没有完全旋转到 180°
Pi4j: SG90 doesn't turn all the way to 180°
我有这个 SG90 伺服电机(功能齐全且全新),它不会一直转动到 180°(或 0°)。当我试图让它从右到左(逆时针)转动时,它会在中途停止。我已经检查了 4 次布线和硬件,所以问题是代码中的 可能 。我正在尝试通过带有 Pi4j 的树莓派 pi3 来控制伺服电机。
我已经尝试更改线路,但我认为这不是问题所在。
我尝试使用的代码是我的,它所做的是发送 1ms 和 2ms 的 PWM。
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
public class xd {
public static void main (String[] args) throws InterruptedException {
//creating the output
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);
//making the 1ms PWM
//this makes the servo go left but it stops halfway to the end
for (int i=0; i<=100; i++){
pin.pulse(1,true);
Thread.sleep(19);
}
现在是 2ms PWM
//the servo goes right (clockwise) and it works fine
for (int i=0; i<=100; i++){
pin.pulse(2,true);
Thread.sleep(18);
}
gpio.shutdown();
}
}
嘿我自己我做的研究比你多,显然你可以直接输出 PWM 信号而无需自己制作
这是一个例子:
int n = 18;
System.out.println("Config Servo PWM with pin number: " + n);
com.pi4j.wiringpi.Gpio.pinMode(n, com.pi4j.wiringpi.Gpio.PWM_OUTPUT);
com.pi4j.wiringpi.Gpio.pwmSetMode(com.pi4j.wiringpi.Gpio.PWM_MODE_MS);
com.pi4j.wiringpi.Gpio.pwmSetClock(192);
com.pi4j.wiringpi.Gpio.pwmSetRange(2000);
for(int i = 0; i < 5; i++){
System.out.println("Set Servo");
com.pi4j.wiringpi.Gpio.pwmWrite(n, 50);
Thread.sleep(1000);
System.out.println("Change servo state...");
com.pi4j.wiringpi.Gpio.pwmWrite(n, 250);
Thread.sleep(1000);
}
我有这个 SG90 伺服电机(功能齐全且全新),它不会一直转动到 180°(或 0°)。当我试图让它从右到左(逆时针)转动时,它会在中途停止。我已经检查了 4 次布线和硬件,所以问题是代码中的 可能 。我正在尝试通过带有 Pi4j 的树莓派 pi3 来控制伺服电机。
我已经尝试更改线路,但我认为这不是问题所在。
我尝试使用的代码是我的,它所做的是发送 1ms 和 2ms 的 PWM。
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
public class xd {
public static void main (String[] args) throws InterruptedException {
//creating the output
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);
//making the 1ms PWM
//this makes the servo go left but it stops halfway to the end
for (int i=0; i<=100; i++){
pin.pulse(1,true);
Thread.sleep(19);
}
现在是 2ms PWM
//the servo goes right (clockwise) and it works fine
for (int i=0; i<=100; i++){
pin.pulse(2,true);
Thread.sleep(18);
}
gpio.shutdown();
}
}
嘿我自己我做的研究比你多,显然你可以直接输出 PWM 信号而无需自己制作
这是一个例子:
int n = 18;
System.out.println("Config Servo PWM with pin number: " + n);
com.pi4j.wiringpi.Gpio.pinMode(n, com.pi4j.wiringpi.Gpio.PWM_OUTPUT);
com.pi4j.wiringpi.Gpio.pwmSetMode(com.pi4j.wiringpi.Gpio.PWM_MODE_MS);
com.pi4j.wiringpi.Gpio.pwmSetClock(192);
com.pi4j.wiringpi.Gpio.pwmSetRange(2000);
for(int i = 0; i < 5; i++){
System.out.println("Set Servo");
com.pi4j.wiringpi.Gpio.pwmWrite(n, 50);
Thread.sleep(1000);
System.out.println("Change servo state...");
com.pi4j.wiringpi.Gpio.pwmWrite(n, 250);
Thread.sleep(1000);
}