基於STM32觸摸感應應用

什麼是觸摸感應,就是不使用機械開關,而是通過手指觸摸表面來實現驅動。

基於觸摸感應有三種方法

  • 電容開關

    • 電極放置在非導電面板後面

    • 檢測到電容的變化

  • 電阻式觸摸開關

    • 兩個電極通過用戶的指尖連接

    • 檢測指尖的阻力

  • 壓電觸摸開關

    • 通過推動/彎曲壓電材料產生電壓

    • 檢測到電壓變化

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();

功能驗證,推薦開發板:
STM32U083C-DK,https://edit.wpgdadawant.com/uploads/news_file/blog/2024/16284/tinymce/stm32u083c-dk.pdf

測試程序:https://edit.wpgdadawant.com/uploads/news_file/blog/2024/16284/tinymce/touchsensing.zip

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論