stm32+pca9685控制舵机机械臂 |
您所在的位置:网站首页 › stm32f103c8t6输出pwm控制机械臂 › 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.程序源码完整工程下载地址 点击此处下载 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |