打印
[其他ST产品]

STM32采集电流互感器(电流互感器模块)数据

[复制链接]
2299|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. 电流互感器简介
在发电、变电、输电、配电和用电的线路中电流大小悬殊,从几安到几万安都有。为便于测量、保护和控制需要转换为比较统一的电流,另外线路上的电压一般都比较高如直接测量是非常危险的。电流互感器就起到电流变换和电气隔离作用。

2. 电流互感器模块
电流互感器模块可以将交流电信号转换为电压信号,此时就能用stm32的ADC采集模块输出的AD信号。

(1)模块介绍
模块搭载ZMCT103c系列小型高精度电流互感器以及高精度运放电路,对信号做精确采样和适当补偿等功能。方便对5A以内的交流电进行信号采集。对应输出模拟交流信号可以调节,可根据电位器(调节放大比例,放大范围0-100倍)来调节所需输出电压,但是输出端(OUT)的最大电压不会超出1/2vCCo

(2)引脚说明






使用特权

评论回复
沙发
家有两宝呀|  楼主 | 2023-5-30 23:40 | 只看该作者
3. STM32采集电流互感器模块数据

此处需要注意的问题是在用STM32采集时如果无交流电通过线圈,STM32的AD接到OUT引脚相当于悬空状态,此时会AD会返回一个STM32悬空的AD值,所以在实际使用时需要在OUT和GND之间加一个下拉电阻:

使用特权

评论回复
板凳
家有两宝呀|  楼主 | 2023-5-30 23:41 | 只看该作者
ADC配置代码如下:
 #include "adc.h"
#include "delay.h"
                                                                                                                          
void  Adc_Init(void)
{        
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );         
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);  
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
        GPIO_Init(GPIOA, &GPIO_InitStructure);
                     
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;               
        GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;       
        GPIO_Init(GPIOA, &GPIO_InitStructure);       

        ADC_DeInit(ADC1);

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;       
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;       
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;       
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;       
        ADC_InitStructure.ADC_NbrOfChannel = 1;       
        ADC_Init(ADC1, &ADC_InitStructure);         
        ADC_Cmd(ADC1, ENABLE);       
       
        ADC_ResetCalibration(ADC1);       
         
        while(ADC_GetResetCalibrationStatus(ADC1));       
       
        ADC_StartCalibration(ADC1);         

        while(ADC_GetCalibrationStatus(ADC1));                

}                                  

u16 Get_Adc(u8 ch)   
{
  
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );                                    
  
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);               
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

        return ADC_GetConversionValue(ADC1);       
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
        u32 temp_val=0;
        u8 t;
        for(t=0;t<times;t++)
        {
                temp_val+=Get_Adc(ch);
                delay_ms(5);
        }
        return temp_val/times;
}          

使用特权

评论回复
地板
家有两宝呀|  楼主 | 2023-5-30 23:41 | 只看该作者
主函数采集通过串口发送数据到上位机:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"          
#include "adc.h"
#include "common.h"
#include "usart2.h"
#include "usart3.h"
#include <string.h>

u8 mp3_set1[7]={0xAA,0x07,0x02,0x00,0x06,0xB9};
u8 mp3_set2[7]={0xAA,0x07,0x02,0x00,0x05,0xB8};

int main(void)
{         
    u16 adcx;
        u8 re = 0;
         
        delay_init();             
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        Adc_Init();        //ADC初始化                         
        usart2_init(9600);//串口2初始化
        delay_ms(200);

        while(1)
        {
                        adcx=Get_Adc_Average(ADC_Channel_0,10);//ADC通道0采集电流互感器的输出值
                        u2_printf("%d\r\n",adcx);//通过串口发送出去                       
        }
}

使用特权

评论回复
5
家有两宝呀|  楼主 | 2023-5-30 23:41 | 只看该作者
实物图如下,用电风扇线作为测试,串口观察输出:

使用特权

评论回复
6
家有两宝呀|  楼主 | 2023-5-30 23:43 | 只看该作者
在风扇断电状态下输出为0:

使用特权

评论回复
7
家有两宝呀|  楼主 | 2023-5-30 23:43 | 只看该作者
在电风扇开启状态下便可采集到电流互感器模块的输出:

使用特权

评论回复
8
家有两宝呀|  楼主 | 2023-5-30 23:43 | 只看该作者
代码工程链接:https://pan.baidu.com/s/1Pdcm7M7UqIl-YyeDvcFCSA
提取码:nigw

使用特权

评论回复
9
uiint| | 2023-6-8 07:30 | 只看该作者
在对电流进行采集时,需要考虑相关的系统噪声、温度漂移等因素,并结合具体应用场景进行相应的设置和调试。

使用特权

评论回复
10
uytyu| | 2023-6-8 14:50 | 只看该作者
根据实际应用需求,选择合适的电流变压器,并设置相应的变比和额定电流等参数。

使用特权

评论回复
11
maudlu| | 2023-6-8 15:09 | 只看该作者
片内集成的AD,好像都是单极性的

使用特权

评论回复
12
sdCAD| | 2023-6-8 16:44 | 只看该作者
启动ADC采样功能,将输出信号转换为数字信号,并存储到缓冲区中。

使用特权

评论回复
13
wwppd| | 2023-6-10 17:19 | 只看该作者
将电流变压器的输出连接到STM32芯片的模拟输入引脚上,并设置相应的ADC采样参数。

使用特权

评论回复
14
yorkbarney| | 2023-6-13 22:32 | 只看该作者
采集电流互感器的方法通常有两种:磁芯电流变压器(CT)和霍尔传感器。

使用特权

评论回复
15
uytyu| | 2023-6-14 15:23 | 只看该作者
如何实现接近开关传感器?               

使用特权

评论回复
16
minzisc| | 2023-6-14 16:11 | 只看该作者
根据电流变压器的变比和采样值,计算出最终电流值,并进行滤波和处理。

使用特权

评论回复
17
10299823| | 2023-6-19 09:25 | 只看该作者
需要根据实际要求选择合适的电流变压器和ADC精度等参数

使用特权

评论回复
18
claretttt| | 2023-6-19 10:20 | 只看该作者
stm32如何采集霍尔 传感器              

使用特权

评论回复
19
zhanghuichun| | 2024-4-26 09:37 | 只看该作者
采集交流电该怎么处理呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

583

帖子

0

粉丝