打印
[产品应用]

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

[复制链接]
843|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2023-6-28 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在范例程序中,软件定时(用定时器中断实现)对每个被测 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;
}

使用特权

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

本版积分规则

1840

主题

13600

帖子

56

粉丝