STM32—ADC和DMA的应用之电流检测(第二部分:电流检测电路与数据处理)

2023-10-27


前言

前一部分介绍了如何配置ADC和DMA,这一部分介绍在硬件部分如何实现电流检测以及检测到电流后的数据处理。


一、电流检测原理

1.霍尔效应

在半导体上外加与电流方向垂直的磁场,会使得半导体中的电子与空穴受到不同方向的洛伦兹力而在不同方向上聚集,在聚集起来的电子与空穴之间会产生电场,电场力与洛伦兹力产生平衡之后,不再聚集,此时电场将会使后来的电子和空穴受到电场力的作用而平衡掉磁场对其产生的洛伦兹力,使得后来的电子和空穴能顺利通过不会偏移,这个现象称为霍尔效应。而产生的内建电压称为霍尔电压。

2.CC6902电流传感器

CC6902 内部集成了一颗高精度,低噪声的线性霍尔电路和一根低阻抗的主电流导线。当采样电流流经主电流导线,其产生的磁场在霍尔电路上感应出相应的电信号,经过信号处理电路输出电压信号,使得产品更易于使用。线性霍尔电路包含了高灵敏度霍尔传感器,霍尔信号预放大器,高精度的霍尔温度补偿单元,振荡器,动态失调消除电路和放大器输出模块。在无磁场的情况下,静态输出为 50%VCC。
在这里插入图片描述

名称 编号 功能
IP+ 1、2 采样电流正端
IP- 3、4 样电流负端
GND 5
OUT 6 信号输出端
NC 7 未连接
VCC 8 电源电压

二、电流检测电路

在这里插入图片描述
首先VCC接5V的电压供电,GND脚接地,要检测的电流通过IP+引脚流入电流传感器,从IP-引脚流出,电流大小转化为电压大小从OUT脚输出。经过电阻的分压进入运放,运放起到增强驱动能力以及滤波和隔离的作用,其他电容作用为滤除干扰。最后AD-CUR节点接入单片机GPIO引脚。
这里选择的电流传感器型号为CC6902-30,检测电流的范围为-30~30A,灵敏度为0.067mv/A,静态输出电压为VCC/2(V)。检测电流与输出电压的关系为:VOUT(V) = VCC (V)/ 2 + 0.067 × IP(A)。当检测的电流为20A时,VOUT为3.84V.通过运放前的电阻分压,AD_CUR的电压为1.28V。

三、数据处理

在理想情况下,电流值不变,VOUT电压值就不变,但是电路中往往存在各种各样的干扰,使得单片机读到的电压值有波动。这时候我们要多采集几次数据,然后取平均数,这样数据就会更加稳定。
多ADC通道求平均值示例代码如下:
首先定义ADC_ConvertedValue二维数组变量,TIMES为采样次数,AD_CHANNEL 为通道数。
然后在Get_Adc_Average函数中获得某一通道读取ADC值的平均数,Get_Adc_Average函数中变量ch为需要求平均数的通道,变量ADC_CHANNL为总通道数,变量ADCCon_Value为ch通道每一次读到的数值,ADC_Buf存放平均值。

extern volatile uint16_t ADC_ConvertedValue[TIMES][AD_CHANNEL];
void Get_Adc_Average(uint16_t *ADCCon_Value, uint8_t ADC_CHANNL, uint8_t ch, uint16_t *ADC_Buf)
{
	uint8_t  i, j;
	uint8_t times;
	uint16_t filter_temp;	
	
	uint16_t filter_buf[TIMES];

	filter_sum = 0;
	//排序
	for (i = 0; i < TIMES; i++)
	{	//这里获取某一通道每一次检测的ADC数值
		filter_buf[i] = *(ADCCon_Value+i*ADC_CHANNL+ch);//这里获取某一通道每一次采样的ADC数值。相当于获取二维数组某一列全部的值。
	}
	
	for (j = 0; j < TIMES - 1; j++)
	{
		for (i = 0; i < TIMES - 1 - j; i++)
		{
			if (filter_buf[i] > filter_buf[i + 1])
			{
				filter_temp = filter_buf[i];
				filter_buf[i] = filter_buf[i + 1];
				filter_buf[i + 1] = filter_temp;
			}
		}
	}
	//去掉最大和最小各两个值取平均数
	for(times = 2; times < TIMES-2; times++)
	{
		filter_sum += filter_buf[times];
	}
	
	ADC_Buf[ch] = filter_sum / (TIMES-4);
}

可以使用以下代码调用Get_Adc_Average函数

for(ch1 = 0; ch1 < AD_CHANNEL; ch1++)
	{
		Get_Adc_Average((uint16_t *)ADC_ConvertedValue, AD_CHANNEL, ch1, ADC1_Ave_Val);
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32—ADC和DMA的应用之电流检测(第二部分:电流检测电路与数据处理) 的相关文章

  • 本周最新文献速递20220522

    本周最新文献速递20220522 一 精细解读文献 一 文献题目 Single nucleus chromatin accessibility profiling highlights regulatory mechanisms of co
  • xml转换word文档

    点击下载 download value flag let this this this axios method get url url lengthMeasurementTwice params machineId this machin
  • http请求头origin、referer和host区别

    1 Host 描述请求将被发送的目的地 包括且仅仅包括域名和端口号 HTTP 1 1 的所有请求报文中必须包含一个Host头字段 且只能设置一个 2 Origin 请求头origin表明了请求来自于哪个站点 包括且仅仅包括协议 域名和端口
  • 创维机顶盒E900刷LinuxNas系统

    家里有一个一直没用的创维E900的机顶盒 芯片是海思 hi3798v100 的 本着废物利用的原则 我想将他刷成linux 没想到网上真的有教程 https histb com 我看了一下 以我现在的技术 问题不大 大不了变砖罢了 反正都是
  • js 中数字小数点末尾的0显示与否

    js 中数字小数点末尾的0显示与否 不显示0 显示0 数字格式化 不显示0 我们先来看一道例题 然后围绕其展开 零 的讨论 问题 得到一个随机数组成的数组 数组长度为10 结果类似于 0 243 0 162 0 701 0 501 此处封装

随机推荐

  • Learn OpenGL with Qt——模型加载:Qt搭建Assimp环境

    如果你是中途开始学习本教程的 即使你对OpenGL已经非常熟悉 请至少了解以下几个章节 因为Qt中提供了OpenGL的很多便捷操作 熟悉这些操作可以让我们在Qt中高效的使用OpenGL进行绘图 创建OpenGL窗口 着色器程序以及着色器的创
  • 如何克服看到别人优于自己而感到的焦虑和迷茫?

    文章目录 每日一句正能量 前言 简述自己的感受 怎么做 如何调整自己的心态 后记 每日一句正能量 行动是至于恐惧的良药 而犹豫 拖延 将不断滋养恐惧 前言 虽然清楚知识需要靠时间沉淀 但在看到自己做不出来的题别人会做 自己写不出的代码别人会
  • 使用Java显示图片

    之前学习C和C 时总是和数据打交道 也许是学的浅薄的关系 当时觉得显示界面和图像是如此的神秘 如今学习了一段时间的Java 发现其实界面什么的也不是那么的难懂 下面写一个简单的例子 让我们的java为我们展示张图片来看看吧 面板源码 jav
  • [LLVM教程]LLVM之第一个语言前端

    目录 LLVM教程 LLVM之第一个语言前端 LLVM教程 LLVM之第一个语言前端 万花筒 介绍与词法分析器 LLVM Tutorial Table of Contents LLVM 17 0 0git documentation LLV
  • 统计学习方法EM课后答案

    https sine x com statistical learning method 第9章 em算法及其推广 https blog csdn net weixin 35479108 article details 87894136 h
  • STM32入门——外部中断

    中断系统概述 中断 在主程序运行过程中 出现了特定的中断触发条件 中断源 使得CPU暂停当前正在运行的程序 转而去处理中断程序 处理完成后又返回原来被暂停的位置继续运行 中断优先级 当有多个中断源同时申请中断时 CPU会根据中断源的轻重缓急
  • Cannot read property 'newLine' of undefined

    angularjs报错 ERROR in src main ts Module build failed TypeError Cannot read property newLine of undefined at Object getNe
  • GitLab(Gitee)配置SSH key

    1 我们已经有了gitlab的账户 项目组已经将我们添加到了group 2 打开git bash 输入命令 ls al ssh 如果显示如下图 则表示生成过key 可以去执行第4个步骤 否则的话执行第三个步骤生成key 3 输入命令 ssh
  • 快乐的强化学习1——Q_Learning及其实现方法

    快乐的强化学习1 Q Learning及其实现方法 学习前言 简介 Q Learning算法的实现 具体实现代码 GITHUB下载连接 学习前言 刚刚从大学毕业 近来闲来无事 开始了机器学习的旅程 深度学习是机器学习的重要一环 其可以使得机
  • 深入AMS源码(四)——ActivityManagerService的进程管理

    1 AMS中的进程管理 final ArrayList
  • 2023年大数据与计算国际会议 (WBDC 2023)

    会议简介 Brief Introduction 2023年大数据与计算国际会议 WBDC 2023 会议时间 2023年11月17 19日 召开地点 中国 西安 大会官网 www iwbdc org 2023年大数据与计算国际会议 WBDC
  • 机器翻译系统,主要划分为哪几大类型?

    直到20世纪80年代 一些机器翻译系统采用了两种方法 在这些方法中 源语言文本被分析转换成抽象表达形式 随后利用一些程序 通过识别词结构 词法分析 和句子结构 句法分析 解决歧义问题 其中有一种方法将抽象表达设计为一种与具体语种无关的 中间
  • Arduino学习笔记

    一 引脚 二 函数介绍 1 pinMode pin mode 引脚配置成输入或者输出 其中mode可以为INPUT或者OUTPUT 例如 pinMode 7 INPUT 将引脚7定义为输入接口 2 digitalWrite pin valu
  • OAuth2简介生成accessToken(一)

    1 OAuth3需要引入的依赖 版本号根据实际情况添加哦
  • HTTP中application/x-www-form-urlencoded字符说明

    一 概述 在学习ajax的时候 如果用post请求 需要设置如下代码 ajax setRequestHeader content type application x www form urlencoded 虽然知道需要这么做 但是不知道a
  • postman pre-request scripts 导入js文件_Postman 高级用法指南

    Postman是一款强大的API接口测试工具 有许多不容易发现的好用的功能 下面简单介绍其中一部分功能 详细内容可以参考文档 官方还有视频教程 非常方便入手 后续本博客会持续提供一些Postman使用的细节技巧 方便大家用Postman进行
  • strstr函数底层逻辑实现

    一 函数介绍 char strstr const char haystack const char needle 功能 在字符串haystack中查找字符串needle出现的位置 参数 haystack 源字符串首地址 needle 匹配字
  • C++读写txt文件(基本操作1)

    本博客主要写了用C 读写txt本文的基本操作 最简单的写入和读出两个基本操作 本程序的功能是向Test txt文件文件写入字符串 This is a Test12 和读取字符串 This is a Test12 并且将读取到的字符串存到te
  • python组件

    1 生成6位数字随机验证码 import random import string def num code length 6 生成长度为length的数字随机验证码 param length 验证码长度 return 验证码 return
  • STM32—ADC和DMA的应用之电流检测(第二部分:电流检测电路与数据处理)

    文章目录 前言 一 电流检测原理 1 霍尔效应 2 CC6902电流传感器 二 电流检测电路 三 数据处理 前言 前一部分介绍了如何配置ADC和DMA 这一部分介绍在硬件部分如何实现电流检测以及检测到电流后的数据处理 一 电流检测原理 1