基于STM32F103的ACS712电流传感器使用教程

您所在的位置:网站首页 传感器使用数据处理方法 基于STM32F103的ACS712电流传感器使用教程

基于STM32F103的ACS712电流传感器使用教程

2024-07-14 05:28| 来源: 网络整理| 查看: 265

首先介绍一下我使用的板子和外设,首先是正点原子的ministm32,mcu为stm32f103rct6,使用的电流传感器为acs712霍尔电流传感器。

然后想要测量电流数据你还得需要一个电流互感器,我因为需要测量的是大电流所以购买的是转化比比较低的版本。

然后说说电流互感器的使用方法,一开始我直接将整根电线穿进去,发现没有电流的变化,后来经过老师指导发现你需要将插座导线的保护壳拆开,单独测量火线的值

如图所示,我购买的是10/5A,穿心3匝(如果1匝则直接将火线穿过即可),所以需要多绕两圈(棕色的是火线),然后将电流互感器上的导线接到霍尔电流传感器上(接哪一头影响不大,可所以接)。

然后讲讲霍尔电流测量电流的方法,理论上就是通过测量电流值,输出电压值,然后我们可以根据adc读取到的电压值结合原理图来反推电流值。如图所示(不同量程的图不同,根据自己购买的型号进行换算),举个例子,如果adc读取到3v电压,那么测量到的电流值大约为5A:

 说完原理我们再来通过stm32cubemx来生成相关代码,这里我直接转载西瓜大大的文章,根据他的教程来即可生成代码

STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx_四臂西瓜的博客-CSDN博客_基于stm32的交流信号采集程序

在tim3的设置教程中根据自己需要的采样率进行修改,比如我需要的是10Khz,则将其修改为7200-1

这里只贴上需要修改的代码:分别在main.c的51和107行

uint16_t adc_buff[1000];//存放ADC采集的数据 HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buff, 1000); //让ADC1去采集1000个数,存放到adc_buff数组里 while (!AdcConvEnd) ; //等待转换完毕 for (uint16_t i = 0; i < 1000; i++) { //printf("\r\n电流数据为:\r\n"); printf("\r%.5f %.3f\r\n",i*0.00001,adc_buff[i] * 3.3 / 4095*5 - 2.480*5); //数据打印,查看结果 }

则打印出来的0电流(即排插没有接其他电器)时数据如下,左边是时间,单位为s,右边为电流数据,单位为A,记得将波特率设置为115200,否则会乱码。

 然后通过Python打印

import matplotlib.pyplot as plt import numpy as np data = np.loadtxt('computer.txt') plt.plot(data[:,0],data[:,1]) plt.xlabel("Time(s)") plt.ylabel("Current(A)") plt.show()

图片如下

该图为笔记本电脑充电时的数据。

测试完毕。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3