文章目录

  • 前言
  • 一、应用平台
  • 二、使用步骤
    • 1.Cube配置
    • 2.所用库函数
    • 3.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的两大功能的调试,具体的实验结果就留给看官自己起摸索吧。本人在使用逻辑分析仪时,对结果还是比较满意,能够实现对距离的测量,但是其中断的功能并不是我关注的重点所以并没有深究其中。有不正之处希望看官批评指正。

基于STM32H743的APDS-9930调试心得相关推荐

  1. 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得(二)-设备树刷厂商给的触摸屏固件...

    之前调试触摸屏的文章如下: 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得_Bruce.yang的嵌入式之旅-CSDN博客 由于之前调触摸屏一直都对不上点,然后厂商又给了我新的驱动代码 ...

  2. AT91RM9200+pcf8563在linux2.6.20下的调试心得

    这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵      在linux2.6.20/drivers/rtc目录下面已经有了pc ...

  3. 基于matlab的dsp调试方法,基于Matlab7.0的DSP调试

    基于Matlab7.0的DSP调试 通过Matlab7.0中的CCSLink与CCS3.3软件连接,实现对DSP程序的调试. CCSLink的主要特点:在MATLAB环境下完成对DSP器件的调试.数据 ...

  4. electron 打开调试_构建基于 iOS 模拟器的前端调试方案

    作者:imyzf 本文将为大家介绍自动化控制 iOS 模拟器的原理,为开发基于 iOS 模拟器的前端调试方案提供帮助. 我们在开发 iOS App 内的前端页面时,有一个很大的痛点,页面无法使用 Sa ...

  5. 浅谈四轴PID调试心得

    以下内容转自阿莫论坛,写得很详细,是调试大四轴的.小四轴调试也可参照着调. PID调试心得 本人不是自动化出身,也没有受过专业训练,都是自己摸索,在这里浅述一下自己的PID参数整定心得.所言之物皆由实 ...

  6. 调试心得plc做主站(客户端)

    ##调试心得plc做主站(客户端) 调试软件,西门子博图15,PLC采用1200,协议抓包采用Wireshark抓包工具 发协议工具采用网络助手,绿色是PLC给我发的请求数据,蓝色我发的报文格式, 1 ...

  7. Ti ub954/953 Sensor调试心得

    Ti ub954/953 Sensor调试心得 前言 TI以及美信的串行器以及接串器是目前车载领域用的比较多的厂家,目前最近一直再用TI的954以及953进行双目sensor的调试,下面就简单记录下调 ...

  8. 阻容压降电路调试心得

    阻容压降电路调试心得 阻容压降电通常用于LED灯电源,智能电表等对成本要求较高的产品中.先说一下LED电源,L线进来后,串联0.39微法油铁电容,后面是全桥整流,然后是滤波,电容容量越大,电路输出的电 ...

  9. 记spi nor flash的调试心得

    flash 调试心得 前言 调试目的 调试步骤 检查 驱动 flash操作 改写 复位 访问模式 tips 内核下相关 文件系统 nor和nand的区别 前言 在工作中或者在开发板上或多或少都会遇到n ...

  10. STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码

    STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码 提供配套CUBE工程 STM32H743 SOEM EtherCAT基于STM32H743 ...

最新文章

  1. Linux下安装Oracle11g服务器(centos7下)
  2. 最新!2020中国高校毕业生薪资报告出炉
  3. Linux命令(持续更新)
  4. BroadCastReceiver简介
  5. MySQL中MyISAM 与innoDB的区别(转)
  6. Ext之Combobox的远程加载数据实例(附前后台代码)
  7. Cortex-M3-建立向量表
  8. 这个外挂要上天了!教一千遍都不会的数理技巧,还不如搞懂最根本的概念!
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的考勤管理系统
  10. ubuntu更新显卡驱动到460.84,升级cuda版本到11.2
  11. 多页Excel转换成PDF时如何保存为单独文件
  12. table TD 超出省略号
  13. 2050: 技术未必会使我们摆脱愚昧,有时正相反(上)
  14. 我如何选PHP开发工具(PHP IDE)
  15. cas虚拟服务器,适用于CAS虚拟化平台的CloudOS3.0云主机镜像的制作
  16. unity android 30帧,解除某Unity游戏的30帧帧率限制
  17. java线性表实验心得_20162311 实验一 线性结构 实验报告
  18. 计算机桌面任务栏怎样显示输入法,计算机中任务栏的输入法无法切换怎么处理...
  19. 乔安智联未能找到使用指定服务器,智联物联路由器设置和指定服务器通信
  20. Android-高质量开发之崩溃优化,赶紧学起来

热门文章

  1. Blinder: Partition-Oblivious Hierarchical Scheduling论文笔记
  2. 《南朝凶猛》 轩辕鸿鸣
  3. 码农的自我修养之 软件危机和软件过程
  4. 使用椭球表示物体的语义SLAM
  5. 跨越财富鸿沟:技术写作带来的无限可能 —— 怎样通过技术写作实现财富自由?
  6. 跳槽如何谈薪资?不以升职加薪为目的的跳槽,都是耍流氓!
  7. 苹果ppt_最近苹果新机的3个动画霸屏了,PPT制作竟如此简单,手把手教你做出来!...
  8. 【安全系列】setoolkit钓鱼
  9. PyTorch导入报错:ValueError: module functions cannot set METH_CLASS or METH_STATIC
  10. php xampp linux,xampp linux 下载