Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
PX4使用I2C方式添加自定义传感器(1)
2023-05-16
PX4使用I2C方式添加自定义传感器(1)
前言
毕业设计就是要在PX4上添加一个传感器(角度传感器),由于板子上的接口数量很少,很是宝贵。最后只能选择通过I2C通信方式,出于I2C通信的独特优势,一个I2C接口上可以同时接多个device,所以通过在板子上的I2C接口连接一个一拖四,这样就不会占接口的数量了。一拖四如下图所示:
由于在毕设之前从未接触过飞控,所以初次上手真的是困难重重啊,说起来都是泪。所以如果有什么问题,还请各路大神多多指教。本来也就是一个小小的传感器通过I2C方式进行通信而已,根本没有那么困难,但是一融入到飞控当中就不知到如何下手了。前期已经在STC单片机上进行过实验,之后又在STM32开发板上进行了实验,实验的结果都是比较成功的。最后一步就是加入到飞控中了!在万能的百度上搜索通过I2C方式给PX4添加自定义传感器,结果资源很少啊,只有一个博主发了,而且是相当简洁啊,简洁的我都看不懂。所以就想着自己总结一下这段时间的经历,希望能给以后遇到相同问题的同道中人提供一些参考的建议。
I2C通信机制
关于I2C的通信机制我就不多说了,关于这个的资料网上也是很丰富了。这里推荐一个文章,说的比较清楚:I2C通信机制介绍 这里只需要强调一点,就是每个接到I2C总线上的器件都有唯一的地址。这个地址并不是主机给的,而是器件本身所携带的。所以你如果需要通过I2C添加一个device一定要搞清楚这个device的地址是什么,为什么说这个很重要呢。因为对于飞控来说最基本的函数都是给你封装好了,比如说链接中文章提到的start、stop、ack(应答信号),这类函数都是已经封装好了的,不需要你自己去写,在飞控中基本上都是一个强大的transfer函数就搞定了(关于这个函数在后面的文章中会有详细介绍的)。你只需要弄清楚器件地址一切都OK 了,说到地址这里需要着重强调一点,这个真的很重要,后期就是由于这个问题程序一直不成功。
那就是对于PX4飞控来说,device的地址是7位的!!!
这是什么意思呢?我们知道每种device都有特定的地址,一般都是前7位,最后一位是R/W位,即读/写位。如下图所示:
比如对于我的角度传感器(其实是角度传感器输出接ADC,转化成数字量后通过I2C输出):
D7~D4:飞利浦公司规定为1001
D3~D1:这个要根据硬件的实际情况来决定了,在我的模块上分别是A2、A1、A0的电平,我的模块如下图所示:
可以看到我的模块原理图上A2、A1、A0是全部接地,所以为D3~D1为000。
D0:为方向设置,当为1时进行读操作,当为0时进行写操作。
所以总的器件地址为0b1001000X,按照这个模块给的资料,首先写第一个字节传递器件地址0b10010000(即0x90),但是在飞控上设置的地址就不是八位的0x90了,而是七位的地址0x48(就是将0b10010000右移一位变成了0b01001000即0x48),至于为什么会这样,这跟transfer这个函数有关,后面将会介绍。
这篇文章就介绍到这了,下一篇文章我将通过对PX4飞控中提供的一个I2C通信方式传感器代码的分析,了解I2C通信传感器的驱动和一些重要的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)
PX4
I2C
方式添加自定义传感器
PX4使用I2C方式添加自定义传感器(1) 的相关文章
PX4模块设计之四十五:param模块
PX4模块设计之四十五 xff1a param模块 1 param模块简介2 模块入口函数param main3 重要函数列表4 总结5 参考资料 1 param模块简介 Description Command to access and
串口通信协议【I2C、SPI、UART、RS232、RS422、RS485、CAN、TTL、USB】
xff08 1 xff09 I2C 集成电路互连总线接口 Inter IC xff1a 同步串行半双工传输总线 xff0c 连接嵌入式处理器及其外围器件 支持器件 xff1a LCD驱动器 Flash存储器 特点 有两根传输线 xff08
I2C驱动体系结构一:驱动软件概念与对应硬件的关系
一 概念 xff1a 1 设备 xff1a struct device xff1a 该数据结构是对物理设备的软件抽象 xff0c 比如I2C slave xff08 对应i2c client xff09 和I2C 适配器 xff08 对应i
AM2322温湿度传感器(地址0XB8)---I2C总结(I2C_ModBus协议)
I2C接口及时序
1 I2C学习要点 1 有2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL 如果只做master SCL可以只是输出 SDA在PAD上一定是inout pin xff0c 当然转为数字信号时可以分为两组 inout
STM32 I2C_OLED显示汉字及屏幕滚动
STM32 I2C OLED显示汉字及屏幕滚动 文章目录 STM32 I2C OLED显示汉字及屏幕滚动一 I2C以及AHT20温湿度传感器介绍二 用0 96寸OLED屏幕显示数据1 OLED介绍2 样例测试 三 汉字编码原理编码排序A0A
PX4 OffBoard Control
终于还是走上了这一步 xff0c 对飞控下手 xff0c 可以说是一张白纸了 记录一下学习的过程方便以后的查阅 目录 一 ubuntu18 04配置px4编译环境及mavros环境 二 PX4的OffBoard控制 1 搭建功能包 2 编写
STM32硬件I2C
以I2C2为例子 硬件I2C不需要我们手动去翻转电平 首先配置I2C xff1a 配置GPIO xff0c 配置复用功能I2C 配置复用开漏 xff0c 使能I2C I2C起始条件函数 64 param I2Cx where x can b
PX4之常用函数解读
PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的
无人机PX4使用动捕系统mocap的位置实现控制+MAVROS
动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
linux内核I2C子系统详解——看这一篇就够了
1 I2C通信协议 参考博客 I2C通信协议详解和通信流程分析 2 通过KXTF9 2050芯片分析I2C协议 参考博客 通过KXTF9 2050芯片分析I2C协议 3 I2C子系统框架 1 I2C子系统分为三层 I2C核心层 I2C适配器
飞行姿态解算(三)
继之前研究了一些飞行姿态理论方面的问题后 又找到了之前很流行的一段外国大神写的代码 来分析分析 第二篇文章的最后 讲到了文章中的算法在实际使用中有重大缺陷 大家都知道 分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况 原因是很多情
Raspberry Pi上设置I2C LCD
在本教程中 我将向您展示使用I2C设置LCD所需的一切 连接LCD I2C也被称为两线接口 因为它仅使用两根线来发送和接收数据 实际上 如果算上Vcc和地线 则是4线 但是电源始终可以来自其他来源 连接启用I2C的LCD 将LCD与I2C背
Raspberry Pi 4 I2C 总线无法正常工作
尽管 i2cDetect 确实检测到目标 但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作 我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C
找不到i2c注册宏?
我正在 raspi 上开发 I2C 驱动程序 register I2C device static static const struct i2c board info rasp i2c devices mbed mbedID in the
为什么我只收到第一个地址字节? (I2C协议)
期望从机确认并返回数据 但它没有 这是我的协议 这是我的数据表 数据表提到 从机将通过首先发送 MSB 字节来应答 Byte0 和 byte1 包含 预测值 所有字节均由主机确认 Edit 源库 另外仅供参考 我使用的是 Arduino F
ADXL345 与 ESP32 I2C 垃圾值问题
我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
Windows IoT 和 DS3231 RTC 时钟
对于我的项目 我需要当前时间和日期 不幸的是 当 RP2 关闭时 它就会失去一切 接下来的事情是 我将没有互联网连接来使用 NTP 为此 我需要实现 DS3231 RTC 模块 所有设备的通信都通过 I2C 运行 Raspberry Ard
在 Raspberry Pi 上使用 Python smbus - 与语法混淆
我正在尝试在 Raspberry Pi 上使用 python smbus 使用 I2C 与 MMA7660 加速计芯片进行通信 在下面的代码中 我正在读取芯片的寄存器 0x 00 0x01 0x02 和 0x03 并且我得到的值完全相同 查
MCP23017 I2C 设备驱动程序探测函数未调用
我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod
随机推荐
PCI-E 1x, 4x, 8x, 16x 接口定义
1 PCI E插槽及金手指实物图 xff08 1 xff09 PCI E插槽 从上至下依次为PCI E 4X PCI E 16X PCI E 1X xff08 2 xff09 PCI E金手指 PCI E 1X金手指 PCI E 4X金手指
Jetson Xavier RC EP 的PCIe互通测试(12)
一 硬件连接 xff1a 交叉线 X16引脚定义 xff1a 从此面看 xff1a 从上到下 xff0c 依次为A1 A2 A3 从背面看 xff1a 从上到下 xff0c 依次为B1 B2 B3 注意断开 xff1a A2 A3 B1 B
将自己的ubuntu20.04做成镜像
系统 xff1a Ubuntu20 04 软件 xff1a systemback 硬件 xff1a 128GU盘一个 1 安装systemback sudo sh c 39 echo 34 deb arch 61 amd64 http mi
Orin + SC16IS752+SP3072 SPI转串口485
文章目录 1 前言 2 修改过程 2 1 sc16is752 芯片 2 1 1引脚说明 2 1 2 设备树配置 2 2 1 源码分析 3 调试 1 前言 Orin 有四路串口 对于多数设备来说已经够用 通过SPI 转串口再转RS485在Or
MIPI CSI介绍
文章目录 1 概述2 MIPI接口的演变2 1 CSI 12 2 CSI 22 3 CSI 32 4 更多关于CSI 3 其他3 1 为什么用MIPI CSI 2代替USB 3 2 MIPI CSI 2的性能亮点3 3 MIPI相机 它是如
车载摄像头概述
1 车载摄像头概述 SerDes环境 上边的摄像头是德国豪车配备的车载摄像头 我们是从国外网站上买的 为了选择车载摄像头 xff0c 你需要获得关于它的各种信息 首先 xff0c 您需要获取连接器和序列化器制造商名称的信息 xff0c 然后
ARM7的三级流水线过程
看到汇编中很多关于程序返回与中断返回时处理地址都很特别 xff0c 仔细想想原来是流水线作用的效果 所以 xff0c 决定总结学习下ARM流水线 ARM7处理器采用3级流水线来增加处理器指令流的速度 xff0c 能提供0 9MIPS MHz
nor flash和nand flash的区别
NOR 和 NAND 是现在市场上两种主要的非易失闪存技术 Intel 于 1988 年首先开发出 NOR flash 技术 xff0c 彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面 紧接着 xff0c 1989 年 xf
UART通信协议
UART 是用于控制计算机与串行设备的芯片 有一点要注意的是 xff0c 它提供了RS 232C 数据终端设备接口 xff0c 这样计算机就可以和调制解调器或其它使用RS 232C接口的串行设备通信了 作为接口的一部分 xff0c UART
stm32f103的IAP升级时,部分APP程序功能丢失,串口中断不起作用,怎么办?
昨天我用stm32f103做IAP升级 xff0c APP程序是一个LED闪烁和一个串口1收发数据 结果IAP升级后 xff0c 发现APP程序只有LED闪烁但是串口1不行甚至引起死机 这种半死不活的现象是最莫名其妙的 xff0c 它一半在
计算机的启动过程(详细)
零 boot的含义 先问一个问题 xff0c 启动 用英语怎么说 xff1f 回答是boot 可是 xff0c boot原来的意思是靴子 xff0c 启动 与靴子有什么关系呢 xff1f 原来 xff0c 这里的boot是bootstrap
史上最全Linux面试题(2020最新版)
出处 xff1a https blog csdn net thinkwon article details 104588679 作者 xff1a ThinkWon 导读 xff1a 本文整理了最新的Linux面试题 xff0c 近3万字 x
Endnote中文参考文献格式下载地址(官网)
Endnote中文参考文献格式官网下载地址 1 下载2 安装 1 下载 今天在写中文论文时 xff0c 发现Endnote里没有中文参考文献格式 上网找了一下有些下载尽然还要币 xff0c 最后看到其实官网里就有GBT7114格式 xff1
C++中String类对象的初始化和基本用法
1 初始化的几种方法和错误案例 首先当然是包含头文件了 xff1a span class token macro property span class token directive keyword include span span c
C++中multimap和map容器及使用
map multimap容器里存放的都是pair模板类的对象 xff0c 而且按照first成员从小到大排序 1 pair模板 pair模板类的定义如下 xff0c 其中有两个成员变量 xff1a first和second xff1a 2
Word标题前出现黑块解决办法
最近Word写文章 xff0c 再次遇到了让人头疼的问题 xff0c 就是自己定义的多级列表 xff0c 某一级前面不显示数字而是一个黑块 之前就遇到过这个问题 xff0c 不知怎么就解决了 再次遇到就懵了 尝试了网上的几种方法 xff0c
从印象笔记无法连接到服务器,到win 10 Eage浏览器无法访问
昨天电脑上的印象笔记突然无法同步 xff0c 同步的图标上显示了红色的感叹号 按照网上很多的解决方法试了之后都无法解决 印象笔记也重新安装了 xff0c 也退出企图重新登录 xff0c 结果登录界面显示无法连接到服务器 按照官网给出的解决方
Crazyflie笔记一:概述开发范围、工具、特点介绍
原文地址 xff1a http blog sina com cn s blog 402c071e0102v6ho html Crazyflie笔记一 xff1a 概述开发范围 工具 特点介绍 2015 01 04 12 48 31 转载 标
Ubuntu16.04如何设置自动休眠时间
可能有的人觉得 xff0c 虚拟机几分钟没动就自己锁住了 xff0c 再次进入又要输密码非常麻烦 xff0c 那如何设置屏幕关闭时间呢 xff1f 下面就说一说 xff1a 1 打开设置选项 xff0c 在电脑的右上方 2 点击system
PX4使用I2C方式添加自定义传感器(1)
PX4使用I2C方式添加自定义传感器 xff08 1 xff09 前言 毕业设计就是要在PX4上添加一个传感器 xff08 角度传感器 xff09 xff0c 由于板子上的接口数量很少 xff0c 很是宝贵 最后只能选择通过I2C通信方式
热门标签
dstore
kinectsdk
vertica
pynput
fastmember
g48
jwk
datahiding
reacttsx
gwtext
ifft
modmono
flex45
seesaw