【CW32模块运用】16路舵机驱动模块
当你在一个项目中碰到了。微操控器。芯片的PWM输出引脚不够用的状况,那么这款PCA968516路舵机就能很快帮助您处理这个问题了。只需你的主控芯片具有了。I2C。通讯。,就能够让主控芯片和PCA9685通讯,完结多个舵机的一起操控了。PCA9685 16路舵机是一个选用I2C通讯,内置了PWM。驱动器。和一个。时钟。,这个意味着,这将和TLCG940系列有很大不同,你不需求不断发送。信号。占用你的。单片机。。它是5V的兼容,这意味你还能够用3.3V单片机操控而且安全地驱动到6V输出(当你想要操控白色或蓝色指示灯用3.4+正电压也是能够的)。地址挑选引脚使你能够把62个驱动板挂在单个l2C总线上,总共有992路PWM输出,那将是十分巨大的资源,约1.6Khz可调频PWM输出,为。步进电机。预备输出12位分辨率,可装备的推拉输出或开路输出,输出使能引脚能够快速禁用一切输出。
一、模块来历。
模块什物展现:
材料链接:https://pan.b。ai。du.com/s/1FjoAuJm387bxaZxS6g9HEg。
材料提取码:8888。
二、标准参数。
输入电压:3.3V~5V。
额外。电流。:15mA。
操控方法:IIC。
尺度:21(长)*21(宽)[单位:mm]。
以上信息见厂家材料文件。
三、移植进程。
咱们的方针是将例程移植至CW32F030C8T6开发板上【完结无线的数据传输的功用】。首先要获取材料,检查数据手册应怎么完结读取数据,再移植至咱们的工程。
3.1检查材料。
IIC器材地址。
PCA9685 是一个I2C 从设备,有个设备ID,或许叫从 地址。从地址是如下确认的:
Board 0:。 Ad。dress = 0×40 Offset = binary 00000 (默许)。
Board 1: Address = 0×41 Offset = binary 00001 (A0接上拉)。
Board 2: Address = 0×42 Offset = binary 00010 (接上A1上拉)。
Board 3: Address = 0×43 Offset = binary 00011 (A0和A1上拉)。
Board 4: Address = 0×44 Offset = binary 00100 (A2上拉)。
以此类推;
PCA9685的I2C总线从地址如下图所示。为了节省电力,硬件可选地址引脚上没有内部上拉。电阻。,它们有必要被拉高或拉低。可是咱们运用的是模块,而模块上现已为咱们接好了上拉电阻。
地址字节的最终一位界说要履行的操作。当设置为逻辑1时,将挑选读操作,而逻辑0则挑选写操作。 在原理图中,地址线悉数接0,所以slave address是0x40。对应Fig 4上的方位,则为:。
则IIC地址是 0x80 ,写入时是0x80,读取时是0x81。
设置PWM频率。
舵机操控所需的 PWM 周期为20 ms. 在用 PCA9685 作为多舵机操控器时,需求将 其 PWM 输出周期设定为20 ms,即PWM 波的频率设定为50 Hz,PCA9685 输出频率与。振荡器。有关,频率的设置值refresh_ra。te。见下面的公式;
其间,EXTCLK是PCA9685的内部时钟频率为25Mhz;prescale是要设置的频率,咱们设置为50Hz;
refresh_rate = 25,000,000 /( 4096 * ( 50 + 1 ))。
refresh_rate = 25,000,000 / 4096 / (50 + 1)。
refresh_rate = 6,103.52 / (50 + 1)。
refresh_rate = 6,103.52 / 51。
refresh_rate = 119.68。
所以咱们需求设置的值是119.68,取整数便是120。
需求留意的是,频率的更改只能在 PCA9685 芯片处于休眠状况下进行。
以下加粗字体是数据手册内容:
要运用EXTCLK引脚,该位有必要按以下次序设置:。
在mode1中设置SLEEP位。这就封闭了内部振荡器,使芯片处于休眠状况。
将逻辑1写入MODE1中的SLEEP和EXTCLK位。这样就转化完结了。外部时钟能够在切换期间处于活动状况,由于设置了SLEEP位。
这个位是一个“粘性位”,也便是说,它不能经过写入逻辑0来铲除。EXTCLK位只能经过。电源。循环或软件重置来铲除。 占空比或许脉冲宽度的设定。
每个PWM引脚输出的敞开时刻和PWM的占空比能够经过。LED。n_ON和LEDn_OFF。寄存器。独立操控。
每个PWM引脚输出将有两个12位寄存器。这些寄存器将由用户。编程。。两个寄存器都将保存从0到4095的值。一个12位寄存器将保存ON时刻的值,另一个12位寄存器将保存OFF时刻的值。将ON和OFF时刻与12位计数器的值进行比较,该计数器将从0000h继续运转到0FFFh(0到4095十进制)。
ON时刻是可编程的,它是PWM输出ON的时刻,OFF时刻也是可编程的,它是PWM输出OFF的时刻。这样相移就彻底可编程了。相移的分辨率为方针频率的1 / 4096。表7列出了这些寄存器。
以下用一个比如阐明怎么核算要加载到这些寄存器中的值。
(假定运用LED0输出,(延时时刻)+ (PWM占空比)。<=100%)
推迟时刻 = 10%;PWM占空比= 20% (LEDON电平= 20%;LEDOFF时刻= 80%)。推迟时刻= 10% = 4096 * 0.1 = 409.6 ~ 410,计数= 410(十进制) = 19Ah(十六进制)。
由于计数器从0开端,到4095完毕,咱们将减去1,所以推迟时刻 = 199h 个数。
LED0_ON_H = 1h;LED0_ON_L = 99h (LED开端翻开后,这个推迟计数到409)。
LED开机时刻= 20% = 819.2 ~ 819次。
LED封闭时刻= 4CCh(十进制410 + 819-1 = 1228)。
LED0_OFF_H = 4h;LED0_OFF_L = CCh(此计数到1228后LED开端封闭)。
整个周期为4095, LED_ON 和 LED_OFF 2个的设定值确认脉宽,在后边的代码里,LED_ON 设为0, LED_OFF便是脉宽了。 这儿都用2位字节来表明。
相关地址表。
// 相关地址表// 这儿只截图了需求的地址,分别是:#define PCA_Addr 0x80 //IIC地址#define PCA_Model 0x00#define LED0_ON_L 0x06#define LED0_ON_H 0x07#define LED0_OFF_L 0x08#define LED0_OFF_H 0x09#define PCA_Pre 0xFE //装备频率地址。
3.2引脚挑选。
模块接线图。
3.3移植至工程。
移植过程中的导入.c和.h文件与【CW32模块运用】DHT11温。湿度传感器。相同,仅仅将.c和.h文件更改为bsp_pca9685.c与bsp_pca9685.h。这儿不再过多叙述,移植完结后边修正相关代码。
在文件bsp_pca9685.c中,编写如下代码。
/* * Change Logs: * Date Author Notes * 2024-06-25 LCKFB-LP fi。rs。t version */#include "bsp_pca9685.h"#include "stdio.h"#include。 < math.h >/。内容来源:https://sh.tanphatexpress.com.vn/app-1/phò,http://chatbotjud.saude.mg.gov.br/app-1/bet-cassino-online
(责任编辑:经济)