打印
[STM32L1]

电流检测

[复制链接]
905|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现在在做一个STM32L151+ACS722电流检测的项目。但ACS722芯片网上案例较少,测下来会遇到采样的电压不准确的问题

使用特权

评论回复
沙发
jiajs| | 2019-7-20 15:29 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
huanghuac|  楼主 | 2019-7-20 15:33 | 只看该作者
我的项目会有五个等级的电流传到ACS中,传入芯片的最大电流等级0.27A,最小等级电流才0.09A。我用示波器测量了下,ACS722出来的电压是基于1.66V左右,50HZ的正弦交流电压,峰峰值才100mV内的电压。我采样由ACS722传出来的电压,然后写了个方均根算法计算一个周期内的电压有效值,程序中未启用DMA,但测量下来发现五个等级对应的有效值几乎差不多,不清楚是什么原因

使用特权

评论回复
地板
liliang9554| | 2019-7-20 15:56 | 只看该作者
ADC配置看看

使用特权

评论回复
5
huanghuac|  楼主 | 2019-7-20 16:20 | 只看该作者
单通道采样,精度2的12次方,不采用DMA,AC采样频率是16MHZ,转换周期4Cycles。

void ADC_Config(u8 ADC_Channel)
{
        ADC_InitTypeDef ADC_InitStructure;                                                                                                                        //

        RCC_HSICmd(ENABLE);                                             //
        
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);            //

        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;          //
        
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;                   //
        
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;              //
        
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//
        
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;          //
        
        ADC_InitStructure.ADC_NbrOfConversion = 1;                      //
        
        ADC_Init(ADC1, &ADC_InitStructure);                             //
        
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1 ,ADC_SampleTime_4Cycles);//
        
        ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);

  /* Enable ADC1 Power Down during Delay */
        ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);      //
        
        ADC_Cmd(ADC1,ENABLE);                                          //
        
  while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
  {
  }

}

使用特权

评论回复
6
huanghuac|  楼主 | 2019-7-20 16:23 | 只看该作者

使用特权

评论回复
7
huanghuac|  楼主 | 2019-7-20 16:26 | 只看该作者
这个是我电压采样的程序,整个采样周期=(12.5+4)/16=1.03125μs ,电压周期20ms=20000μs , 采样点数N=20000/1.03125=19393,算法采用方均根计算电压有效值,也利用延时避开了电压不稳的时间。但最后还是无法区分不同大小的电压,几乎传回的电压值都为1660mV上下。但示波器测量下,最大的电压值峰峰值有近200mV,最小的峰峰值几乎为0mv,按说应该能区分,为何无法区分开?

double ADC_DataAcquire(void)
{
        double c=0;                                     //
        
        double adc_value=0;                                                                                                                        
        
        u16 sample_counter;                             
        
        ADC_Config(ADC_Channel_0);                      //
        
        Delay_TIM6_1ms(100);
        
        for (sample_counter=0;sample_counter<19393;sample_counter++)
        {
               
                ADC_SoftwareStartConv(ADC1);                    //开启连续转换

                while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET)        //等待转换结束
                {
                }        
                adc_value=ADC_GetConversionValue(ADC1);       //
        
                adc_value=adc_value*adc_value;                //
               
                c=adc_value+c;                               //
        
        }
        
           c=c/19393;
        
          c=sqrt(c);//
        
          adc_value=(3300*c)/4095;//
               
        
          return adc_value;
        
         ADC_Cmd(ADC1,DISABLE);//
        
          RCC_HSICmd(DISABLE);//
        
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);//
        

}

使用特权

评论回复
8
huanghuac|  楼主 | 2019-7-20 16:26 | 只看该作者

使用特权

评论回复
9
huanghuac|  楼主 | 2019-7-20 16:30 | 只看该作者

使用特权

评论回复
10
chenjunt| | 2019-7-20 16:32 | 只看该作者

改软件结构,太差不能这么写。

使用特权

评论回复
11
huanghuac|  楼主 | 2019-7-20 16:42 | 只看该作者
您能具体指出来一下么 不胜感激

使用特权

评论回复
12
huanghuac|  楼主 | 2019-7-20 16:46 | 只看该作者
百度了下非正弦周期交流电压的有效值计算,那么按照计算公式,我这个案例中直流分量在1.66V,也就是说我这个案例的有效值²=1.66²+[(u1-1.66)²+(u2-1.66)²+...+(un-1.66)²]/n,其中u1,u2...un为我采样点压的瞬时值,不晓得这样理解正确与否。

使用特权

评论回复
13
huanghuac|  楼主 | 2019-7-20 16:49 | 只看该作者

搞定了,结贴,是我之前计算有效值的方法有误,现在先计算出平均值即直流有效值,然后在将每一个瞬间电压扣除有效值之后平方和再平均再开根号即可得出交流有效值

使用特权

评论回复
14
xiaoqizi| | 2019-8-9 12:54 | 只看该作者
帮楼主顶一下

使用特权

评论回复
15
木木guainv| | 2019-8-9 12:58 | 只看该作者
帮楼主顶一下吧

使用特权

评论回复
16
磨砂| | 2019-8-12 09:35 | 只看该作者
资料少的话 只能是自己各种尝试了

使用特权

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

本版积分规则

772

主题

8473

帖子

6

粉丝