打印
[软件资料]

芯源电容触摸检测电路软件过程

[复制链接]
147|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

在电容kit板的案例程序中,软件定时(用定时器中断实现)对每个被测IO 充电并检测放电时间N 次,N 次循环检测后,
将统计结果提交滤波器状态机,得到按键当前状态。每次检测的具体过程如下:

1. 将IO 口置高2 个机器周期,此时金属部件及电容C 对GND 的电压被充高到VCC。

2. 将IO 口配置为电压比较器输入模式,此时IO 口状态切换为高阻输入状态,金属部件及电容C 通过对
GND 的旁路电阻R 放电,端子电压变化曲线为标准的RC 放电曲线。

3. 软件记录循环定时器(GTIM 最高主频运行)的当前值,并等待电压比较器的输出翻转(电压比较器被
配置为与某电压门限比较)。

4. 电压比较器输出翻转后立即记录循环定时器当前值,并结合前次记录的时间记录输出结果。

触摸检测过程的相关代码如下:
uint32_t TouchKey_GetValue(uint8_t key, uint8_t ref)
{
uint32_t CurTime;
//VC1 切换通道
CW_VC1->CR0_f.INP = key; // 设置按键通道
CW_VC1->DIV_f.DIV = ref; // 设置按键比较的参考比例
// 获取放电时间
CW_GPIOB->DIR &= ~((1UL<<8)>>key); // 按键端口输出,对电容充电
__NOP();
__NOP();
CW_GTIM->CNT = 0x0000; // 计数器清零
CW_GPIOB->DIR |= ((1UL<<8)>>key); // 按键端口输入高阻
while((CW_VC1->SR_f.FLTV) == 1 ); // 等到放电到比较点
CurTime = CW_GTIM->CNT; // 获取放电时间
return CurTime;
}


使用特权

评论回复
沙发
szt1993| | 2024-8-26 17:40 | 只看该作者
非常简洁的电容触摸检测

使用特权

评论回复
板凳
AdaMaYun| | 2024-9-7 15:55 | 只看该作者
电压比较器输出翻转后立即记录循环定时器当前值,并结合前次记录的时间记录输出结果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1549

帖子

2

粉丝