3522|1

335

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【CH579M-R1】3. ADC 内部测温,外部通道及触摸按键 测试 [复制链接]

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

节前加月底,巨忙中!

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

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

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

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

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

 

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

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

 

实验程序如下:

int main()
{
    UINT8 i;
    signed short  RoughCalib_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<20; i++)
    {
        abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value;     
    }
    for(i=0; i<20; i++)
    {
        PRINT("%u 'c ", ADC_GetCurrentTS( abcBuff[i] ));
    }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<20; i++)
    {
        abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value;      
        ADC_DataCalib_Fine( &abcBuff[i], ADC_PGA_0 );
    }
    for(i=0; i<20; i++)
    {
        PRINT("%f V ", ((float)(abcBuff[i]))/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<20; i++)
    {
        abcBuff[i] = TouchKey_ExcutSingleConver(0x20); 
    }
    for(i=0; i<20; i++)
    {
        PRINT("%d ", abcBuff[i]);
    }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 < 20);
    NVIC_DisableIRQ(ADC_IRQn);
    for(i=0; i<20; i++)
    {
        PRINT("%f V ", ((float)(abcBuff[i]))/4096*3.3);
    }PRINT("\n");
    
    while(1);    
}


void ADC_IRQHandler(void)			
{
    if(ADC_GetITStatus())
    {
        abcBuff[adclen] = ADC_ReadConverValue();
        ADC_StartUp();
        adclen ++;
    }
}

实验数据串口输出如下, 其中触摸按键为非触摸状态和触摸状态的数值,感觉变化不大啊。沁恒的手册也没有过多的关于触摸的设置,PCB布局等的技术描述。这个可能只有项目需求时再与官方沟通获得更多的技术资料了。如果有触摸调试好用的同学麻烦指点下,目前的数据是否合理。

 

同时我们看到ADC在使用PGA增益校准后,实际效果并没有直接采样取得的数值准确。沁恒的参考程序,要求使用粗细调时,浮空ADC1, 目前收到的板子ADC1及PA5连接至USB部分,可能对采样有影响。 需要与官方沟通了解下。 这个校准怎么用,知道的同学指点下哦。

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

 

继续调蓝牙中, 谢谢大家!

Thanks for watching! 中秋快乐,国庆快乐!

 

 

最新回复

沁恒CH579M-R1开发板测评 汇总贴:https://bbs.eeworld.com.cn/thread-1140005-1-1.html   详情 回复 发表于 2020-9-27 10:42
点赞 关注
 
 

回复
举报

1万

帖子

2853

TA的资源

管理员

沙发
 

沁恒CH579M-R1开发板测评

汇总贴:https://bbs.eeworld.com.cn/thread-1140005-1-1.html

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表