无线电电子与电气工程百科全书 通过COM口进行ADC操作,简单的数据采集系统。 无线电电子电气工程百科全书 本文主要针对初学者。 对于那些决定尝试创建数据采集系统、将模拟信号输入计算机并进行处理等的人来说。 这将在本文中讨论,我们将尝试自己做所有事情。 一般来说,互联网上和文献中关于此主题的信息很少......特别是如果您使用 Visual Basic 语言。 因此,我将尝试至少部分地填补这一空白。 那么,让我们开始吧…… 无论您的目标是什么,您首先需要购买实际的模数转换器 (ADC)。 另外,在计算机上安装 Visual Basic 6.0 开发环境。 您还需要能够以基本的方式在这个开发环境中导航......因为。 本文旨在确保读者至少具备 Visual Basic 编程的基本知识。 我还建议阅读文献 [1]、[3]。 作为 ADC,我建议购买 TLC549IP。 这是一个具有简单通信协议的 8 位串行 ADC。 文章中将对此进行讨论。 当然,您可以使用其他ADC,并适当更改电路和代码。 您可以在 [1] 中阅读更多相关信息。 了解完 ADC 之后,您需要组装我们的数据采集系统的硬件,即图 1 所示的电路。 XNUMX. 该方案借鉴了[1],稍作修改。 二极管 VD1、VD2、VD6 - KD521,任何稳定电压为 3 ... 5 V 的齐纳二极管。您可以使用 KREN78A 代替 05L5。 电阻器 R1、R2 的容差为 1%,或从几个电阻值尽可能接近的电阻器中进行选择。 测量的准确性将取决于它们。 电阻器R3优选为多匝。 调整:给板子供电后,测量稳压器DA1的Out端电压。 我们记下获得的电压值,保留小数点后三位,以备将来需要。 在 DD3 微电路的引脚 1 处,使用电阻器 R1,我们将电压设置为正好等于在输出引脚处测量的稳定器的一半。 现在让我们处理实际的软件部分。 一般来说,首先使用RS-232、I2C、Micro Ware等通信接口。 我认为这是不合适的,因为程序代码稍微复杂一点,硬件部分就会变得非常复杂。 因此,我们将使用取自 ADC“数据表”的最简单的交换协议。 即,其实现简单。 当然,这样的协议无法实现高速,在这种情况下,Visual Basic 本身就施加了限制,但它非常适合用最少的时间和精力获得第一个结果,以及测量相对缓慢变化的过程。 TLC549IP ADC的通信协议如图2所示。 XNUMX. 在单一状态期间,实际转换发生在模数转换器的 CS(片选)引脚上。 随着时钟脉冲的出现,数据输出从低 CS 开始,每个脉冲一位。 要发出 8 位代码,分别需要 8 个时钟脉冲。 之后,CS可以转移到单一状态,并可以执行下一个变换。 有关 ADC 操作的更多详细信息,请参阅 [1]。 从这一切我们可以得出结论,有必要编写一个驱动程序,在正确的时间生成必要的脉冲序列,之后我们只能接收数据。 启动 Visual Basic 开发环境并创建标准 EXE 项目。 添加 MSComm 控件。 您可以将其添加到组件面板中,如下所示 项目-->组件-->从列表中选择微软 通讯 控制6.0。 将其以及 2 个标签和 2 个计时器放在表格上。 将名称保留为默认值。 现在您可以开始编写简单电压表的代码。 让我们设置变量:将 b1、b2、b3、b4、b5、b6、b7、b8、sum、Ud 设为 Single 将以下代码放在表单加载过程中: 私有子 Form_Load() MSComm1.DTREnable = True '初始值-高CS Timer1.Interval = 100 ' 1ms 定时器间隔 Timer2.Interval = 1 ' 100ms 定时器间隔 MSComm1.Settings = "1200,N,8,1" ' 通讯设置 MSComm1.CommPort = 1 ' COM 端口号 MSComm1.PortOpen = True ' 打开 com 端口 END SUB 在程序中 Timer1 放代码: 私有子 Timer1_Timer() MSComm1.DTREnable = False '创建低 CS Label2.Caption = "" '初始延迟的垃圾 MSComm1.RTSEnable = True '第一个时钟脉冲时钟高 If MSComm1.CDHolding = True then b1 = 1 Else b1 = 0 '在 CD 输入(ADC 输出)处轮询 XNUMX 或 XNUMX 值 MSComm1.RTSEnable = False '第一个时钟脉冲时钟低 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b2 = 1 否则 b2 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b3 = 1 否则 b3 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b4 = 1 否则 b4 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b5 = 1 否则 b5 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b6 = 1 否则 b6 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b7 = 1 否则 b7 = 0 MSComm1.RTSEnable = 假 MSComm1.RTSEnable = 真 如果 MSComm1.CDHolding = True 则 b8 = 1 否则 b8 = 0 MSComm1.DTREnable = True '创建高 CS MSComm1.RTSEnable = False '第一个时钟脉冲时钟低 '使用分解公式将位转换为十进制格式 总和 = (b1 * 2^7) + (b2 * 2^6) + (b3 * 2^5) + (b4 * 2^4) + (b5 * 2^3) + (b6 * 2^2) + (b7*2^1) + (b8*2^0) Ud = Format(sum * 5.083 / 255, "##0.000") '计算比例值 Label1.Caption = CStr(Ud) & "Volt" '显示接收到的值 END SUB Timer1 中的代码是驱动程序本身。 它周期性地重复,生成时钟脉冲并接收数据位。 Ud - ADC 输入端的电压,如果应用 10、12 位 ADC,则数字 225 将分别替换为 1024、4096。对于 10、12 位 ADC,需要将缺失的位添加到代码中,以他们的“数据表”为指导。 值 5.083 是我在稳定器 Out 输出处获得的电压值。 在此输入您的值。 要为开发板供电,您可以使用单独的电源或直接从 COM 端口为其供电。 为此,我们将以下代码放入 Timer2 过程中: 私有子 Timer2_Timer() MSComm1.Output = Chr(0) & Chr(0) '我们在 TX 引脚 (3) 上创建脉冲来为 ADC 板供电 END SUB 必须记住,COM 端口不能承受过重的负载...您可以信赖的最大电流为 20 mA。 在工作模式下,电路消耗的电流不超过 5 mA。 现在将开发板连接到 COM 端口并运行项目。 测量DA1稳定器IN端的电压,它必须至少为6.5V。如果不是这种情况,则应使用单独的电源。 通过改变 ADC 输入端的电压,确保程序正常工作并在屏幕上显示电压。 使用 8 位 ADC 时的电压读取精度为 20mV,使用 10 位 ADC 时为 5mV、12-1.2 mV 关于在 Visual Basic 中工作以及使用 com 端口创建的应用程序的一些信息 正如您可能已经了解的那样,要使用 com 端口,您需要一个组件微软 通讯 系统 即 MSCOMM32.ocx 文件,安装 Visual Basic 后,该文件位于 C:\Windows\system32 目录中。 我为什么要这样做,而是因为如果您在不创建安装程序的情况下将程序复制到另一台没有 Visual Basic 的计算机上,它将无法工作。 您还必须将此文件复制到计算机上的同一目录中,即在系统32中。 或者创建一个安装程序。 现在对于一些命令: 设置数据交换速率的命令: MSComm1.Settings =“1200,N,8,1” 指定 com 端口号的命令 MSComm1.CommPort = 1 打开和关闭 com 端口的命令 MSComm1.PortOpen = 真 MSComm1.PortOpen = 假 命令输出 + 12V 到 com 连接器的相应引脚: MSComm1.RTSEnable = True RTS (7) - 引脚名称和引脚编号 MSComm1.DTREnable = 真 DTR(4) 命令输出-12V MSComm1.RTSEnable = 假 MSComm1.DTREnable = 假 您可以轮询是否存在单状态或零状态输出 CD (1)、CTS (8)、DSR (6)。 If MSComm1.CDHolding = True Then (如果有则...) 如果 MSComm1.CDHolding = False Then(如果为零,则……) 将字符或字符串的 Tx (3) ASCII 代码发送到输出: MSComm1.Output = "A" 数字 MSComm1.Output = Chr(10) 数字可以在 0…255 之间变化 通过在定时器中写入这样的命令并更改数字或符号,您可以创建 PWM 调制。 有关命令的更多详细信息可以通过下载控件的描述来找到 微软 通讯 系统. 现在,有了这段代码,您就可以编写许多用于收集数据的程序。 例如:电压表、电流表、温度表、简单示波器、将数据保存到文件。 测量只需 1 毫秒即可完成,每小时一次、每天一次,从而监控长期过程。 为了使用交流电压(通过 0)以及扩大测量限制,需要一个输入放大器,其电路可以取自 [1]。 要使用电源电压或未与网络电隔离的设备,必须对电路与计算机进行光学隔离。 文学
作者:=ShooRooP=,evei [狗] mail.ru; 出版:cxem.net 查看其他文章 部分 电脑. 读和写 有帮助 对这篇文章的评论. 科技、新电子最新动态: 用于触摸仿真的人造革
15.04.2024 Petgugu全球猫砂
15.04.2024 体贴男人的魅力
14.04.2024
其他有趣的新闻: ▪ 压力会伤害骨骼 ▪ 间谍甲虫
免费技术图书馆的有趣材料: 本页所有语言 www.diagram.com.ua |