PCA9685芯片手册学习求教

概述

项目使用树莓派和PCA9685模块连接舵机进行控制,参照pca9685模块手册写了驱动代码,能按照预期进行控制舵机。
记录一下后续回看。

    %PCA9685 此处提供此类的摘要%   初始化输入参数:芯片地址默认(0x40),输出通道(ch),输出频率(freq)%   pwm输出参数:脉宽pulse_widthXCZ范围默认(500us,2500us),输出占空比(0-100)propertiesdevicei2cdevicebus='i2c-1' %设备连接到i2c-1address = '0x40' %设备地址默认0x40freq = 50 % 设置输出频率默认50Hz,周期20ms,最小24Hz,'0xff',最大1526Hz,'0x03'        duty=0 % 输出占空比delay=0 %无延时endproperties(Access=private)MODE1 = 0x00MODE2 = 0x01SUBADR1 = 0x02SUBADR2 = 0x03SUBADR3 = 0x04ALLCALLADR=0x05LED0_ON_L=0x06LED0_ON_H=0x07LED0_OFF_L=0x08LED0_OFF_H=0x09ALL_LED_ON_L = 0xFAALL_LED_ON_H = 0xFBALL_LED_OFF_L = 0xFCALL_LED_OFF_H = 0xFDPRE_SCALE = 0xFEendpropertiesprecaleval = 25e6alpha=1 %修正系数endmethodsfunction obj = PCA9685(mypi,bus,address)% 构造一个PCA9685对象,类似i2c sensor% 定义i2c地址。obj.device=mypi;obj.i2cdevice=i2cdev(obj.device,bus,address);obj.bus=bus;obj.address = address; endfunction setPWMFreq(obj,value)oldmode=readRegister(obj.i2cdevice,obj.MODE1); % 读MODE1寄存器%检查bit7(RESTART)是1则清空bit4(SLEEP),延时1000usnewmode=bitor(bitand(oldmode,hex2dec('7f')),hex2dec('10'));% SLEEP modewriteRegister(obj.i2cdevice,obj.MODE1,newmode);% set bit4(SLEEP)% tic;% for t=0.001:0.001:1/1000%     while toc<t%     end% end pause(5e-3);%wait 1mswriteRegister(obj.i2cdevice,obj.MODE1,bitor(oldmode,hex2dec('a1')));obj.freq=value;prescale=round(obj.precaleval/(4096*obj.freq*obj.alpha))-1; %计算填入寄存器的值writeRegister(obj.i2cdevice,obj.PRE_SCALE,prescale,'uint16')%填入寄存器newmode=bitset(newmode,5,0); % Normal modewriteRegister(obj.i2cdevice,obj.MODE1,newmode);% 置于正常模式endfunction setAngle(obj,ch,angle)%ch为通道号[0,15]%setPWMDuty(ch,duty)%ch是通道号0-15cycle=1000/obj.freq;min_led_on_time=round(4096/cycle*500e-6);max_led_on_time=round(4096/cycle*2500e-6);led_off_time=min_led_on_time+round((max_led_on_time-min_led_on_time)*angle/180);writeRegister(obj.i2cdevice,obj.LED0_ON_H+ch*4,bitshift(0,-8,"uint16"));writeRegister(obj.i2cdevice,obj.LED0_ON_L+ch*4,bitand(0,hex2dec('ff')));writeRegister(obj.i2cdevice,obj.LED0_OFF_H+ch*4,bitshift(led_off_time,-8,"uint16"));writeRegister(obj.i2cdevice,obj.LED0_OFF_L+ch*4,bitand(led_off_time,hex2dec('ff')));endfunction setPWMDuty(obj,ch,on,off)min_led_on=102;max_led_on=512;if off<min_led_onoff=min_led_on;endif off> max_led_onoff=max_led_on;endwriteRegister(obj.i2cdevice,obj.LED0_ON_H+ch*4,bitshift(on,-8,"uint16"));writeRegister(obj.i2cdevice,obj.LED0_ON_L+ch*4,bitand(on,hex2dec('ff')));writeRegister(obj.i2cdevice,obj.LED0_OFF_H+ch*4,bitshift(off,-8,"uint16"));writeRegister(obj.i2cdevice,obj.LED0_OFF_L+ch*4,bitand(off,hex2dec('ff')));endend
end

树莓派使用mypi=raspi创建,然后可以创建servos=PCA9685(mypi,‘i2c-1’,‘0x40’),创建一个i2c设备,设备连接能够正常建立,按照舵机使用参考代码,led_off_time的范围理论计算出是104~512,但是实际使用时由于误差,中值设计为300,下限为150,上限为450,能够较好的满足使用需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QEMU系统分析之启动篇(十八)】

系列文章目录 第十八章 QEMU系统仿真的加速器上电后设置分析 文章目录 系列文章目录第十八章 QEMU系统仿真的加速器上电后设置分析 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环数据初始化3. accel_setup_post(current_machine) …

bit、进制、位、时钟(窗口)、OSI七层网络模型、协议、各种码

1.bit与进制 &#xff08;个人理解&#xff0c;具体电路是非常复杂的&#xff09; 物理层数据流&#xff0c;bit表示物理层数据传输单位&#xff0c; 一个电路当中&#xff0c;通过通断来表示数字1和0 两个电路要通讯&#xff0c;至少要两根线&#xff0c;一根作为电势参照…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果&#xff1a; 代码&#xff1a; /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

东北大学工程训练CNC加工中心(坤图)

东北大学加工中心&#xff08;CNC&#xff09;采用的系统为FANUC系统。 要求学生自主设计图样&#xff0c;编写GCODE文件&#xff0c;操作电脑使机床按设计路径铣出图案。 本人设计的图样为坤坤图 图为用CAD设计绘制的图样。 计算坐标&#xff0c;设计铣刀轨迹&#xff0c;得…

Linux--基础IO(上)

目录 1. 文件的边角知识 1.1 文件是什么&#xff1f; 1.2 文件是怎么打开的&#xff1f; 1.3 进程与文件 进程与文件的关系 2. 重温c语言文件接口 2.1 打开文件的方式 2.2 读写文件接口的重温 2.2.1 写文件 2.2.2 读文件 3. 系统文件I/O 3.1 系统接口 3.2 系…

【深度学习-第5篇】使用Python快速实现CNN分类(模式识别)任务,含一维、二维、三维数据演示案例(使用pytorch框架)

在之前的文章中介绍了CNN的图解入门&#xff0c;CNN的MATLAB分类实现&#xff0c;CNN的MATLAB回归实现。 卷积神经网络(Convolutional Neural Networ&#xff0c;简称CNN)是一种广泛应用于图像识别领域的深度学习算法。它通过模拟人类视觉系统的层次结构&#xff0c;可以自动提…

半导体芯片相关知识

半导体工业构成 半导体工业是一个涉及多个领域和环节的复杂产业链&#xff0c;其构成包括但不限于以下几个方面&#xff1a; 芯片设计&#xff1a; 芯片设计是半导体工业的基础&#xff0c;包括集成电路&#xff08;IC&#xff09;设计、系统芯片设计、模拟电路设计等。芯片设…

nginx-1.24.0 安装教程

下载nginx安装包 mkdir -p /home/app cd /home/app wget http://nginx.org/download/nginx-1.24.0.tar.gz 解压缩 tar -zxf nginx-1.24.0.tar.gz 下载nginx二进制包编译所需的工具和依赖 yum install gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel -y 编译…

Arduino平衡小车

一&#xff0c;TB6612FNG电机驱动芯片 TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件&#xff0c;它具有大电流MOSFET-H桥结构&#xff0c;双通道电路输出&#xff0c;可同时驱动2个电机. 参数名称参数值电压范围2.7-5.5V最大输入电压15V输出电流1.2A(平均)/3.2A&…

Vitis HLS 学习笔记--HLS入门示例集合-目录

目录 1. 示例集合概述 2. Interface 接口 2.1 Aggregation_Disaggregation 聚合与解聚 2.1.1 aggregation_of_m_axi_ports 2.1.2 aggregation_of_nested_structs 2.1.3 aggregation_of_struct 2.1.4 auto_disaggregation_of_struct 2.1.5 disaggregation_of_axis_port …

Lambda表达式与函数式接口

Lambda表达式与函数式接口 1. 函数式接口 1.1 什么是函数式接口 函数式接口是指只有一个抽象方法的接口&#xff08;Object的public方法除外。&#xff09;。这种接口可以使用Lambda表达式实现&#xff0c;从而实现函数式编程的特性。另外函数式接口可以有默认方法和静态方法…

Python 安装faiss失败

报错 遇到ModuleNotFoundError: No module named faiss&#xff0c;使用下面语句安装失败。 pip3 install faiss 遇到 ERROR: Could not find a version that satisfies the requirement faiss (from versions: none) ERROR: No matching distribution found for faiss …

模块化 手写实现webpack

模块化 common.js 的导入导出方法&#xff1a; require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别&#xff1a; require属于动态类型&#xff1a;加载执行 同步 esmodul是静态类型&#xff1a;引入时并不会真的去…

[C++][算法基础]01背包问题(动态规划)

有 &#x1d441; 件物品和一个容量是 &#x1d449; 的背包。每件物品只能使用一次。 第 &#x1d456; 件物品的体积是 &#x1d463;&#x1d456;&#xff0c;价值是 &#x1d464;&#x1d456;。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量…

Autosar AP的基本构成

1. 引言 Autosar AP的体系结构是怎样的呢&#xff1f;从整体的宏观的方向上划分&#xff0c;分为 1&#xff09;应用层&#xff0c;其中放置各种应用组件SWCs。2&#xff09;运行时基本功能软件族群&#xff0c;提供基本AutoSar基本软件中间件&#xff0c;比如经典的通信服务…

tsdx 打包ts项目

问题&#xff1a;sdk项目里面有node代码和浏览器代码&#xff0c;打包产物要同时支持两个平台。 1、 解读tsdx build命令 tsdx使用了rollup打包&#xff0c;

【漏洞复现】云时空社会化商业ERP系统slogin SQL注入漏洞

漏洞描述&#xff1a; 云时空社会化商业ERP系统slogin存在SQL注入漏洞&#xff0c;攻击者可以通过此漏洞获取数据库敏感信息。 搜索语法: Fofa-Query: app"云时空社会化商业ERP系统" 漏洞详情&#xff1a; 1.云时空社会化商业ERP系统。 2.漏洞POC&#xff1a; …

智慧园区引领未来产业趋势:科技创新驱动园区发展,构建智慧化产业新体系

目录 一、引言 二、智慧园区引领未来产业趋势 1、产业集聚与协同发展 2、智能化生产与服务 3、绿色可持续发展 三、科技创新驱动园区发展 1、创新资源的集聚与整合 2、创新成果的转化与应用 3、创新文化的培育与弘扬 四、构建智慧化产业新体系 1、优化产业布局与结构…

JavaScript:将input标签中的内容打印到控制台

使用浏览器进行开发时&#xff0c;按F12可以查看网页信息。 目标&#xff1a;实现将input标签中的内容&#xff0c;打印到控制台&#xff08;console&#xff09; HTML页面的关键代码实现&#xff1a; 登录功能&#xff1a; HTML代码&#xff1a; <div class"form-…

[八股]从反射到动态代理

从反射到动态代理 这部分文章将能解答以下问题&#xff1a; JVM的类加载过程中加载这一阶段做了什么&#xff1f; 讲一下设计模式中的代理模式 动态代理是什么&#xff1f; Spring是如何实现AOP的? 初识反射 Java反射可以在程序运行时动态加载类并获取类的详细信息&#xff0…