|
电容式触摸控制面板的特点 • 生产厂家 – 面板设计更灵活、更薄,外观更漂亮 - 按键现状和位置可灵活设计 - 尤其适合于手机、MP3; – 模具成本低,面板上无需开洞,方便设备的维护和保养。 如,厨房家电上的应用,可不惧油烟; – 耐磨损、寿命长(相对于机械按键),故障率低,维护方便 • 用户角度 – 外形美观 – 表面清洁、维护方便 – 手感好,“一触即发” – 符合使用习惯,方便文件浏览——滑动/滚动条设计; • 易受环境影响( 湿度、温度、沾污等),需要电路设计来克服。
CP25xx 系列电容感应检测芯片 • 创新的电容数字转换技术(已申请专利) – One-shot测量模式,扫描时间极短 – 差分输入模式,抑制共模干扰 – 抗干扰能力强 • 高性能 – 分辨率高(0.02pF)、动态范围广(80pF) – 低功耗设计,适用于手持设备 正常模式200uA , 省电模式60uA、睡眠模式0.5uA – 自动漂移补偿、相邻按键抑制技术 • 调试、应用方便 – 外围元件少、连接简单 – 提供专门的开发工具和调试软件 – 调试和配置方法方便
硬件连接 CP25系列芯片都提供软件和硬件两种工作模式,即软件工作模式下,可通过串口IIC/SPI访问芯片内部状态和相关配置寄存器,而硬件模式下,无法使用串口。 不论是采用IIC还是SPI传输,CP25系列芯片都作为SLAVE器件,而主控制芯片作为MASTER器件。 IIC连接方式 IIC串口是一种通用的2线传输方式,一个为时钟线,另一个为数据线。IIC总线的特点是时钟和数据线上的高电平都是依靠芯片外部的上拉电阻拉高的。通常,芯片自带的IIC接口都为开漏输出方式,即输出高阻或者低电平,如图所示。

主控制芯片与CP25系列芯片的联接见下图。请注意ADDR0引脚与ADDR1引脚必须接固定电平,不允许悬空。建议将这两个引脚拉低

CP2512和CP2508工作于3.3V电压。当与工作于5V电压的主控制芯片连接时,芯片外部上拉电平必须为5V。
SPI连接方式 SPI串口是一种通用的串行总线,CP25系列芯片支持3线和4线传输方式。使用三线传输方式时,为时钟线、使能线和数据线。使用四线传输方式时,为时钟线、使能信号线、数据输出线和数据输入线。 主控制芯片和CP25系列芯片的连接方式如下图所示。

CP2512/CP2508 SPI 4线典型连接图

CP2512/CP2508 SPI 3线典型连接
注意:为了减小芯片功耗,不传输时,请勿将CP25系列芯片的输入引脚SDI悬空,而必须把它保持在一个固定电平。
串口通讯 CP25系列芯片提供I2C和SPI两种接口。在部分主机芯片中有已集成的串口模块,此时的通讯较为简单;如主机芯片没有集成串口模块,可以使用GPIO引脚仿真串口进行通讯。串口通讯是芯片应用的基础,只有在串口通讯通畅无误的前提下,才能开发出丰富多彩的应用。串口的详细时序请参考CP25系列芯片的详细资料,在此不作赘述 I2C接口的优点是使用两个引脚就能完成通讯,缺点I2C接口的速率较慢(必须小于1M Hz,建议小于300k Hz),如使用GPIO仿真I2C串口,程序较SPI接口复杂。 SPI接口的优点是速度快,接口程序较I2C接口简单,缺点是使用的引脚较多(支持4线制和3线制两种接口)。 在主机芯片的接口引脚不受限制的前提下,推荐使用SPI接口。 以下两个附件是SPI和I2C接口的仿真程序:
spi[1].rar i2c[1].rar
Spi.c文件实现4线制SPI接口的GPIO仿真功能,其中有三个函数:spi_init、write_spi_reg、read_spi_reg。spi_init的作用是初始化SPI各个引脚的状态,在初始化时调用,该函数没有输入值和返回值。write_spi_reg的作用是将配置值写入CP25系列芯片的寄存器,该函数的输入分别是寄存器地址和寄存器的配置值。read_spi_reg的作用是读取连续若干个寄存器的值,并保存到指定数据缓冲区中。函数输入分别是需读取寄存器的起始地址,需读取寄存器的数量和数据缓冲区的地址。通过修改变量spi_freq的值,可以修改SPI接口的速率,由于实际中使用的主机芯片千差万别,无法统一给出该值。建议该值配置为 主机芯片指令执行频率/ 1M Hz,也就是指令频率为20M Hz的主机芯片,该值建议配置为20。 指令SPICLK_DIR = 1表示将CLK引脚配置为输出引脚,SPICLK_DIR = 0则表示将CLK引脚配置为输入引脚。SPICLK_SET = 1表示将CLK引脚配置为高,SPICLK_CLR = 1表示将CLK引脚配置为低。SPIMISO_DAT获取MISO引脚上的值,若该引脚高该值为1,若该引脚低该值为0。CLK表示时钟引脚、CSN表示使能引脚、MISO表示主机输入从机输出引脚(master in slave out引脚)、MOSI表示主机输出从机输入引脚(master out slave in引脚)。 如使用3线制SPI接口,需要修改部分程序。在初始化程序中,只需要初始化三个引脚的状态。在写寄存器的函数中,不需要修改。在读取寄存器的函数中,在写完需要读取寄存器的地址后,需要将数据引脚由输出引脚改为输入引脚,此后再读取该引脚的电平。 I2C.C文件实现了I2C接口的GPIO仿真功能。TOUCHPAD_I2C_Start的作用是初始化各个引脚的状态,在初始化时调用,该函数没有输入值和返回值。TOUCHPAD_I2C_ReadReg的作用是读取一个寄存器的值,函数输入为寄存器地址,返回值是该寄存器的数值。TOUCHPAD_I2C_WriteReg的作用是配置寄存器,函数输入是寄存器的地址和寄存器的配置值,该函数没有返回值。DelayXus函数的作用是插入延时,用户可以通过修改该函数而修改I2C接口的时钟频率 TOUCHPAD_SetSDA_IN功能为设置数据引脚为输入引脚,TOUCHPAD_SetSDA_OUT功能为设置数据引脚为输出引脚,TOUCHPAD_SetSCL(bLow)的功能是设置时钟引脚的电平(若要将引脚设置为高,输入1;若要将引脚设置为低,输入0),TOUCHPAD_SetSDA(bLow)的功能是设置数据引脚的电平(若要将引脚设置为高,输入1;若要将引脚设置为低,输入0),TOUCHPAD_GetSCL的功能是获取数据引脚的高低(若引脚为高,该值为1;若引脚为低,该值为0)。
寄存器配置和应用 在通讯接口调试正常之后,就需要根据实际应用编写一个初始化程序配置控制寄存器,并读取寄存器状态从而获取各个按键的状态以便进一步的处理。
查询模式与中断模式 用户首先需要确认使用定时查询模式还是中断模式去读取寄存器的状态。 采取定时查询模式,在初始化过程中并不需要特别配置寄存器,使用默认值即可。定时查询函数只需要读取所需的寄存器即可。 采取中断模式就需要在初始化过程中配置中断寄存器。需要确认当中断发生时,中断引脚以高电平还是低电平给出指示。若以高电平指示中断,INTCR寄存器(地址0x05)的第12位需要配置为1;若以低电平指示中断,INTCR寄存器的第12位需要配置为0。下一步需要确认实际使用了哪几个按键,并将INTCR寄存器中对应比特配置为1。这样在相应通道的按键状态发生变化时就会触发中断,既当按键被触发后会触发一次中断,当按键解除后还会触发一次中断。最后需要将INTE寄存器(地址0x06)中使用通道所对应的比特置1,从而使该通道的状态变化能够引发中断。 在中断处理流程中,必须先读取ISR寄存器(地址0x33)以便将该寄存器清0。因为若不读取一次该寄存器,则该寄存器不为0,此次中断处理完成后它还会继续触发中断。
初始化配置 主机芯片上电之后,运行初始化程序对CP25系列芯片进行初始化操作。 首先配置PDN寄存器(地址为0x01)为0x8000,复位CP25系列芯片,此后加入毫秒级的延时。 其次若是采用中断模式需要配置中断相关寄存器。 若实际使用中,没有使用滑动功能,也没有组合按键(同时触发多个按键而实现某项功能)时,将ASS1寄存器(地址为0x03)中实际按键所对应的比特配置为1(如使用1~6通道,将ASS1寄存器配置为0x003f)。反之则使用默认配置。 在灵敏度控制电阻选定之后,用户简单测试按键是否能被正常触发,若能正常触发则不修改灵敏度控制寄存器。这样做带来的问题是,灵敏度很可能会配置得过高,从而非常容易引起误触发。将电路板上的串口线和电源线都连接到启攀公司给出的转接板上,并在PC上运行DEMO软件,即可通过软件读取到手指触摸按键后,电容读数的变化值。将此差值乘以0.5,就能得到合适的灵敏度配置值,将该值配置到SETTHi寄存器(地址0x07到0x12);将差值乘以0.35,并将该数值配置到CLRTHi寄存器(地址0x13到0x1e)。上文描述了最基本最常用的寄存器配置方法,更高级应用会在下一章节详细描述。
主处理流程 主处理流程的作用时实时读取按键的状态,并作进一步处理。如使用中断处理模式,需要额外读取ISR寄存器(地址0x33)。读取ASSST寄存器(地址0x31),可以获取各个按键的触发状态。随后用户可以根据其实际应用编写程序。
高级应用 电容式按键的一大优点就是能够使客户设计出更为眩目的应用和更大的灵活度。现有CP25系列芯片最多支持12个独立按键,而巧妙的矩阵式按键设计使单芯片所能支持的最大按键数量上升到36个(6×6)。通过多个按键的重复排列和快速定时扫描,可以实现各种滑动应用(包括圆形滑动和水平滑动)。
硬件设计 矩阵式感应判断功能是CP25xx单点感应的特殊应用,例如CP2512提供了12个感应通路最多可以完成36个(6X6)感应按键判断,如图5所示。

12个感应通道完成6X6矩阵应用
在矩阵应用中,把感应通道分成X、Y两组。每一个按键点通过X/Y坐标确定位置(X/Y坐标也就是X组的感应通道和Y组的感应通道)。以CP2512为例,按图5设计按键,若感应物体接触到A区域时,通道2和通道7被触发,即可确定感应物体位置。
软件设计 在使用矩阵式应用时,受到面板面积的限制,按键距离往往较小从而比较容易引起误判。这时就需要启动邻键抑制功能防止误触发。根据矩阵式按键的排列方式,按键被分成了两组,一组指示按键的横坐标,一组指示按键的纵坐标,将此两组分别设置邻键抑制功能即可,设置方法为将通道对应寄存器比特位置一。如前文所示,1~6键指示横坐标,7~12键指示纵坐标,那么需要将ASS1寄存器(地址为0x03)设置为0x03f,ASS2寄存器(地址为0x04)设置为0x0FC。 在扫描过程中,根据按键的横坐标和纵坐标,即可计算出按键的具体位置。
滑动应用 滑动应用分为两种,一种叫相对滑动,指只需要判断出滑动的方向而不需要判断各个时刻手指的具体位置;另一种为绝对滑动,指除了要判断出滑动的方向之外还需要判断出各个时刻手指的具体位置。相对滑动最少只需要三个按键就能实现滑动功能,而绝对滑动往往需要六个甚至更多的按键才能实现滑动功能。 不管是圆形滑动还是水平滑动,其本质都是一样的,既都是滑动条,区别只在于滑动条的形状不一样。两者的硬件布局不一样,但是可以使用相同的软件。
硬件设计 下图中是典型的直线滑动和圆形滑动应用实例。采用类似123123123这种组合,可以实现滑动方向判断。当感应物体移动时,会依次触发三个感应通路。比如向右(顺时针)滑动时,CP25XX能判断出感应通路1、通路2和通路3被先后触发;向左(逆时针)滑动时,CP25xx能判断出感应通路3、通路2和通路1被先后出发。 
采用三个感应通道实现直线滑动和圆形滑动示例
设计滑动按键时,要把相邻按键尽量靠近,间隙可以小于1mm。
软件设计 在滑动应用中,需要设置较高的灵敏度,既SETTHi寄存器和CLRTHi寄存器比相同情况下独立按键的值要小。必须以较快的速度定时查询按键的状态。若扫描的速度不够快,手指滑动较快的情况下,部分按键可能会被漏检从而不能正确的判断出滑动方向。根据实验室经验,按键扫描时间间隔必须小于100ms,推荐时间间隔为20ms。若使用中断的方法来扫描,由于只有在按键的状态发生变化时才会触发中断,这就无法判断两个按键被触发的时间间隔,从而无法区分连续滑动还是跳跃式的按键。 在无其它特殊要求的前提下,建议用户使用三键重复排列实现滑动功能。 附件为三个按键重复排列实现滑动功能的示例程序:
scroller.rar
由scroller函数实现滑动判断功能,三个输入key_a、key_b、key_c分别是三个按键的状态,若相应按键被触发则该值为1,反之为0。Scroller函数返回0表示当前没有发生滑动,若返回1表示当前发生了正向滑动,若返回-1表示当前发生了逆向滑动。 滑动判断的基本原理是当手指位置发生了变化而且达到一定幅度后,判断发生了该方向的滑动。按键1、2、3被触发时位置分别被记为0、2、4。当1、2同时被触发时,手指一定位于两个按键之间,位置就被记录为1。这样使用三个按键产生了6个位置,在使用最少按键数的前提下,将位置信息最大化。当手指位置变化达到2时,才能确认发生了滑动事件。基于以上原理,用户可以根据实际应用改写scroller函数,实现其它的滑动功能。
--------------------完--------------------
|