arduino 舵机控制与pwm控制小车冲突解决

来源:本站
导读:目前正在解读《arduino 舵机控制与pwm控制小车冲突解决》的相关信息,《arduino 舵机控制与pwm控制小车冲突解决》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《arduino 舵机控制与pwm控制小车冲突解决》的详细说明。
简介:最近在公司学习Arduino uno ,用它实现小车超声波避障功能。实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯。但是碰到了这样一个问题,舵机库和pwm输出冲突,当舵机旋转时,pwm输出函数analogWrite()不管用了。

最近在公司学习Arduinouno ,用它实现小车超声波避障功能。实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯。但是碰到了这样一个问题,舵机库和pwm输出冲突,当舵机旋转时,pwm输出函数analogWrite()不管用了。

二.解决

先分析一下问题产生的原因,我们之前如果想控制舵机,比较常见的方法就是调用舵机库:

#include

Servo myservo;// create servoobject to control a servo

// a maximum of eight servo objects can be created

int pos = 0;// variable to store the servo position

void setup()

{

myservo.attach(9);// attaches the servo on pin 9 to the servo object

}

void loop()

{

for(pos = 0; pos < 180; pos += 1)// goes from 0 degrees to 180 degrees

{

// in steps of 1 degree

myservo.write(pos); // tell servo to go to position in variable 'pos'

delay(15);

// waits 15ms for the servo to reach the position

}

for(pos = 180; pos>=1; pos-=1)// goes from 180 degrees to 0 degrees

{

myservo.write(pos);

// tell servo to go to position in variable 'pos'

delay(15); // waits 15ms for the servo to reach the position

}

}

这种做法非常方便,但是为什么会跟pwm冲突呢,因为在Arduino里的库封装里,它们都是用了同一个定时器1,T/C1: Pin9(OC1A)和Pin10(OC1B),所以会导致冲突,如何解决呢,可以在硬件上修改引脚。不费事的办法就是通过修改代码来解决冲突。我们可以换一种方法来实现舵机的控制:

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

void servopulse(int angle)//定义一个脉冲函数

{

int pulsewidth=(angle*11)+500;//将角度转化为500-2480的脉宽值

digitalWrite(servopin,HIGH);//将舵机接口电平至高

delayMicroseconds(pulsewidth);//延时脉宽值的微秒数

digitalWrite(servopin,LOW);//将舵机接口电平至低

delayMicroseconds(20000-pulsewidth);

}

void setup()

{

pinMode(servopin,OUTPUT);//设定舵机接口为输出接口

}

void loop()

{

//把值的范围映射到0到165左右

for( int angle = 0;angle<180;angle+=10){

for(int i=0;i<50;i++)//发送50个脉冲

{

servopulse(angle);//引用脉冲函数

} delay(1000); } }

直接通过延时函数来给舵机脉冲,达到控制的效果,因为Arduino里延时函数delay()用的是定时器0,所以就不会冲突了。

////////////////////////////////////////////////////

实际上要是不用pmw控制电机。用数字信号的话,这个就不影响。

提醒:《arduino 舵机控制与pwm控制小车冲突解决》最后刷新时间 2024-03-14 00:51:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《arduino 舵机控制与pwm控制小车冲突解决》该内容的真实性请自行鉴别。