将电容触摸功能融入您的项目中,见证用户体验的转变。
A
A
硬件概览
它是如何工作的?
TouchKey 3 Click使用Microchip的AT42QT1110,这是一款11键的QTouch®触摸传感器集成电路。它可以根据应用的不同以几种不同的方式进行配置:可以用于支持更多或更少的传感器通道,支持直接输出以触发特定通道上的中断,可以使用其#CHANGE输出引脚在传感器之一检测到触摸事件时触发一个全局中断,或者通过使用SYNC输入信号在特定时间间隔内触发感应脉冲来改善功耗。TouchKey 3 Click使用七个电容感应通道,其中#CHANGE引脚被路由到mikroBUS™的INT引脚,这样如果任何传感器检测到触摸事件,就可以触发中断。这可以在按下按键时触发SPI读取周期,而不需要不断轮询AT42QT1110的寄存器。然而,#CHANGE引脚的行为是可编程的,关于其功能的更多信息可以在AT42QT1110的数据手册中找到。SYNC引脚被拉高并且未被使用,允许单击板在Free Run模式下运行,这可以实现最快的按键按下检测时间。AT42QT1110的#RESET引脚被路由到mikroBUS™的RST引脚,并且用于重置设备并重新初始化其工作参数-可以使用存储在EEPROM中的值或者在EEPROM中不包含任何保存的值的情况下加载到RAM中的默认值。在RESET事件发生后的160ms内SPI将不可用。该引脚应拉到高逻辑电平以重置设
备。AT42QT1110传感器具有用于配置设备工作参数的内部寄存器。设备模式寄存器是重要的配置寄存器之一,用于控制单击板的整体操作。设备模式寄存器的KEY_AC位用于设置检测触发模式:通过SYNC引脚为0或通过内部定时器为1(应设置为1,因为SYNC引脚被拉到高逻辑电平);MODE位:用于7个或11个通道配置的0或1(应设置为0以进行7个通道操作);信号位:串行为0,并行为1;SYNC位:用于上升沿的0,零电平检测的1(由于KEY_AC设置为1,因此忽略);重复时间位字段:这四个位设置扫描间隔之间的重复时间。如果将重复时间设置为0,则新的扫描周期将在上一个周期之后立即执行,从而实现最快的触摸检测。该位字段的值乘以16ms即可得到最终的重复时间。TouchKey 3 click还具有信号处理功能,以提供更好的按钮检测。相邻按键抑制(AKS®)技术可以在每个通道上进行配置。启用了AKS®的通道组将被处理,以便仅保留检测到的按键,而其他传感器将被忽略。当当前活动按键释放时,启用了AKS®的其他传感器将仅被激活。未选择AKS®的传感器通道将保留同时感应触摸的能力。这项技术可以提供更好的按键准确性,并减少需要按键按下检测精度的应用中的虚假检测。检测集成(DI)是另一种用于
更好地感应按键按下的技术。当按键首次被按下时,将启动一个计数器。如果计数器超时且传感器通道仍然检测到按键按下,则该按键按下将被声明为真。否则将被忽略为假。这充当了一种去抖动,并防止了虚假检测。DI技术是按传感器实现的。AT42QT1110 IC具有EEPROM存储器,可存储当前RAM设置。所有寄存器都保存在RAM中,并且在上电复位事件(POR)后,EEPROM存储器中存储的值将自动复制到寄存器中。否则,寄存器将加载默认值。所有这些功能都可以通过SPI总线进行访问和配置。SPI通信可以是快速SPI模式或完整SPI模式。在快速SPI模式下工作时,设备将发送包含基本数据的7字节序列,例如通道的检测和错误状态。在此模式下,不需要主机MCU命令,并且此序列将连续从AT42QT1110 IC中时钟输出。通过在通信选项设置寄存器中设置SPI_EN位可以启用快速SPI模式。所有SPI引脚和片选引脚均被路由到mikroBUS™上的适当引脚。标记为VCC SEL的板载SMD跳线选择电源供应和逻辑电压电平。此点击板可与3.3V和5V MCU一起工作。提供的TouchKey 3 Click库包含用于配置设备和全面直观地读取触摸事件的函数。包含的示例应用程序演示了这些函数的使用,并可用作自定义设计的参考。
功能概述
开发板
Nucleo-64 搭载 STM32F446RE MCU 提供了一种经济高效且灵活的平台,供开发者探索新想法并原型设计他们的项目。该板利用 STM32 微控制器的多功能性,使用户能够为他们的项目选择最佳的性能与功耗平衡。它配备了 LQFP64 封装的 STM32 微控制器,并包含了如用户 LED(同时作为 ARDUINO® 信号)、用户和复位按钮,以及 32.768kHz 晶体振荡器用于精确的计时操作等基本组件。Nucleo-64 板设计考虑到扩展性和灵活性,它特有的 ARDUINO® Uno
V3 扩展连接器和 ST morpho 扩展引脚头,提供了对 STM32 I/O 的完全访问,以实现全面的项目整合。电源供应选项灵活,支持 ST-LINK USB VBUS 或外部电源,确保在各种开发环境中的适应性。该板还配备了一个具有 USB 重枚举功能的板载 ST-LINK 调试器/编程器,简化了编程和调试过程。此外,该板设计旨在简化高级开发,它的外部 SMPS 为 Vcore 逻辑供电提供高效支持,支持 USB 设备全速或 USB SNK/UFP 全速,并内置加密功能,提升了项目的功效
和安全性。通过外部 SMPS 实验的专用连接器、 用于 ST-LINK 的 USB 连接器以及 MIPI® 调试连接器,提供了更多的硬件接口和实验可能性。开发者将通过 STM32Cube MCU Package 提供的全面免费软件库和示例得到广泛支持。这些,加上与多种集成开发环境(IDE)的兼容性,包括 IAR Embedded Workbench®、MDK-ARM 和 STM32CubeIDE,确保了流畅且高效的开发体验,使用户能够充分利用 Nucleo-64 板在他们的项目中的能力。
微控制器概述
MCU卡片 / MCU
建筑
ARM Cortex-M4
MCU 内存 (KB)
512
硅供应商
STMicroelectronics
引脚数
64
RAM (字节)
131072
你完善了我!
配件
Click Shield for Nucleo-64 配备了两个专有的 mikroBUS™ 插座,使得所有的 Click board™ 设备都可以轻松地与 STM32 Nucleo-64 开发板连接。这样,Mikroe 允许其用户从不断增长的 Click boards™ 范围中添加任何功能,如 WiFi、GSM、GPS、蓝牙、ZigBee、环境传感器、LED、语音识别、电机控制、运动传感器等。您可以使用超过 1537 个 Click boards™,这些 Click boards™ 可以堆叠和集成。STM32 Nucleo-64 开发板基于 64 引脚封装的微控制器,采用 32 位 MCU,配备 ARM Cortex M4 处理器,运行速度为 84MHz,具有 512Kb Flash 和 96KB SRAM,分为两个区域,顶部区域代表 ST-Link/V2 调试器和编程器,而底部区域是一个实际的开发板。通过 USB 连接方便地控制和供电这些板子,以便直接对 Nucleo-64 开发板进行编程和高效调试,其中还需要额外的 USB 线连接到板子上的 USB 迷你接口。大多数 STM32 微控制器引脚都连接到了板子左右边缘的 IO 引脚上,然后连接到两个现有的 mikroBUS™ 插座上。该 Click Shield 还有几个开关,用于选择 mikroBUS™ 插座上模拟信号的逻辑电平和 mikroBUS™ 插座本身的逻辑电压电平。此外,用户还可以通过现有的双向电平转换器,使用任何 Click board™,无论 Click board™ 是否在 3.3V 或 5V 逻辑电压电平下运行。一旦将 STM32 Nucleo-64 开发板与我们的 Click Shield for Nucleo-64 连接,您就可以访问数百个工作于 3.3V 或 5V 逻辑电压电平的 Click boards™。
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
这个库包含了TouchKey 3 Click驱动程序的API。
关键功能:
touchkey3_send_command
- 执行可能的命令之一。touchkey3_send_request
- 发送请求命令,并返回响应。touchkey3_get_data
- 从所选配置寄存器读取数据。
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* \file
* \brief TouchKey3 Click example
*
* # Description
* This click uses 7 capacitive sensing channels, with the #CHANGE pin routed to the INT pin of the mikroBUS™,
* so that an interrupt can be triggered if any of the sensors detect a touch event.
* This can be used to trigger an SPI read cycle only when the key is actually pressed,
* avoiding the need for constant polling of the sensor registers.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes click driver and performs a soft reset of the click.
*
* ## Application Task
* Reads the status of the keys, and outputs a message if a key is touched.
*
*
* \author MikroE Team
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "touchkey3.h"
// ------------------------------------------------------------------ VARIABLES
static touchkey3_t touchkey3;
static log_t logger;
static uint8_t return_data[ 2 ];
static uint8_t counter;
static uint8_t temp;
static uint8_t old_state;
static const uint16_t timeout_state = 1000;
static uint16_t timeout_cnt;
// ------------------------------------------------------ APPLICATION FUNCTIONS
uint8_t calculationt_index ( uint8_t data_in )
{
uint8_t counter = 2;
if ( data_in <= 2 )
{
return data_in;
}
while ( data_in > 2 )
{
data_in /= 2;
counter++;
}
return counter;
}
void application_init ( void )
{
log_cfg_t log_cfg;
touchkey3_cfg_t cfg;
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
touchkey3_cfg_setup( &cfg );
TOUCHKEY3_MAP_MIKROBUS( cfg, MIKROBUS_1 );
touchkey3_init( &touchkey3, &cfg );
touchkey3_reset( &touchkey3 );
touchkey3_send_command( &touchkey3, TOUCHKEY3_CMD_RESET );
timeout_cnt = timeout_state;
Delay_ms( 300 );
}
void application_task ( void )
{
touchkey3_send_request( &touchkey3, TOUCHKEY3_REQ_ALL_KEYS, &return_data );
for ( counter = 0; counter < 7; counter++ )
{
if ( ( return_data[ 1 ] >> counter ) & 0x01 )
{
log_printf( &logger, "Touch detected on key %d\r\n", ( uint16_t )(counter+1) );
Delay_ms( 1000 );
}
}
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END