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.

[参考译文] DRV8308:无法在闭环模式下实现低RPM

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/635668/drv8308-unable-to-achieve-low-rpms-in-closed-loop-mode

部件号:DRV8308

我们正在使用具有DRV8308的77W 8极BLDC。  我们的应用程序是一款可容纳20 kg 的小型户外车辆。  起动速度必须非常慢(约为1 km /小时)。

使用DRV8308 EVM和我们自己的PCB,我们无法以低于60Hz的速度获得可靠的锁环。

在我们的车辆上,60Hz转换为约1.2 km /小时,但从0 Hz直向60 Hz转换为60 Hz会导致突然的急动。  如果我们选择低于60Hz的任何速度(例如 30Hz),我们在BLDC中遇到了抖动/抖动,很难重新获得控制(必须选择大于100Hz的目标速度才能重新获得控制)。

我们如何使DRV8308在低速时获得锁?

非常感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Andrew,

    您正在使用什么寄存器设置?
    您尝试了哪些寄存器设置,结果如何?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    下面是我们获得的结果,然后是用于实现该目标的寄存器设置。

    Fclkin是我们用来尝试从静止启动BLDC的输入。  该表显示了我需要什么LOOPPGN值才能使其继续运行。
    目前,我只需在初始化时选择一个LOOPGNN值,然后保留该值。

    以下是用于初始化DRV8308的寄存器设置。  这些评论反映了我们所作的修改。
    请告诉我,我是否可以做些什么来提高它的可读性。

    // CTRL1寄存器
    G_CTRL1_REG.Address = 0x00;
    G_CTRL1_REG.AG_SETPT = 0x7;//Andrew:AG_SETPT://4 - 48Hz //7 - 382Hz。
    G_CTRL1_REG.ENPOL = 0x0;
    G_CTRL1_REG.DIRECPOL = 0x0;
    G_CTRL1_REG.BRKPOL = 0x0;
    G_CTRL1_REG.SYNRECT = 0x1;
    G_CTRL1_REG.PWMF = 0x1;//Andrew:50kHz。
    G_CTRL1_REG.SPDMODE = 0x0;//Andrew:闭环时钟频率模式。
    G_CTRL1_REG.FGSEL = 0x0;//Andrew:hall-u
    G_CTRL1_REG.BRKMOD = 0x0;
    G_CTRL1_REG.retry = 0x1;

    //高级寄存器
    G_Advance REG.Address = 0x01;
    G_Advance _REG.Advance = 0x21;//Andrew:33 (默认)。

    // COMCTRL1寄存器
    G_COMCTRL1_REG.Address = 0x02;
    G_COMCTRL1_REG.SPDREVS = 0x03;
    G_COMCTRL1_REG.MINSPD = 0xB4;

    // MOD120寄存器
    G_MOD120_REG.Address = 0x03;
    G_MOD120_REG.basic = 0x0;
    G_MOD120_REG.SPEEDTH = 0x4;//Andrew:锁定公差0x4 - 3.13 %。 //0x6 - 12.5 %。
    G_MOD120_REG.MOD120 = 0xF82;//Andrew:MOD120:3970 (根据数据表)。

    //驱动器寄存器
    G_DRIVE_REG.Address = 0x04;
    G_DRIVE_REG.LRTIME = 0x0;
    G_DRIVE_REG.HALLRST = 0x0;
    G_DRIVE_REG.DELAY = 0x0;
    G_DRIVE_REG.AUTOADV = 0x0;//Andrew:自动相位提前关闭。
    G_DRIVE_REG.AUTOGN = 0x0;//Andrew:自动LOOPGAIN调整关闭(在低转速时不稳定)。
    G_DRIVE_REG.ENSINE = 0x0;
    G_DRIVE_REG.TDRIVE = 0x1;
    G_DRIVE_REG.DTIME = 0x0;
    G_DRIVE_REG.IDRIVE = 0x0;

    // SPDGAIN寄存器
    G_SPDGAIN_REG.Address = 0x05;
    G_SPDGAIN_REG.INTCLK = 0x2;//Andrew:INTCLK:2 - 12.5MHz,INTCLK:4 - 3.1 MHz,5 - 1.6MHz (集成商clk)。 INTCLK越高,越多越好。
    G_SPDGAIN_REG.SPDGAIN = 0x001;//Andrew:'1'的SPEEDGAIN最稳定。

    // FILK1寄存器
    G_FILK1_REG.Address = 0x06;
    G_FILK1_REG.HALLPOL = 0x1;//Andrew:HALLPOL反转(请勿触摸)。
    G_FILK1_REG.BYPFILT = 0x0;//Andrew:不要绕过过滤器(请勿触摸)。
    G_FILK1_REG.FILK1 = 0x12C;//0x2BC;//0x4DB;//Andrew:610Hz时的滤波器极1 (微调,不要触摸)。

    // FILK2寄存器
    G_FILK2_REG.Address = 0x07;
    G_FILK2_REG.FILK2 = 0x4D1;//Andrew:75Hz时的过滤器零1 (微调,请勿触摸)。

    // COMPK1寄存器
    G_COMPK1_REG.Address = 0x08;
    G_COMPK1_REG.BYPCOMP = 0x1;//Andrew:请绕过补偿器。
    G_COMPK1_REG.COMPK1 = 0x12C;//Andrew:Pole2146Hz (默认值),但被绕过。

    // COMPK2寄存器
    G_COMPK2_REG.Address = 0x09;
    G_COMPK2_REG.AA_SETPT = 0x0;//Andrew:AA_SETPT:0 - 3Hz (默认值),但绕过了AA。
    G_COMPK2_REG.COMPK2 = 0x258;//Andrew:Zero2为36Hz (默认值),但正在被绕过。

    // LOPGN寄存器
    G_LOOPGN_REG.Address = 0x0A;
    G_LOOPGN_REG.OCPDEG = 0x3;//Andrew:脱模时间(5us)(默认);请勿触摸。
    G_LOOPGN_REG.OCPTH = 0x3;//Andrew:OCP阈值(1V)(默认值);请勿触摸。
    G_LOOPGN_REG.OVTH = 0x0;//Andrew:OV阈值(0)(默认);请勿触摸。
    G_LOOPGN_REG.VREF_EN = 0x0;//Andrew:VREGEN (0)(默认值);请勿触摸。
    G_LOOPGN_REG.LOOPGN = 30;//Andrew:(十进制) LOOPGAIN必须从FGOUT = 60Hz开始。

    //速度寄存器
    G_SPEED REG.Address = 0x0B;
    G_SPEED _REG.SPEED = 1400;//Andrew:开环最大速度。 设置为8000 RPM (0x1F40)。 // 4000 = 0xFA0

    //故障寄存器
    G_FAULT_REG.Address = 0x2A;//Andrew:目前请勿触碰其中任何一个。
    G_FAULT_REG.RLOCK = 0x0;
    G_FAULT_REG.VMOV = 0x0;
    G_FAULT_REG.CPFAIL = 0x0;
    G_FAULT_REG.UVLO = 0x0;
    G_FAULT_REG.OTS = 0x0;
    G_FAULT_REG.CPOC = 0x0;
    G_FAULT_REG.OCP = 0x0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Andrew,

    我们必须进一步调查。 在我们调查期间,您是否可以尝试使用G_MOD120_REG.basic = 0x1的较低Fclkin,并报告您的发现。

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    感谢您的及时回复。
    我尝试过G_MOD120_REG.basic = 0x1,但遗憾的是没有改进;BLDC可以启动的最低速度相同。

    Andrew