299|4

376

帖子

1

TA的资源

一粒金砂(中级)

AD采样通过FFT算幅值和角度不对 [复制链接]

邀请:@54chenjq   参与回复

使用STM32F103采样3个交流电压、3个交流电流,但因为电流采样范围较宽,所以使用多级运放进行不同倍数的放大,共开通12个AD通道,3个电压通道,9个电流通道。

使用TIM3定时器,设置每周波(20ms)采64个点,DMA一直在传送;

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 2-1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 11250-1;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
  }

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */
  if (htim == (&htim3))
     {
             HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Cache,12);
         }
  /* USER CODE END Callback 0 */
 
  /* USER CODE BEGIN Callback 1 */
 
  /* USER CODE END Callback 1 */
}

 

通过ADC回调函数将转换的采样取出来:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if(hadc==&hadc1)
    {    
        adc_data[0].sample[pcnt]=ADC_Cache[0];
         adc_data[1].sample[pcnt]=ADC_Cache[1];
        adc_data[2].sample[pcnt]=ADC_Cache[2];

       。。。。。。。

      /*省略这一段就是12个通道的采样取值*/        

        pcnt++;
        pcnt&= 255;
        if(pcnt%64==0)
        {
          calc_flag=1;
            fft_ptn=pcnt;
      }
    }   
}

采到64个点,就置一个标志位,使用FFT算幅值和角度。使用的是ST自带的FFT计算库中的:

cr4_fft_64_stm32(lBUFOUT,lBUFIN,64);

再计算实部和虚部,通过实部虚部再算幅值和角度。

其中,幅值是算了1~9次谐波累加再开方作为幅值;

角度是phase=(atan2(lBUF_v[1].imag,lBUF_v[1].real)/PI*180.00),因为我认为1次正弦波就是50hz,角度就是该频率点下的角度。

问题是:

(1)算出来的幅值乘以系数后,只能在某个区间是对的,比如在200~240V电压之间是对的。将电压调低,算出来的数据就差的比较多,需要改系数,但对其他区间的电压采样又不对。

(2)算出来的角度,以A相为基准,认为是0度,用B相减去A相,C相减去A相,B,C角度总在变,一会是-121,118,一会是245,114,一会是-240,128,一会是-125,-248。

想问问这种可能是什么原因。

最新回复

电力行业32、36、64点FFT是比较常见的   详情 回复 发表于 2024-6-11 14:42

回复
举报

976

帖子

0

TA的资源

五彩晶圆(初级)

留各痕迹,这个问题确实不知道原由,用硬件电路搭建的过零比较器,输入50Hz不同幅度的正弦信号,也存在用边沿判断相位调不准的问题。

回复

888

帖子

0

TA的资源

纯净的硅(高级)

我数学不是太好,但也做过一些FFT分析,效果很好。

有个原则:一个周期的数据无论采集密度多好(64点),都不能做FFT,否则结果离散度很大!

建议目前情况,512点试试,应该有一定效果,但不见得好。

点数越多,分析结果越准,我用过12位采样/1024点FFT,误差都在0.1%以内。非常稳定。

 

点评

对,64点,32点在电力中常用,而且算出来的没什么问题。 应该还是程序有问题。  详情 回复 发表于 2024-6-13 00:05
电力行业32、36、64点FFT是比较常见的  详情 回复 发表于 2024-6-11 14:42
个人签名چوآن شـين

回复

99

帖子

0

TA的资源

一粒金砂(中级)

Gen_X 发表于 2024-6-11 11:37 我数学不是太好,但也做过一些FFT分析,效果很好。 有个原则:一个周期的数据无论采集密度多好(64点) ...

电力行业32、36、64点FFT是比较常见的


回复

376

帖子

1

TA的资源

一粒金砂(中级)

Gen_X 发表于 2024-6-11 11:37 我数学不是太好,但也做过一些FFT分析,效果很好。 有个原则:一个周期的数据无论采集密度多好(64点) ...

对,64点,32点在电力中常用,而且算出来的没什么问题。

应该还是程序有问题。


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表