IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于STM32H743的APDS-9930调试心得 -> 正文阅读

[嵌入式]基于STM32H743的APDS-9930调试心得

文章目录





前言

作为一个硬件开发新手,第一次接触这个传感器,感觉功能实现还是比较简单。先介绍一下这个传感器:简单来说就是一个集成了数字式环境光传感(ALS)、红外LED和一个完整的接近检测系统的八脚封装的芯片。我购买的是淘宝的小模块,不用自己搭建电路,只用通讯使用功能就行。




一、应用平台

芯片使用的STM32H743VITX。开发平台是基于STM32CubeMX的HAL库。硬件的原始资料均来源于其技术手册。




二、使用步骤




1.Cube配置

网上资料很多关于Cube就不讲太多,说一点注意事项吧。Cube先从时钟开始配起,不要一来就先把功能配上去,有时候会出现一些莫名其妙的问题,主要就体现在逻辑分析仪上面。外部输入的时钟在选择DIVM1的时候选择可以整除的数字。H7最大支持480M时钟,使用的时候一般就往最高的配。下面是我自己配的一个时钟。

?APDS-9930使用I2C支持快速I2C原文描述是(Up to 400 kHz (I2C Fast-Mode)),所以在配置时可以选择高一点的速率。I2C的配置没啥配的就速率控制。这里我们选择快速模式。把中断全部打开。NVIC的钩钩打上,这里暂时不用DMA,以后有需求再来更新。在硬件上我使用的是I2C1,软件上对应选择。如果默认选择时与自己硬件端口不一致,可以直接点击右边芯片上面的管脚先选择功能,此时管脚为黄色,说明此时没有配置上,当在左边进行配置后,管脚转为绿色说明配置成功。同时管脚按照自己的意愿进行了选择。

?后面就是工程的一般配置。我使用的Keil uVision5选择MDK-ARM 版本这里选择V5.27,大家可以根据自己的版本来进行选择。

?接下来就是自己代码生成的一般选项,我比较喜欢分开放置(勾选Generated files的第一个选项),这样有助于自己分类各种不同通讯协议的器件。

至此就可以点击GENERATE CODE,生成自己的工程代码进行下一步操作。




2.所用库函数

对于I2C的通讯主要使用了两个函数

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中

I2C_HandleTypeDef *hi2c? 是I2C的句柄,使用哪一个就写哪一个

uint16_t DevAddress 是设备地址,APDS-9930最奇葩的设定(自我感觉),手册写了设备地址是0x39原文为(The device supports a single slave address of 0x39 hex using 7 bit addressing protocol.)但是在实际使用中却需要左移一位,这个问题让我一度以为这是一个损坏的传感器。但看到回传波形时一度感动涕零。

uint16_t MemAddress 是寄存器地址,在技术手册中给出了寄存器的列表以及分别所表达的含义。下面两张图进一步揭示了我们如何来填写这个寄存器地址。首先,最高位第7位为1,其次,6:5指示了命令的方法,这里我使用的是00,一点问题没有,后面就是就是寄存器的地址,所以这里我的写法使用0x80 | Reg。

uint16_t MemAddSize 是?内部地址读写方式,只有I2C_MEMADD_SIZE_8BIT 和 I2C_MEMADD_SIZE_16BIT两种

uint8_t *pData 写入的数据指针

uint16_t Size 读取的字节数

uint32_t Timeout 超时时间

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,?uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

写入和读取参数基本上大同小异,写数据时建议一个一个的写,这样变量比较好控制,同时在计算其他数据时也比较好引用。

3.APDS-9930寄存器配置

首先是启用接近传感器的功能,下图揭示了在0x00的寄存器里面的这个字节中需要需要写入的相应位。这里测距离的话我们只需要关心接近测距功能的启用也就是将PEN位置一,以及将PPULSE(0x0E)设置为0x08(官方推荐,原文为:100 mA and 8 pulses are the recommended driving conditions. )。这样就可以读取接近寄存器(0x18和0x19的值)。后续有厂家对接近传感器的测距测试曲线,我们可以拿来与自己的数据拿来对应。在CONTROL(0xF)寄存器中,有对增益(PGAIN)进行设置,这可以改变测量的范围。keil 5自带有逻辑分析仪用于参考。

接近寄存器在不同设定值下厂家测试曲线

?

其还有红外光检测的功能,将AEN和PON置一就可以了。然后读取(CH0和CH1)的值按照给出的计算公式进行计算。AGAIN的值在上文的CONTROL寄存器里面,可以查看后代入计算。计算公式和例子在下文中给出。所求值的正确性有待考证,手头没有专业的测量工具进行测试。总之越亮值越大。

?





总结

以上便是APDS-9930的两大功能的调试,具体的实验结果就留给看官自己起摸索吧。本人在使用逻辑分析仪时,对结果还是比较满意,能够实现对距离的测量,但是其中断的功能并不是我关注的重点所以并没有深究其中。有不正之处希望看官批评指正。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:27:52  更:2021-09-29 10:28:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:27:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码