Arduino uno使用PCA9685模块实现16路舵机控制

Arduino uno使用PCA9685模块实现16路舵机控制PCA9685 模块 PCA9685 是 16 路 12 位 PWM 信号发生器 可用于控制舵机 led 电机等设备 采用 I2C 通信 主机只需要 I2C 接口即可实现 16 路舵机控制 PCA9685 的 I2C 地址默认 0x40 如果需要改变地址 则需要将板上 A0 A5 焊通即可对应的 bit 置 1 此时地址为 0x40 A5 A0 这也意味着主机可以通过 I2C 地址控制 64 个 PCA9685 模块 从而实现最大 16 64 路舵机控制

PCA9685模块

Arduino uno与模块连线

Adafruit库安装

使用Arduino的好处之一是有丰富的库支持。PC9685模块也有对应的库可以使用,这是一个外部库,由Adafruit提供。

选择工具菜单下的管理库选项

在这里插入图片描述

搜索adafruit pwm

在这里插入图片描述

点击安装

在这里插入图片描述

安装完后,即可在文件下示例里面找到对应的示例

在这里插入图片描述

控制程序

PCA9685可以设置更新频率,时基脉冲周期20ms相当于50HZ更新频率。PCA9685采用12位的寄存器来控制PWM占比,对于0.5ms,相当于0.5/204096=102的寄存器值。以此类推如下:
0.5ms————–0度:0.5/20

4096 = 102
1.0ms————45度:1/204096 = 204
1.5ms————90度:1.5/20

4096 = 306
2.0ms———–135度:2/204096 = 408
2.5ms———–180度:2.5/20

4096 =510




控制程序使用串口通讯接受指令,实现0/45/90/135/180度,总共5种角度的控制。

#include  
     #include  
     // 默认地址 0x40 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); #define SERVO_0 102  #define SERVO_45 187  #define SERVO_90 280  #define SERVO_135 373  #define SERVO_180 510  // our servo # counter uint8_t servonum = 0; char comchar; void setup() { 
    Serial.begin(9600); Serial.println("8 channel Servo test!"); pwm.begin(); pwm.setPWMFreq(50); // 50HZ更新频率,相当于20ms的周期 delay(10); } void loop() { 
    while(Serial.available()>0){ 
    comchar = Serial.read();//读串口第一个字节 switch(comchar) { 
    case '0': pwm.setPWM(0, 0, SERVO_0); Serial.write(comchar); break; case '1': pwm.setPWM(0, 0, SERVO_45); Serial.write(comchar); break; case '2': pwm.setPWM(0, 0, SERVO_90); Serial.write(comchar); break; case '3': pwm.setPWM(0, 0, SERVO_135); Serial.write(comchar); break; case '4': pwm.setPWM(0, 0, SERVO_180); Serial.write(comchar); break; default: Serial.write(comchar); break; } } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211622.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:00
下一篇 2026年3月18日 下午10:00


相关推荐

  • Python day字符串所有使用

    Python day字符串所有使用字符串所有的操作 name dio names my tnameis Name andiama job print name capitalize 首字母大写 print names count a 数字符里面有几个重复的指定字母 print names center 50 前一个数字表示一共要打印 50 个位置 不够的地方用后面双引号内的内

    2026年3月17日
    1
  • 我成功申请了 ChatGPT Pro 半年免费,相当于省了1200美金

    我成功申请了 ChatGPT Pro 半年免费,相当于省了1200美金

    2026年3月15日
    4
  • ArcGIS相交闭合矩形线转面

    ArcGIS相交闭合矩形线转面ArcGIS 相交闭合矩形线转面如图为两条自我闭合且相交的线现在想将其转换成如下图所示的两个独立的多边形 但直接使用 ArcGIS 的 要素转面 工具会生成五个独立的多边形 如图所示 属性记录也为 5 条 现使用另一种方式进行转换 1 要素转 json 使用工具箱中的 要素转 json 工具将线要素转成 json 的文件 2 修改 json 代码将 json 文件用编辑器打开 vs not

    2025年9月14日
    6
  • mysql分区表详解_详解MySQL分区表「建议收藏」

    mysql分区表详解_详解MySQL分区表「建议收藏」前言:分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。本篇文章给大家带来的内容是关于MySQL中分区表的介绍及使用场景,有需要的朋友可以参考一下,希望对你有所帮助。1.分区的目的及分区类型MySQL在创建表的时候可以通过使用PARTITIONBY子句定…

    2022年4月30日
    75
  • [CV] Structure from motion(SFM)- 附我的实现结果

    [CV] Structure from motion(SFM)- 附我的实现结果【更新】我的新博客:www.ryuzhihao.cc,当然这个csdn博客也会更新本文在新博客中的链接:点击打开链接完成时间:2017年2月27日博客时间:2017年4月26日去年,我有幸了解到image-basedmodeling的相关知识。作为一个大三本科生,虽说自己此前也做过一些相关工作,但是要自己实现Structuref…

    2022年6月20日
    29
  • 读完了csapp(中文名:深入理解计算机系统)

    读完了csapp(中文名:深入理解计算机系统)

    2021年11月28日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号