什麼是觸摸感應,就是不使用機械開關,而是通過手指觸摸表面來實現驅動。
基於觸摸感應有三種方法:
-
電容開關:
-
電極放置在非導電面板後面
-
檢測到電容的變化
-
-
電阻式觸摸開關:
-
兩個電極通過用戶的指尖連接
-
檢測指尖的阻力
-
-
壓電觸摸開關:
-
通過推動/彎曲壓電材料產生電壓
-
檢測到電壓變化
-
ST是採用基於TSC(觸摸感應控制器)外設基於電容開關方法 - 當人觸摸傳感器區域的表面時,電容會發生變化的感應方式。
基本TSC工作模式說明:
原理說明:
STM32 觸摸感應特性以電荷轉移為基礎。
表面電荷轉移採集原理包括將傳感器電容(Cx)充電和將累積電荷轉移至採樣電容(Cs)。此過程不斷重複,直至 Cs 兩側電壓達到 VIH。
達到閾值所需的電荷轉移次數直接表示電極電容的大小。當傳感器被觸摸時,傳感器對地電容增大。這意味著 C 電壓達到 VIH 所需的電荷轉移次數減少,測量值變小。當此測量值低於閾值時, TSL 報告檢測。下圖為沒有考慮寄生電容的原理圖。
支持TSC功能的MCU:
硬體電路連接方式
軟體初始化方法:
htsc.Instance = TSC;
htsc.Init.CTPulseHighLength = TSC_CTPH_6CYCLES;
htsc.Init.CTPulseLowLength = TSC_CTPL_6CYCLES;
htsc.Init.SpreadSpectrum = DISABLE;
htsc.Init.SpreadSpectrumDeviation = 1;
htsc.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1;
htsc.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV4;
htsc.Init.MaxCountValue = TSC_MCV_16383;
htsc.Init.IODefaultMode = TSC_IODEF_OUT_PP_LOW;
htsc.Init.SynchroPinPolarity = TSC_SYNC_POLARITY_FALLING;
htsc.Init.AcquisitionMode = TSC_ACQ_MODE_NORMAL;
htsc.Init.MaxCountInterrupt = DISABLE;
htsc.Init.ShieldIOs = TSC_GROUP1_IO1;
htsc.Init.ChannelIOs = TSC_GROUP6_IO2;
htsc.Init.SamplingIOs = TSC_GROUP1_IO2|TSC_GROUP6_IO1;
if (HAL_TSC_Init(&htsc) != HAL_OK)
{
Error_Handler();
}
HAL_SYSCFG_DisableTSCComparatorMode();
評論