|
本帖最后由 603599910 于 2024-6-1 13:06 编辑
之前和朋友聊过这个话题,通用入门MCU的ADC准度和一致性STC做的很漂亮,也曾经测试过STM32F103C8T6和CH32V203C8T6系列MCU的ADC,记忆中STC系列的ADC数据是漂移最小的.
正好手上拿到STC8H2K08U新MCU,拿样目的是验证USB-CDC在项目的可行性,这款MCU可以一元内拿到还是内置USB硬件模块以及12位ADC单元.USB-CDC在特殊项目使用还是可行的,传输速度很快不要求波特率,在STC项目包含LIB库文件编程门槛低,单USB-CDC固件占用4K左右对于8K的MCU有点捉襟见肘,曾经在验证时把4个定时器和ADC配置完成后输出hex文件超了8K烧录失效.然后USB-CDC有个特性就是CDC输出一定要接收端处理才行不然程序就一直在等待状态.我只在Windows10和Windows11系统平台使用连续通讯24小时不会有异常,Linux系统暂时没有验证.
说回主题,这次分析的是STC8H2K08U的ADC数据一致性和准度以及通道分离度等验证,电路设计MCU供电直接USB取电DC-DC降压3.3V,经过隔离用TL431并联降压成2.5V给ADC供电,ADSC单次采样通过USB-CDC按秒上传到PC主机.ADC采样输入ADC1&ADC3&ADC5&ADC7(对应P11&P13&P15&P17),然后P10&P12&P14&P16硬件输出100Khz的循环变占空比的PWM信号,这样PWM完全和ADC通道掺杂在一起,看PWM信号对ADC的通道干扰和GPIO同主通道不同功能实现的可行性.
通过大于15小时按秒单次采样的数据结果挺让人惊喜,在输入交流阻抗短路直流阻抗小于10K的状态下ADC4个通道的误差按照标准差计算低于0.04%,计算公式: 标准差/均值,不知道这个算法公式是否有错,如果再进行多次采样按均值输出那做产品完全没有问题.
原理图,做了一个项目把ADC采样电路摘抄出来的.
调节ADC测试电压大致在2006mv时4个通道在相邻通道输出100Khz PWM的状态下最高值2011mv(通道3有1次)最低值2002(通道3有2次),其他通道没有达到这个上下限. 计算最大偏移大致为+0.249%/-0.199%.其他通道则更优秀.
GPIO P10硬件100Khz实时变化占空比的PWM信号以干扰GPIO P11的ADC数据.
GPIO P11的ADC1数据均值2006.5mv,标准差0.637mv,换算误差-/+0.0317%.
GPIO P12硬件100Khz实时变化占空比的PWM信号以干扰GPIO P13的ADC数据.
GPIO P13的ADC3数据均值2006.4mv,标准差0.622mv,换算误差-/+0.031%.
GPIO P14硬件100Khz实时变化占空比的PWM信号以干扰GPIO P15的ADC数据.
GPIO P15的ADC5数据均值2006.3mv,标准差0.753mv,换算误差-/+0.0353%,略差.
GPIO P17的ADC数据均值2006.4mv,标准差0.627mv,换算误差-/+0.0312%.
最后附上源数据文件和Keil的程序源码,我是随意调试写的代码还没有格式化.
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|