yanxinboy 发表于 2020-9-25 20:20

【CH579M-R1】3. ADC 内部测温,外部通道及触摸按键 测试

本帖最后由 yanxinboy 于 2020-9-25 20:20 编辑

<p>节前加月底,巨忙中!</p>

<p><img height="50" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/funk1.gif" width="53" /></p>

<p>CH579内部集成了一个12位的逐次逼近型模拟数字转换器ADC,最大16个通道,支持14个外部模拟信号源和2个内部信号源 - 内部温度检测通道和内部电池电压检测通道。</p>

<p>输入支持单端和差分输入,可选PGA增益(建议按手册的实际可用测量范围选择合适的PGA增益,提高准确度)。</p>

<p>ADC 时钟频率选择为CK32M的6,8,10,12分频,频率范围在2.67MHz~5.33MHz之间,采样速率为始终频率的1/16, 理解为16个始终周期完成一次采样。这个分辨率和速度,完全能满足一般的模拟量的采集应用。</p>

<p>下面是ADC的结构框图及寄存器列表供快速参考:</p>

<p>本此实验对ADC的单通道,内部温度检测,触摸按键检测进行了测试:</p>

<p>&nbsp;</p>

<p>硬件连接: 外部通道分别测试了ADC 通道9 - PA0, ADC 通道3 - PA13, 其中PA0接3.3V, PA13同样连接3.3V.</p>

<p>ADC 参考了库函数的数据校准功能,手册里面对PGA 增益的选择描述。 触摸按键使用了430BOOST-SENSE1. 连接至ADC通道2 - PA12.&nbsp;</p>

<p>&nbsp;</p>

<p>实验程序如下:</p>

<pre>
<code>int main()
{
    UINT8 i;
    signed shortRoughCalib_Value=0;               
                    RB_CFG_RESET_EN;
   
    DebugInit();
    PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );


    PRINT( "\n1.Temperature sampling...\n");
    ADC_InterTSSampInit();
    RoughCalib_Value = ADC_DataCalib_Rough();
    for(i=0; i&lt;20; i++)
    {
      abcBuff = ADC_ExcutSingleConver() + RoughCalib_Value;   
    }
    for(i=0; i&lt;20; i++)
    {
      PRINT("%u 'c ", ADC_GetCurrentTS( abcBuff ));
    }PRINT("\n");
   

    PRINT( "\n2.Single channel sampling...\n");
    GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_Floating);
    ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 );
   

    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating);
    RoughCalib_Value = ADC_DataCalib_Rough();   
    PRINT("=%d \n", RoughCalib_Value);   
   
    ADC_ChannelCfg( 9 );      
    for(i=0; i&lt;20; i++)
    {
      abcBuff = ADC_ExcutSingleConver() + RoughCalib_Value;      
      ADC_DataCalib_Fine( &amp;abcBuff, ADC_PGA_0 );
    }
    for(i=0; i&lt;20; i++)
    {
      PRINT("%f V ", ((float)(abcBuff))/4096*3.3);
    }PRINT("\n");
   


    PRINT( "\n4.TouchKey sampling...\n");   
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_Floating);
    TouchKey_ChSampInit();
    ADC_ChannelCfg( 2 );   

    for(i=0; i&lt;20; i++)
    {
      abcBuff = TouchKey_ExcutSingleConver(0x20);
    }
    for(i=0; i&lt;20; i++)
    {
      PRINT("%d ", abcBuff);
    }PRINT("\n");
      
   

    PRINT( "\n4.Single channel sampling in interrupt mode...\n");   
    GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeIN_Floating);
    ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 );
    ADC_ChannelCfg( 3 );
    NVIC_EnableIRQ(ADC_IRQn);
    adclen = 0;
   
    ADC_StartUp();
    while(adclen &lt; 20);
    NVIC_DisableIRQ(ADC_IRQn);
    for(i=0; i&lt;20; i++)
    {
      PRINT("%f V ", ((float)(abcBuff))/4096*3.3);
    }PRINT("\n");
   
    while(1);   
}


void ADC_IRQHandler(void)                       
{
    if(ADC_GetITStatus())
    {
      abcBuff = ADC_ReadConverValue();
      ADC_StartUp();
      adclen ++;
    }
}
</code></pre>

<p>实验数据串口输出如下, 其中触摸按键为非触摸状态和触摸状态的数值,感觉变化不大啊。沁恒的手册也没有过多的关于触摸的设置,PCB布局等的技术描述。这个可能只有项目需求时再与官方沟通获得更多的技术资料了。如果有触摸调试好用的同学麻烦指点下,目前的数据是否合理。<img height="47" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/puzzle.gif" width="53" /></p>

<p>&nbsp;</p>

<p>同时我们看到ADC在使用PGA增益校准后,实际效果并没有直接采样取得的数值准确。沁恒的参考程序,要求使用粗细调时,浮空ADC1, 目前收到的板子ADC1及PA5连接至USB部分,可能对采样有影响。 需要与官方沟通了解下。 这个校准怎么用,知道的同学指点下哦。<img height="47" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="47" /></p>

<p></p>

<p>总至,ADC内部温度采样可用, 外部采样速度和精度应该满足一般的使用。触摸按键上还需要与官方沟通获取其他一手的信息。 示例程序里面有差分采样, 暂时不方便未测试。</p>

<p>&nbsp;</p>

<p></p>

<p>继续调蓝牙中, 谢谢大家!</p>

<p>Thanks for watching! 中秋快乐,国庆快乐!<img height="47" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan58.gif" width="54" /></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

okhxyyo 发表于 2020-9-27 10:42

<p><a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html" target="_blank">沁恒CH579M-R1开发板测评</a></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html">https://bbs.eeworld.com.cn/thread-1140005-1-1.html</a></p>
页: [1]
查看完整版本: 【CH579M-R1】3. ADC 内部测温,外部通道及触摸按键 测试