pca9685的舵机控制

舵机角度

一个周期为20ms的脉冲里面高电平持续的时间决定了舵机转动的角度,180度舵机对应关系如下:0.5ms--0度,1ms--45度,1.5ms--90度,2ms--135度,2.5ms--180度。

 

16路舵机驱动控制模块pca9685pw通过IIC(内置PWM驱动和一个时钟)协议可以控制16个舵机

 

pca9685设备地址

其地址的分配是通过模块右上方的短接焊盘来确定的,从A0-A5表示地址的最低位到最高位,也就是最多可级联2^5=32个模块,地址为: 1+A5+A4+A3+A2+A1+A0+rw。如果不用短接的话Ax=0;短接的话Ax=1;rw为写的话rw=0;rw为读的话rw=1;所以写入数据不做短接则地址应该为1000 0000 =0x80

 

 

IIC通信

SCL接PH4,SDA接PH5,VCC接3.3V,GND接,V+单纯只是供电,在驱动大功率舵机时不接,但是外接电源的两个端口要接上正负极,否则无法供电。

其中每个输出管脚拥有4个寄存器,每隔寄存器存储8位2进制数据,每个输出管脚需要存储上升时间和下降时间

void setPWM(uint num, uint on, uint off)//其中开始一般设置为0,只需要取下降时间就行

该函数为设置PWM波的占空比,一般都以4096为一个PWM波周期

MODE1寄存器用来重设板子,PRE_SCALE用来设置控制周期的寄存器,要在进入睡眠后修改时钟周期寄存器

void setPWMFreq(float freq)

设置角度

60度=0.5ms+(60/180)*(2.5ms-0.5ms)=1.1666ms

利用占空比=1.1666ms/20ms=off/4096,off=239,50hz对应周期20ms

实物连接图

pca9685分为控制电和驱动电两个电源,其中控制电接3.3V,一般由单片机开发板提供,同时SCL和SDA和单片机的数据信号和时钟信号相连;而驱动电为中间绿色的装置,需接5v电压

这里驱动电我使用了网购的另一个5v直流电源

### 使用PCA9685舵机控制板与Arduino连接和编程 #### 连接硬件组件 为了使PCA9685能够正常工作并与Arduino通信,需要按照特定的方式连接各个部件。具体来说: - 将PCA9685的SCL引脚连接到Arduino的A5引脚; - 把SDA引脚接到Arduino的A4位置上; - VCC端子接入5V电压源; - GND接地处理[^1]。 这些连线确保了I²C总线协议下的双向通讯路径建立起来,从而让主控器可以发送指令给PCA9685芯片并接收反馈信息。 #### 安装必要的软件库 在编写程序之前,还需要准备一些额外的东西——即安装支持PCA9685操作的相关库文件。这可以通过Arduino IDE中的库管理工具完成下载和集成过程。推荐使用Wire.h以及Adafruit_PWMServoDriver.h这两个官方提供的类库来简化开发流程[^2]。 #### 编写示例代码 下面给出了一段简单的测试代码片段,它实现了通过串行监视器输入指定的角度值来调整连接PCA9685输出通道上的单个舵机的位置功能。 ```cpp #include <Wire.h> #include <Adafruit_PWMServoDriver.h> // 创建一个PWM驱动实例,默认地址0x40 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); void setup() { Serial.begin(9600); // 初始化PCA9685频率设置为60Hz pwm.begin(); pwm.setPWMFreq(60); } void loop() { if (Serial.available()) { int angle = Serial.parseInt(); // 获取用户输入的角度 // 计算对应的占空比数值范围是从150~600微秒宽度脉冲信号 uint16_t pulseWidth = map(angle, 0, 180, SERVO_MIN, SERVO_MAX); // 设置第0号通道输出该脉宽 pwm.setPWM(0, 0, pulseWidth); delay(100); // 延迟一段时间等待动作完成 } } ``` 此段代码首先包含了两个必需的头文件,并创建了一个`Adafruit_PWMServoDriver`对象用于后续调用API函数;接着,在初始化阶段设置了系统的波特率参数以便能读取来自PC端的数据流,同时也配置好了PCA9685的工作模式;最后进入循环体部分监听是否有新的命令到达,一旦检测到了有效的整数型字符串则立即将其转换成相应的PWM波形周期再传递给目标执行机构。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值