SC12B触摸感应芯片评测方案(1)

news2025/2/27 20:42:31

MM32F0160+SC12B Touch Application Evaluation

文章目录

  • MM32F0160+SC12B Touch Application Evaluation
    • Introduction & Requirement
    • Hardware
      • SC12B & SC12B Sample Demo board
      • Mini-F0160 board
    • Software
      • MCU Software - MM32F0160
      • PC Tool - FreeMASTER
    • Summary

Introduction & Requirement

最近从产品经理收到一个需求,需要评估一家第三方的Touch芯片,考虑整合到我司(MCU原厂)提供给客户的技术方案中。从系统工程的角度上看,对Touch方案的评估,主要是基于我司MCU使用Touch芯片的可用性/易用性,以及Touch芯片对触摸感应的可靠性进行评估。关于易用性,有一些主观的因素,但总之从逻辑上走得通,软硬件开发方便即可。至于Touch的可靠性,也有一套组合拳,包含各种测试条件的用例都招呼上,看看Touch系统的反应如何,打分即可。当然,最终考验,还是要通过IEC 61000-4-6 电流注入测试,方可入选。

Hardware

首先要把搭载Touch芯片的电路板同我司的F0160开发板连起来,然后通过F0160微控制器读取Touch的采样值,把采样值通过串口、小LCD屏幕或者FreeMASTER等工具读出来数据即可。合作方提供的Touch电路板是裸铜感应电极,考虑到后续要做过水、过油等实验,还需要准备一块亚克力面板盖到电极上。

SC12B & SC12B Sample Demo board

合作方提供的Touch芯片,SC12B,来自于厦门晶尊微电子科技有限公司(简称:ICman)成立于2002年 - http://www.icman.cn/

官网对SC12B的介绍是:SC12B是带自校正的容性触摸感应器,可以检测 12 个感应盘是否被触摸。它可以通过任何非导电介质 (如玻璃和塑料)来感应电容变化。这种电容感应的开关可以应用在很多电子产品上,提高产品的附加值。

手册中提供了SC12B的应用电路,如图x所示。
在这里插入图片描述

图x SC12B应用电路
功能特性解析
12 个完全独立的触摸感应按键最多支持12个通道,其中CH4可以单独配置感应阈值,可作为接近感应。其余通道使用共享的感应阈值。这就意味着,12个(或11个)通道的触摸板必须大体相同(或者不用)。
保持自动校正,无需外部干预Touch芯片内部有一个小单片机,实现自动跟随阈值的算法,抑制环境变化对检测按键的影响。
按键输出经过完全消抖处理Touch芯片内部有一个小单片机,实现按键检测、消抖的算法。
多接口 – I2C 串行接口 / BCD 码输出BCD码的输出非常方便,用并口读就好,但功能比较少,不能调整配置,只能输出单按键。实际使用还是得用I2C,如果硬件I2C不好用,软件模拟也行。
多种灵敏度调节方式 – 共用灵敏度电容/寄存器配置需要I2C配置内部寄存器才行。参见寄存器SenSet0和SenSetCOM。
空闲状态可以节省功耗需要I2C配置内部寄存器才行。参见寄存器CTRL0。
2.5V ~ 6.0V 工作电压能用3.3V和5V就好。
符合 RoHS 指令的环保 SSOP-24(0.635)封装SSOP-24的封装,焊接方便。

虽然BCD码简单方便,但考虑需要更充分地评估芯片功能:调整灵敏度和时间参数、查看多按键情况、查看原始感应值,最终还是选择使用I2C通信方式连通。

通过阅读手册,提取关于I2C从机设备的关键信息。

SC12B的I2C从机设备地址,在当前的评估板上为0x40(ASEL引脚悬空)。如图x所示。
在这里插入图片描述

图x SC12B的I2C从机地址

SCB12B内部的功能寄存器简明扼要。如图x所示。
在这里插入图片描述

图x SC12B内部的寄存器

看下功耗情况。手册中有表格描述,如图x所示。
在这里插入图片描述

图x SC12B的功耗情况

3.3V供电,在休眠模式下能做到20uA,也算是中规中矩了。作为比较,之前做过的案子,电池供电的门锁触摸面板,要求睁着一只眼睛休眠(可唤醒)的待机平均电流在20uA以下。

Mini-F0160 board

Mini-F0160电路板上的I2C总线上已经挂了一个24C02,再挂上SC12B也没有问题。Mini-F0160电路板上给I2C总线搭了上拉电阻4.7k,SC12B Demo电路板上也有上拉电阻10k,这么并联之后大约到3k。可能上拉的电路大一点,先试着用吧。

F0160微控制器同SC12B的信号连线如表x所示。

表x F0160微控制器同SC12B的信号连线
SC12B pinSignalF0160 pin
SDASDAPB11(AF15), GPIO
SCLSCLPB10(AF15), GPIO
INTINTPB1(AF15), GPIO
GNDGNDGND
VDD3.3vVDD

注意,在实验过程中发现,Mini-F0160电路板上的Arduino插座上的I2C接口,同开发板专门引出的I2C插座不是一组信号,同开发板自带24C02芯片使用的I2C接口也不是一组信号。晕,这着实让我折腾了一番。最后,还是选定同板载24C02芯片相同的一组I2C引脚,可以直接用MindSDK样例工程中的引脚配置,改工程也省事。

最终连线实物图如图x所示。

在这里插入图片描述

图x Mini-F0160电路板与SC12B Demo电路板的连接

Software

在本案中,需要软件实现的功能相对简单(需求):

  • 通过I2C总线,配置SC12B的不同工作模式,试用各模式下的功能。
  • 读SC12B校准、滤波、判定算法之后的
  • 判决值,尤其是多点触控下的计算结果。这是SC12B中手册没写的,需要自己验证。
  • 读SC12B对电极的原始采样值,看一下原始原始采样信号,进一步评估内部算法实现的鲁棒性。
  • MCU对SC12B的计算结果进行采样,使用FreeMASTER工具在PC机上显示出来,录制数据并可视化。

MCU Software - MM32F0160

F0160的软件,使用MindSDK中的mini-f0160_softi2c_scan_mdk工程作为基础,先不改任何代码,试着扫描一下I2C总线,看能不能找到SC12B设备。这里使用的是MindSDK中的softi2c组件,软件模拟I2C协议(吐槽一下我司的硬件I2C外设)。

在这里插入图片描述

图x MindSDK softi2c工程扫描I2C总线

从图x显示的log中可以看到,当前I2C总线上已经可以识别SC12B的从机地址0x40了。同时扫描出来的0x50是同在I2C总线上的24C02存储芯片的从机设备地址。

根据SC12B手册的说明,在F0160的软件工程中,把OUTPUT0和OUTPUT1寄存器中的数据(表示多个按键同时按下的判决状态)读出来,存入全局变量,供后续FreeMASTER对数据进行可视化时使用。

在main.c文件中编写应用程序框架如下:

int main(void)
{
    BOARD_Init();
    printf("touch app.\r\n");

    /* setup softi2c. */
    softi2c_init(&app_softi2c_obj, (softi2c_if_t*)&brd_softi2c_if, BOARD_SOFTI2C_BPS_DELAY, BOARD_SOFTI2C_TIMEOUT_DELAY);

    while (1)
    {
        /* read the touch soc. */
        touch_update_flags(touch_channel_flags);
        touch_print_flags(touch_channel_flags);
    }
}

其中,touch_update_flags()函数从SC12B中读OUTPUT1和OUTPUT2寄存器,并拆分成单独通道的标记值,便于后续显示和记录采样数据。有源程序如下:

uint32_t touch_channel_flags[TOUCH_CHANNEL_NUM];
uint8_t  touch_xfer_buf[2] = {0};
void touch_update_flags(uint32_t * flags)
{
    /* read register value from touch soc. */
    touch_xfer_buf[0] = TOUCH_I2C_REG_OUTPUT1;
    softi2c_write(&app_softi2c_obj, TOUCH_I2C_DEV_ADDR, touch_xfer_buf, 1, false);
    softi2c_read(&app_softi2c_obj, TOUCH_I2C_DEV_ADDR, touch_xfer_buf, 2, true);

    /* split the flags to each. */
    uint32_t chn_idx = 0;
    while (chn_idx < 8)
    {
        if (0u == ((1u << (7u - chn_idx)) & touch_xfer_buf[0]))
        {
            flags[chn_idx] = TOUCH_CHANNEL_VAL_NO_TOUCH;
        }
        else
        {
            flags[chn_idx] = chn_idx;
        }
        chn_idx++;
    }
    while (chn_idx < TOUCH_CHANNEL_NUM)
    {
        if (0u == ((1u << (7u - (chn_idx - 8u))) & touch_xfer_buf[1]))
        {
            flags[chn_idx] = TOUCH_CHANNEL_VAL_NO_TOUCH;
        }
        else
        {
            flags[chn_idx] = chn_idx;
        }
        chn_idx++;
    }
}

这里更新的touch_channel_flags[]数组,将会是FreeMASTER可视化的数据对象。

后续可以试着调整其他功能寄存器中的配置参数,就随心所欲啦。

PC Tool - FreeMASTER

FreeMASTER可以提供一个类似示波器的界面,通过SWD端口连接到微控制器的程序中,对存放于内容中的数据(全局变量)以时间顺序记录下来存于PC上,并绘制实时曲线供开发者观察采样值的变化情况,是调试传感器类程序的绝佳工具。FreeMASTER还提供图形化的人机交互界面的功能,此处暂且不表。

  1. 配置连接。使用JLink连接电路板上的微控制器芯片,导入F0160工程符号表。
    在这里插入图片描述
图x FreeMASTER配置通信端口

在这里插入图片描述

图x FreeMASTER配置地址映射符号表
  1. 创建FreeMASTER变量绑定到MCU的内存区。

在这里插入图片描述

图x FreeMASTER创建变量
  1. 创建示波器页面,并添加变量到示波器中。

在这里插入图片描述

图x FreeMASTER添加变量到示波器页面
  1. 运行FreeMASTER程序,Mini-F0160、JLink、FreeMASTER联调运行效果,如图x所示。

在这里插入图片描述

图x FreeMASTER运行采样Touch事件

从图中可以看到监控波形同触摸感应事件的对应关系,我用手依次单独按下12个按键,然后同时按下3个一组按键并递增。由此可以验证本案Touch方案可以支持同时检测多按键。不出意外,这肯定是基于自感式实现的Touch。

FreeMASTER软件工具自带录制数据的功能,可以将录制数据保存在txt文件中,然后通过Excel的导入数据工程整理成表格,然后可以用Python进行进一步的分析。此处就不再赘述操作过程了,跟着感觉找彩蛋即可。之前的Touch项目中,我直接搞外设模块,滤波、消抖等算法也需要自己写,用保存下来的数据流分析模式,设计对应的滤波策略。这个案子里,SC12B自带算法,现在只要能够实时观察处理结果即可。安逸。

Summary

本文通过组装电路和编写软件,创建了一个验证Touch系统可靠性的基本环境,通过FreeMASTER工具,可以直观地看到Touch系统内部对触摸感应以及判定的实际情况。接下来在验证阶段,我使用几种典型的Touch应用场景,对本案Touch系统的性能进行评测。具体地,就是引入各种日常应用Touch的环境干扰,观察Touch系统在有干扰情况下能否正常工作。

(未完待续。。。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter Lab | “丢下R,一起来快乐地糟蹋服务器!”

写作前面 工具永远只是为了帮助自己提升工作效率 —— 沃兹基硕得 所以说&#xff0c;为什么要使用jupyterlab呢&#xff1f;当然是因为基于服务器来处理数据就可以使劲造了&#xff0c;而且深切地感觉到&#xff0c;“R这玩意儿是人用的吗”。 jupyter-lab | mamba安装以及…

【微信小程序】-- 全局配置 -- window - 导航栏(十五)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

Thymeleaf -- 视图模块

添加thymeleaf的jar包2. 新建一个Servlet类ViewBaseServletpublicclassViewBaseServletextendsHttpServlet { ​privateTemplateEnginetemplateEngine; ​Overridepublicvoidinit() throwsServletException { ​// 1.获取ServletContext对象ServletContextservletContextthis.g…

人大金仓和达梦的空间数据能力对比

一、总得来说&#xff1a; 人大金仓底层更解决于pg数据库&#xff0c; 人大金仓的空间能力基于postgis能力来实现&#xff0c;能力挺强大的. 细节上人大金仓的架构上也对空间的支持框架做的比达梦更加完善。例如数据库的集群能力&#xff0c;并行计算能力&#xff0c;空间数据…

使用热成像仪完成地暖检测应用

家庭地暖已逐步全面走进北方家庭中&#xff0c;常见的地暖系统分为两类&#xff0c;一类为电地暖&#xff0c;一类为水地暖&#xff0c;其常见问题为地暖发热不均&#xff0c;地暖不热或水暖管渗漏等问题。地暖系统在保障温暖及美观的同时&#xff0c;一直存在维修困难的问题&a…

最流行的自动化测试工具,总有一款适合你(附部分教程)

前言 在自动化测试领域&#xff0c;自动化工具的核心地位毋庸置疑。本文总结了最顶尖的自动化测试工具和框架&#xff0c;这些工具和框架可以帮助组织更好地定位自己&#xff0c;跟上软件测试的趋势。这份清单包含了开源和商业的自动化测试解决方案。 1&#xff09;Selenium …

第六章 图

文章目录前言知识框架数据结构的区分1. 图的基本概念1.1 图的定义1.2 图的基本概念和术语总结前言 参考文献&#xff1a;数据结构&#xff1a;图(Graph)【详解】 知识框架 数据结构的区分 线性表&#xff1a;数据元素之间是被串起来的&#xff0c;仅有线性关系&#xff0c;每…

Centos和Window系统下Frp内网穿透

frp 是一个高性能的内网穿透的反向代理软件&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等常见协议(TCP最常用)&#xff0c;可以将处于局域网或者家用电脑主机、办公电脑主机通过中转服务器的方式暴露在公网里&#xff0c;使用户可以通过访问公网的IP&#xff08;域名&#xff09;…

【数电基础】——触发器

目录 1.大纲 2.双稳态电路 3. SR锁存器&#xff08;或非门构成&#xff09; 4.SR锁存器&#xff08;与非门构成&#xff09; 5.门控SR锁存器&#xff08;与非门构成&#xff09; 6.触发器 1.D触发器 &#xff08;电平触发&#xff09; 2.D触发器&#xff08;上升沿触发&am…

腾讯会议演示者视图/演讲者视图

前言 使用腾讯会议共享PPT时&#xff0c;腾讯会议支持共享用户使用演示者视图/演讲者视图&#xff0c;而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例&#xff0c;介绍使用步骤。值得一提的是&#xff0c;该方法同时适用于单显示屏和多显示屏。 腾讯会议…

详解JAVA注解

目录 1.基本注解 2.元注解 3.自定义注解 4.底层实现 1.基本注解 基本注解是JDK自带的一些单独使用的具有功能性的注解&#xff0c;包含以下四个&#xff1a; Override表示方法重写Deprecated表示方法过期&#xff0c;下个版本可能删除SuppressWarnings用于抑制告警SafeVa…

大学生创业有优势吗?创业方向应该如何选择?

大学生创业有优势吗&#xff1f; 目前&#xff0c;许多学校都有孵化器、创业基地等。大学生可以以极低的成本和成本在外面拥有相同质量的办公室和仓库&#xff0c;大学生的创业成本再次降低。 而且很多学校规定大学生可以无限期休学创业&#xff0c;这也消除了大学生创业失败…

深入分析Linux虚拟化KVM-Qemu之ioeventfd与irqfd

说明&#xff1a; KVM版本&#xff1a;5.9.1 QEMU版本&#xff1a;5.0.0 工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 ​ 图中的各个模块&#xff0c;只剩下通知机制没讲了&#xff0c;本文来一篇终结者&#xff1b; Guest与KVM及Qemu之间的通知机制&…

wordpress从宝塔升级到docker

15还是16年的时候买的阿里云和腾讯云最低配的1核1G。腾讯云和阿里云后来都涨价了&#xff0c;退了涨价多的那个腾讯云&#xff0c;阿里云一直续费到现在&#xff0c;wordpress这个最早的时候是用军哥的lnmp的一键包搭建的&#xff0c;后来改成用了带UI的宝塔&#xff0c;宝塔用…

4.文件管理

文章目录1、初识文件管理1.1、回顾1.2、文件的属性1.3、无结构文件/有结构文件1.4、文件之间应该怎样组织起来&#xff1f;1.5、操作系统应该向上提供哪些功能&#xff1f;1.6、从上往下看&#xff0c;文件应如何存放在外存&#xff1f;1.7、其他需要由操作系统实现的文件管理功…

分页与分段

前面我们分析了虚拟地址和物理地址 我们这里进行一个简单的分析 这个是程序运行时的地址映射 那么这些碎片&#xff0c;我们现在的操作系统究竟如何处理呢&#xff1f; 我们再引入一个实际问题 我们如何把右边的进程p塞入左边的内存空间里面 有一种方法将p5kill掉&#xff…

Python - SQL入门和实战

数据来源 01 SQL前言 无处不在的SQL 后续学习的铺垫 学到什么程度 黑马程序员MySQL知识精讲mysql实战案例_零基础mysql数据库入门到高级全套教程_哔哩哔哩_bilibili 总结 02 数据库介绍 无处不在的数据库 数据库如何存储数据 数据库管理系统&#xff08;数据库软件&#xf…

七、标签传播与节点分类【CS224W】(Datawhale组队学习)

开源内容&#xff1a;https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频&#xff1a;https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页&#xff1a;https://web.stanford.edu/class/cs224w 文章目录半…

或许你想要的画图工具在这里

之前文章发布后&#xff0c;有小伙伴问下面的画怎么画的&#xff08;偷偷告诉你&#xff0c;其实我是用铅笔水彩笔画的&#xff09;&#xff0c;哈哈&#xff0c;开玩笑了。其实这些图都是用Excalidraw 画出来的。 我们平常不管是工作中&#xff0c;还是在日常写文章&#x…

pdf压缩文件大小的方法是什么?word文件怎么批量转换成pdf格式?

大家在存储文件时&#xff0c;通常会遇到一些较大的文件&#xff0c;这时需要对其进行压缩处理。下面介绍一下如何压缩PDF文件大小以及批量转换Word文件为PDF格式。pdf压缩文件大小的方法是什么?1.打开小圆象PDF转换器&#xff0c;选择“PDF压缩”功能。2.在“PDF压缩”界面中…