PX4使用I2C方式添加自定义传感器(1)

PX4使用I2C方式添加自定义传感器(1)

  1. 前言
    毕业设计就是要在PX4上添加一个传感器(角度传感器),由于板子上的接口数量很少,很是宝贵。最后只能选择通过I2C通信方式,出于I2C通信的独特优势,一个I2C接口上可以同时接多个device,所以通过在板子上的I2C接口连接一个一拖四,这样就不会占接口的数量了。一拖四如下图所示:I2C一拖四连接图
    由于在毕设之前从未接触过飞控,所以初次上手真的是困难重重啊,说起来都是泪。所以如果有什么问题,还请各路大神多多指教。本来也就是一个小小的传感器通过I2C方式进行通信而已,根本没有那么困难,但是一融入到飞控当中就不知到如何下手了。前期已经在STC单片机上进行过实验,之后又在STM32开发板上进行了实验,实验的结果都是比较成功的。最后一步就是加入到飞控中了!在万能的百度上搜索通过I2C方式给PX4添加自定义传感器,结果资源很少啊,只有一个博主发了,而且是相当简洁啊,简洁的我都看不懂。所以就想着自己总结一下这段时间的经历,希望能给以后遇到相同问题的同道中人提供一些参考的建议。
  2. I2C通信机制
    关于I2C的通信机制我就不多说了,关于这个的资料网上也是很丰富了。这里推荐一个文章,说的比较清楚:I2C通信机制介绍 这里只需要强调一点,就是每个接到I2C总线上的器件都有唯一的地址。这个地址并不是主机给的,而是器件本身所携带的。所以你如果需要通过I2C添加一个device一定要搞清楚这个device的地址是什么,为什么说这个很重要呢。因为对于飞控来说最基本的函数都是给你封装好了,比如说链接中文章提到的start、stop、ack(应答信号),这类函数都是已经封装好了的,不需要你自己去写,在飞控中基本上都是一个强大的transfer函数就搞定了(关于这个函数在后面的文章中会有详细介绍的)。你只需要弄清楚器件地址一切都OK 了,说到地址这里需要着重强调一点,这个真的很重要,后期就是由于这个问题程序一直不成功。那就是对于PX4飞控来说,device的地址是7位的!!! 这是什么意思呢?我们知道每种device都有特定的地址,一般都是前7位,最后一位是R/W位,即读/写位。如下图所示:I2C地址构成 比如对于我的角度传感器(其实是角度传感器输出接ADC,转化成数字量后通过I2C输出):
    D7~D4:飞利浦公司规定为1001
    D3~D1:这个要根据硬件的实际情况来决定了,在我的模块上分别是A2、A1、A0的电平,我的模块如下图所示:AD模块原理图
    可以看到我的模块原理图上A2、A1、A0是全部接地,所以为D3~D1为000。
    D0:为方向设置,当为1时进行读操作,当为0时进行写操作。
    所以总的器件地址为0b1001000X,按照这个模块给的资料,首先写第一个字节传递器件地址0b10010000(即0x90),但是在飞控上设置的地址就不是八位的0x90了,而是七位的地址0x48(就是将0b10010000右移一位变成了0b01001000即0x48),至于为什么会这样,这跟transfer这个函数有关,后面将会介绍。
    这篇文章就介绍到这了,下一篇文章我将通过对PX4飞控中提供的一个I2C通信方式传感器代码的分析,了解I2C通信传感器的驱动和一些重要的函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值