基于STM32F103单片机电流电压采集系统设计
基于STM32单片机的分布式智能配电终端设计
基于STM32单片机的分布式智能配电终端设计摘要:本文基于STM32单片机设计了一种分布式智能配电终端,旨在解决传统配电系统中存在的信息不对称、操作不便等问题。
通过该终端,用户可以实现对电力系统的监测、控制、保护等多种功能,实现配电系统的自动化、智能化。
在系统设计中,我们使用了基于CAN总线的分布式控制架构,以及基于嵌入式系统的设计方法,使得该终端具有可靠性、稳定性和实用性。
最后,通过实验验证了该终端的性能和可行性。
关键词:STM32单片机;分布式智能配电终端;CAN总线;嵌入式系统引言:随着信息技术和自动化技术的不断发展,电力系统的自动化、智能化已经成为发展趋势。
传统的配电系统中存在着信息不对称、操作不便等问题,给配电系统的安全和稳定带来了很大的隐患。
因此,设计一种高可靠性、稳定性和实用性的分布式智能配电终端,对于实现配电系统的自动化和智能化具有重要意义。
目前,单片机技术已经成为智能电力系统中不可或缺的组成部分。
STM32单片机是一款功能强大、性能稳定的单片机芯片,具有低功耗、高速度、高精度等特点,适用于各种工业控制、智能家居等领域。
一.传统配电系统的问题与不足(一)信息不对称传统配电系统中,信息流动不畅,各个环节之间缺乏有效的信息传递和处理,导致信息不对称。
例如,传统的配电系统中,电力信息需要手动收集,而且数据精度低,容易出现错误,使得对电力系统的监测和保护变得困难。
此外,对于故障信息的传递和处理也存在问题。
由于缺乏有效的通讯手段,故障信息往往需要经过多次传递才能到达责任部门,导致故障响应时间较长,影响配电系统的安全和稳定。
(二)操作不便传统配电系统的操作往往需要人工干预,人工操作控制,效率低下,存在安全隐患。
例如,传统配电系统的开关操作需要人工进行,操作不便,容易出现误操作或操作不当,造成安全事故。
此外,对于配电系统的监测和保护,也需要人工干预,无法实现自动化和智能化,效率低下,使得配电系统的运行效率和稳定性下降。
基于STM32F103单片机的数据采集系统设计
基于STM32F103单片机的数据采集系统设计本文。
在现代科技快速发展的时代背景下,数据采集系统作为信息获取的重要手段之一,已经成为各行业必备的工具之一。
STM32F103单片机作为一款性能稳定、功能强大的微控制器,被广泛应用于各种数据采集系统中。
本文将以STM32F103单片机为基础,探讨其在数据采集系统中的设计原理、实现方法以及应用案例,旨在为同行业研究者提供参考和借鉴。
一、STM32F103单片机概述STM32F103单片机是意法半导体公司推出的一款32位MCU,采用ARM Cortex-M3内核,工作频率高达72MHz,具有高性能、低功耗、丰富的外设接口等特点。
在各种嵌入式系统中,STM32F103单片机的应用十分广泛,特别适用于需要较高计算性能和功耗要求低的场景。
二、数据采集系统概述数据采集系统是一种用于采集、处理和传输数据的系统,通常由传感器、数据采集设备、数据处理单元和通信模块等组成。
在工业控制、环境监测、医疗诊断等领域,数据采集系统扮演着重要角色,能够实时监测各种参数并进行数据分析,为决策提供数据支持。
三、STM32F103单片机在数据采集系统中的应用1. 数据采集系统设计原理数据采集系统的设计原理包括数据采集、数据处理和数据传输等环节。
在STM32F103单片机中,可以通过外设接口如ADC、UART等模块实现数据的采集和传输,通过中断和定时器等功能实现数据的处理和分析,从而构建完整的数据采集系统。
2. 数据采集系统实现方法基于STM32F103单片机的数据采集系统的实现方法主要包括硬件设计和软件编程两个方面。
在硬件设计方面,需要根据具体需求选择合适的传感器和外设接口,设计电路连接和布局;在软件编程方面,需要利用STM32CubeMX等工具进行初始化配置,编写相应的驱动程序和应用程序,实现数据的采集、处理和传输。
3. 数据采集系统应用案例以环境监测系统为例,我们可以利用STM32F103单片机搭建一个实时监测空气质量的数据采集系统。
基于STM32F103单片机开发介绍
基于STM32F103单片机开发介绍目录一、IDE安装(MDK) (2)二、CMSIS架构简介 (3)三、标准外设库的外设库结构 (8)四、Startup文件的选择及文件拷贝 (10)五、创建工程 (14)六、配置工程 (24)七、下载及调试 (32)八、SourceInght添加技巧 (33)一、IDE安装(MDK)STM32使用的开发环境是MDK,目前我们使用的版本是MDK5.10。
安装步骤请参考《MDK5.10安装手册.pdf》。
二、CMSIS架构简介安装完ARM.CMSIS.3.20.4.pack和Keil.STM32F1xx_DFP.1.0.5.pack后,会在Keil的安装路径下生成对应的文件夹:Keil_v5\ARM\Pack\ARM\CMSIS\3.20.4Keil_v5\ARM\Pack\Keil\STM32F0xx_DFP\1.0.3Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5PACK下的文件,将在我们开发和编译时都需要用上。
1.CMSISARM Cortex™微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard)是Cortex-M处理器系列的与供应商无关的硬件抽象层。
2.Core_cm3.h1、内对Lint进行了配置。
2、最重要的是调用了“stdint.h”文件,该文件由编译环境提供,对8位、16位、32位等整数类型的定义及其范围进行了规范,还定义了大数输出如:UINT_LEAST8_MAX。
主要用来屏蔽不同编译器之前的差异。
这种扩展整数类型的定义非常清晰,从类型名字上就可以看出它的长度,这有利于编写可移植的代码。
3、指示寄存器的访问权限。
CMSIS定义以下3种标识符来指定访问权限:_I(volatileconst)、_O(volatile)和_IO(volatile)。
stm32无刷电机驱动电流采样原理
stm32无刷电机驱动电流采样原理摘要:1.引言2.无刷电机驱动简介3.电流采样原理4.STM32在无刷电机驱动中的应用5.电流采样技术的实现6.驱动电路设计7.结束语正文:【引言】在当今社会,电动机驱动技术已广泛应用于各种领域,如家电、工业自动化等。
其中,STM32单片机凭借其高性能、低功耗、丰富的外设资源等优势,成为无刷电机驱动控制系统的主流控制器。
本文将介绍STM32无刷电机驱动电流采样原理,以及相关驱动电路设计方法。
【无刷电机驱动简介】无刷电机驱动系统分为两部分:控制器(如STM32)和驱动电路。
控制器负责接收外部信号,如速度、位置等,并输出相应的PWM信号,以控制电机转速。
驱动电路则负责将控制器的信号转换为驱动电机所需的电流和电压。
在无刷电机驱动中,电流采样是一个关键环节,关系到系统的性能和安全性。
【电流采样原理】电流采样主要采用霍尔传感器、电流互感器等元件对电机电流进行实时监测。
在STM32无刷电机驱动系统中,通常采用差分式电流采样方法。
该方法通过对比电机两端的电压,计算出电流大小,具有较高的精度和抗干扰能力。
【STM32在无刷电机驱动中的应用】STM32单片机具有丰富的外设资源,可方便地实现电流采样、PWM输出、串口通信等功能。
在无刷电机驱动系统中,STM32通过内置的ADC(模数转换器)对电流采样信号进行转换,得到电机电流的数字信号。
同时,STM32还可以根据需要对采样信号进行滤波处理,提高电流检测的准确性。
【电流采样技术的实现】在STM32无刷电机驱动系统中,电流采样技术的实现主要包括以下几个步骤:1.连接霍尔传感器或电流互感器到STM32的ADC输入通道。
2.配置ADC参数,如采样速率、参考电压等。
3.启动ADC,对电流采样信号进行转换。
4.读取ADC转换结果,计算电流大小。
5.根据电流大小,调整PWM信号输出,实现电机转速控制。
【驱动电路设计】驱动电路设计主要包括功率器件选择、驱动器模块选用、保护电路设计等。
STM32F103电路设计
STM32F103电路设计STM32F103是意法半导体推出的一款32位ARM Cortex-M3内核的微控制器,具有丰富的外设和高性能。
在进行STM32F103电路设计时,首先需要确定硬件平台、外设选择、电源设计、时钟设计等方面的内容。
硬件平台选择在进行STM32F103电路设计之前,首先要确定硬件平台的选择。
硬件平台主要包括评估板和自定义板两种方式。
评估板具有丰富的外设和连接接口,可以直接进行基于STM32F103的应用开发。
自定义板适用于具有特殊需求的项目,需要根据自身的需求设计硬件电路。
外设选择根据项目需求,选择合适的外设模块。
STM32F103具有丰富的外设,如串口、SPI、I2C、定时器、PWM、ADC等。
根据具体应用需求,选择合适的外设模块,并将其与STM32F103进行连接和配置。
电源设计电源设计是STM32F103电路设计中非常重要的一部分。
为了保证系统的稳定工作,需要设计合适的电源电路。
可以使用线性稳压器或开关稳压器作为电源模块,根据具体应用的功耗要求选择适当的稳压器。
还可以使用独立电源和电池等方式来供电。
时钟设计在STM32F103电路设计中,时钟设计是一个关键问题。
STM32F103具有多个时钟源,如内部时钟和外部晶体振荡器。
根据应用需求选择合适的时钟源,并进行相应的配置。
外设连接设计在STM32F103电路设计中,需要将外设与STM32F103进行连接。
可以使用杜邦线、排针、焊接等方式进行连接。
此外,还可以设计并使用相应的外设模块,如UART模块、SPI模块、LCD模块等。
电路布局设计在进行STM32F103电路设计时,还需要进行电路布局设计。
根据电路板的尺寸和外设的连接需求,合理安排各个元件的位置,保证电路板的可靠性和稳定性。
元件选型在STM32F103电路设计中,还需要进行元件的选型。
根据具体的应用需求和性能要求,选择合适的电阻、电容、晶体振荡器等元件,并进行相应的参数计算和设计。
基于STM32的多通道数据采集系统设计
型 等 相 关 信 息 ,并 通 过 GPRS或 北 斗 卫 星 实现 数 据 的 无 线 远 程 传 输 ,便 于 长 时 间 不 间 断 对 地 质 灾 害 体 进 行 数 据 采
集 、传 输 与 分 析 ,可 有 效 提 高 对 地 质 灾 害 体 的 实 时 监 测 水 平 。
关 键 词 :STM32;ADS1256;多通 道 ;数 据 采 集
Design of multi-channel data acquisition system based on STM 32
W ang Chenhui,W u Yue,Yang Kai (Center for Hydrogeology and Environmenta l Geology Survey,CGS,Baoding 071051,China)
Abstract: Aiming at low power consumption and real—time requirements for data acquisition system in the geological disasters mon— itoring,a multi-channel data acquisition system is designed based on STM32F102 and ADS1256,which can realize real—time on— line data collection for mud water level, sound, infrasound,displacement and other parameters in the geological disaster s site.The system is characterized by small volume,low power consumption and real-time.T h e system can achieve 24一hour real-time storage hazards in acquisition time,sampling data, ambient temperature and sensor type and other related information.In further, system use GPRS and Beidou satellite to complete wireless rem ote data transm ission, which can facilitate a long uninterrupted data collec— tion, transm ission and analysis fo r geological hazards, at the same time can efectively improve the level of real-tim e m onitor ing on geological disasters. Key WOrds: STM32;ADS1256;multi—channel;dat93
基于单片机电压采集电路设计完整版
基于单片机电压采集电路设计集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]1引言数据采集是分析模拟信号量数据的有效方法。
而实时显示数据是自动化检测系统的现实需求。
在测试空空导弹导引头的过程中,导引头的响应信号包括内部二次信号和模拟量电压信号。
检测过程中要求检测系统实时显示导引头的工作状态,显示二次电源和模拟量响应电压信号,判断导引头性能,同时保证在非常情况下人为对导引头做出应急处理,保护导引头。
对于模拟量电压信号,通常采用模数转换、事后数据标定的方法实现。
根据现实需求,研制相应检测系统可作为导引头日常维护和修理的重要工具。
这里介绍一种基于单片机和CPLD的实时数据采集显示系统设计方案。
?2系统构成该系统中待采集显示电压信号共路,动态电压范围为-~+27V。
由于这些电压信号变化频率较低,或者认为频率无变化,且检测系统只关心其电压值,所以在低采样率下就可满足系统要求。
根据需求,系统设计的采样率即显示刷新速率在1.56k/s以上。
采用单片机80C196KB和可编程逻辑器件78SLC为核心控制器,以80C196KB内部集成A/D转换器作为模数转换器实现16路电压信号的实时数据采集、显示、控制。
该系统总体设计结构框图如图1所示。
整个系统主要由信号预处理、信号选通、单片机采集、双机以及数据处理显示等构成。
其中,信号选通模块由CPLD和多路模拟选择器组成。
3系统硬件电路设计3.1信号预处理电路由于待采集电压信号输入动态范围较宽,且极性各异,对于单片机A/D转换器来说,需要调理到能够采集的电压范围闱0~5V,所以要统一调理采集信号,如图2所示。
图2中运放和1556均采用双电压供电,以提高动态信号输入范围;均采用精度为0.1%的精密型金属膜电阻,以提高电压转换精度。
在二级电压凋理过程中,MC1556同相输人端采用电路以减少长时间通电情况下温度升高对系统产生的不良影响。
南于电压跟随器具有输入阻抗大和输出驱动能力强的特点,故在预处理电路的输入端和输出端均采用电压跟随电路。
基于STM32F103的直流无刷电机电流控制
基于STM32F103的直流无刷电机电流控制摘要:STM32F103作为一种高性能、低功耗的微控制器,广泛应用于电机控制领域。
本文基于STM32F103设计了一种直流无刷电机电流控制系统。
通过ADC采样电机电流,通过PID算法控制PWM输出,达到对电机电流进行精确控制的目的。
实验结果表明,该系统可以有效地实现直流无刷电机电流控制,为直流无刷电机控制领域提供了一种有效的解决方案。
关键词:STM32F103、直流无刷电机、电流控制、PWM、PID算法正文:直流无刷电机具有体积小、转速高、效率高等优点,在智能电动工具、汽车电子等领域都有广泛的应用。
在直流无刷电机控制中,电流控制是一项非常重要的控制方法。
本文基于STM32F103设计了一种直流无刷电机电流控制系统。
该系统采用了PID算法控制PWM输出,以达到对电机电流的精确控制。
注意,为了保证控制效果,我们必须在电机电流采样后进行一定的滤波,以消除采样误差及外界干扰,保证系统的稳定性和精度。
本文中,我们使用了一阶低通滤波器进行电流滤波处理。
在硬件方面,我们采用了STM32F103微控制器作为主控核心,配合各类传感器和驱动芯片。
在软件方面,我们采用了Keil MDK-ARM软件开发工具和STM32F1开发包进行开发实现。
实验表明,该系统能够实现对直流无刷电机的稳定电流控制,并能够在实际应用中取得良好的效果。
该系统具有技术先进、成本低廉、易于移植等优点,可以为直流无刷电机控制领域提供一种有效的解决方案。
结论:本文基于STM32F103设计了一种直流无刷电机电流控制系统,采用了PID算法控制PWM输出,以达到对电机电流的精确控制。
实验结果表明,该系统能够有效地实现直流无刷电机电流控制,为直流无刷电机控制领域提供了一种有效的解决方案。
接下来,本文将进一步探讨STM32F103在直流无刷电机电流控制领域的应用。
首先,我们将介绍STM32F103的特点和优势,以及在电机控制中的应用。
基于STM32F103单片机开发介绍
基于STM32F103单片机开发介绍目录一、IDE安装(MDK) (2)二、CMSIS 架构简介 (3)三、标准外设库的外设库结构 (8)四、Startup文件的选择及文件拷贝 (10)五、创建工程 (14)六、配置工程 (24)七、下载及调试 (32)八、SourceInght添加技巧 (33)一、IDE安装(MDK)STM32使用的开发环境是MDK,目前我们使用的版本是MDK5.10。
安装步骤请参考《MDK5.10安装手册.pdf》。
二、CMSIS 架构简介安装完ARM.CMSIS.3.20.4.pack和Keil.STM32F1xx_DFP.1.0.5.pack后,会在Keil的安装路径下生成对应的文件夹:Keil_v5\ARM\Pack\ARM\CMSIS\3.20.4Keil_v5\ARM\Pack\Keil\STM32F0xx_DFP\1.0.3Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5PACK下的文件,将在我们开发和编译时都需要用上。
1.CMSISARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是Cortex-M 处理器系列的与供应商无关的硬件抽象层。
2.Core_cm3.h1、内对Lint进行了配置。
2、最重要的是调用了“stdint.h”文件,该文件由编译环境提供,对8位、16位、32位等整数类型的定义及其范围进行了规范,还定义了大数输出如:UINT_LEAST8_MAX。
主要用来屏蔽不同编译器之前的差异。
这种扩展整数类型的定义非常清晰,从类型名字上就可以看出它的长度,这有利于编写可移植的代码。
3、指示寄存器的访问权限。
CMSIS定义以下3种标识符来指定访问权限:_I(volatileconst)、_O(volatile)和_IO(volatile)。
基于STM32F103嵌入式实验指导书
实验一、STM32的开发环境与简单工程一、实验目的1、熟悉STM32开发板的开发环境;2、熟悉MDK创建和配置STM32工程项目的基本流程;3、熟悉STM32官方库的应用;4、规范编程格式。
二、实验内容本次实验配置MDK集成开发环境,新建一个简单的工程文件,添加STM32官方库并配置工程,编译运行这个工程文件。
下载已经编译好的文件到开发板中运行。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法。
四、实验设备及工具硬件:STM32开发平台软件:STM32官方库;PC机操作系统Windows 98、Windows 2000或Windows XP;KEIL MDK 集成开发环境;串口转usb驱动。
五、实验步骤1、在准备存放工程文件的目录下创建一新文件夹,命名为Proj_GPIO;在Proj_GPIO 文件夹里面分别再创建四个文件夹:CMSIS、USER、LIB、OBJ。
如图1。
其中CMSIS(Cortex Microcontroller Software Interface Standard)用于存放Cortex-M 处理器系列的与供应商无关的软件抽象层和启动相关的代码文件;USER用于存放我们自己编写的代码文件(含自己移植的底层驱动),还有MDK工程;LIB存放所有的官方底层驱动库文件;OBJ用于工程输出的过程文件和最终的二进制文件。
图12、将官方库STM32F10x_StdPeriph_Lib_V3.5.0.rar解压。
1)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的所有文件和STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下的所有文件都到第一步所创建的CMSIS文件夹中;2)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下的文件(目录inc和scr)复制到第一步创建的LIB文件夹中;3)把STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件复制到USER文件夹中。
stm32无刷电机驱动电流采样原理
无刷直流电机(BLDC)驱动技术在现代电子设备和工业应用中具有重要的地位,而STM32作为一款广泛应用于嵌入式系统的微控制器,其对于无刷电机驱动技术的支持更是备受青睐。
在无刷电机驱动技术中,电流采样原理是至关重要的环节,对于控制电机的性能和稳定性具有重要的影响。
本文将从深度和广度的角度,详细探讨STM32无刷电机驱动电流采样原理的相关知识。
一、STM32无刷电机驱动电流采样原理1. 电流采样原理概述在无刷电机的控制中,电流采样是一项至关重要的技术。
通过对电流进行精确的采样和测量,可以实现对电机的精准控制,提高系统的效率和性能。
而STM32作为一款强大的嵌入式控制器,其内置了丰富的模拟数字转换(ADC)模块,可以用于对电流进行准确的采样和测量。
2. STM32电流采样模块在STM32的电机驱动控制中,通常会采用采样电流值,通过数据处理和反馈控制实现对电机的精准控制。
STM32的ADC模块可以实现对电流信号的准确采样,并将采样值转换为数字信号,通过软件处理实现对电机的控制。
3. 电流采样原理详解在电流采样中,通常会将电流信号经过电流传感器进行采样,转换为电压信号。
然后通过ADC模块对这一电压信号进行采样和转换,得到数字化的电流数值。
这一数值可以用于计算电机的实时电流,并据此实现对电机的精确控制。
二、如何在STM32中实现无刷电机的精准电流采样1. 选择合适的电流传感器在实现无刷电机的精准电流采样时,首先需要选择合适的电流传感器。
常用的电流传感器包括霍尔效应传感器、霍尔电流传感器和磁阻电流传感器等,需要根据具体的应用场景和电机参数进行选择。
2. 配置STM32的ADC模块在实现精准电流采样时,需要对STM32的ADC模块进行详细的配置。
包括采样频率、分辨率、参考电压和数据对齐方式等,以确保电流信号的准确采样和转换。
3. 数据处理和反馈控制在得到电流的数字化数值后,需要通过软件算法进行数据处理和反馈控制。
基于STM32F103装备数据采集系统的设计
采集模块这 3 部分的软件程序设计 。
3 系统硬 件设计
31 T 2 1 3单 片机 介绍 . S M3 F 0
SM 2 T 3 包括两个完整 的系列 f : M3F 0 是 4 S 2 11 ]T
基本 型系 列 , 作在 3 ;T 2 13是 增强 型 系 工 6 MHzS M3F 0
源管 理 。
() 2 嵌人式的 F s 存储器。 2 lh a 3 字节的存储器可 以有效地存储程序和数据 。 () 3 内部和外部中断控制器 。 ( ) MA 灵 活 的 7 D 4D 。 路 MA, 以处理 存储 器 之 可 间和存 储 器与 外 围之 间 的转换 ,每 一路 通 过 软 件 触 发来 用于 硬件 的 D MA请求 。 () 5 具有 日历功能 的 R C时钟 。 T () 6 串行线和 J T A G调试接 口(WJo ) s — p。 ( ) 门狗定 时器 。 7看 结合系统设计 ,需要综合考虑选用此款芯片作 为本系统的核心芯片。 32电源模 块设 计 . 本系统需 要使用 直流 电源 电压 有 2 、2v 4v 1 、
5 33 -V。比如 C T 0 S A 2 D 3 1F 5 L 4等 V、 A S 9 、 T 6 F 2 、 M2 C 0
芯 片 , 要 33 电源 电压 ; 需 -V 压力 、 量 、 流 电流 、 电压信 号调 理 电路需要 1 2V电源 电压 ; 动机 、 发 电控 系统 工 作时间的测量 ,调理电路需要 2 4 V和 3 .V电源电 3
图 2 系 统 总体 结构 框 图
软件主要针对数据采集进行设计 ,主要包括模 拟信号 采集模块 、开关量采集模块和累计工作时间
3 8 0
图3 电源 电路 原 理 图
单片机电流采样电路
单片机电流采样电路引言:单片机是一种集成了处理器、内存、I/O接口等功能的微型计算机,广泛应用于各个领域。
在很多应用中,对电流的采样是必不可少的,例如工业自动化、电力监控、电子设备等。
本文将介绍一种基于单片机的电流采样电路,实现对电流的准确测量和采样。
一、电流采样原理电流采样是通过测量电流的大小来获取电流波形的过程。
常用的电流采样方法有两种:电流互感器法和霍尔元件法。
电流互感器法是通过电流互感器将被测电流转换为与之成正比的电压信号,再通过放大电路进行采样和测量。
而霍尔元件法是利用霍尔元件的霍尔效应来测量电流,将电流转换为与之成正比的电压信号。
二、电流采样电路设计基于单片机的电流采样电路主要由电流传感器、信号放大电路和单片机采样电路组成。
电流传感器可选用电流互感器或霍尔元件,根据具体应用需求选择合适的传感器。
信号放大电路用于放大传感器输出的微弱电压信号,提高采样精度。
单片机采样电路则负责对放大后的信号进行采样和处理,实现电流的准确测量和采样。
三、电流传感器的选择1. 电流互感器电流互感器是一种能将电流转换为电压信号的传感器。
它由铁芯和绕组组成,被测电流通过绕组产生磁场,磁场作用于铁芯上,产生感应电动势,进而输出与被测电流成正比的电压信号。
电流互感器具有线性度高、频率范围广、阻抗低等优点,适用于高精度的电流测量。
2. 霍尔元件霍尔元件利用霍尔效应来测量电流,将电流转换为与之成正比的电压信号。
它由霍尔片、电压调节电路和输出电路组成。
当被测电流通过霍尔片时,霍尔片两侧产生的电势差与电流成正比,通过电压调节电路和输出电路输出电压信号。
霍尔元件具有结构简单、响应速度快、工作可靠等特点,适用于电流测量的实时性要求较高的场合。
四、信号放大电路设计信号放大电路主要用于放大电流传感器输出的微弱电压信号,提高采样精度。
常用的放大电路有运算放大器放大电路和差分放大电路。
运算放大器放大电路采用运算放大器作为放大元件,通过调整反馈电阻和输入电阻的比例关系,实现对电流信号的放大。
基于stm32的数据采集与无线传输的设计
[键入文字]
ABSTRACT
With the continuous expansion of data monitoring, wireless communication and embedded technology applications, people collect precision data acquisition systems, speed and data storage have put forward higher requirements. For lack of current data collection system is proposed based on ARM Cortex-M3 processor STM32F103RBT6 chip data acquisition system, multi-channel analog input is continuously collected and sequential switching voltage and current signals of, ARM processor speed data acquisition system designed to meet the high-speed, real-time, data storage capacity of the system requirements. Further, since the difference between the noise immunity of the analog signal to the detriment of the transmission, it is often of a digital signal to be transmitted. Given by the embedded wireless transmission module design STM32F103RBT6 microprocessor and RF transceiver chip nRF905 composition. When its work in the 868 MHz band, the data transfer rate up to 1 Mbit • s-1, using high-gain antenna, so that the transmission distance up to 800 m or more, and showed good stability. System compact structure, easy maintenance. For data detection signal data acquisition and transmission industry, disasters such as flood and drought early warning, such as rainfall collection, hydrologic station monitoring. Keywords: STM32F103RBT6 NRF905 Wireless transmission Data collection
基于STM32F103单片机电流电压采集系统设计
基于STM32F103单片机电流电压采集系统设计一、本文概述随着现代电子技术的快速发展,电流和电压的精确采集在诸多领域中,如电力监控、能源管理、工业自动化等,都扮演着至关重要的角色。
STM32F103单片机,凭借其强大的处理能力、灵活的扩展性和高性价比,已成为众多电子系统设计者的首选。
本文旨在探讨基于STM32F103单片机的电流电压采集系统设计,通过对硬件电路和软件程序的详细解析,为相关领域的工程师和研究者提供一种可靠的、高效的电流电压采集方案。
本文将首先介绍电流电压采集系统的总体设计方案,包括硬件架构的选择、关键元件的选型以及系统的工作原理。
随后,将详细介绍电流电压采集电路的设计,包括模拟信号的处理、模数转换器的配置以及信号调理电路的实现。
在软件设计方面,本文将阐述STM32F103单片机的编程环境搭建、数据采集程序的编写以及数据处理和传输的实现方法。
本文还将对系统的性能进行评估,包括精度测试、稳定性分析和响应速度测试等。
通过本文的研究,我们期望能够为电流电压采集系统的设计提供一套完整、实用的解决方案,为相关领域的工程实践和技术创新提供有力支持。
本文也希望激发更多研究者对基于STM32F103单片机的电子系统设计进行深入研究,共同推动电子技术的发展和应用。
二、系统总体设计在设计基于STM32F103单片机的电流电压采集系统时,我们首先需要考虑的是系统的整体架构和功能需求。
系统总体设计的主要目标是实现高精度的电流和电压数据采集,同时保证系统的稳定性和可靠性。
核心控制器:选择STM32F103单片机作为系统的核心控制器,负责数据采集、处理和控制逻辑的实现。
信号调理电路:设计合适的信号调理电路,将采集到的模拟信号转换为适合STM32F103处理的电压范围。
这包括电流转换电路和电压跟随电路,以确保信号的准确性和稳定性。
ADC模块:利用STM32F103内置的ADC模块进行模拟信号到数字信号的转换,实现高精度的数据采集。
ADC基于stm32的电压电流采集
ADC基于stm32的电压电流采集,用数码管显示首先组装硬件,如下图所示:如上图连接数码管与单片机,然后再按下图做两路电压采集电路,运用op07对电流进行30倍放大即可测得相对精准的电压,如下图所示:以上步骤完成即可编写程序,程序如下:*//* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"#include <stdio.h>#include "LED8.h"#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */#define ADC1_DR_Address ((u32)0x4001244C)/* Private function prototypes -----------------------------------------------*/void GPIO_Configuration(void);void NVIC_Configuration(void);void TIM_Configuration(void);void ADC_Configuration(void);void numdisplay(uint16_t num);void numdisplay1(uint16_t num);void delay(void);void delay(){int i,j;for (i=0; i<0xfffff; i++) j++;}vu16 ADC_ConvertedValue[3];/******************************************************************** ************ Function Name : main* Description : Main program* Input : None* Output : None* Return : None* Attention : None*********************************************************************** ********/int main(void){int i=0;GPIO_Configuration();NVIC_Configuration();TIM_Configuration();ADC_Configuration();/* Infinite loop */for(i=0;i<10;i++){numb[i]=i;}numb[10]=1;numb[11]=2;numb[12]=3;numb[13]=4;numb[14]=5;numb[15]=6;;while (1){ delay();numdisplay((ADC_ConvertedValue[1]/4.096)*10.79); //显示电流值numdisplay1((ADC_ConvertedValue[2]/4.096)*11.755);//显示电压值}}/******************************************************************** ************ Function Name : GPIO_Configuration* Description : Configure GPIO Pin* Input : None* Output : None* Return : None* Attention : None********************************************************************* **********/void numdisplay(uint16_t num) //电流的{uint16_t temp1=0;uint16_t temp2=0;uint16_t temp3=0;uint16_t temp4=0;if((num<10000)&&(num>=1000)){temp1=num/1000;temp2=(num-temp1*1000)/100;temp3=(num-temp1*1000-temp2*100)/10;temp4=num-temp1*1000-temp2*100-temp3*10;}else if((num<1000)&&(num>=100)){temp2=num/100;temp3=(num-temp2*100)/10;temp4=num-temp2*100-temp3*10;}else if((100>num)&&(num>=10)){temp3=num/10;temp4=num-temp3*10;}else if(num<10){temp4=num;}else{}numb[12]=temp1;numb[13]=temp2;numb[14]=temp3;numb[15]=temp4;}void numdisplay1(uint16_t num) //电压的{uint16_t temp5=0;uint16_t temp6=0;uint16_t temp7=0;uint16_t temp8=0;if((num<10000)&&(num>=1000)){temp5=num/1000;temp6=(num-temp5*1000)/100;temp7=(num-temp5*1000-temp6*100)/10;temp8=num-temp5*1000-temp6*100-temp7*10;}else if((num<1000)&&(num>=100)){temp6=num/100;temp7=(num-temp6*100)/10;temp8=num-temp6*100-temp7*10;}else if((100>num)&&(num>=10)){temp5=10;temp7=num/10;temp8=num-temp7*10;}else if(num<10){temp5=10;temp8=num;}else{}numb[8]=temp5;numb[9]=temp6;numb[10]=temp7;numb[11]=temp8;}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIO B|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);/*** LED1 -> PD8 , LED2 -> PD9 , LED3 -> PD10 , LED4 -> PD11*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 |GPIO_Pin_5 |GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10 | GPIO_Pin_11| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8 |GPIO_Pin_11|GPIO_Pin_7 | GPIO_Pin_10 |GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11|GPIO_Pin_8 | GPIO_Pin_10| GPIO_Pin_12 ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_15 ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ;GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 |GPIO_Pin_11|GPIO_Pin_13 |GPIO_Pin_15 ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ;GPIO_Init(GPIOB, &GPIO_InitStructure);/* Configure PA.05.06.07 (ADC Channel 5.6.7) as analog input -------------------------*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);}void ADC_Configuration(void){ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO, ENABLE);/* DMA channel1 configuration ----------------------------------------------*/DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = 3;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);/* Enable DMA1 channel1 */DMA_Cmd(DMA1_Channel1, ENABLE);/* ADC1 configuration ------------------------------------------------------*/ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode = ENABLE;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 3;ADC_Init(ADC1, &ADC_InitStructure);/* ADC1 regular channel15 configuration */ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 2, ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 3, ADC_SampleTime_239Cycles5);/* Enable ADC1 DMA */ADC_DMACmd(ADC1, ENABLE);/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);/* Enable ADC1 reset calibaration register */ADC_ResetCalibration(ADC1);/* Check the end of ADC1 reset calibration register */while(ADC_GetResetCalibrationStatus(ADC1));/* Start ADC1 calibaration */ADC_StartCalibration(ADC1);/* Check the end of ADC1 calibration */while(ADC_GetCalibrationStatus(ADC1));/* Start ADC1 Software Conversion */ADC_SoftwareStartConvCmd(ADC1, ENABLE);}/******************************************************************** ************ Function Name : TIM_Configuration* Description : TIM_Configuration program.* Input : None* Output : None* Reswitch(count2)turn : None* Attention : None********************************************************************* **********/void TIM_Configuration(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Period=200; /* 自动重装载寄存器周期的值(计数值) *//* 累计TIM_Period个频率后产生一个更新或者中断*/TIM_TimeBaseStructure.TIM_Prescaler= (100 - 1); /* 时钟预分频数例如:时钟频率=72MHZ/(时钟预分频+1) */TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频*/TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式*/TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);TIM_ClearFlag(TIM3, TIM_FLAG_Update); /* 清除溢出中断标志*/TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);TIM_Cmd(TIM3, ENABLE); /* 开启时钟*/}/******************************************************************** ************ Function Name : NVIC_Configuration* Description : Configuration the nested vectored interrupt controller.* Input : None* Output : None* Return : None* Attention : None********************************************************************* **********/void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}#ifdef USE_FULL_ASSERT/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/void assert_failed(uint8_t* file, uint32_t line){/* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* Infinite loop */while (1){}}#endif/******************************************************************** *************************************END FILE********************************************************************* ************************************/#include "LED8.h"unsigned char num[16]={0};unsigned char numb[16]={0};unsigned int count2=0;void LED8_Fresh(void){count2++;if(count2>16)count2=0;LED8_SetCH(count2);LED8_SetChar(numb[count2-1]);}void LED8_SetBuff(unsigned char num){}void LED8_SetChar(unsigned char num){switch(num){case 0:GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_11);GPIO_SetBits(GPIOE , GPIO_Pin_11);// GPIO_SetBits(GPIOA , GPIO_Pin_12);break;case 1:GPIO_SetBits(GPIOD , GPIO_Pin_14);GPIO_SetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8);GPIO_SetBits(GPIOE , GPIO_Pin_11);GPIO_SetBits(GPIOA , GPIO_Pin_8);GPIO_ResetBits(GPIOC , GPIO_Pin_11);GPIO_ResetBits(GPIOA , GPIO_Pin_10);break;case 2:GPIO_SetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_11);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOC , GPIO_Pin_8);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 3:GPIO_SetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOC , GPIO_Pin_11);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 4:GPIO_SetBits(GPIOD , GPIO_Pin_14);GPIO_SetBits(GPIOA , GPIO_Pin_8);GPIO_SetBits(GPIOC , GPIO_Pin_8);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_11);GPIO_ResetBits(GPIOA , GPIO_Pin_10);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 5:GPIO_SetBits(GPIOA , GPIO_Pin_10);GPIO_SetBits(GPIOC , GPIO_Pin_8);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_11);GPIO_ResetBits(GPIOE , GPIO_Pin_11);GPIO_ResetBits(GPIOA , GPIO_Pin_8);GPIO_ResetBits(GPIOD , GPIO_Pin_14);break;case 6:GPIO_SetBits(GPIOA , GPIO_Pin_10);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOA , GPIO_Pin_8);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_11);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 7:GPIO_SetBits(GPIOA , GPIO_Pin_8);GPIO_SetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8);GPIO_SetBits(GPIOE , GPIO_Pin_11);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOA , GPIO_Pin_10);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOC , GPIO_Pin_11);break;case 8://GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_11);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 9:GPIO_SetBits(GPIOC , GPIO_Pin_8);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_ResetBits(GPIOD , GPIO_Pin_14);GPIO_ResetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_ResetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_11);GPIO_ResetBits(GPIOE , GPIO_Pin_11);break;case 10:GPIO_SetBits(GPIOC , GPIO_Pin_8);// GPIO_SetBits(GPIOA , GPIO_Pin_12);GPIO_SetBits(GPIOD , GPIO_Pin_14);GPIO_SetBits(GPIOA , GPIO_Pin_8|GPIO_Pin_10);GPIO_SetBits(GPIOC , GPIO_Pin_6|GPIO_Pin_11);GPIO_SetBits(GPIOE , GPIO_Pin_11);break;}}void LED8_SetCH(unsigned char ch){GPIO_SetBits(GPIOC , GPIO_Pin_12);GPIO_SetBits(GPIOC , GPIO_Pin_10);GPIO_SetBits(GPIOA , GPIO_Pin_11);GPIO_SetBits(GPIOA , GPIO_Pin_9);GPIO_SetBits(GPIOB , GPIO_Pin_8);GPIO_SetBits(GPIOD , GPIO_Pin_7);GPIO_SetBits(GPIOD , GPIO_Pin_5);GPIO_SetBits(GPIOD , GPIO_Pin_3);GPIO_SetBits(GPIOC , GPIO_Pin_7);GPIO_SetBits(GPIOD , GPIO_Pin_15);GPIO_SetBits(GPIOD , GPIO_Pin_13);GPIO_SetBits(GPIOD , GPIO_Pin_11);GPIO_SetBits(GPIOB , GPIO_Pin_15);GPIO_SetBits(GPIOB , GPIO_Pin_13);GPIO_SetBits(GPIOB , GPIO_Pin_11);GPIO_SetBits(GPIOE , GPIO_Pin_15);GPIO_SetBits(GPIOA , GPIO_Pin_12);switch(ch){case 1: GPIO_ResetBits(GPIOC , GPIO_Pin_12); break;case 2: GPIO_ResetBits(GPIOC , GPIO_Pin_10); break;case 3: GPIO_ResetBits(GPIOA , GPIO_Pin_11); break;case 4: GPIO_ResetBits(GPIOA , GPIO_Pin_9); break;case 5: GPIO_ResetBits(GPIOB , GPIO_Pin_8); break;case 6: GPIO_ResetBits(GPIOD , GPIO_Pin_7); break;case 7: GPIO_ResetBits(GPIOD , GPIO_Pin_5); break;case 8: GPIO_ResetBits(GPIOD , GPIO_Pin_3); break;case 9: GPIO_ResetBits(GPIOC , GPIO_Pin_7); break;case 10: GPIO_ResetBits(GPIOD , GPIO_Pin_15); GPIO_ResetBits(GPIOA , GPIO_Pin_12);break;case 11: GPIO_ResetBits(GPIOD , GPIO_Pin_13); break;case 12: GPIO_ResetBits(GPIOD , GPIO_Pin_11); break;case 13: GPIO_ResetBits(GPIOB , GPIO_Pin_15);GPIO_ResetBits(GPIOA , GPIO_Pin_12); break;case 14: GPIO_ResetBits(GPIOB , GPIO_Pin_13);break;case 15: GPIO_ResetBits(GPIOB , GPIO_Pin_11); break;case 16: GPIO_ResetBits(GPIOE , GPIO_Pin_15); break;}}程序烧写正确之后,给单片机供电,首先用可调试电源调试电压电流。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Telecom Power Technology
研制开发
单片机电流电压采集系统设计
叶锐文,植瑶瑶,于智荣,蒙 露,张海东,覃赵军
(广西大学行健文理学院,广西南宁
配电网中,各种配电终端的电流、电压、有功功率及无功功率等模拟量的采集是配电网自动化的重要环节。
这
些模拟量的采集也是各种仪器和家用电器的必要功能。
因此,设计了基于嵌入式
TV1005M和电流互感器TA1005M
模块互联后,可以实时显示交流电压、交流电流、功率及电量值;通过设定阈值功率,可以实现对电
Design of Current and Voltage Acquisition System Based on STM32F103 Microcontroller
YU Zhi-rong,MENG Lu,
Guangxi University Xingjian College of SciencesandLiberalArts
the collection of analog,such as current
power at various distribution terminals is a very important part of distribution network automation. These analog acquisitions are
图1 系统结构图
1.2 WiFi模块电路
安装WiFi模块,硬件设备嵌入WiFi模块后可以
直接利用WiFi与屏幕或者手机APP进行连接,实现
交流电压、交流电流、功率及电量值的显示。
1.3 继电器控制电路
由于设计了具有监控和保护作用的电路,因此设
计的系统具有保护功能。
当有功功率达到设定值时,
CPU会发出信号,控制继电器断开,排除故障后,可
以通过屏幕控制继电器接通恢复供电。
2 采集系统软件设计
电流电压采集系统软件设计主要采用模块化编程。
2为程序流程图。
3 采集终端设计
3.1 电流采集终端设计
电流采集终端采用的是TA1005系列母线内置式
· 33 ·
定时采集电压电流值
是否到时开始
初始化系统时钟
初始化IO口
初始化定时器电压电流采集WiFi数据交互
是否成功是是WiFi数据处理LED指示灯处理
功率电量计算继电器驱动处理否否
图2 程序流程图IN 34OUT 1I 2图3 电阻法直接获取电压34-+I 2
I C o =4500/ωR f (μf)
C R f 图4 IC 法获取电压 图5 交流电压互感器线圈图
典型应用如图6和图7所示,性能参数如表1234
I 2R 1R L R L ≤250Ω
R 1≥V IN /I 1V 2=I 2R L
采样电压
图6 典型应用12341I 2
R 1
R f R 1≥V IN /I 1V 2=I 2R
L
-+I C C o
C o =4500/ωR V out =I 2R f
图7 典型应用
4 数据采集电路基于互感器的终端,采集到的是交流的模拟量,
不能被嵌入式单片机处理,需要转换成数字量,因此
需要滤波和整流等环节,如图8和图9所示。
最后送
到内置的AD 采样通道,ADC 进项转换,本单片内置
ADC 是12位的。
公式为:
IN =40962.4V ×数字量 (1STM32F103将采样的数据进行处理分析后,再通过通信接口将数据上传至上位机或者其他设备,完成
数据采集处理[3]。
表产品型号额定输入电流/A 额定输出电流/mA 额定采样电阻额定采样电压/V 相移/°非线性度/%线性范围/MA 耐压/kV TA1005-1M 551500.75≤15≤0.2
≥1.5倍额定≥2
TA1005-2M 5 2.5600 1.5≤10≤0.2表2 性能参数表
产品型号额定输入电流/A 额定输出电流/mA 额定采样电压/V 相移/°非线性度/%线性范围/mA 耐压/kV TA1005-1M 55
≤1/2倍电源电压≤5≤0.1≥2倍额定≥2
TA1005-2M 5 2.5表3 性能参数表
使用方法输入电压/V 输出电压/V 相移非线性度/%线性范围/V 额定电流/mA 耐压/kV 图6法≤1000V ac ≤0.75V ac ≤≤0.2 1.5倍额定
2≥2
图7法≤1000V ac ≤1/2倍IC 电源电压≤≤0.12倍额定
· 34 ·2134IN4148TV1005-IM 16V/470μF 0.1μF +MID R
3
1k 2A ac =(I t -0.02)*5900(ma)C 3C 4图9 滤波和整流交流电流检测 5 结 论本文结合电压电流互感器,经过设计滤波和整流墙。
为提高对系统的保护质量,需要保证横向防火墙与整个系统适配。
当前的要求是建成安全防护系统的专用防火墙体系,要求电力系统的工作人员与软件安全系统的开发人员合作,以提高整个系统的运行质量和运行状态,确保开发的防火墙能够与安全防护系统不存在逻辑冲突[3]。
两个独立的安全区中,需要设置纵向防火墙和
加密认证网关。
工作人员在电力调度工作中,要完成身份认证工作;当系统经过确认后发现工作人员输入的信息错误时,二次安全防护系统发出相应的警告信号,由安全防护人员完成对系统操作人员的身份调查工作。
通过对这种方式的应用,可以提高整个系统的运行质量。
此外,在网络终端设置了路由器,调度人员可以使用移动设备完成对整个系统的研究工作,当出现报警信息或者防护系统发现智能变电站出
现故障信息时,可以通过移动设备向系统发出相应的控制信号。
2.3 系统的整体运行系统整体运行中,系统的二次防护系统与运行状态控制系统存在关联性。
因此,要求在通信系统的设计和装配中,一方面通信系统与安全区连接,让控制系统能够通过系统中产生的相关工作内容的收集、整合与分析,使电力调度人员能够即时接收这类信息;另一方面通信系统需要与电力调度设备连接,将各类(上接第31页)。