arduino学习笔记(四)——伺服电机(舵机)

arduino学习笔记(四)——伺服电机(舵机)

我的博客:竹山听雨

连接

舵机
舵机接线: 5v pwm (0v)GND
uno

原理

伺服电机是一种位置伺服的驱动器,工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出
旋转原理
经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿将动力传至摆臂,同时由位置检测器送回信号,判断是否达到到达定位。适用于那些需要角度不断变化并可以保持的控制系统,旋转角度一般为0-45\0-90\0-180

舵机的转动角度是通过桥接PWM(脉冲宽度调制)信号的占空比实现的,标准PWM信号的周期固定位20ms(50HZ),理论上脉宽分布在1ms到2ms之间,实际为0.5ms到2.5ms之间,脉宽和舵机的转角0-180相对应

程序

方法一

int servopin=9;//定义数字接口9 连接伺服舵机信号线`
int myangle;//定义角度变量`
int pulsewidth;//定义脉宽变量`
int val;

void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
//500位初始值,0.5ms,2480=500+180*11
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);//将舵机接口电平至低
delay(20-pulsewidth/1000); //延迟函数,担心无法转到指定角度
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//连接到串行端口,波特率为9600
Serial.println("servo=o_seral_simple ready");
}
void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
{
val=Serial.read();//读取串行端口的值
if(val>'0'&&val<='9')
{
val=val-'0';//将特征量转化为数值变量
val=val*(180/9);//将数字转化为角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
	for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度
	{
	servopulse(servopin,val);//引用脉冲函数
	}
}
}

方法二

  • attach(接口)——设定舵机的接口,只有**支持PWM(~)**接口可以利用
  • write(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。
  • read()——用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。
  • attached()——判断舵机参数是否已发送到舵机所在接口。
  • detach()——使舵机与其接口分离,该接口可继续被用作PWM 接口。
    注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。仍然将舵机接在数字9 接口上即可。
#include <Arduino.h>
#include <Servo.h>

Servo servo;

void setup ()
{
  servo.attach(13);//PWM引脚设置,与GPIO引脚号对应.
}

void loop ()
{
  // To 0°
  servo.write(0);
  delay(1000);

  // To 90°
  servo.write(90);
  delay(1000);

  // To 180°
  servo.write(180);
  delay(1000);
}

猜你喜欢

转载自blog.csdn.net/InkBamboo920/article/details/106090040
今日推荐