文章目录RC充放电电路原理硬件连接程序设计思路函数实验代码
RC充放电电路原理
R:电阻
C:电源
RC电路充放电式:
vt=v0(v1-v0) [1-exp(-t/RC ) ]
V0:电容器的初始电压值
V1:电容器最终可充电或接通的电压值
v ) t时刻电容器上的电压值
====V0为0,即从0V开始充电。 表达式简化如下
vt=v1*[1-exp(-t/RC] )
因此,在相同条件下,电容值c与时间值t成比例,容量越大则充电达到某阈值的时间越长。 图:
硬件连接
电容触摸键原理
r :外置电容器充放电电阻
Cs:TPAD和PCB之间的杂散电容
Cx :用手指按下时手指与TPAD之间的静电容量
开关:用电容器放电开关、STM32 IO端口代替
按下和未按下的静电电容的变化作为一个信号传递,静电电容越大,充电时间越长,与原始时间t1不同的时间t2在IO端口被检测到,是判断按下的依据。
具体流程:
将 TPAD引脚设置为推挽输出,输出0,电容器放电为0;
将 TPAD引脚设为浮动输入(IO复位后的状态),开始电容器充电。
同时打开TPAD端子的输入捕捉,开始捕捉。
等待充电完成(充电至Vx,检测上升沿) )。
计算充电时间
编程思路不同的平台的区别在于定时器基础关联和IO端口的初始化
函数将IO端口设定为推挽输出0,使电容器放电。 等待放电完成后,设为浮动输入开始充电。
同时将计数器的CNT设定为零
voidTPAD_reset(void )函数:复位TPAD复位TPAD,等待捕获的启动,捕获后,得到定时器的值计算充电时间。
TPAD_ Get_Val (函数:获取一次捕获值(获取充电时间) )多次调用TPAD_ Get_Val函数获取充电时间。 取得最大值
TPAD_Get_MaxVal ()函数关系图:
实验代码# include ' sys.h ' # include ' delay.h ' # include ' usart.h ' # include ' led.h ' # include ' tpad.h ' int mart //设置系统中断优先级组2 delay _ init (168 ); //初始化延迟函数UART_init(115200 ); //初始化串行端口的波特率115200LED_Init (初始化//ledtpad_init); //初始化了触摸键,并以84/4=21Mhz的频率成功捕获了while(1) if (tpad _ scan )0) /上升沿(此函数的运行时间至少为15ms ) {LED1=LED1; //LED1相反(t; if(t==15 ) t=0; LED0=! LED0; //LED0反转,指示程序正在运行(Delay_ms(10 ); }