CH32内部参考电压的自学笔记

发布者:Qinghua2022最新更新时间:2024-12-16 来源: elecfans关键字:内部参考电压  单片机 手机看文章 扫描二维码
随时随地手机看文章

CH32V/F单片机能够在一定的电压范围内进行工作,以CH32V203C8T6 芯片为例,在不使用 USB 外设时,最低工作电压能够达到 2.4V。较为宽泛的工作电压,允许单片机直接使用电池供电,但由于 CH32V203C8T6 芯片没有独立的 Vref 引脚,使用 ADC 的过程中无法换算出真实的电压。为解决无法获得真实电压的问题,可以使用内置参考电压换算当前供电电压(即 ADC参考电压)。对于项目要求精确测量时,也可尝试使用该方法对 ADC 进行校准。


电源电压的换算

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

d97045dc-9a13-11ee-9788-92fbcf53809c.png?imageView2/2/w/1000

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

d9830ac8-9a13-11ee-9788-92fbcf53809c.png?imageView2/2/w/1000


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


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 -> %08xrn', 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 -> %drn', 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 -> %08xrn', FAST_FLASH_PROGRAM_START_ADDR, *(u32*)(FAST_FLASH_PROGRAM_START_ADDR));} else { printf('Address:0x%08x -> %08xrn', 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 -> %drn', 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]->%drn', 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 参考电压)的改变而改变。

d996f196-9a13-11ee-9788-92fbcf53809c.png?imageView2/2/w/1000


关键字:内部参考电压  单片机 引用地址:CH32内部参考电压的自学笔记

上一篇:ch32优势 ch32v307可以做什么?
下一篇:ch32单片机的参数 ch32V307工作温度

推荐阅读最新更新时间:2026-03-20 10:47

STM8L用内部参考电压做AD转换基准电压
STM8L系列芯片一般采用电池供电,当电池使用一段时间后,电池电压下降,如果使用电池电压作为AD转换参考电压,会导致AD采样失真。STM8L内部有一个参考电压,电压为1.225V,使用内部参考电压做基准,可以解决这个问题。 以stm8l052为例, AD初始化: 采样内部参考电压,以单片机供电电压为基准 采样NTC热敏电阻电压,以单片机供电电压为基准,在AD采样4通道。 #define VREF 1.225L 根据内部参考电压计算NTC电阻电压,因为内部参考电压固定,而且和检测NTC电阻电压AD都使用单片机供电电压同一个参考源,所以内部参考电压AD值和NTC电阻电压AD值成比例关系。 NtcAdValue
[单片机]
STM8L用<font color='red'>内部</font><font color='red'>参考</font><font color='red'>电压</font>做AD转换基准<font color='red'>电压</font>
STM8L051之通过ADC1与DMA读取内部参考电压
stm8L051芯片内部的参考电压与电源电压有一定的关系 这在芯片供电电压变化的情况下,测量外部ADC电压输入提供一个确定的参考电压。这里提前厘清下:该内部参考电压VREFINT 并非ADC 的参考电压,ADC 的参考电压依然是VDD。即使VDD 有所波动,这个VREFINT 电压恒定不变,对于ADC 电路而言,它只是个测试点。 对于某固定的ADC 参考电压情况下,所有被测电压点的AD转换值与该点电压值保持同一比例关系,换句话说,对于ADC参考电压固定情况下,各点的电压与ADC值与成线性关系。下面图形是芯片分别在3个不同参考电压的示意图,这里参考电压接VDD。下面三根斜线分别是VDD 为2.8V、3.2V、3.6V 时的A
[单片机]
STM8L051之通过ADC1与DMA读取<font color='red'>内部</font><font color='red'>参考</font><font color='red'>电压</font>
基于过程单片机CH32、STM32实现TM1640点亮16位共阴极数码管
实例1 EgTM1640——【基于CH32V103】 本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字; 1 硬件设计 GPIO初始化配置 SCL(PB6) SDA(PB7);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C; 2 软件设计 首先是TM1640初始化TM1640_GPIO_INIT,设置为开漏极输出,如下: /********************************************************************* * @fn TM1640_GPIO_INIT * * @brief Initializes GPIOB.6 GP
[单片机]
基于过程<font color='red'>单片机</font><font color='red'>CH32</font>、STM32实现TM1640点亮16位共阴极数码管
ch32和esp32的区别
ESP32是一款由乐鑫科技推出的微控制器,拥有多个通信接口、基于双核处理器的32位CPU、Wi-Fi和蓝牙等功能,广泛应用于物联网、智能家居、工业控制等领域。而CH32是一个相对较为陌生的概念,其实指的是CH32F103C8T6,这是一款由中国的福州欣龙芯片有限公司生产的32位单片机。 虽然两者都是含有32位处理器的芯片,但是它们的特性还是存在较大的差异。 1. 架构 ESP32采用了双核心处理器,其中一个主处理器核心采用了高性能的Xtensa® 32位LX6 MCU架构,可以高速运行,同时还有一个低功耗的次处理器,用于安全和Wi-Fi/蓝牙协议栈的处理。其内部的存储器(存储信息的容量)也更大,主存储器包括 520 KB SRAM
[单片机]
ch32和stm32参数对比
随着物联网技术、智能家居、工业自动化等领域的快速发展,MCU芯片市场也逐渐走向多样化和智能化。其中,32位微控制器不仅在性能、功能、可靠性方面更加优越,而且在应用领域的广泛性和市场占有率上也有着巨大优势。而32位微控制器中的两款经典代表——CH32和STM32,又该如何进行参数对比呢? 在基本参数方面比较,CH32和STM32均采用了ARM Cortex-M内核,都是32位微控制器。在运行频率方面,CH32单片机的部分芯片性能可以达到200MHz,STM32芯片的运行频率更加广泛,从72MHz到216MHz都有涵盖。从存储容量方面来看,两者皆含有各自大小和类型不尽相同的存储空间。而在性能指标方面,STM32的性能指标相较于CH32
[单片机]
ch32和gd32哪个好用?
Ch32和Gd32是两个比较常见的芯片系列,都是基于ARM Cortex-M3内核设计的,因此具有类似的特点和性能。在选择使用哪个芯片时,需要根据具体的项目需求和开发难度加以考虑。 首先,我们来简单介绍一下这两个芯片系列的特点。Ch32是中国厂商江苏长鹰半导体公司生产的一款芯片,可以实现信号的高速处理和计算机视觉应用,广泛应用于机器人、智能家居、智能驾驶等领域。Gd32则是由中国厂商北京兆易创新科技有限公司生产的芯片,主要应用于工控、嵌入式、智能家居、智能穿戴等领域。 在开发难度方面,刚开始学习嵌入式开发的初学者可能会觉得Gd32更加好用,因为它有完善的开发工具链和丰富的文档资料,对于初学者来说更加友好。Ch32的开发工具链和文档
[单片机]
瑞萨电子MCU/MPU赋能AIoT设计
人工智能(Artificial Intelligence)是一门使机器能够感知、理解、推理与学习的技术,其核心实现方式依赖于算法与数据,即通过利用大量数据训练模型,使其能够对图像、语音、文字等输入信息做出准确的判断与预测。AI的推理过程可在云端服务器、边缘节点或终端设备上完成,不同的部署位置直接影响系统的时延、隐私性、带宽和功耗等关键特性。 1.什么是AIoT A(Artificial Intelligence of Things)是AI与(IoT)的结合,通过将应用于IoT设备和系统,AIoT实现了更智能、更高效的自动化解决方案。AIoT中主要的AI技术包括端侧AI与边缘AI。 端侧AI直接在设备内部进行
[嵌入式]
瑞萨电子<font color='red'>MCU</font>/MPU赋能AIoT设计
车规MCU,开启“巨变”
车规MCU的“升级战”已经全面打响。 一方面,在汽车智能化迈向深水区的大背景之下,小鹏、零跑、广汽等越来越多主机厂采用中央处理单元HPC+2-4个ZCU组成的新一代EE架构,将原有的上百个ECU功能整合至数个区域控制器中,需要车规MCU具备更高处理能力、更高安全性能、更高算力、更大的存储能力等性能。 另一方面,AI大模型正在成为改写行业规则的关键变量,进一步加速了车规MCU进行算力、架构、安全等全方位革新与升级。比如AI大模型在智能座舱、辅助驾驶等场景中,需要MCU具备更强的边缘计算能力,能够快速处理本地实时数据并与中央计算单元高效协同。 在上述背景之下,传统车规MCU在算力、架构兼容性、安全等级等方面的短板日益凸显,
[汽车电子]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved