【英飞凌PSOC™ 4100S Max】③Capsense触摸按钮初体验
<div class='showpostmsg'><p><span style="font-size:18px;">本章来到开发板的特色功能:触摸,也即英飞凌第五代Capsense。</span></p><p> </p>
<p><span style="font-size:18px;">既然是第五代,听起来已经发展了很久,来看新闻稿:</span></p>
<p> </p>
<p><span style="font-size:18px;"><strong>【2022 年 1 月13日,德国慕尼黑讯】</strong>英飞凌科技股份公司(FSE: IFX / OTCQX: IFNNY)近日发布了该公司第五代CAPSENSE™电容和电感式触摸感应人机界面(HMI)技术。新一代CAPSENSE解决方案集成于PSoC™微控制器中,可为家电、工业、消费级和物联网产品等要求严苛的用户界面提供更强的性能和更低的功耗。增强型HMI改进了检测范围、手势检测和指向性功能,并加入针对未来先进触摸屏的悬停检测功能,可实现近距离传感等先进解决方案。</span></p>
<p> </p>
<p><span style="font-size:18px;">新一代CAPSENSE技术的性能是前几代的十倍,功耗仅是前几代的十分之一,不仅支持工程师开发更直观的用户界面,降低了整体功耗,而且满足便携式电池供电的物联网设备的低功耗需求。全新CAPSENSE是智能门锁、智能开关、恒温器、智能音箱、电动工具、工业触摸屏等各种家用电器、工业应用以及其他物联网设备的理想选择。新技术也很适合有较大触摸屏的电磁炉、洗衣机和烘干机、冰箱、烤箱等工业和家用电器产品。</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">看重点,第五代Capsense相比第四代,信噪比高10倍,功耗低10倍,看起来很厉害有木有!!!</span></p>
<p><span style="font-size:18px;">支持各类触控场景:按键(零维)、滑条(一维)、触摸屏(二维)、接近感应(三维)等……</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">第5代与第4代比一比:重点突出信噪比提升、功耗下降。</span></p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">在开始本次测评前,我重点阅读了英飞凌的官方文档:</span></p>
<p><span style="font-size:18px;"><strong>AN64846:CAPSENSE™入门</strong></span></p>
<div><span style="font-size:18px;"></span></div>
<p> </p>
<p><span style="font-size:18px;">这个文档非常详细,总计131页,目录就可以看得出来,从原理到设计应有尽有,看完足足花了两个小时。</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">触摸按钮的主要原理是触摸导致电容变化被Capsense模块侦测并计算。</span></p>
<p> </p>
<p><span style="font-size:18px;">可分为自电容(按键、滑条)和互电容(支持多点触控的触控板)</span></p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;">各类触控场景及原理介绍:</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;">以及重点介绍水滴和水流对 CAPSENSE™产生的影响</span></p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">后面还介绍了各类触控传感器的设计要点,非常详细:</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;">第二个重点参考的文档是:</span></p>
<p><span style="font-size:18px;">【讲师演讲PDF】第五代触摸感应技术赋能物联网应用-英飞凌-彭祖年</span></p>
<div><span style="font-size:18px;"></span></div>
<p> </p>
<p><span style="font-size:18px;">这个PPT重点介绍第五代Capsense的新特性。</span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;">说了这么多,我们赶快开始我们的Capsense触摸按钮初体验吧!</span></p>
<p><span style="font-size:18px;">新建项目时,选择<strong>MSC_CAPSENSE_CSD_Button_Tuning</strong>例程,也就是最基本的<strong>自电容</strong>按钮:</span></p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">我们重点看例程的main.c函数</span></p>
<p> </p>
<pre>
<code>int main(void)
{
cy_rslt_t result = CY_RSLT_SUCCESS;
/* Initialize the device and board peripherals */
result = cybsp_init();
/* Board init failed. Stop program execution */
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(CY_ASSERT_FAILED);
}
/* Enable global interrupts */
__enable_irq();
/* Initialize EZI2C */
initialize_capsense_tuner();
/* Initialize MSC CapSense */
initialize_capsense();
#if CY_CAPSENSE_BIST_EN
/* Measure the self capacitance of sensor electrode using BIST */
measure_sensor_cp();
#endif /* CY_CAPSENSE_BIST_EN */
/* Start the first scan */
Cy_CapSense_ScanAllSlots(&cy_capsense_context);
for (;;)
{
if(CY_CAPSENSE_NOT_BUSY == Cy_CapSense_IsBusy(&cy_capsense_context))
{
/* Process all widgets */
Cy_CapSense_ProcessAllWidgets(&cy_capsense_context);
/* Turns LED ON/OFF based on button status */
led_control();
/* Establishes synchronized communication with the CapSense Tuner tool */
Cy_CapSense_RunTuner(&cy_capsense_context);
/* Start the next scan */
Cy_CapSense_ScanAllSlots(&cy_capsense_context);
/* Toggles GPIO for refresh rate measurement. Probe at P10.4. */
Cy_GPIO_Inv(CYBSP_SENSE_SCAN_RATE_PORT, CYBSP_SENSE_SCAN_RATE_NUM);
}
}
}
</code></pre>
<p> </p>
<p><span style="font-size:18px;">分析下程序流程:</span></p>
<p><span style="font-size:18px;"> /* Initialize the device and board peripherals */ 初始化设备和外设</span></p>
<p><span style="font-size:18px;"> /* If Board init failed. Stop program execution */ 判断是否初始化成功</span></p>
<p><span style="font-size:18px;">/* Enable global interrupts */ 开启全局中断</span></p>
<p><span style="font-size:18px;"> /* Initialize EZI2C */ 开启I2C,这个主要是用于Capsense调教</span></p>
<p><span style="font-size:18px;"> /* Initialize MSC CapSense */ 初始化CapSense单元</span></p>
<p><span style="font-size:18px;"> /* Start the first scan */ 开启第一次扫描</span></p>
<p><span style="font-size:18px;">for 循环</span></p>
<p><span style="font-size:18px;"> /* Process all widgets */</span></p>
<p><span style="font-size:18px;"> /* Turns LED ON/OFF based on button status */ 根据按钮状态开启/关闭对应的LED灯</span></p>
<p><span style="font-size:18px;"> /* Establishes synchronized communication with the CapSense Tuner tool */ 与CapSense调教软件同步</span></p>
<p><span style="font-size:18px;"> /* Start the next scan */ 开启下一次扫描</span></p>
<p><span style="font-size:18px;"> /* Toggles GPIO for refresh rate measurement. Probe at P10.4. */ 翻转P10.4引脚,作为刷新率测量手段</span></p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;">LED控制代码块,也比较简单:根据按钮状态开启/关闭对应的LED灯</span></p>
<p> </p>
<pre>
<code>/*******************************************************************************
* Function Name: led_control
********************************************************************************
* Summary:
* Turning LED ON/OFF based on button status
*
*******************************************************************************/
static void led_control(void)
{
if(MSC_CAPSENSE_WIDGET_INACTIVE != Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON0_WDGT_ID, &cy_capsense_context))
{
Cy_GPIO_Write(CYBSP_LED_BTN0_PORT, CYBSP_LED_BTN0_NUM, CYBSP_LED_STATE_ON);
}
else
{
Cy_GPIO_Write(CYBSP_LED_BTN0_PORT, CYBSP_LED_BTN0_NUM, CYBSP_LED_STATE_OFF);
}
if(MSC_CAPSENSE_WIDGET_INACTIVE != Cy_CapSense_IsWidgetActive(CY_CAPSENSE_BUTTON1_WDGT_ID, &cy_capsense_context))
{
Cy_GPIO_Write(CYBSP_LED_BTN1_PORT, CYBSP_LED_BTN1_NUM, CYBSP_LED_STATE_ON);
}
else
{
Cy_GPIO_Write(CYBSP_LED_BTN1_PORT, CYBSP_LED_BTN1_NUM, CYBSP_LED_STATE_OFF);
}
}</code></pre>
<p> </p>
<p><span style="font-size:18px;">编译下载后,就能看到BTN0,BTN1的按钮动作,触发LED2,LED3亮灭了。</span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;">b11343bef72530a53c5adebcdd2fd6c2</span><br />
</p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;">接下来,我们重点体验英飞凌触控重点功能:<strong>Capsense Tuner(调教)</strong></span></p>
<p><span style="font-size:18px;"><strong>CAPSENSE™系统的最佳性能取决于电路板布局、按键尺寸、覆盖层材料和应用要求。除了这些因素,还必须谨慎选择开关频率和阈值,以实现稳定可靠的性能。调校是一个使参数达到最优值的过程。调试用于维持较高的触摸敏感度,以及弥补这个过程中传感器板、覆盖层材料和环境条件的不确定性。<br />
多种 CAPSENSE™器件支持英飞凌的 SmartSense 自动调校算法。该算法将自动配置各个参数以得到最佳性能,然后连续补偿由于系统、生产过程和环境不同引起的变化。</strong></span></p>
<p> </p>
<p><span style="font-size:18px;">在主界面点击:<strong>Capsense Tuner 5.0</strong></span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">会打开<strong>Capsense Tuner 5.0界面</strong></span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">点击左上角的Connect,再点击其右边的Start就可以开启我们的调教过程了。</span></p>
<p><span style="font-size:18px;">比如按下BTN0,就可以精确看到实时信号值。</span></p>
<p> </p>
<p><span style="font-size:18px;">注意在最下面的状态栏,可以看到用于<strong>Capsense调教的 I2C </strong>通讯信息:刷新速率,状态,地址,时钟,电压等》</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;">切换到Graphic View:可以看到实时曲线,包括了原始数据、计算数据。</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">然后切换到SNR Measurement 也就是信噪比测量选项卡:</span></p>
<p> </p>
<p><span style="font-size:18px;">1. 测量本地噪声(默认手指未按下时的电容、转换为计时器的数据)</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">2. 按下按钮,测量手指按下时的电容、转换为计时器的数据</span></p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">3. 计算得出信噪比13.66。</span></p>
<p> </p>
<p><span style="font-size:18px;">另外还可以通过Logging按钮,设置实时记录各项数据用于调试分析,可以说非常详细了!</span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p> </p>
<p><span style="font-size:18px;">最后我们可以把手动调教的数据更新到程序中:</span></p>
<p><span style="font-size:18px;">注意看左侧展示的设定数据:</span></p>
<p> </p>
<p><span style="font-size:18px;">最重要的就是触摸阈值:</span></p>
<p><span style="font-size:18px;"><strong>Finger thredshold:64</strong></span></p>
<p><span style="font-size:18px;">手指门槛,也就是触摸阈值,大于64就被认为是按下了按钮。</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;"> </span></p>
<p><span style="font-size:18px;">下面是调教的视频:</span></p>
<p> </p>
<p> </p>
<p><span style="font-size:18px;">e8a1f35634c660d081250f02eb8e03c8</span><br />
</p>
<p> </p>
<p><span style="font-size:18px;">本次的分享就到这里。</span></p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]