一、引言
根据Pmod ALS: Ambient Light Sensor参考设计,设计一个适配于十二指神探-树莓派RP2040的环境光传感器拓展模块,该模块旨在实现环境光数据的获取。下图为Pmod ALS: Ambient Light Senso模块。
在这个设计模块中,主要使用了德州仪器的ADC081S021模数转换器和Vishay半导体的TEMT6000X01。ADC081S021是一款带有八位分辨率的SPI接口的模数转换器,它可以将模拟光信号转换为数字信号。TEMT6000X01是一款环境光传感器,可以测量周围环境的光强度。
上回FastBond2阶段1的文档中,展示了使用Scheme-it绘制的原理图,介绍了环境光传感器工作的方法以及原理,也说明了项目中所使用到的活动规定厂家的芯片(TI公司的ADC081S021芯片)。
想了解阶段1的具体内容可以通过链接跳转:FastBond2阶段1-基于环境光传感器的原理图设计
二、设计框图及原理介绍
如框图所示,本设计由光电三极管获取光照数据,ADC081S021芯片通过AD转换将光电三极管电路对应的电压数据获取出来。然后,使用SPI协议将这些数据发送到MCU中。
三、原理图及PCB介绍
如原理图所示,本设计中采用了与十二指神探RP2040相对应的插座,插座与RP2040相对应的CH0、CH1、CH2管脚分别于ADC081S021芯片的SDATA、CS、SCLK管脚相连接。在ADC081S021芯片的电源输入脚和接地脚并联了两个0.1uf和1uf的电容,用于去干扰和稳压。TEMT6000X01一边接VCC一边接10k电阻接地,通过光照强度改变TEMT6000X01中经过的电流从而改变ADC081S021测量点的电压值,使得整个模块可以通过观察测得的电压值确定TEMT6000X01受到的光照强度。
根据上图Kicad原理图绘制的PCB图如下所示:
四、ADC081S021介绍
ADC081S021是一款由德州仪器(Texas Instruments)生产的8位模数转换器(ADC)。它是一种低功耗、单通道、8位分辨率的模数转换器。ADC081S021采用了SPI接口,可以与微控制器或其他数字设备进行通信。它具有内部参考电压和内部温度传感器,可以实现精确的模拟信号转换。此外,ADC081S021还具有低功耗特性,适用于电池供电的应用。它广泛应用于工业自动化、仪器仪表、传感器接口等领域。
1、特点:
- 6针WSON和SOT-23封装
- 电源范围2.7V至5.25V
- 兼容SPI、QSPI、MICROWIRE以及DSP
2、管脚接口:
3、功能框图
4、驱动时序图:
5、原理图设计参考
原理图设计参考了德州仪器(Texas Instruments)ADC081S021的数据手册的PCB设计。
五、TEMT6000X01介绍
TEMT6000X01是一种环境光传感器,也被称为光敏电阻器。它可以感知周围环境的光照强度,并将其转换为电信号输出。TEMT6000X01具有高灵敏度和广泛的光照范围,适用于各种光照条件下的应用。TEMT6000X01的工作原理是基于光敏三极管的变阻特性。当光照强度增加时,光敏电阻器的电阻值会减小,反之亦然。通过测量光敏三极管的电阻值,可以得到周围环境的光照强度。可以通过模数转换器(ADC)将其转换为数字信号,以便微控制器或其他电子设备进行处理。
1、特点:
- 高灵敏度:能够感知较低的光照强度。
- 广泛的光照范围:适用于各种光照条件下的应用。
- 小尺寸:体积小,便于集成到各种设备中。
- 低功耗:工作时消耗的电能较少。
2、工作原理
TEMT6000X01属于光电三极管,光电三极管的基本结构和普通三极管一样,包含两个PN结。其中b-c结被称为受光结,它用来吸收入射光。基区面积相对较大,而发射区面积较小。当光线照射到基极表面时,会产生光生电子-空穴对。在b-c结的电场作用下,电子向集电极移动,而空穴向基极移动,导致基极电位升高。当在c、e之间施加外加电压(c为正,e为负)时,大量的电子从发射极注入,在经过少量的基极和空穴复合后,大部分电子通过极薄的基极被集电极收集,形成输出光电流。
六、RP2040介绍
本设计主控采用外接微控制器RP2040的方法,RP2040是一款由英国公司Raspberry Pi推出的微控制器芯片。它采用ARM Cortex-M0+内核,集成了264KB的SRAM和2MB的闪存。RP2040还具有丰富的外设接口,包括26个GPIO引脚、2个I2C接口、2个SPI接口、2个UART接口、3个12位ADC和16个PWM通道。此外,RP2040还支持USB 1.1主机/设备功能和DMA控制器。它的低功耗特性和丰富的外设接口使得RP2040非常适合用于物联网、嵌入式系统和低功耗应用等领域。
1、特点:
- 内部有两个Arm Cortex M0+的内核,官方推荐时钟为133MHz,实际超频到250MHz没有问题;
- 每根管脚都可以独立编程(类似FPGA的状态机,可以通过汇编语言编程)使用的PIO,可以用来生成各种常用的、以及自定义的协议;
- RP2040的管脚可以灵活配置后成组支持最常用的串行总线 - SPI、I2C、UART以及PWM;
- 原生支持MicroPython,方便对软件不是很擅长的用户根据需要从网上获取开源的程序灵活使用,而不彼此影响。
2、管脚定义
七、成品功能测试
光敏传感器模块焊接完成的样子:
光敏传感器模块与十二指神探-树莓派RP2040连接图:
使用万用表检测ADC081S021芯片供电电压3.3v,正常:
将光敏传感器模块置于高光照下:
用手指遮住光敏传感器模块上的光敏三极管:
经过几次简单试验后发现,在高强度光照下光敏传感器获取到的电压值在2.5V以上,在无明显光照下光敏传感器获取到的电压值在1V以下。
八、程序功能说明
总程序如下:
from machine import Pin, SPI
from time import sleep
import time
spi = SPI(0, 1_000_000, miso=Pin(20,Pin.OUT), sck=Pin(22,Pin.OUT))
CS = Pin(21,Pin.OUT)
def read_adc():
CS.off()
data = spi.read(2)
value = (data[1]) | data[0]
value = value / 256 * 3.3
CS.on()
return value
while 1:
data = read_adc()
print(data)
sleep(0.5)
首先,程序先初始化了RP2040的硬件SPI0:
spi = SPI(0, 1_000_000, miso=Pin(20,Pin.OUT), sck=Pin(22,Pin.OUT))
CS = Pin(21,Pin.OUT)
其次,程序定义了通过SPI驱动ADC081S021获取ADC值的函数read_adc()。在read_adc()中先拉低CS使能:
CS.off()
通过spi获取8位ADC的低四位数据和高四位数据,并将它们拼接起来:
data = spi.read(2)
value = (data[1]) | data[0]
将8位ADC转化为电压值:
value = value / 256 * 3.3
最后将CS拉高:
CS.on()
最后,程序调用read_adc()函数,将处理出来的电压值通过串口打印出来:
while 1:
data = read_adc()
print(data)
sleep(0.5)
九、参考资料
设计主要参考了以下资料:
【核心板】RP2040
https://www.eetree.cn/project/detail/748
Pmod ALS: Ambient Light Sensor
https://digilent.com/shop/pmod-als-ambient-light-sensor/
十、结语
通过这个项目,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自己动手做项目的能力。本次项目是对我能力的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是非常有意义的。在这次项目中我学到了许多新的知识。是一个让我把书本上的理论知识运用于实践中的好机会,原来,学的时候感叹学的内容太难懂,现在想来,有些其实并不难,关键在于理解。非常感谢硬禾学堂能给我这个机会。也希望在接下来的学习生涯中,能够努力地学习到更多的知识技能,也会一如既往支持硬禾学堂后面的活动。