DA模拟量控制外接600V高压直流源-设计分析

一、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次这样的平均值,再求平均值作为最后的结果。也就是虽然没有硬件电容滤波,但是我做了软件滤波处理。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 rose 将 c++代码转换为 uml 类图

From: http://www.cppblog.com/prayer/archive/2009/12/24/103954.html 阅读本文章,你需要对 uml 有简单的了解,懂得以下术语: 类图( class diagram ) 即 c 中的 class 。 聚合( Aggregation ) 即我们c中的引用。表现为 class 头文件中的…

android中的AIDL进程间通信

关于IPC应该不用多介绍了,Android系统中的进程之间不能共享内存,那么如果两个不同的应用程序之间需要通讯怎么办呢?比如公司的一个项目要更新,产品的需求是依附于当前项目开发一个插件,但是呢这个插件功能以及界面比较…

某测试仪控制系统的设计方案--ARM+FPGA+NIOS

一、系统要求 控制功能:600V直流电源模块控制63dB程控衰减器触摸屏高频毫伏表示波器USB存储FAR计数整形阈值调节。 功能要求: 检测高压电源的Vref控制高压电源的Vset控制光脉冲幅度控制阈值计数幅度存储测量数据触摸屏通信示波器通信高频毫伏表通信光…

QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配

From: http://www.cnblogs.com/qytan36/archive/2010/04/04/1704226.html 实验环境: 1,Linux操作系统 2,QT3编程开发环境 3,C编程语言 傅立叶变换和傅立叶反变换 1.1. 主要源代码 readImage() 从图像中读取数据 writeImage() 往图…

Java finally语句到底是在return之前还是之后执行?

网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的: (1&…

TLV5618 双路12位DAC 模拟SPI驱动

一、TLV65618芯片 TLV5618A 带掉电功能 2.7V-5.5V,低功耗双路 12 位数模转换器 特点 ●双路 12 位电压输出 DAC ●可编程调节转换时间 - 快速模式 3μs - 低速模式 10μs ●兼容 TMS320 和 SPI 串行接口 16位串行接口包含4位控制和12位数据。 二、驱动代码 采用模…

python对json的相关操作

From: http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html 什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3r…

UIbutton

第一、UIButton的定义 UIButton *button[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typedef enum { UIButtonTypeCustom 0, 自定义风格 UIButtonTypeRoundedRect, 圆角矩形 UIButtonTypeDetailDisclosure, 蓝色小箭头按钮&#xf…

MAX535 单路13位DAC 模拟SPI驱动

一、MAX535 max535是低功耗、13位、电压输出DAC,采用串行接口和MAX封装。MAX535通过单个5V/3.3V电源工作,仅需要280A电流工作。 MAX535/MAX5351适用于广泛的应用,包括工业过程控制。其他功能包括软件关机和开机复位。 DAC寄存器可以独立更…

云服务器开启TCP Server 客户端无法连接的解决方法

一、问题描述 华为云服务器运行TCPServer后,等待客户端连接,客户端一直无法连接到服务器。经过测试,客户端可以ping通服务器的地址。 客户端网络防火墙已经完全放开。 二、解决办法 1、查看云服务器端的安全组,是否放开该端口。…

STM32CubeMx HAL库使用硬件IIC读写AT24C02

介绍使用硬件IIC接口读写AT24C02,STM32自带硬件IIC,比较好用,没必要千篇一律的使用模拟IIC。作为一个IIC的使用例子,可以适当修改用于其他IIC接口设备通信控制。 一、测试环境 STM32F407CubeMx(6.1.1)MDK…

第十篇 PO核心功能及流程详解

详见链接:http://bbs.erp100.com/thread-272866-1-1.html1. P2P lifecycleP2P是procure to pay的缩写,p2p循环值得就是采购到付款的周而复始,循环往复的过程。主要包含六个大的环节,需求(demand)&#xff0…

STM32F407 CubeMx使用定时器测量信号频率 分辨率0.001Hz

一、需求 使用STM32F407 测量外部输入方波信号的周期,信号变化范围:45HZ~55HZ,测量分辨率0.001HZ。 二、配置 stm32Cubemx:version 6.1.1HAL库:1.25.2MDK:5.34C Compiler:ARMCC 6.16 三、分…

中移M5310A NBIoT模组通信测试命令

总结一下中移M5310A NBIoT模组的常用测试命令,这个命令是个脚本,可以编辑,在自己开发的串口软件上可用,有需要的请留言。 脚本是.ini格式的文件,可以直接编辑文件然后加载到脚本区。字段用\t分割。 [General] msg0don…

11月中30个精心设计的网站案例精选

如果你开始设计一个网站,首先你需要在你的头脑构思的是如何使网站有丰富的视觉感应和排版。现在每天的网络竞争太激烈,如果你的网站设计的一般般,恐怕很难把访问者的目光定睛在你的网站上。因此网站有美丽和创意设计的不仅能吸引游客&#xf…

Qt定时器的精度问题

一、场景 一个网络音频采集场景如下: 数据发送端:嵌入式设备按照16kHz 16Bit连续不断采集音频数据,通过Socket进行发送 数据接受端:QT上位机开一个tcpserver,数据readReady后由QByteArray进行追加,音频波…

iperf 测试局域网速度

介绍 iperf使用cs架构,启用一台设备作为server,另一台设备作为client,测试server和lclient的网络速度。 linux 安装 sudo apt install iperf 使用方法 (1)服务器端 iperf -s 启用tcp连接,默认监控端口…

NHibernate初学者指南(6):映射模型到数据库之方式二

使用Fluent NHibernate自动映射 使用Fluent NHibernate自动映射,首先要将映射的实体放到一个命名空间中,这使得通知AutoMapper哪些实体和值对象包含在映射中更容易。建议在你的项目中创建一个Domain文件夹,将需要映射的实体和值对象放到这个文…

STM32嵌入式系统FreeRTOS使用cJSON解析和构建JSON

一、环境 控制器STM32F407MDK5.34cJSON1.7.7 二、安装cJSON MDK中打开Pack Install,选择Generic下边MDK-Pack::cJSON,点击安装Install 安装成功后,在Manage Run-Time Environment 中找到Data Exchange,并选择cJSON,…

VC6启用运行时类型识别 (RTTI)

在程序中&#xff0c;当我们对多态类的基类指针使用typeid&#xff0c;就可以在运行时确定指针指向对象的实际类型&#xff0c;并输出对象类型的名字。 #include <cstdlib >#include <iostream >#include <typeinfo >usingnamespacestd; classB{ public …