一、STM32 12位AD DA线性度测试
配置STM32 DA为12bit输出,AD为12bit检测,测试AD和DA的线性度与误差。DAC从0到2.49V步进1mV。Error=DAC 为标准值减去 ADC的测量值。
板子的Vref=2.5V,ADC和DAC的极限为2.5V,测试时直接用杜邦线连接对应的IO端口。12bitADC和DAC的档位只有4095.电源模块的档位600/0.1=6000档。
按12bit计算:DAC的分辨率=2.5/(212-1)= 0.61050061050061050061050061050061mV»0.611mV.
Error=0.0005mV,折算到高压电源的6000档位,误差引起的档位调节量=0.0005*6000=3档,即SM32板载DA达不到要求,因此需要外挂DA。
图1和图2是STM32F407AD和DA线性度测试结果[matlab]。
图1 线性度
图2 误差
二、程控高压电源参数计算
1、需求:DA 0-3.3V 控制0-600V 步进0.1V,即步进100mV。
2、参数计算:
(1)DA控制误差
电压档位:600/0.1=6000档。
DA位数:213=8192,至少需要13位精度。例如MAX535.
设基准电压3.3V
DA分辨率:3.3/8191 V= 0.4028812110853376mV=0.403mV,
数据修约误差=0.0012mV, 高压直流电源电压放大倍数为600/3.3,最后的修约误差传递到高压电源的输出误差电压=0.0012mV*600/3.3=0.218mV。
因此,DA由控制字产生的数据修约传递到高压直流电源误差为0.218mV满足控制需求。
(2)DA线性噪声误差
若按图2的线性关系计算MAX535:
线性度拟合: Err=0.008409*DAC-0.001554,3.3V时最大的线性误差=0.0262V。
线性误差传递到高压直流电源的误差电压为0.0262V*600/3.3=4.76V,远远大于0.1V可调的步进要求。
三、ADC与DAC闭环
由于ADC本身存在测量误差,例如,ADC的测量误差按照3.3V时计算最大26.2mV,若以高压电源Vref反馈回来的电压值作为实际输出的电压真值,ADC测不准电压达到4.76V.因此,若需要闭环控制,可能还需要外扩更高位数的ADC,要求通道数1个,电压测量幅度大于3.3V,低速即可。
四、讨论
1:DA输出值越高,AD检测误差越大。
2:由于没有高精度电压表,采用板子的ADC直接测试DAC输出,不清楚AD还是DA误差占总误差的比例大。
3:图2可以看出来噪声干扰还是以周期低频干扰为主,可以考虑到电容滤波处理。
4:如果进一步控制DA的噪声,则可能将高压直流电源步进控制在0.1V.根据上边分析,最大线性误差0.0262V即26.2mV,若将DAC噪声控制在2mV,则最大误差降为0.36V.若DAC输出精度够高,就不需要ADC采样后进行PID调节。
5:抽时间规划一下13bitDAC MAX535的硬件设计。
五、ADC 采样规则
取得到的100个转换值的中间20个的平均值作为结果,连续取20次这样的平均值,再求平均值作为最后的结果。也就是虽然没有硬件电容滤波,但是我做了软件滤波处理。