Open imuncle opened 5 years ago
学校立项用到了导电银墨水,在网上浏览的时候看到一个很有意思的产品:Electric Paint Lamp Kit - paint, plug and play!
这个小实例里通过检测是否被触碰来控制灯的亮灭,以实现开关的效果。经过进一步查阅,原来这其中使用到了MPR121这款触控传感器。
MPR121通过检测电容的变化来判断是否被触控,可以手动设置touch和release的电容阈值。
MPR121一共有12个通道可以检测触控。根据上图,每个通道有一个10位的ADC检测电压。
MPR121检测电容的方法是,对每一个通道进行充放电,根据充放电的时间、电流和峰值电压来计算电容值,其中充放电的时间和电流都可以通过寄存器配置。
假设充电电流为$I$,充电电压峰值为$V$,充电时间为$T$,那么电容为: $$C=\frac{Q}{V}=\frac{I×T}{V}$$
MPR121可以根据用户设置的电容阈值独立判断是否被触控,判断的逻辑如下:
它判断的是电容的变化量,这变化量是基于baseline计算的,同时,MPR121还支持三重过滤器Filter配置,使电容测量更准确稳定。
我们可以直接从0x00和0x01两个寄存器获取每个通道的状态,0代表未触控,1代表触碰。
0x00
0x01
同时我们还可以从0x04到0x1B读取到每一个通道的数值。
0x04
0x1B
这里可以参考开头提到的那个产品的开发者编写的arduino库,当中的初始化代码在下面这个链接: MPR121 Arduino初始化代码
上面代码中对应的寄存器地址见如下地址: MPR121寄存器地址
对应的寄存器赋值见如下地址: MPR121初始化寄存器赋值
我把MPR121的datasheet上传到了百度云盘: 百度云盘链接
学校立项用到了导电银墨水,在网上浏览的时候看到一个很有意思的产品:Electric Paint Lamp Kit - paint, plug and play!
这个小实例里通过检测是否被触碰来控制灯的亮灭,以实现开关的效果。经过进一步查阅,原来这其中使用到了MPR121这款触控传感器。
原理
MPR121通过检测电容的变化来判断是否被触控,可以手动设置touch和release的电容阈值。
MPR121一共有12个通道可以检测触控。根据上图,每个通道有一个10位的ADC检测电压。
MPR121检测电容的方法是,对每一个通道进行充放电,根据充放电的时间、电流和峰值电压来计算电容值,其中充放电的时间和电流都可以通过寄存器配置。
假设充电电流为$I$,充电电压峰值为$V$,充电时间为$T$,那么电容为: $$C=\frac{Q}{V}=\frac{I×T}{V}$$
MPR121可以根据用户设置的电容阈值独立判断是否被触控,判断的逻辑如下:
它判断的是电容的变化量,这变化量是基于baseline计算的,同时,MPR121还支持三重过滤器Filter配置,使电容测量更准确稳定。
相关寄存器
我们可以直接从
0x00
和0x01
两个寄存器获取每个通道的状态,0代表未触控,1代表触碰。同时我们还可以从
0x04
到0x1B
读取到每一个通道的数值。初始化配置
这里可以参考开头提到的那个产品的开发者编写的arduino库,当中的初始化代码在下面这个链接: MPR121 Arduino初始化代码
上面代码中对应的寄存器地址见如下地址: MPR121寄存器地址
对应的寄存器赋值见如下地址: MPR121初始化寄存器赋值
数据手册
我把MPR121的datasheet上传到了百度云盘: 百度云盘链接