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.

[参考译文] TMS320F280049C:将 Instaspin 用作 BLDC 生成器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1277722/tms320f280049c-using-instaspin-for-bldc-used-as-generator

器件型号:TMS320F280049C
主题中讨论的其他器件:LAUNCHXL-F280049CBOOSTXL-DRV8320RS、DRV8320

大家好!

instaspin 库和实验很棒!  我能够使用一个 LaunchXL-F280049C 和一个 BoostXL-DRV8320RS 以及您的示例代码、将一个 BLDC 用作发电机!  然而、FAST 估算器在一个方向上似乎不稳定。  当然、这取决于电路板上所连接的相位顺序、但对于这篇文章、我要将稳定方向称为逆时针、将不稳定方向称为顺时针。

我完成了 IS01-IS09的 MotorControl SDK InstaSPIN Labs 实验、软件会准确识别电机、让我关闭电流/扭矩环路、并能够以非常稳定的方式进行速度控制。  我学习了实验 is09 (快速启动)、并为直流电压控制添加了一个 PI 实例(就像电流和转速 PI 控制器一样)、向 motorVars 结构添加了一个名为"flagEnableDCctrl"的模式、 一条 if then 语句、允许 PI 控制器运行、并向机械方向施加电扭矩计数器、从而将直流链路电压控制在设定值。  很棒!  我可以使用旋转电机为2节串联的12V 铅酸电池充电、电压为28V。  但是、这仅在电机逆时针旋转时有效。  如果电机顺时针旋转、FAST 估算器中的估算变量会变得不稳定。  我会浏览估计器函数的代码、但这些函数似乎都是硬编码的且无法访问。

我所做的另一项修改是在 DRV8320RS 的硬件中进行的。  我在蓝色直流链路螺纹接线端子附近的直流链路上增加了2.2mF 的电容、并在 C2、C3和 C4处增加了额外的陶瓷电容、每个增加了2个额外的电容、1个0.1uF 和1个1uF。

这个事情太棒了、我真的很高兴 TI 提供了这个功能!  如果我能让它在两个方向上运行就更好了!  有人知道发生了什么吗?

贾斯廷

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

    InstaSPIN-FOC 可以通过双向旋转运行电机、而无需任何更改、只需将参考速度设置为负值、但我们没有使用 InstaSPIN-FOC 将该机器作为发生器运行。

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

    您好!

    感谢您的回复!  我在实验室中确实注意到了这一点!  在将电能转换为机械能时、可以向任一方向驱动电机。  您知道 FAST 估算器在一个方向上运行时与在另一个方向上运行时是否有不同之处?  老实说、我有点不明白为什么在将机械能转换为电能时、它的行为会有所不同。

    贾斯廷

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

    当机器在发生器模式下工作时、FAST 估算器可能无法正常工作。 我们没有测试生成模式。

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

    您好!

    能否在生成模式下测试 FAST 估算器?  如果您测试估算器、我会很乐意编写将其置于生成模式的代码、但我只是无法访问估算器。

    贾斯廷

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

    抱歉、 在我们的实验中很难直接在生成模式下测试 FAST 估算器、但当风扇或风机在 生成模式下运行很短的时间并且 BEMF 电压低于直流母线电压时、FAST 估算器似乎工作良好。

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

    我可以把设备送到您的设备来很容易地对其进行测试。  "那怎么办?

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

    您能提供测试设备的图片吗? 以及如何使用测试设备? 我们需要知道它是否可在我们的实验室中实现?谢谢!

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

    这可能需要几天,但是的,我绝对可以做到这一点!   

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

    这听起来不错。 谢谢!

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

    这是我们为 AM57x 器件

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

    唯一的定制部件是电机上的铝质主轴和电机底座。  如上所述、boostxl 电机驱动板进行了少许修改。  我现在有一段 GoPro 视频、介绍了它如何上传、我也会尝试在这里发布。  @罗艳明,你有这些东西,还是要我把它们都寄给你?

    贾斯廷

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

    gopro.com/.../GBpPz7LoL1ZpE

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

    看起来 FAST 估算器在电机运行并设置相反的基准速度/电流时效果良好。 这种情况可能与您需要的情况类似。

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

    你一定会明白的!  当电机是顺时针旋转而不是逆时针旋转时、您是否在视频中看到了奇怪的行为?

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

    否。 您可以尝试为转矩电流添加斜坡控制、以确保直流母线上没有高压升压。

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

    你无法在一个方向上看到稳定性、而在另一个方向上看不到稳定性?  您是否能够观看 GoPro 视频、或者是否有更好的方法来获取视频?

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

    不是真正的发电机、当基准速度从正极快速变为负极时、只是机器将处于发电机模式。

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

    我不明白、能否重新解释一下?

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

    以顺时针方向和正扭矩电流将电机旋转到更高的速度、然后停止电机并以负电流旋转电机。

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

    我还是不太明白。  您是说我已经在做这件事、还是要让我尝试一下?

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

    大家好、Justin、

    我对您如何看待高侧和低侧 PWM 驱动器未首先进入高阻抗模式感到困惑。 为了产生真正的电动势功率、NFETS 的体二极管必须续流以将交流相电流整流为直流电流。

    因此、当钻孔速度超过 BLDC 轨迹设定速度 user.h 时、似乎唯一完成的操作就是直流母线电压调节。 这就是为什么风力涡轮发电机需要电阻式转储负载、因为发电机中的三个二极管将交流整流为脉冲直流、在这种情况下电池有助于进一步使直流平稳。 我的观点是、在这种情况下、没有净增益、只需将电能用于为钻机供电。

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

    高 PWM 和低 PWM 驱动器正在切换、就像 VSI 反向变为三相 PFC 一样。  是的、体二极管有时会导通、但开关会将系统变成交流/直流升压转换器。  如果您不关心电机的速度是多少、您可以将直流电压环路级联到现有的扭矩环路中、并根据需要消耗功率来保持直流链路电压。  如果您关心速度是多少(通常是风力发电的情况)、则可能需要将功率放在某个位置(例如电阻负载)。

    正直流电压和正直流电流-实际功率在不断变化的视频正上方就证明了这一点。  当您将负载与这些电池并联并感觉手臂上的扭矩增大时,系统会从电机中产生更多的功率,从而可以得到更多的证明:-)。

    贾斯廷

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

    您只需启用可在电机和发生器模式下工作的 FAST 估算器即可。

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

    您是说当您顺时针而不是逆时针旋转时、FAST 估算器正在以某种方式被禁用吗?  无论方向如何、调用估算器的部分都是相同的、并且实际上与您在 instaspin-foc 实验的实验6中提供的代码相同。  是否有单独的东西可以禁用 FAST 函数的调用?  我愿意尝试任何你认为最好的东西,我只是很难理解你告诉我要做什么。  您最后说的是"以顺时针方向和正扭矩电流以更高速度旋转电机、然后停止电机并以负电流旋转电机"。  我问"我还是不太明白。  你说我已经在做这件事了,还是你告诉我要尝试这件事吗?"然后我们似乎走了不同的方向。  是否可以在继续之前回答该问题?

    贾斯廷

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,体二极管有时会导通,但开关会将系统转换为交流/直流升压转换器。

    这似乎合理、想知道您是否在 NexFET 同时监控其温度?它们是否在提升电压或并联负载? 您对修改速度 PI 控制器和修改快速启动项目有点不知所措。 TI 文档再生模式禁用从 MCU 到半桥的 PWM 开关、并考虑了行业中的工作原理。 看起来、用户可以翻转 U&W 导致、以反转转换器的方向、并让软件保持原样。

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

    这取决于项目中的设置。 您需要始终启用 FAST 估算器。 您可以参考支持快速启动功能的实验。

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

    您是否认为 FET 的温度可能是逆时针方向稳定的顺时针方向不稳定问题的原因?  你说得对、我可以更改 U&W、然后使其相反、但我希望找出一种方法、使其在任一方向都保持稳定。

    快速启动项目具有闭环 DQ 电流控制功能、可以在电机已旋转时启动、但还没有速度控制功能(如实验7中所示)。  这意味着您拥有一个可以将命令馈送到其中的稳压器控制器。  我所做的就是通过快速启动实现一切电流控制、并安装一个直流控制器来代替速度控制器。  在实验7中、速度控制器向电流控制器发送命令。  在我的版本中、直流控制器向电流控制器发送命令。

    至于"再生模式从 MCU 禁用 PWM 开关"、您在哪里发现了它?

    贾斯廷

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

    这些设置显然会启用 FAST 估算器、因为它在一个方向上工作。  我确实提到了支持快速启动的实验室、这就是我怎么做到的。  您需要通过什么条件来确定 FAST 估算器为什么在一个方向上工作、而在另一个方向上不工作?  我如何知道 FAST 估算器是否以某种方式被禁用?

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

    如果 FAST 估算器在一个 方向上工作、则应该可以在另一个方向上工作。 如果 FAST 估算器即使在禁用 PWM 以关闭电机电源时仍能估算转子的速度和角度、则这意味着 FAST 估算器始终处于启用状态。

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

    我同意!  然而、它不... 我将禁用 PWM 并沿两个方向旋转、看看估算器的功能是什么。  工作原理?

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

    此外、哪些数据可以帮助您了解具体情况?  如果您认为数据会帮助您弄清楚发生了什么、我可以观看任何内容并向您提供数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将禁用 PWM 并朝两个方向旋转,看看估算器的功能。  工作?

    原始实验可支持禁用 PWM 的快速启动、但始终启用 FAST 估算器。 您可以按如下所示检查估算器状态、该状态可能是"EST_State_Online"。  

    //获取状态
    obj->estState = EST_getState (obj->estHandle);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    至于"可再生模式禁用来自 MCU 的 PWM 切换",您在哪里发现了这一点?

    发送到 TI 智能栅极驱动器的几个 SPI 控制寄存器代码中的一个。 有些具有制动或滑行(重新生成)的代码、其中启用底部 NFETS、禁用顶部以制动。 表15《DRV8320智能栅极驱动器用户指南》。

    滑行向该位写入1可将所有 MOSFET 置于 Hi-Z 状态。

    向 Lab_is09快速启动命令添加了代码 snip SPI 进入滑行模式、例如重新生成! 我尚未测试环路、但它只是将滑行位设置为 true 并检查是否启用了滑行位。 认为代码确实会验证 SPI 接口控制寄存器上的位冲突。   

            runFlyingStart(estHandle);
    
            //
            // run the speed controller
            // when speed control set true
            //
            if(EST_doSpeedCtrl(estHandle))
            {
                counterSpeed++;
    
                if(counterSpeed >= userParams.numCtrlTicksPerSpeedTick)
                {
                    if(motorVars.flagEnableSpeedCtrl == true)
                    {
                        counterSpeed = 0;
    
    					#ifdef DRV8320_SPI
    							// Check control REG2 bit 2 bool state
    						   if(drvSPI8320Vars.Ctrl_Reg_02.COAST == true)
    						   {
    							   // Disable Coasting NFETS ~high Z state
    							   drvSPI8320Vars.Ctrl_Reg_02.COAST = false;
    					 tryagain_1:
    							   // Write the update
    							   drvSPI8320Vars.writeCmd = 1;
    							   HAL_writeDRVData(halHandle, &drvSPI8320Vars);
    							   // Verify Control REG 2 Update
    							   drvSPI8320Vars.readCmd = 1;
    							   HAL_readDRVData(halHandle, &drvSPI8320Vars);
    							   // Something go wrong SPIB INT6.3/4 IRQ ?
    							   if(drvSPI8320Vars.Ctrl_Reg_02.COAST == true)
    							   {
    								   goto tryagain_1;
    							   }
    						   }
    					#endif
    
                        PI_run_series(piHandle_spd,
                                      estInputData.speed_ref_Hz,
                                      estOutputData.fm_lp_rps * MATH_ONE_OVER_TWO_PI,
                                      0.0,(float32_t *)(&(Idq_ref_A.value[1])));
                    }
                    // Disabled speed control, do Torque Control Coasting Mode
                    else
                    {
                    	// Set coasting torque reference current, 0.0 set above
                    	// Typically inverter is not in High Z state
                        Idq_ref_A.value[1] = IdqSet_A.value[1];
    
    					#ifdef DRV8320_SPI
    							// Check control REG2 bit 2 bool state
    						   if(drvSPI8320Vars.Ctrl_Reg_02.COAST == false)
    						   {
    							   // Enable Coasting NFETS high Z state
    							   drvSPI8320Vars.Ctrl_Reg_02.COAST = true;
    					 tryagain_2:
    							   // Write the update
    							   drvSPI8320Vars.writeCmd = 1;
    							   HAL_writeDRVData(halHandle, &drvSPI8320Vars);
    							   // Verify Control REG 2 Update
    							   drvSPI8320Vars.readCmd = 1;
    							   HAL_readDRVData(halHandle, &drvSPI8320Vars);
    							   // Something go wrong SPIB INT6.3/4 IRQ ?
    							   if(drvSPI8320Vars.Ctrl_Reg_02.COAST == false)
    							   {
    								   goto tryagain_2;
    							   }
    						   }
    					#endif
    
                    }
                }
            }
            // Clear the Idq torque reference
            else
            {
                Idq_ref_A.value[1] = 0.0;
            }

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

    检查 estInputData.speed_ref_Hz 和 estInputData.speed_int_Hz 以运行 EST_run ()函数。 您可以尝试将  estInputData.speed_ref_Hz 和  estInputData.speed_int_H 的符号设置为电机的旋转方向、或者  在停止电机时将这些符号的值 estInputData.speed_ref_Hz 和 estInputData.speed_int_H 设置为零。