arduino-解决舵机与直流电机冲突问题

可能很多人在使用servo库控制舵机时与直流电机发生冲突,在调用Servo.attach(pin)方法之后,可能会有电机不转了,我们去官网看看关于servo库的介绍,

The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.

也就是说是servo库与PWM调速有冲突,在9pin和10pin上禁用analogWrite()函数调速,所以电机就不转了,这时候可以更换点机的pin解决问题,但是有的驱动板针脚不好改动,所以只能不使用servo库了,可以使用下面代码解决

void servo(int angle) { //定义一个脉冲函数
  //发送50个脉冲
  for(int i=0;i<50;i++){
    int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
    digitalWrite(servoPin, HIGH);   //将舵机接口电平至高
    delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数
    digitalWrite(servoPin, LOW);    //将舵机接口电平至低
    delayMicroseconds(20000 - pulsewidth);
  }
  delay(100);
}

具体使用方法如下

int servoPin = 8;    //定义舵机接口数字接口7 也就是舵机的橙色信号线。

void setup() {
  pinMode(servoPin, OUTPUT); //设定舵机接口为输出接口
}

void loop() {
  servo(3);
  delay(600);
}

void servo(int angle) { //定义一个脉冲函数
  //发送50个脉冲
  for(int i=0;i<50;i++){
    int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
    digitalWrite(servoPin, HIGH);   //将舵机接口电平至高
    delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数
    digitalWrite(servoPin, LOW);    //将舵机接口电平至低
    delayMicroseconds(20000 - pulsewidth);
  }
  delay(100);
}


你可能感兴趣的:(arduino,arduino,舵机冲突,Servo冲突,电机不转)