1627|5

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【上海航芯 ACM32F070开发板+触控功能评估板测评】触摸按键 [复制链接]

  本帖最后由 KING_阿飞 于 2022-10-3 15:13 编辑

【上海航芯 ACM32F070开发板+触控功能评估板测评】触摸按键

 为了更好的方便大家,同时方便自己,按照我的习惯,放上我的Github地址:

链接已隐藏,如需查看请登录或者注册
,大家需要的可以自取。

在上一节中,我们可以通过LCD进行简单的时间显示,现在我们开始测试这款开发板的另一特性,触摸按键

一、电容式触摸传感器

    >>自电容式触摸控制传感器通过检测电容的变化来检测手指是否触及触摸表面。通过调整检测到的电容变化量来调整触摸的灵敏度

    主要特性:

  •     最大支持 16 个自电容检测通道
  •     支持通道补偿
  •     自电容检测范围 5~50pf,灵敏度 0.1pf
  •     支持扫描时钟扩频
  •     支持屏蔽通道
  •     支持睡眠模式

    

     其原理在官方用户手册中也给出:

 二、运行流程

    1、按键初始化

    

uint8_t TouchKey_Init(void)
{
    uint8_t ret = 0;
    TKEY_Init();
    TKEY_Calibrate_ParaInit();
    ret = TKEY_Quick_Calibrate();
    TKEY_Timer_ScanInit();
    TKEY_Timer_Scan_Start(); 
    TKEY_DEBUG("sgu16_RawDataRangRatio = %d\n", sgu16_RawDataRangRatio);
    TKEY_DEBUG("sgu8_TKEYScanTime = %d\n", sgu8_TKEYScanTime); 
    return ret;
}

2、扫描按键获取值

uint8_t TK_TimerSacn_GetKeyVal(void)
{
	uint8_t  ucKey = 0xFF;
	TKEY_Timer_Scan_Result(&ucKey);
#ifdef TKEY_WAVEFORM_OUTPUT    
    TK_DebugDataOut();
#endif
    return ucKey;
}

3、自校准处理

void TKEY_Calibrate_Process(void)
{
    uint8_t ucI;
    const TKEY_ChannelDataDef *ChannelData;
    uint16_t average, differ;
    for(ucI = 0; TKEY_Handle.ChannelData[ucI].ChannelId != 0xFFFF; ucI++)
    {
        ChannelData = &TKEY_Handle.ChannelData[ucI];
        if(ChannelData->Tkey_CalData->CalFlag == TKEY_CALIBRAT_SELF)//×ÔÎòD£×¼
        {
            Bubble_Sort(ChannelData->Tkey_CalData->Caldata, TKEY_CALIBRATE_BUFF_MAX);
            average = Calculate_Sample_Average(&ChannelData->Tkey_CalData->Caldata[2], TKEY_CALIBRATE_BUFF_MAX-4);
            differ = Calculate_Sample_differ(&ChannelData->Tkey_CalData->Caldata[2], TKEY_CALIBRATE_BUFF_MAX-4, average);     
            
            if(differ <= TKEY_Handle.ChannelData[ucI].Tkey_Data->RawData / sgu16_RawDataRangRatio)
            {
                ChannelData->Tkey_Data->BaseLine = average;
            }
            ChannelData->Tkey_CalData->CalFlag = TKEY_CALIBRAT_IDLE;
            ChannelData->Tkey_Data->StateId = TKEY_STATEID_RELEASE;
        }
        else if(ChannelData->Tkey_CalData->CalFlag == TKEY_CALIBRAT_QUICK)
        {
            ChannelData->Tkey_CalData->CalFlag = TKEY_CALIBRAT_IDLE;
            TKEY_DEBUG("TK_%d:TKEY_Quick_Calibrate\n",TKEY_Handle.ChannelData[ucI].ChannelId);
            TKEY_DEBUG("TK_%d:Baseline[%d]-Rawdata[%d]\n", TKEY_Handle.ChannelData[ucI].ChannelId, \
            TKEY_Handle.ChannelData[ucI].Tkey_Data->BaseLine, TKEY_Handle.ChannelData[ucI].Tkey_Data->RawData);
            //HAL_TKEY_Quick_Calibrate_RefData(&TKEY_Handle,TKEY_QUICK_QUICK_CALIBRATE_TIMES);
            HAL_TKEY_Quick_Calibrate_RefData_OneChannel(&TKEY_Handle, TKEY_Handle.ChannelData[ucI].ChannelId, TKEY_QUICK_QUICK_CALIBRATE_TIMES);
            TKEY_DEBUG("TK_%d:TKEY_CALIBRAT_SELF BaseLine=%d\n",TKEY_Handle.ChannelData[ucI].ChannelId,TKEY_Handle.ChannelData[ucI].Tkey_Data->BaseLine);
            ChannelData->Tkey_Data->StateId = TKEY_STATEID_RELEASE;
        } 
    }
}
int main(void)
{
		uint8_t  ret = 0;
		uint8_t  fu8_Tkey_state = 0xff;
		Uart_Init(115200);
		ret = TouchKey_Init();
		if(ret)
    {
        printfS("TouchKey_Init is Fail!\r\n");
    }
    else
    {
        printfS("TouchKey_Init is Success!\r\n");      
    }
    while (1) 
    {
			fu8_Tkey_state = TK_TimerSacn_GetKeyVal();
			if(fu8_Tkey_state != 0xFF)
      {
            Beep_On(5);
        #ifndef TKEY_WAVEFORM_OUTPUT 
            printfS("TK_%d\r\n", fu8_Tkey_state);
        #endif
      }
      TKEY_Calibrate_Process();
			rt_thread_mdelay(100);
    }
}

同时配合官方的软件包,可以使用官方自带的软件进行分析。

 

三、实现效果

VID_20221003_145846

 

最新回复

没听到蜂鸣器的声音   详情 回复 发表于 2022-11-16 19:55
点赞(1) 关注
 
 

回复
举报

6968

帖子

11

TA的资源

版主

沙发
 

自电容式触摸控制传感器通过检测电容的变化来检测手指是否触及触摸表面。通过调整检测到的电容变化量来调整触摸的灵敏度。

电容触控,相比传统按键,灵敏许多吧。这个会有抖动这类的问题吗?

 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

与传统按键来说,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动;对于电容按键,按键电容 Cx 扫描,得到比较稳定的计数值 Nx,通过检测 Cx 的增加量, 获得新的 Nx’值, 和原来的 Nx 相减得到 ΔNx 值, 通过 ΔNx的大小变化来判断是否产生了触摸按键事件。

 
 
 

回复

6449

帖子

10

TA的资源

版主

4
 

电容式触摸按键确实是非常方便,主要问题还是误碰没有机械按键可靠

点评

确实容易误触,没有传统按键的机械反馈  详情 回复 发表于 2022-10-4 20:08
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

5
 
秦天qintian0303 发表于 2022-10-4 19:35 电容式触摸按键确实是非常方便,主要问题还是误碰没有机械按键可靠

确实容易误触,没有传统按键的机械反馈

 
 
 

回复

47

帖子

2778

TA的资源

一粒金砂(中级)

6
 

没听到蜂鸣器的声音

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表