4回答

0收藏

GD32F190 小红板 - 传感触摸测试

GD32 GD32 4058 人阅读 | 4 人回复 | 2016-05-14

本帖最后由 糖悦之果飞 于 2016-5-16 15:26 编辑

废话不多说,先焊接两个电容上去,采样电容我焊接的15pF(测试后觉得5pF效果应该才会比较好),通道电容焊接10nF,采样脚找根导线连接一枚硬币,硬件准备工作这样就可以了。

下面上代码 -_-

初始化代码如下:
/*****************************************************************************//*!
* @brief           touch modle init .
*               
* @param   none
*
* @return  none
*
* @ Pass/ Fail criteria: none
*****************************************************************************/

void TouchInit(void)
{
        /* Configure the GPIO ports */
    GPIO_InitPara  GPIO_InitStructure;
        
        RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_TSI, ENABLE);
        
        /* Connect PXx to USARTx_Tx */
    GPIO_PinAFConfig(GPIOB, GPIO_PINSOURCE0, GPIO_AF_3);
    /* Connect PXx to USARTx_Rx */
    GPIO_PinAFConfig(GPIOB, GPIO_PINSOURCE1, GPIO_AF_3);

    /* Configure USART Rx/Tx as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_0 | GPIO_PIN_1;
    GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_AF;
    GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
    GPIO_InitStructure.GPIO_OType   = GPIO_OTYPE_PP;
    GPIO_InitStructure.GPIO_PuPd    = GPIO_PUPD_NOPULL;
    GPIO_Init(GPIOB , &GPIO_InitStructure);
        
        TSI->CTLR = TSI_CTCDIV_1 |
                                TSI_CTDT_2CTCLK |
                                TSI_CDT_2CTCLK |
                                TSI_SOFTWARE_TRIGGLER |
                                TSI_RISING_EDGE_TRIGGLER |
                                TSI_MCN_4095_CYCLE;
        //disable int
        TSI->IER = 0;
        //clear int flag
        TSI->CEFR = 0x03;
        //
        TSI->PHMR = 0;
        //switch control
        TSI->ASWR = 0;
        //enable group
        TSI->GCTLR = 0x04;
        //Sample Pin set
        TSI->SPR = TSI_GROUP3_PIN2;
        //Channel Pin set
        TSI->CPR = TSI_GROUP3_PIN3;
        
        TSI_Enable( ENABLE);
}

然后再主循环中检查是否检测结束并处理,,转换频率不要太高,不然处理起来会十分麻烦,我用的100ms开启一次。

检测代码如下:
/*****************************************************************************//*!
* @brief           touch modle check .
*               
* @param   none
*
* @return  none
*
* @ Pass/ Fail criteria: none
*****************************************************************************/

void TouchCheck(void)
{
        uint32_t ChCycle;
        
        if(bPulse_100ms)
        {
                //clear int flag
                TSI->CEFR = 0x03;
                TSI_StartAcquisition( ENABLE );
        }
        
        if(TSI->STR)
        {
                ChCycle = TSI->GXCYCNR[2];
                TSI->CEFR = 0x03;
               
                if(ChCycle < 0xC0)
                {
               
                }               
        }

}

这只是个简单的测试代码,找张纸盖在硬币上,用手去按,ChCycle的数据会变小。
具体变化量和电容容量和温度有关,实际应用还要处理一下,不能定值比较。

QQ截图20160514133145.png (43 KB, 下载次数: 44)

QQ截图20160514133145.png
分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

jwdxu2009

发表于 2016-5-15 22:48:27 | 只看该作者

写的好,下载下来,参考和学习
板凳

wolfgang2015

发表于 2016-5-16 09:32:32 | 只看该作者

焊上引脚,外扩的洞洞板上来做实验吧,这样好浪费费主板上的开孔哦。
地板

apleilx

发表于 2016-5-16 12:07:33 | 只看该作者

wolfgang2015 发表于 2016-5-16 09:32
焊上引脚,外扩的洞洞板上来做实验吧,这样好浪费费主板上的开孔哦。

没关系,测试而已,不用了烫下来就可以...
5#

糖悦之果飞

发表于 2016-5-31 15:16:49 | 只看该作者

文章不错,将内容去经验频道一并发一下,可以有双重奖励哟http://jingyan.eeboard.com/
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条