• VD6283TX环境光传感器驱动开发(1)----获取ID


    概述

    环境光传感器是一种光电探测器,能够将光转换为电压或者电流,使用多光谱环境光传感器为了测量光谱上特定波长或特定带锯波长的强度,该传感器的目标是改善视觉体验并最终使用户感到舒适的照明视觉体验。
    在这里插入图片描述
    在这里插入图片描述

    最近在弄ST的课程,需要样片的可以加群申请:615061293 。

    视频教学

    https://www.bilibili.com/video/BV1du411u7Uz/

    VD6283TX环境光传感器驱动开发(1)----获取ID

    样品申请

    https://www.wjx.top/vm/OhcKxJk.aspx#

    源码下载

    https://download.csdn.net/download/qq_24312945/88391797

    模块参数

    VD6283 是 ST 的一款微型光学模块,尺寸为 1.83 x 1.0 x 0.55 mm,具有6个独立的环境光传感通道,包括红、绿、蓝、红外、透明和可见通道。它使用高级混合滤波器并能在7 mLux 到 30 kLux 的范围内运行。此传感器具有独特的读出架构,可以提取从100 Hz 到 2 kHz 频率的交流灯光闪烁信号。VD6283 还配备了 I2C 接口,工作电压为1.8 V,并具有低功耗特性。它可以在 -30 到 85 °C 的温度范围内运行。主要应用包括屏幕亮度调整的真实色调色感测定、光亮度和相关色温测量以及闪烁校正辅助的光频提取。通过专利架构和高性能的光电二极管设计,VD6283 可以提取灯光闪烁频率,避免视频上的“条纹效果”,或检查它们对人眼是否安全。此外,VD6283 是唯一能够同时进行闪烁操作和环境光传感操作的传感器。
    在这里插入图片描述

    IIC接线方式

    IIC接线方式如下所示,需要注意的是供电和上拉都是1.8V。

    在这里插入图片描述

    开发板接线方式如下所示。

    在这里插入图片描述

    设备ID

    我们可以通过查询0x00和0x01获取模块ID和模块版本号。

    在这里插入图片描述

    手册给出的取模块ID和模块版本号分别是0x70和0xBD。

    在这里插入图片描述

    生成STM32CUBEMX

    串口配置

    查看原理图,PA1和PA0设置为开发板的串口。

    在这里插入图片描述
    配置串口。
    在这里插入图片描述

    IIC配置

    在这个应用中,VD6283TX模块通过I2C(IIC)接口与主控器通信。具体来说,VD6283TX模块的I2C引脚连接到主控器的PB6(引脚B6)和PB7(引脚B7)两个IO口。

    在这里插入图片描述
    配置IIC为普通模式,速度为100k。

    在这里插入图片描述

    串口重定向

    打开魔术棒,勾选MicroLIB

    在这里插入图片描述

    在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

    /* USER CODE BEGIN Includes */
    #include "stdio.h"
    /* USER CODE END Includes */
    
    • 1
    • 2
    • 3

    函数声明和串口重定向:

    /* USER CODE BEGIN PFP */
    int fputc(int ch, FILE *f){
    	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    	return ch;
    }
    /* USER CODE END PFP */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    模块地址

    VD6283TX模块的默认设备地址为0100000(0x20)。设备地址是用来识别和通信特定设备的标识符。通过将VL6180模块的设备地址设置为0100000(0x20),您可以确保与该模块进行正常的通信和控制。
    若添加读写位,0x40为写地址,0x41为读地址。

    在这里插入图片描述

    获取ID

    读写函数如下所示。

    /**
      * @brief  读取数据
      *
      * @param  add   模块地址
      * @param  reg   寄存器地址
      * @param  data  buffer 缓冲区
      * @param  len   读取长度
      * @retval ret   正常返回HAL_OK
      *
      */
    uint8_t VD6283TX_read_reg(uint8_t add,uint8_t reg,  uint8_t * data, uint8_t len)
    {
    	uint8_t ret;
    	ret=HAL_I2C_Mem_Read(&hi2c1 ,(add<<1)|1,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);
    
    	return ret;
    }
    
    
    /**
      * @brief  写入数据
      *
      * @param  add   模块地址
      * @param  reg   寄存器地址
      * @param  data  buffer 缓冲区
      * @param  len   写入长度
      * @retval ret   正常返回HAL_OK
      *
      */
    uint8_t VD6283TX_write_reg(uint8_t add,uint8_t reg, uint8_t * data, uint8_t len)
    {
    		uint8_t ret;
    		ret=HAL_I2C_Mem_Write(&hi2c1 ,(add<<1)|0,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);
    	return ret;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    获取ID以及版本号代码如下所示。

    /**
      * @brief  获取设备ID
      *
      * @param  add      设备地址
      * @param  val      设备ID.
      * @retval ret   		正常返回HAL_OK
      *
      */
    
    uint8_t VD6283TX_getChipID(uint8_t add)
    {
      uint8_t temp[1]={0};
    	VD6283TX_read_reg(add,VD6283TX_DEVICE_ID,temp,1);
      return temp[0];
    }
    
    
    
    
    /**
      * @brief  获取VD6283硅芯片的修订版本
      *
      * @param  add      设备地址
      * @retval          硅芯片修订版本
      *
      */
    uint8_t VD6283TX_getSiliconRevision(uint8_t add)
    {
        uint8_t revision[1] = {0};
        VD6283TX_read_reg(add, VD6283TX_REVISION_ID, revision, 1);
        return revision[0];
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    主函数

      /* USER CODE BEGIN 2 */
    	HAL_Delay(200);	
    	printf("123\n");
    	//获取设备IDHAL_I2C_Mem_Write(&hi2c1 ,(add<<1)|0,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);
    	uint8_t VD6283_ID =VD6283TX_getChipID(VD6283TX_ID);
    	printf("VD6283TX_ID=0x%x\n",VD6283_ID);		
    	//获取VD6283硅芯片的修订版本
    	uint8_t VD6283_Revision =VD6283TX_getSiliconRevision(VD6283TX_ID);
    	printf("getSiliconRevision=0x%x\n",VD6283_Revision);		
    
      /* USER CODE END 2 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果演示

    在这里插入图片描述

  • 相关阅读:
    论文阅读——Towards Adversarially Robust Object Detection
    合同法重点笔记经典版
    Vue 2的学习
    计算机网络(9) TCP超时重传以及滑动窗口流量控制
    Linux多线程
    Mac 使用paralles 从零搭建hadoop集群
    Codeforces Round #836 (Div. 2)
    二、RabbitMQ的五种工作模式
    学完自动化测试一年,达到月薪15K、我的这份笔记希望能让你受益良多...
    前端和后端是Web开发选哪个好?
  • 原文地址:https://blog.csdn.net/qq_24312945/article/details/133519383