锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2022-10-20 18:00:00 t交流电流传感器4

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

然后,如果你想测量电流数据,你必须需要一个电流互感器。我买了一个转换相对较低的版本,因为我需要测量大电流。

然后谈谈电流互感器的使用。一开始,我直接穿过整根电线,发现没有电流变化。后来,在老师的指导下,我发现你需要打开插座电线的保护壳,并单独测量电线的值

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

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

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

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

在tim在3的设置教程中,根据自己需要的采样率进行修改例如,我需要的是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()

图片如下

这张图是笔记本电脑充电时的数据。

测试完毕。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章