stm32+pca9685控制舵机机械臂

1.硬件

PCA9685是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片,该芯片最初由NXP推出时主要面向LED开关调光,但就目前国内的形式来看,好像在被Arduino在舵机控制领域使用的更广泛。
这里写图片描述
该模块由于主要活跃在Aruino周边,所以在使用Arduino开发其底层驱动库是十分完善的,但对于单片机开发人员就不太友好了,需要自行根据用户手册在单片机上编写底层的驱动。
这里写图片描述
其地址的分配是通过模块右上方的短接焊盘来确定的,从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,许多人包括淘宝商家误以为默认地址是0x40,坑爹啊。
这里写图片描述

2.IIC通信

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

3.程序

首先要有IIC通信的底层驱动文件,同时要有pca9685的驱动文件,pca9685的驱动可以在pcf8574的驱动文件的基础上进行修改,关键在于以下两个函数:

void setPWM(u8 num, u16 on, u16 off) 
void setPWMFreq(u8 freq)

注意用u8,不要用unsigned int。
同时有个地方要注意:

IIC_Send_Byte(PCA9685_adrr|0X01); //发送器件地址+读命令

这里是上面提到的r/w,既然这里是读地址,必然是0X01。
主函数中:

PCA9685_write(PCA9685_MODE1,0x0);
    setPWMFreq(50); 
setPWM(0, 0, 220);
            delay_ms(2000);

            setPWM(2, 0,110);
            delay_ms(2000);

            setPWM(1, 0,130);
            delay_ms(2000);
            setPWM(1, 0,150);
            delay_ms(2000);
            setPWM(1, 0,175);
            delay_ms(2000);
            setPWM(1, 0,195);
            delay_ms(2000);

对于180度的舵机,只能通过延时和细分角度来防止速度过快造成冲击过大的现象。

4.程序源码

完整工程下载地址
点击此处下载

  • 6
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值