找回密码
 立即注册
查看: 404|回复: 2

AI8051做FOC,两电阻ADC采样,算出来的Ic不对,怀疑相位问题,怎么解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-23 11:02:08

8

主题

12

回帖

162

积分

注册会员

积分
162
发表于 2025-1-20 12:15:55 | 显示全部楼层 |阅读模式
问题描述:

最近在弄基于AI8051的FOC控制,硬件上设计,使用两电阻采样的方式,采集Ia,Ib,第三相Ic通过Ic = -(Ia+Ib)计算得到,在开环运行测试中,电机可以正常转起来,电流也大致呈正弦波,但是计算出来的Ic一直整体往下偏移一部分。
非常困惑,,我试图在Ic计算出来的结果加0.3左右,大致能够和Ia,Ib一样,抵消偏移,但是,我Uq设定给小一点,也就是给定的电流小一点,Ic又会偏上。
尝试分析:
通过数据分析,单片机跑的计算关系应该没问题,看波形感觉是Ia,Ib可能采集出来的波形相位有问题,导致计算出的Ic产生偏移。
怀疑点:
1、我ADC采样使用的是DMA采样,硬件上设计的是下桥臂采样,这个DMA采样和PWM输出,桥臂开关时序上不一致,(理论上是下桥臂关断进行电流采样)。就是我这个ADC采样没有控制采样时序,采样时刻不对
2、我PWM的频率过高,这个问题和1差不多。
程序配置:
1、PWM:中心对齐模式,输出的频率为12Khz,PWMA_ARR的值为5000;
2、主频时钟40Mhz
3、ADC配置如下(参考了王大佬代码):DAM采集,2个通道,连续采集4次,读取4次的均值。

// ADC结果寄存器
bit DmaFlag = 0;
u16 ADC_Result_U, ADC_Result_V;
u8 xdata ADC_DMA[ADC_CH][ADC_DATA];
void ADC_Init(void)
{
    ADCTIM = 0x3f; // 设置通道选择时间、保持时间、采样时间
    ADCCFG = RES_FMT + ADC_SPEED;
    // ADC模块电源打开后,需等待1ms,MCU内部ADC电源稳定后再进行AD转换
    ADC_CONTR = 0x80 + 0; // ADC on + channel
    DMA_ADC_STA = 0x00;
    DMA_ADC_CFG = 0x85;                      // bit7 1:Enable Interrupt,1/1优先级,总共3/3
    DMA_ADC_RXAH = (u8)((u16)&ADC_DMA >> 8); // ADC转换数据存储地址
    DMA_ADC_RXAL = (u8)((u16)&ADC_DMA);
    DMA_ADC_CFG2 = ADC_CFG2[Read_Count]; // 每个通道ADC转换次数,自动查表换算
    DMA_ADC_CHSW0 = 0x0C;                // ADC通道使能寄存器 ADC7~ADC0
    DMA_ADC_CHSW1 = 0x00;                // ADC通道使能寄存器 ADC15~ADC8

    // 打开的分别是ADC9:V相电流|ADC10:U相电流
    DMA_ADC_CR = 0xc0; // bit7 1:Enable ADC_DMA, bit6 1:Start ADC_DMA
       

}
void ADC_DMA_Interrupt(void) interrupt 48
{
    DMA_ADC_STA = 0;
          DmaFlag = 1;
    ADC_Result_U = ADC_DMA[0][ADC_DATA - 2] << 8 | ADC_DMA[0][ADC_DATA - 1];
    ADC_Result_V = ADC_DMA[1][ADC_DATA - 2] << 8 | ADC_DMA[1][ADC_DATA - 1];
}


开环跑的波形图:
0.16A左右输出的电流
截图202501201210348985.jpg
截图202501201211185976.jpg
0.5a左右输出电流
截图202501201214169014.jpg

因为我后续电流闭环等,需要坐标变换,但是现在电流不对,变换出来的也是错的。想问问怎么解决。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-1-20 18:09:32 | 显示全部楼层
大概有这么几种方式:
adc采样加快,调节ADC_SPEED参数(不过需要保证adc采样部分的充电电流足够大,不然内部adc的采样保持电容如果没充满电就会导致波形稀碎)

进行相位移动补偿,将一个相位的数据进一个延迟队列,进行类似于fifo的操作,让这一个相位延迟后的数据再跟另一个相位计算,最终得到三相的数据。
相位滞后大多是因为采样速度和处理速度问题,通过固定补偿即可解决。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-23 11:02:08

8

主题

12

回帖

162

积分

注册会员

积分
162
发表于 2025-1-23 10:54:53 | 显示全部楼层
王*** 发表于 2025-1-20 18:09
大概有这么几种方式:
adc采样加快,调节ADC_SPEED参数(不过需要保证adc采样部分的充电电流足够大,不然内 ...

好的,我两种方式都试一下看看,谢谢您
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:28 , Processed in 0.125035 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表