内部参考电压的使用应用笔记

这篇具有很好参考价值的文章主要介绍了内部参考电压的使用应用笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内置参考电压的使用

应用笔记

 

前言

CH32V/F 系列单片机能够在一定的电压范围内进行工作,以 CH32V203C8T6 芯片为例,在不使用 USB 外设时,最低工作电压能够达到 2.4V。较为宽泛的工作电压,允许单片机直接使用电池供电,但由于 CH32V203C8T6 芯片没有独立的 Vref 引脚,使用 ADC 的过程中无法换算出真实的电压。

为解决无法获得真实电压的问题,可以使用内置参考电压换算当前供电电压(即 ADC参考电压)。对于项目要求精确测量时,也可尝试使用该方法对 ADC 进行校准。

 

电源电压的换算

CH32V203C8T6 芯片内部参考电压是典型值为 1.2V,正负偏差为 0.04V 的电压范围,在 ADC 转换精度要求不高的应用场景下,可以直接使用 1.2V 换算芯片供电电压。

内部参考电压的使用应用笔记

图1 CH32V203C8T6 芯片数据手册(V1.4)内部参考电压截图

如果需要更加精确的转换结果,就应在稳定的供电条件下,先对内部参考电压进行测量并将结果保存在 Flash 中,实际的使用过程中,再根据已知的内部参考电压进行换算。

图2 提供了内部参考电压使用的流程。

内部参考电压的使用应用笔记

图2 内部参考电压的使用

实现上述操作,可参考以下代码。

u16 ADC_val = 0;
s32 val_mv = 0;
u16 Vref = 0;               // Flash中存储的内部参考电压实测值
s32 Vref_To_VDD = 0;        // 由Vref的实测值换算出的电源电压值 

if ( *(u32*)(FAST_FLASH_PROGRAM_START_ADDR) == 0xe339e339 ) {       // 判断Flash中是否有内部参考电压的实测值
    printf("Address:0x%08x -> %08x\r\n", FAST_FLASH_PROGRAM_START_ADDR, *(u32*)(FAST_FLASH_PROGRAM_START_ADDR));
    // 获取内部参考电压实测值,此时务必保证电源电压或参考电压(如果有)的准确
    ADC_val = Get_ADC_Average(ADC_Channel_Vrefint, 255);            // 255次取平均
    ADC_val = Get_ConversionVal(ADC_val);
    val_mv = (ADC_val * 3300 / 4096);
    printf("Vref_mv -> %d\r\n", val_mv);
    // 将测得的结果存储在Flash中
    buf[0] = val_mv;
    FLASH_Unlock_Fast();
    FLASH_ProgramPage_Fast(FAST_FLASH_PROGRAM_START_ADDR, buf);
    FLASH_Lock_Fast();
    printf("Address:0x%08x -> %08x\r\n", FAST_FLASH_PROGRAM_START_ADDR, *(u32*)(FAST_FLASH_PROGRAM_START_ADDR));
} else {
    printf("Address:0x%08x -> %08x\r\n", FAST_FLASH_PROGRAM_START_ADDR, *(u32*)(FAST_FLASH_PROGRAM_START_ADDR));
    Vref = *(u32*)(FAST_FLASH_PROGRAM_START_ADDR);
    ADC_val = Get_ADC_Average(ADC_Channel_Vrefint, 255);            // 255次取平均
    ADC_val = Get_ConversionVal(ADC_val);
    Vref_To_VDD = (4096 * Vref / ADC_val);
    printf("Vref_To_VDD_mV -> %d\r\n", Vref_To_VDD);
    }

 

ADC 初始化过程中的校准

ADC 初始化函数中完成了一次校准过程,经过校准环节可大幅减小因内部电容器组的变化而造成的精准度误差。校准过程中 ADC 仅获取了 Vcc 的采样值,与实际电压大小无关,因此,在浮动电压供电的场景中,不会引入额外的误差。

获取校准值函数,通过写 ADC_CTLR2 寄存器的 RSTCAL 位置 1 初始化校准寄存器,等待 RSTCAL 硬件清 0完成初始化。置位 CAL 位,启动校准功能,校准结束后,硬件自动清除 CAL 位,将校准码存储到 ADC_RDATAR 中。使用多次校准结果,计算 ADC 补偿。

int16_t Get_CalibrationValue(ADC_TypeDef *ADCx)
{
    __IO uint8_t  i, j;
    uint16_t      buf[10];
    __IO uint16_t t;
#if defined (CH32V20x_D6)
    __IO uint16_t p;
#endif

    for(i = 0; i < 10; i++){
        ADC_ResetCalibration(ADCx);
        while(ADC_GetResetCalibrationStatus(ADCx));
        ADC_StartCalibration(ADCx);
        while(ADC_GetCalibrationStatus(ADCx));
        buf[i] = ADCx->RDATAR;
//        printf("CalibrationValue[%d]->%d\r\n", i, buf[i]);
    }

    for(i = 0; i < 10; i++){
        for(j = 0; j < 9; j++){
            if(buf[j] > buf[j + 1])
            {
                t = buf[j];
                buf[j] = buf[j + 1];
                buf[j + 1] = t;
            }
        }
    }

#if defined (CH32V20x_D8) || defined (CH32V20x_D8W)
    t = 0;
    for( i = 0; i < 6; i++ ) {
        t += buf[i + 2];
    }

    t = ( t / 6 ) + ( ( t % 6 ) / 3 );

    return ( int16_t )( 2048 - ( int16_t )t );
#else
    t = 0;
    p = 0;
    /* 1024 */
    for(i = 0; i < 6; i++ ){
            if(buf[i+2] > 1536) break;
            t += buf[i+2];
    }

    if(i > 0){
            t = ( t / i ) + ( (( t % i )*2) / i );
    }
    else t = 1024;

    /* 2048 */
    j = 6-i;
    if(j > 0){
        for(; i < 6; i++ ){
                p += buf[i+2];
        }

        p = ( p / j ) + ( (( p % j )*2) / j );
    }
    else p = 2048;

    return ( int16_t )(((( int16_t )( 1024 - ( int16_t )t ) + ( int16_t )( 2048 - ( int16_t )p ))/2) + ((( int16_t )( 1024 - ( int16_t )t ) + ( int16_t )( 2048 - ( int16_t )p ))%2));

#endif
}

可以在校准值转换的 for 循环中添加打印,观察每次校准值结果是否随芯片供电电压(即 ADC 参考电压)的改变而改变。

内部参考电压的使用应用笔记文章来源地址https://www.toymoban.com/news/detail-711086.html

到了这里,关于内部参考电压的使用应用笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 内置对象&定时器参考

    1. 创建 2. 特点 数组用于存储若干数据,自动为每位数据分配下标,从0开始 数组中的元素不限数据类型,长度可以动态调整 动态操作数组元素 :根据元素下标读取或修改数组元素,arr[index] 3. 属性和方法 属性 : length 表示数组长度,可读可写 方法 : push(data) 在数组的末尾添加一个

    2024年02月16日
    浏览(36)
  • 世微大功率 内置2.5A宽电压降压恒流 LED电源驱动车灯IC AP5193

    AP5193是一款PWM工作模式,高效率、外围简单、 内置功率MOS管,适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光,线性调光 脚有效电压范围0.55-2.6V. AP5193 工作频率可以通过RT 外部电阻编程来设定,同时内置抖频电路,可以降低对其他设备

    2024年01月23日
    浏览(45)
  • 如何使用命令删除Win10内置应用

           此操作有可能导致微软商店中下载的应用被自动卸载,需要先记录好电脑中的所有软件信息,并备份电脑的重要数据,已避免产生不必要的损失。        首先,以管理员身份打开 PowerShell ,只需要按住快捷键 Windows + X ,或右键点击左下角的 win 图标,然后从高级用

    2023年04月09日
    浏览(31)
  • RFSoC应用笔记 - RF数据转换器 -08- RFSoC关键配置之RF-DAC内部解析(二)

    RFSoC中最重要的部分是射频直采ADC和DAC的配置,因此了解内部相关原理结构可以帮助我们更好理解相关功能配置参数含义。本文参考官方手册,主要对RF-DAC 奈奎斯特区操作、逆sinc滤波器以及数据通路的相关操作进行介绍。 每个 RF-DAC 都可以通过使用混合模式功能优化其在第二

    2024年02月04日
    浏览(63)
  • RFSoC应用笔记 - RF数据转换器 -05- RFSoC关键配置之RF-ADC内部解析(三)

    RFSoC中最重要的部分是射频直采ADC和DAC的配置,因此了解内部相关原理结构可以帮助我们更好理解相关功能配置参数含义。本文参考官方手册,主要对RFSoC ADC的校准机制进行介绍。 Zynq UltraScale+ RFSoC 中的每个 RF-ADC 都建立在交错架构中的多个子 RF-ADC 之上。 交织过程的性质要求

    2024年02月15日
    浏览(44)
  • UE5内置浏览器插件WebUI简易使用笔记

    之前的项目中为了提高效率,避免使用UE功能不完善的UMG系统,使用了WebUI插件,在UI中内嵌浏览器来展示网页。用Vue框架配合插件制作网页还是比UMG要快很多的,毕竟UE的UI制作插件比较少。 首先在UMG中创建一个新UI,拉一个新的面板,然后在里面加一个WebInterface组件。 之后

    2024年02月04日
    浏览(48)
  • windows10使用administrator登录后出现“无法使用内置管理员账户打开应用”的解决方法

    解决方法: 修改组注册表。   详细步骤: ​​​​​​1. 【Win】+【R】打开“运行页面”,输入:【regedit】进入注册表编辑器。 2. 依次打开: 【HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPolicies System】,在右侧找到【FilterAdministratorToken】,双击后将数值数据改为【1】

    2024年02月12日
    浏览(76)
  • 【Python从入门到人工智能】16个必会的Python内置函数(5)——数据转换与计算(详细语法参考 + 参数说明 + 具体示例)

      你的思绪就像这池水,朋友,稍有外界触动就很难清澈明朗,可如果让它静下来,答案顿时变得清晰了。   🎯 作者主页 : 追光者♂ 🔥          🌸 个人简介 : 计算机专业硕士研究生 💖、 2022年CSDN博客之星人工智能领域TOP4 🌟、 阿里云社区特邀专家博主 🏅、 C

    2023年04月13日
    浏览(52)
  • 第九篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:使用内置组件实现响应式设计

    第一篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:从helloworld开始 第二篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:天气应用 第三篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:健身追踪 第四篇【传奇开心果系列】Ant Design Mobile of React 开发移

    2024年01月21日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包