This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:含传感器的 HVPM

Guru**** 2220740 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/754315/tms320f28335-sensored-hvpm

器件型号:TMS320F28335
Thread 中讨论的其他器件:controlSUITE

尊敬的 TI 社区:

我尝试使用 FOC 技术控制 PMSM。  

我从一个示例项目"无传感器28335"开始、并进行了一些修改。

我为电流和速度环路、QEP 模块(4096条编码器线路)、速度宏使用了 PI 控制器。。

 lsw = 0,转子移动一个位,然后被锁定:磁场在 d 轴上定向。

 qep1.calibratedAngle 等于  0。

 lsw = 1:当我使用 park.angle = rg1.out 时,转子会旋转,但 rg1.out 和 qep1.thetaElectric 之间有很大的差异。

对于 park.angle=qep1.Thetaelectric、在这种情况下、转子保持锁定状态不会旋转。

我的程序如下所示,

----------------------------------------------------

 if (lsw = 0) RC1.targetValue = 0;
  否则 RC1.targetValue = spdrF1;//1.
   RC_MACRO (RC1)

//----------------------------------
// 连接斜坡生成模块的输入并调用斜坡生成器宏
//----------------------------------
    rg1.Freq = RC1.SetpointValue;
   RG_MACRO (rg1)

//校准角度
如果(lsw = 0){EQep1Regs.QPOSCNT=0;EQep1Regs.QCLR.bit.IEL = 1;}//重置位置 cnt。


if (((EQep1Regs.QDLG.bit.IEL=1)&& Init_IFlag=0)//检查第一次出现的索引
{qep1.CalibratedAngle= EQep1Regs.QPOSILAT;Init_IFlag++;}//保持锁存位置


if (lsw!=0) QEP_MACRO (qep1);


//----------------------------------
// 测量相电流、减去偏移并将其从(-0.5、+0.5)标准化为(-1、+1)。
//   连接 Clarke 模块的输入并调用 Clarke 变换宏
//----------------------------------
 
   clarke1.as=(AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909;//相位 A 电流
   clarke1.B=(AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909;//相位 B 电流
                                                       
      
   
   Clarke_macro (clarke1)  

//----------------------------------
// 连接驻车模块的输入并调用驻车变速器。 宏
//----------------------------------
   park1.Alpha = clarke1.Alpha;
   park1.Beta = clarke1.Beta;
   if (lsw = 0) park1.Angle = 0;
   否则、如果(lsw = 1) park1.Angle = qep1.ElecTheta;//rg1.Out;//
   
   park1.sine =_IQsincu (park1.Angle);
   park1.Cosine =_IQcosPU (park1.Angle);
   
   PARK_MACRO (park1)

   //----------------------------------
   //   调用 QEP 计算模块
   //----------------------------------
       QEP_MACRO (1、qep1);

   //----------------------------------
   //   连接 SPEED_FR 模块的输入并调用速度计算宏
   //----------------------------------
  speed1.ElecTheta = qep1.ElecTheta;
  speed1.DirectionQep =(Int32)(qep1.DirectionQep);
  SPEED_FR_MACRO (speed1)

   //----------------------------------
   // 连接 PI 的速度输入
   //----------------------------------
  if (SpeedLoopCount=SpeedLoopPrescaler){
  pi_spd.Ref = RC1.SetpointValue;
   pi_spd.fbk = speed1.Speed;
   pi_macro (pi_spd);
   SpeedLoopCount=1;
  }
  否则{
      SpeedLoopCount= SpeedLoopCount+1;
  }
//----------------------------------
// 连接 PI 模块的输入并调用 PI IQ 控制器宏
//----------------------------------  
   if (lsw = 0) pi_iq.Ref = 0;
   否则、如果(lsw = 1) pi_iq.Ref = pi_spd.out;//_iq (0.1);//
   pi_iq.fbk = park1.qs;
   pi_macro (pi_iq)

//----------------------------------
// 连接 PI 模块的输入并调用 PI ID 控制器宏
//----------------------------------   
   if (lsw = 0) pi_id.Ref =_IQ (0.05);
   否则 pi_id.Ref = IDREF;
   pi_id.fbk = park1.ds;
   pi_macro (pi_id)

//----------------------------------
//   连接 INV_PARK 模块的输入并调用逆向 Park 转换。 宏
//----------------------------------
   ipark1.ds = pi_id.out;
   ipark1.qs = pi_iq.out;
   ipark1.sine  = park1.sine;
   ipark1.Cosine = park1.Cosine;
   IPark_MACRO (ipark1)

//----------------------------------
// 连接 SVGEN_DQ 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
    svgen1.Ualpha = ipark1.Alpha;
    svgen1.Ubeta = ipark1.Beta;
    SVGENDQ_MACRO (svgen1)        

//----------------------------------
// 连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
   pwm1.Mfunc1 = svgen1.Ta;  
   pwm1.MfuncC2 = svgen1.tb;   
   pwm1.MfuncC3 = svgen1.tc;
   PWM_MACRO (1、2、3、pwm1)                      //计算新的 PWM 比较值    

//----------------------------------
//   连接 PWMDAC 模块的输入
//----------------------------------    
   pwmdac1.Mfunc1 = clarke1.as;
   pwmdac1.MfuncC2 = clarke1.B;
   PWMDAC_MACRO (6、pwmdac1)                       // PWMDAC 6A、6B
   
   pwmdac1.Mfunc1 = qep1.ElecTheta;
   pwmdac1.MfuncC2 = svgen1.tB-svgen1.tc;
   PWMDAC_MACRO (7、pwmdac1)                       // PWMDAC 7A、7B  
   
//----------------------------------
//   连接数据记录模块的输入
//----------------------------------
   DlogCh1 =_IQtoQ15 (clarke1.As);
   DlogCh2 =_IQtoQ15 (clarke1.Bs);
   DlogCh3 =_IQtoQ15 (qep1.ElecTheta);
   DlogCh4 =_IQtoQ15 (rg1.out);

请帮帮我。
此致、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以参阅 HVPM_Sensored 或 HVPM_Sensored_Servo 示例项目、因为您使用的是基于传感器 FOC 的编码器位置传感器、所以这两个项目也可以在 controlSUITE 中找到。
    请确保编码器的物理连接正确、并对编码器进行校准。 您应该根据电机的编码器更改 qep1.CalibratedAngle、如果校准值不正确、可能是 RG 模块和 QEP 模块的输出之间存在一些差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    罗燕明、您好!
    感谢您的回答、我将检查连接。
    对于角度校准:首次检测到索引信号时,qep1.CalibratedAngle 获取 EQep1Regs.POSCNT 的值。 当您根据编码器更改校准角时,您的意思是编码器的行数?
    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不仅编码器行数、还需要设置 qep1.CalibratedAngle、该角度来自安装偏移量、可通过使用对齐电机的转子来实现。 您可能会在示例项目中找到该过程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    罗燕明、您好!

    我解决了这个问题:我的编码器生成了六个信号 A、B、I 和它们的互补信号。 我只使用 A、B、I 作为 QEP 模块的输入、寄生信号(由逆变器引起)在 ThetaElectrical 中产生了很多失真。 我添加了 AM26LS32ACN、现在它工作正常。

    谢谢、      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒! 感谢您的更新。 如果您有任何疑问、请告诉我。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我遇到了位置环路的另一个问题。

    我的主要目标是使索引信号(来自编码器)与外部信号(来自 GBF)同步。

    我使用"捕获"从外部信号读取频率:即参考速度。  

    然后,我使用电流和速度环路应用了矢量控制:我使用示波器检查了 IQ 电流基准和反馈(也用于速度),使用板载 PWM6A PWM6B 引脚。 PI 校正器工作正常。

     使用 Ecaps*Regs 的 delta 模式配置,我使用由 cap.EventPeriod 偏离的捕获 TSCTR 的计时器作为位置参考(外部信号)和位置反馈(来自索引)的图像。然后,我为此循环使用比例校正器。

    在稳定状态下、电流和速度反馈与小数点后最多两位数的引用相同(在 CCS 中使用表达式窗口)。  

    同步两个信号的问题很复杂:索引信号在外部信号的上升沿附近振荡。

    您是否认为这是由于速度和电流的基准与反馈之间的小误差造成的,当我们从 p.u 传递到实刻度时,该误差变得相当大。  

    例如,转速为3000rpm 时:速度误差= 0.005pu 时,这意味着实际转速误差为15rpm。