Download presentation
Presentation is loading. Please wait.
Published byΧάρις Ελευθεριάδης Modified 5年之前
1
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:
2
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 电容触摸按键 实验 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺: 技术论坛:
3
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
电容触摸按键实验 参考资料: 探索者STM32F4开发板 《STM32F4开发指南-库函数版本》-第16章 电容触摸按键实验 淘宝店铺: 技术论坛:
4
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 电容触摸按键原理 1 硬件连接讲解 2 实验程序讲解 3 淘宝店铺: 技术论坛:
5
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
电容触摸按键原理 RC充放电电路原理: 淘宝店铺: 技术论坛:
6
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
电容触摸按键原理 RC电路充放电公式: Vt = V0+(V1-V0)* [1-exp(-t/RC)] V0 为电容上的初始电压值; V1 为电容最终可充到或放到的电压值; Vt 为t时刻电容上的电压值。 如果V0为0,也就是从0V开始充电。那么公式简化为: Vt= V1* [1-exp(-t/RC)] 结论:同样的条件下,电容值C跟时间值t成正比关系, 电容越大,充电到达某个临界值的时间越长。 淘宝店铺: 技术论坛:
7
电容触摸按键原理 电容充电时间与电容大小关系
8
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
电容触摸按键原理 电容触摸按键原理: 硬件连接 R:外接电容充放电电阻。 Cs:TPAD和PCB间的杂散电容。 Cx:手指按下时,手指和TPAD之间的电容。 开关:电容放电开关,由STM32 IO口代替。 淘宝店铺: 技术论坛:
9
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
电容触摸按键原理 检测电容触摸按键过程 TPAD引脚设置为推挽输出,输出0,实现电容放电到0。 TPAD引脚设置为浮空输入(IO复位后的状态),电容开始充电。 同时开启TPAD引脚的输入捕获开始捕获。 等待充电完成(充电到底Vx,检测到上升沿)。 计算充电时间。 没有按下的时候,充电时间为T1(default)。按下TPAD,电容变大,所以充电时间为T2。我们可以通过检测充放电时间,来判断是否按下。如果T2-T1大于某个值,就可以判断 有按键按下。 淘宝店铺: 技术论坛:
10
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
硬件连接 数据手册标注少了TIM2_CH1 淘宝店铺: 技术论坛:
11
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
程序设计思路 程序设计思路 淘宝店铺: 技术论坛:
12
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
程序思路 几个重要的函数 说明:对于不同的平台,区别主要是定时器底层相关以及IO口初始化。 void TPAD_Reset(void)函数:复位TPAD 设置IO口为推挽输出输出0,电容放电。等待放电完成之后,设置为浮空 输入,从而开始充电。同时把计数器的CNT设置为0。 ② TPAD_Get_Val()函数:获取一次捕获值(得到充电时间) 复位TPAD,等待捕获上升沿,捕获之后,得到定时器的值,计算充电时间。 ③ TPAD_Get_MaxVal()函数: 多次调用TPAD_Get_Val函数获取充电时间。获取最大的值。 淘宝店铺: 技术论坛:
13
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
程序思路 几个重要的函数 ④ TPAD_Init()函数:初始化TPAD 在系统启动后,初始化输入捕获。先10次调用TPAD_Get_Val()函数获取 10次充电时间,然后获取中间N(N=8或者6)次的平均值,作为在没有电容触摸按键按下的时候的充电时间缺省值tpad_default_val。 ⑤ TPAD_Scan()函数:扫描TPAD 调用TPAD_Get_MaxVal函数获取多次充电中最大的充电时间,跟 tpad_default_val比较,如果大于某个阈值,则认为有触摸动作。 ⑥ void TIM5_CH2_Cap_Init(u16 arr,u16 psc)//输入捕获通道初始化 可以使用任何一个定时器。M3使用定时器5,M4使用的定时器2。 淘宝店铺: 技术论坛:
14
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
程序思路 Tpad_init TPAD_Get_Val TPAD_Reset TPAD_Scan TIM2_CH1_Cap_Init() 初始化输入捕获 TPAD_Reset(); 初始化PA5为推挽输出,输出0,放电 调用TPAD_Get_MaxVal,获取N次的平均值 这个值与tpad_default_val+ TPAD_GATE_VAL比较,如果大于,说明是按下。 同时支持连按和不连按。 10次调用TPAD_Get_Val(); 等待捕获上升沿 计数器的值初始化为0 捕获到上升沿,返回捕获寄存器的值。 初始化PA5为浮空输入,等待按下充电 取中间6次的平均值赋值给 tpad_default_val变量 淘宝店铺: 技术论坛:
15
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:
Similar presentations