SC12B触摸感应芯片评测方案(1)
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所示。
功能特性 | 解析 |
---|---|
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所示。
SCB12B内部的功能寄存器简明扼要。如图x所示。
看下功耗情况。手册中有表格描述,如图x所示。
3.3V供电,在休眠模式下能做到20uA,也算是中规中矩了。作为比较,之前做过的案子,电池供电的门锁触摸面板,要求睁着一只眼睛休眠(可唤醒)的待机平均电流在20uA以下。
Mini-F0160 board
Mini-F0160电路板上的I2C总线上已经挂了一个24C02,再挂上SC12B也没有问题。Mini-F0160电路板上给I2C总线搭了上拉电阻4.7k,SC12B Demo电路板上也有上拉电阻10k,这么并联之后大约到3k。可能上拉的电路大一点,先试着用吧。
F0160微控制器同SC12B的信号连线如表x所示。
SC12B pin | Signal | F0160 pin |
---|---|---|
SDA | SDA | PB11(AF15), GPIO |
SCL | SCL | PB10(AF15), GPIO |
INT | INT | PB1(AF15), GPIO |
GND | GND | GND |
VDD | 3.3v | VDD |
注意,在实验过程中发现,Mini-F0160电路板上的Arduino插座上的I2C接口,同开发板专门引出的I2C插座不是一组信号,同开发板自带24C02芯片使用的I2C接口也不是一组信号。晕,这着实让我折腾了一番。最后,还是选定同板载24C02芯片相同的一组I2C引脚,可以直接用MindSDK样例工程中的引脚配置,改工程也省事。
最终连线实物图如图x所示。
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显示的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还提供图形化的人机交互界面的功能,此处暂且不表。
- 配置连接。使用JLink连接电路板上的微控制器芯片,导入F0160工程符号表。
- 创建FreeMASTER变量绑定到MCU的内存区。
- 创建示波器页面,并添加变量到示波器中。
- 运行FreeMASTER程序,Mini-F0160、JLink、FreeMASTER联调运行效果,如图x所示。
从图中可以看到监控波形同触摸感应事件的对应关系,我用手依次单独按下12个按键,然后同时按下3个一组按键并递增。由此可以验证本案Touch方案可以支持同时检测多按键。不出意外,这肯定是基于自感式实现的Touch。
FreeMASTER软件工具自带录制数据的功能,可以将录制数据保存在txt文件中,然后通过Excel的导入数据工程整理成表格,然后可以用Python进行进一步的分析。此处就不再赘述操作过程了,跟着感觉找彩蛋即可。之前的Touch项目中,我直接搞外设模块,滤波、消抖等算法也需要自己写,用保存下来的数据流分析模式,设计对应的滤波策略。这个案子里,SC12B自带算法,现在只要能够实时观察处理结果即可。安逸。
Summary
本文通过组装电路和编写软件,创建了一个验证Touch系统可靠性的基本环境,通过FreeMASTER工具,可以直观地看到Touch系统内部对触摸感应以及判定的实际情况。接下来在验证阶段,我使用几种典型的Touch应用场景,对本案Touch系统的性能进行评测。具体地,就是引入各种日常应用Touch的环境干扰,观察Touch系统在有干扰情况下能否正常工作。
(未完待续。。。)
相关文章:
SC12B触摸感应芯片评测方案(1)
MM32F0160SC12B Touch Application Evaluation 文章目录MM32F0160SC12B Touch Application EvaluationIntroduction & RequirementHardwareSC12B & SC12B Sample Demo boardMini-F0160 boardSoftwareMCU Software - MM32F0160PC Tool - FreeMASTERSummaryIntroduction …...
企业如何实现精细化人员管理?五大业务场景值得关注
近年来,随着大数据、人工智能和云计算等信息技术不断升级与渗透,处在数字化变革的劳动力密集型企业希望利用更加智能化的劳动力管理软件,帮助企业实现规范化的管理。 面对企业劳动力管理理念的变化,以及数字化转型的发展渗透&…...
C/C++每日一练(20230301)
目录 1. 冒泡排序法排序 ★ 2. 有效的数独 ★★ 3. 不同的二叉搜索树 II ★★ 附录 二叉搜索树 1. 冒泡排序法排序 输入n(1≤n≤10)个整数,用冒泡排序法对其从小到大排序,共进行n-1趟,要求输出每一趟的排序情…...
Vue项目中components组件的使用笔记
目录 前言 一、components和component的区别? 二、components使用的步骤 1.创建组件vue文件 2.引入组件 3.注册组件 4.应用组件 总结 前言 本文章,只是初步了解记录components的使用步骤。 一、components和component的区别? compo…...
2023软件测试行情不行了?
一、2023年软件测试行业的现状 2020年开年,一不小心,【新冠】黑天鹅从头上飘过,持续影响全国乃至全球的经济,软件行业公司也迎来了不少的冲击,那么一个值得打算入行软件测试行业,或者已经在软件测试行业耕耘…...
【java web篇】数据库连接池Driud的使用
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
无损音乐格式:FLAC和ALAC
前言:我最近在弄苹果的airplay项目,发现airplay2对比airplay多了音质方面的增强。AAC和MP3接触过,但对FLAC和ALAC完全不了解,整理学习资料汇总成如下信息: AirPlay2 在2017年推出,在前一代AirPlay的基础上…...
第十届蓝桥杯省赛——4质数(质数判断,数学函数:开方函数)
题目:试题 D: 质数本题总分:10 分【问题描述】我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2019 个质数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数&…...
MASKGROUP: HIERARCHICAL POINT GROUPING AND MASKING FOR 3D INSTANCE SEGMENTATION
ABSTRACT 本文研究了 3D 实例分割问题,该问题在机器人技术和增强现实等现实世界中具有多种应用。由于3D物体的周围环境非常复杂,不同物体的分离非常困难。为了解决这个具有挑战性的问题,我们提出了一个新的框架来对 3D 实例进行分组和优化。在实践中,我们首先为每个点学习…...
为什么地图可视化炙手可热?
我们在谈到数据可视化的时候,可能第一反应就是中间有一个地图样式的大屏图。但有没有想过,为什么大多数的可视化大屏中间都是一张地图的样子?这张地图样式的模块究竟是什么呢?它又是怎么做出来的? 其实这张地图样式的…...
JAVA代码审计篇-SQL注入
JAVA代码审计篇-SQL注入1、SQL注入漏洞简介2、SQL注入的条件3、审计方法4、JAVA中执行SQL的几种方式(1)使用JDBC的java.sql.Statement执行SQL语句(2)使用JDBC的java.sql.PreparedStatement执行SQL语句(3)使…...
SpringBoot接口传参方式
常见GET请求和POST请求的区别1.get请求无消息体,只能携带少量数据,且不安全post请求有消息体,可以携带大量数据,且安全2.携带数据的方式:get请求将数据放在url地址中post请求将数据放在消息体body中传参方式get方式---…...
高通平台开发系列讲解(Sensor篇)AlsPs的工作原理及介绍
文章目录 一、什么是ALS?二、什么是距感(PS)?三、AlsPs的工作原理四、AlsPs的特性五、距感的校准参数说明六、光感的校准参数说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 AlsPs 的工作原理及介绍。 一、什么是ALS? 光感的英文叫做Ambient Li…...
集群方式下的java Redis锁 lua脚本
下面说一下集群方式redis 下的原子锁 带超时时间java 代码如下:List<String> keys Collections.singletonList("test_key1");System.out.println("打印前 ::"jedisCluster.get("test_key1"));//获取lua …...
【钓鱼实测】写bug给new bing和chatGPT查。问他们林黛玉倒拔垂杨柳
BUG 错误代码 #include <iostream> #include <vector> using namespace std; int main() {vector<int> vec{1,2,3,2,4};for (auto iter vec.begin(); iter ! vec.end(); iter ){if (*iter 2) {vec.erase(iter);}}cout << vec.size() << endl…...
基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(上)
本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 FPGA 处理器设计的工业级核心板。核心板内部OMAP-L138 与 Logos/Spartan-6 通过 uPP、EMIFA、I2C 通信总线连接,并通过工业级 B2B连接器引…...
C#/.net程序调用python
C#/.net程序调用python C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet…...
一文讲清楚如何进行主数据编码
主数据编码作为一类重要的数据资源,在信息化建设中具有重要的地位和作用,是保证现有信息系统和未来新系统建设成功的关键因素,决定着系统中的信息一致性。 编码,是一件简单的事情,但绝对不是一件容易做好的事情&#…...
SAP 详解ST02
问:在st02中看到,Program和Export/Import的Swap出现红的了,这个是什么原因啊,是不是对系统的性能有影响啊,是否应该调整一些参数啊。要怎么调整呢? 复1:双击红色的部分就可以看到相应的参数修改…...
Go程序当父进程被kill,子进程也自动退出的问题记录
平常我们启动一个后台进程,会通过nouhp &的方式启动,这样可以在退出终端会话的时候,进程仍然可以继续在后台执行(进程的父进程id会从原来的bash进程变成1) 在go程序中,通过nouhp &的方式启动子进程,预期是即使…...
window10 下使用docmer-compose使用mysql镜像部署mysql
1. 在wins中找到store,安装Debian 2. 在桌面右键点击 linux shell窗口 3. 安装docker 4. 启动docker: service docker start 5. 配置加速器,为了拉取镜像更快,修改后得重新启动docker: vi /etc/docker/daemon.json…...
软件测试补充
软件开发的生命周期:需求-计划-设计-开发编码-测试-运行维护-上线 那我们的微信APP来进行举例: 需求:我需要你们团队做这样一个社交软件,能够像QQ一样实现聊天功能,发布说说的功能,能够群聊,可以转账 计划:计划软件…...
【算法】Tire字符串
作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下🐾 文章目录1.Trie的基本思想1.1什么是Trie1.2字符串条件1.3如何存储字符串1.4如何查找字符串2.Trie的代码实现2.1怎么用数组建树2.2完整代码1.Trie的基本思…...
【C++】STL——list的模拟实现
list的模拟实现 文章目录list的模拟实现一、list三个基本类的模拟实现总览二、节点类接口实现模拟实现构造函数三、迭代器类接口实现1.正向迭代器默认成员函数构造函数六种运算符重载 */->//--/!/2.反向迭代器四、list类接口实现1.默认成员函数1.1.构造函数1.2.析构函数1.3.…...
SpringBoot小区物业管理系统
文章目录 项目介绍主要功能截图:后台登录车位收费管理物业收费管理投诉信息管理保修信息管理基础信息管理数据分析部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获…...
外网跨网远程控制内网计算机3种方案
远程控制,通俗来讲就是在自己个人电脑直接远程访问另台主机电脑桌面操作。 如何远程控制电脑?远程控制别人计算机的方案通常有两种,一种是开启电脑系统自带的远程桌面功能,如果涉及跨网内、外网互通可以同时用快解析内网映射外网&…...
记录偶发更新失败问题
一,代码如下Transactional(rollbackFor Exception.class) public void updateDelivery(){ // 1.新增反馈记录 // 2.更新订单状态,及其他字段 // 3.新增变更履历 // 4.其他新增逻辑及与其他系统交互逻辑 }二,问题偶尔出现(概率极低…...
AI环境搭建步骤(Windows环境)
1. 安装好Anaconda3版本(1) 安装链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?CM&OD本文使用Anaconda3下载链接:Anaconda5(2) 注意安装anaconda时一定要把环境变量加入windows环境中。要没有勾选,安装完后还有手动加入…...
Linux系统之history命令的基本使用
Linux系统之history命令的基本使用一、history命令介绍二、本地环境检查1本地系统版本2.检查操作系统的内核版本三、history的命令帮助四、history命令的基本帮助1.查看所有历史执行命令2.指定历史命令条数3.清除历史命令记录4.引用历史命令5.将历史文件中的信息读入到当前缓冲…...
花7000报了培训班,3个月后我成功“骗”进了阿里,月薪拿16K....
“月薪4000元不如报名学IT,挑战年薪百万”这是大多数培训班在互联网上宣传的口号,简单的16个字却戳中了很多人的痛点,同龄人买车买房,自己却拿着微薄的工资连好一点的房子都租不起,这句口号 彻底激起了底层员工的焦虑&…...
安阳网站推广优化/百度查重软件
1.Visual Studio Code简介 1.1.什么是Visual Studio Code? Visual Studio Code是微软推出的一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。 1.2.主要功能 集成了所有一款现代编辑器所应该具备的特性,…...
网站 公司 备案/网络推广的基本渠道
环境: H3C-WX2510H version 7.1.064, Release 5435P02 DEVICE_NAME:WX2510H-PWR DEVICE_SERIAL_NUMBER:219***E000H0 MAC_ADDRESS:58C7***B940 MANUFACTURING_DATE:2021-11-03问题描述: H3C wx2510h无线控制器授权激活出错提示activation file现在不能…...
wordpress主动提交百度/济南网络优化网站
今年9月10号华为开发者大会中,华为正式开源发布了鸿蒙os 2.0系统,鸿蒙终于开放给开发者,目前只能用来做指挥屏/手表/车机。华为手机版本的鸿蒙系统则要到今年的12月才提供。在9月10号我就去鸿蒙gitee上的开源代码库中参观,主要是看…...
网页视频下载软件免费版/资源网站排名优化seo
给定两个整数 nnn 和 kkk,请你找到并输出能够整除 nnn 的第 kkk 小的正整数。 输入格式 一行,两个整数 nnn 和 kkk。 输出格式 输出能够整除 nnn 的第 kkk 小的整数。 如果不存在,则输出 −1−1−1。 数据范围 1≤n≤10151≤n≤10^{15}1≤…...
做b2c网站/童程童美少儿编程怎样收费
最近这几年购置的电脑几乎都安装了Windows 10,并且使用UEFI方式启动(UEFI即统一可扩展固件接口,用来定义操作系统与固件之间的软件界面,作为BIOS的替代方案)。UEFI启动和传统的BIOS启动不同,它不再支持实模式启动系统如DOS等。而传…...
wordpress网站描述插件/广州网络广告推广公司
图像滤波前言1.制作噪声生成椒盐噪声生成高斯噪声2.滤波均值滤波框滤波高斯滤波中值滤波总结前言 很多时候我们能拿到的图片并不是十分干净,有时会有一些噪声,这时我们就应该采用滤波的方式对他进行处理,本文将在一张干净的图片上生成噪声并…...