Arduino与Proteus仿真实例-PCA9685驱动伺服电机仿真

PCA9685驱动伺服电机仿真

1、伺服电机介绍

伺服电机是一种旋转执行器或线性执行器,可以精确控制角度或线性位置、速度和加速度。 它由一个合适的电机组成,该电机耦合到一个用于位置反馈的传感器。 它还需要一个相对复杂的控制器,通常是一个专门设计用于伺服电机的专用模块。

伺服电机不是特定类别的电机,尽管术语伺服电机通常用于指适用于闭环控制系统的电机。

伺服电机用于机器人、数控机械或自动化制造等应用。

伺服电机是一种闭环伺服机构,它使用位置反馈来控制其运动和最终位置。其控制的输入是一个信号(模拟或数字),代表输出轴的位置指令。

电机与某种类型的位置编码器配对以提供位置和速度反馈。在最简单的情况下,只测量位置。输出的测量位置与指令位置(控制器的外部输入)进行比较。如果输出位置与所需位置不同,则会生成错误信号,然后根据需要将电机向任一方向旋转,从而将输出轴带到适当的位置。随着位置的接近,误差信号减小到零,电机停止。

最简单的伺服电机通过电位计和对电机的 bang-bang 控制使用仅位置感测;电机始终全速旋转(或停止)。这种类型的伺服电机并未广泛用于工业运动控制,但它构成了用于无线电控制模型的简单且廉价的伺服系统的基础。

更复杂的伺服电机使用光学旋转编码器来测量输出轴的速度 和变速驱动器来控制电机速度。 这两种增强功能通常与 PID 控制算法结合使用,可以让伺服电机更快、更精确地到达其指令位置,同时减少超调。

2、PCA9685介绍

PCA9685 是 I2C 总线控制的 16 通道 LED 控制器,针对红/绿/蓝/琥珀色 (RGBA) 彩色背光应用进行了优化。每个 LED 输出都有自己的 12 位分辨率(4096 步)固定频率的独立 PWM 控制器,可运行以 24 Hz 至 1526 Hz 的典型频率可编程,占空比可在 0 % 至 100 % 之间调节,以允许将 LED 设置为特定的亮度值。所有输出都设置为相同的 PWM 频率。

在前面的文章中已经做了相应的介绍,请参考:

3、仿真电路

在这里插入图片描述

4、仿真代码实现

本次实例使用了如下开源库:

演示代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "PCA9685.h"
#include <Wire.h>

ServoDriver servo;

void startServo(uint8\_t index){
// Drive 8 servos in turns
servo.setAngle(index, 0);
delay(500);
servo.setAngle(index, 180);
delay(500);
}

void stopServo(uint8\_t index){
servo.setAngle(index, 0);
}

void setup()
{
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
// join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin();
//Serial.begin(9600);
servo.init(0x40);
// uncomment this line if you need to use a special servo
// servo.setServoPulseRange(600,2400,180);
}

void loop()
{
if(digitalRead(2) == HIGH){
startServo(1);
}

if(digitalRead(3) == HIGH){
startServo(2);
}

if(digitalRead(4) == HIGH){
startServo(3);
}

if(digitalRead(5) == HIGH){
startServo(4);
}
}

5、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121135856