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.

[参考译文] 在通用电机控制实验室项目中定义 BLDC 集线器电机参数的帮助

Guru**** 2454730 points
Other Parts Discussed in Thread: DRV8353, LAUNCHXL-F280025C, DRV8353RS-EVM, DRV8300U

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1296723/help-in-defining-my-bldc-hub-motor-parameters-in-universal-motor-control-lab-project

主题中讨论的其他器件:DRV8353RS-EVM、DRV8353、 DRV8300U

您好!

我正在    使用  DRV8353RS-EVM + LaunchXL-F280025C 为我的双轮 BLDC 集线器电机参考通用电机控制实验室测试/开发固件。  使用并联的评估板进行测试、而我的产品板准备就绪、可以支持比 DRV8353RS-EVM 更高的电流。

请帮助您在 user_mtr1.h 文件中定义电机相关参数。

我正在修改 .h 文件中的默认 Teknic_M2310PLN04K 段。

我的电机是一个两轮 BLDC 轮毂电机。 遗憾的是、电机数据表仅提供以下有关电机电气参数的信息。

通过 用手短接两相线和旋转轴、可以发现极数为52。

计算额定频率如下  

请参阅下表、我在其中尝试填写  user_mtr1.h 文件中所需的电机参数。 请  为该电机推荐新参数。  

序列号 #if (USER_MOTOR1 = Teknic_M2310PLN04K) 轮毂电机 emfbl-10-48-1000-510
1 #define USER_MOTOR1_TYPE MOTOR_TYPE_PM
2 #define USER_MOTOR1_NUM_POLE_PAIRS (4个) 26
3 #define USER_MOTOR1_NULL Rr_Ohm (NULL)
4 #define USER_MOTOR1_MOTORI Rs_Ohm (0.3955578f)
5 #define USER_MOTOR1_LS_d_H (0.000190442806f)
6 #define USER_MOTOR1_LS_Q_H (0.000190442806f)
7 #define USER_MOTOR1_RATED_FLUX_VpHz (0.0399353318f)
8 #define USER_MOTOR1_MAGNETIZING_CURRENT_A (NULL)
9 #define USER_MOTOR1_RES_EST_CURRENT_A (1.5f)
10 #define USER_MOTOR1_IND_EST_CURRENT_A (-1.0f)
11 #define USER_MOTOR1_MAX_CURRENT_A (6.6f) 23 (我现在可以进去15吗? 评估板限制)
12 #define USER_MOTOR1_FLUX_EXC_FREQ_Hz (60.0f)
13 #define USER_MOTOR1_INERTIA_Kgm2 (7.06154e-06)
14 #define USER_MOTOR1_RATED_VOLTAGE_V (24.0f)// V 48
15 #define USER_MOTOR1_FREQ_MIN_Hz (9.0f)// Hz
16 #define USER_MOTOR1_FREQ_MAX_Hz (600.0f)// Hz 221
16 #define USER_MOTOR1_FREQ_LOW_Hz (5.0f)// Hz
19 #define USER_MOTOR1_FREQ_HIGH_Hz (4000.0f)// Hz
19 #define USER_MOTOR1_VOLT_MIN_V (1.0f)//伏特
20 #define USER_MOTOR1_VOLT_MAX_V (24.0f)//伏特
21 #define USER_MOTOR1_FORCE_DELTA_A (0.05f)// A
22 #define USER_MOTOR1_ALIGN_DELTA_A (0.01f)// A
23 #define USER_MOTOR1_FLUX_CURRENT_A (0.5f)// A
24 #define USER_MOTOR1_ALIGN_CURRENT_A (1.5f)// A
27 #define USER_MOTOR1_STARTUP_CURRENT_A (3.5f)// A
28 #define USER_MOTOR1_Torque_CURRENT_A (3.0F)// A
28 #define USER_MOTOR1_OVER_CURRENT_A (7.5f)// A
29 #define USER_MOTOR1_SPEED_START_Hz (35.0f)// Hz
30 #define USER_MOTOR1_SPEED_FORCE_Hz (30.0f)// Hz
31 #define USER_MOTOR1_ACCEL_START_Hzps (10.0f)// Hz/s
32 #define USER_MOTOR1_ACCEL_MAX_Hzps (20.0f)// Hz/s
33 #define USER_MOTOR1_SPEED_FS_Hz (3.0F)// Hz
34 #define USER_MOTOR1_BRAKE_CURRENT_A (1.0f)// A
35 #define USER_MOTOR1_BRAKE_TIME_DELAY (12000U)// 60s/5ms

谢谢。此致、

阿尼尔

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

    Anil、您好!  

    感谢您的问题和信息!  

    请在本周花些时间,妥善研究此事,并提出建议。

    此致、

    -约书亚

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

    谢谢  Joshua、

    等待您的建议...

    此致、

    阿尼尔

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

    当然、  

    我会随时向您通报最新情况。  

    此致、  

    -约书亚

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

    Anil、您好!  

    经过您的询问、我认为最好让我们的 C2000团队参与进来、以推进这次对话。  

    请预计本周内有其他回复。

     此致、

    -约书亚

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

    Anil 您好!

    您是对的、这是一个相当有限的信息选择。 您是否能够在此处提供数据表以便我浏览?

    同时、我注意到以下情况(请注意、针对 Teknic 电机的 user_mtr1.h 部分提供了更具体的值建议。 我建议仔细阅读该部分的评论。):

    •  在这种情况下、USER_MOTOR1_VOLT_MAX_V 应设置为至少为额定电压(48V)
    • USER_MOTOR1_FREQ_HIGH_Hz 也应设置为约额定频率
    • 如果您打算使用电机识别、应按照 Teknic 电机部分中的注释建议、适当缩放..._EST_CURRENT_A 参数。
    • USER_MOTOR1_MAX_CURRENT_A 和 USER_MOTOR1_OVER_CURRENT_A
      • 理想情况下、我们需要参考电机物理参数来设置这些参数。 在这种情况下、如果您的硬件具有显式的电流限制、请将这些值设置为接近该限制。  警告 :这可能会导致电机运行出现困难,包括频繁(甚至可能不可避免)的电流故障。 如果没有得到改进的硬件、我不确定这是否可以解决。
    • 以下参数是旋转电机过程的基础、非常重要、但不存在于您的数据中
      • 用户_MOTOR1_RATED_FLUX_VpHz
      • USER_MOTOR1_INERTIA_Kgm2
      • USER_MOTOR1_MOTOR--> Rs_Ohm 这通常在每个数据表中提供
      • USER_MOTOR1_Ls_d_H -->各数据表均应提供相关信息、但有时缺失
      • USER_MOTOR1_Ls_q_H -->这应在每个数据表中提供、但有时会遗漏

    此致、
    杰森·奥斯博尔恩

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

    谢谢 Jason 的细节。

    请查看随附的集线器电机数据表。 信息非常有限。 请访问 comment..e2e.ti.com/.../EMFi-BLDC-Hub-motor--specs.pdf

    此致、

    阿尼尔

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

    很抱歉响应出现了短暂的延迟。

    该数据表很有趣- 其中有很多有用的信息、我经常会看到这些信息遗漏在电机数据表中、但其中也缺少极对和电阻等非常基础的信息。 奇怪。

    理想情况下、您将看到电动机板上的标识信息、如果规格中没有该信息、则可能包含更多此类信息。 如果没有、我认为您的最佳选择是使用通用电机控制实验室的构建4并 flag_bypassMotorId将设置设为"true"。 InstaSPIN-FOC FAST 无传感器估算器因此可以运行其电机识别例程、从而为您提供一些基本信息。

    将电机的每个物理属性设置为电机的最佳近似值。 例如、您的电机的额定电压为48V、23A。  Tool_Makita_ Extraction FD01预定义电机为36V、25A。 获取这些值(如果它们在您面前的电机看起来是合理的)、然后运行电机估算例程。

    通用电机控制项目和实验用户指南的4级递增构建部分提供了有关识别过程的更多信息。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、  

    非常感谢您的详细信息。 我们 已将电机参数接近  Tool_Makita_ FD01 并尝试在 DMC_LEVEL 2中运行。   

    电机试图移动一点,并停止过流,故障 LED 在驱动器板亮起。

    我们  在故障状态寄存器1中读取驱动器故障寄存器 VDS_HC 位为1。   

    我们发现 MOSFET Q4的栅极至源极短路。 (驱动器电路板中的 C8两端)。   

    实际上、当我们先前尝试在另一电路板上运行该电机时、也发生了类似的故障。 买了第二个驱动程序板,测试,这也显示了类似的故障。

    请注意、在相同的设置下、我们测试了2.2安培 BLDC 电机。 这在高达 DMC_Level 4范围内运行正常。 性能很好、包括了阶跃响应。

    请提供有关如何 使用我们的 DRV8353RS-EVM + LaunchXL-F280025C  设置测试此集线器电机的建议。  我知道 、我们的集线器电机在满负载的情况下可高达23安、而驱动器板的电流限制为15安。 而是在空载条件下进行测试。

    无法在 harwdare 中找到瞬时 大电流的任何保护。  如果电机转子不运动,是否存在大电流,是否会导致 MOSFET /驱动器 IC 失效?  

    (另一个有关设置的信息:使 Launchxl 的 JP2 (USB_VCC 至+3V3)跳线保持开路、因为这会导致 驱动器板3V3稳压器输出和 LaunchXL 3V3稳压器输出短路。 到目前为止、驱动板3V3 LDO 为两个板供电。 我能感觉到驱动板的 LDO 发热。 请对此进行评论)

    谢谢。此致、

    阿尼尔

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

    Anil 您好!

    查看您的帖子、可以看到这里有几个不同的内容。 首先是过流故障、您会发现您不确定的过流故障硬件保护。 第二、关于 Q4短路的注意事项。 第三、截至构建4的2.2A BLDC 电机性能。 第四、继续测试轮毂电机。 最后、断开 JP2和过热 LDO。

    1)

    DRV8353RS-EVM 具有内置的过流保护-实际上、VDS_HC 是该故障的指示器。

    请参阅位于 DRV835x 栅极驱动器说明书、 现已问世

    • 第8.3.6节 "栅极驱动器保护电路" 介绍了适用于器件的不同保护电路。 具体而言、8.3.6.3 MOSFET VDS 过流保护(VDS_OCP)、8.3.6.4 VSENSE 过流保护(SEN_OCP)和8.3.6.6过流软关断(OCP 软)描述了 DRV835x 使用的硬件过流保护。
      • VDS_HC 故障指示 C 高侧 MOSFET 中存在 VDS_OCP 故障。  简单地看一下我们的通用电机控制实验室的实现、我们使用'D38353_LATED_SHUTDOWN'模式、即0b00。

    2)

    Q4短路。 我们提到短路发生在 C8两端。 C8是否已组装? 默认情况下不会填充该文件、并且通用电机控制实验室用户指南中没有相应的填充说明。 用户指南中的唯一说明是断开 DRV8353RS-EVM 与 LaunchPad 的 J1-17和 J1-19。

    这是一段来自 DRV8353RS-EVM 原理图的摘录、可在 TI.com 的产品页面上获得-请注意、C8已断开连接。

    3)

    很高兴看到次级电机一切正常。 不过、您提到的是、它是"截至"构建4的工作。 构建4是否正常工作?

    4)

    当发生没有明确原因的过流故障时、我始终收到的建议第一步是检查是否实际存在过流情况。 以下内容对于第一步很有帮助:

    • 电机 W 相上的电流探头可用于监控实际电流。 设置一个示波器以在 nFault 信号边缘触发、使您查看该电机相位是否真正存在过流情况。
    • 监测到单个电机相位的 EPWM 信号的高电平和低电平输出。 验证死区是否工作正常。

    我最近遇到了类似的情况、在这种情况下电机未运转、但发生了过流故障。 在这种情况下、确实存在过流故障-我必须调整电机参数、然后电机得以正常运行。

    5)

    对于高压系统、我通常也会断开 JP2 -虽然这通常不会引起任何问题、但最好确保安全。 您提到您可能会感觉 LDO 变热、您指的是 DRV8353RS-EVM 的哪一部分? U3?

    此致、
    杰森·奥斯博尔恩

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

    感谢很多 Jason Osborn 的详细答复。

    很抱歉响应延迟。   

    我们已    组装了定制电路板(具有额定电流更高的 MOSFET、DRV8300UDPWR 驱动器 IC 和 INA4181A1IPWR 电流检测放大器)。 当时他忙于设计这个板。 认为  定制 电路板可以轻松支持电机所需的23安培  、并且我们可以避免评估板上出现的 MOSFET 和驱动器 IC 故障。 即使某些部件出现故障、我们也能更好地控制对其进行修复。

    请 对照 您 之前 回复中提及的积分查看下面的 SN 1-5。

    1.感谢您提供的信息>> 内置过流保护-事实上, VDS_HC 是一个指标

    2. C8未填充。 我们刚刚使用 C8焊盘将探头连接到 MOSFET 栅极和源极

    3.是的。 小型电机构建4也能正常工作。

    4.通过调整电机参数、我们可以让 电机上周在无负载的情况下运行、包括 DMC 4级。   我们关心 MOSFET/驱动器 IC 是否会再次发生故障。  不再对评估板进行详细测试。 在我们的实验设置中、更改评估板上的 MOSFET 和驱动程序 IC 非常困难。

    5.好的。 我们移除了 JP2。 是的、当 两个 LDO 输出短路(连接 JP2)时、U3会被加热。

    我们的客户机板 已通过高达 DMC 1级的测试、且 偏移量 正常。  

    您能建议 我们是否需要 在代码中绕过驱动程序 IC SPI 通信吗? 如果 是、请建议我们需要在代码中的哪个位置执行此操作。 是否有  相关文档?

    由于固件仅支持 DRV8353RS 而 不支持 DRV8353RH、因此我们仅使用 RS 代码。

    谢谢。此致、

    阿尼尔

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

    Anil,

    根据您之前所描述的测试结果、我想说、前一电路板问题的根源很可能是电机的电流消耗。 您需要说明的是、您现在使用的是针对正确电流进行额定的评估板、因此在这方面似乎您觉得很好。

    不过、您现在使用的是 DRV8300U 而不是 DRV8353、对吗? 这可能需要额外的定制。 请确保 DRV8300U 的所有必要寄存器和功能与您使用的代码相匹配。  

    为了使用 RH 代替 RS 版本、  是的、您需要绕过 SPI 通信。

    本质上、有两种不同的方法可以做到这一点。

    1. 更改 DRV8353RS 的所有代码以消除 SPI 通信
    2. 向代码中添加一个新的预定义符号、以便仅启用我们需要的器件。

    添加新符号要容易得多。

    1. 在项目属性中、转到"管理配置..."
      1.  选择"新建..."
      2. 将名称设置为"Flash_lib_DRV8353RH_3Sc"
      3. 从现有配置 Flash_lib_DRV8353RS_3Sc 复制设置
      4. 选择"确定"
      5. 选择"Apply and Close"
    2. 将活动编译配置设置为您刚刚创建的新配置。
    3. 在工程属性中、转到"Build/C2000 Compiler/Predefined Symbols"  
      1. 选择"add"(添加)并键入 BSXL8353RH_REVA
      2. 请勿删除8353RS 符号! 这将使这个过程的其余部分更困难。 我们将在结束时删除它。
    4. 使用 CCS C/C++搜索函数(Ctrl+H 快捷方式)并搜索以下内容:

      BSXL8353RS_REVA

    5. 此时、查看结果。 任何在名称中具有"SPI"或"DRVIC"的行都使用 SPI。 暂时忽略其中任何一个结果。 对于所有其他结果、将 BSXL8353RH_REVA 添加到预定义符号列表。 以下是 hal.c 中的一个示例:

      请注意、这仅设置 ADC VREF、与 SPI 无关。 在本例中、我们将新的预定义符号添加到列表中:
    6. 当您完成该过程后、还需要进行一些清理。
      1. 在 hal.h 中、第三个结果应如下所示:

        即使此部分包含 SPI、也请将新的预定义添加到列表中:

        #Elif Defined (BSXL8353RS_REVA)|| Defined (BSXL8353RH_REVA)

        这个部分的用途不仅仅是 SCI、在这里保留 SCI 信息不会伤害任何人。
      2. 此外、在 hal.h 中、第七个等结果应包含完整的函数列表、包括 HAL_enableDRV、HAL_setupGate、HAL_writeDRVData 等。 确保此处不存在新的预定义符号。 向下滚动-您应该会很快到达以下行:

        #Elif Defined (BSXL8323RH_RevB)|| Defined (BSXL3PHGAN_REVA)

        添加新的预定义、将此行更改为:

        #Elif Defined (BSXL8323RH_RevB)|| Defined (BSXL3PHGAN_REVA)|| Defined (BSXL8353RH_REVA)

      3. 同样、在 hal.c 中、第一个结果不应具有新符号。 相反、将符号添加到引用'BSXL8323RH_RevB'的行
    7. 最后、我们完成了。 返回 工程属性、"Build/C2000 Compiler/Predefined Symbols"、并从针对我们新构建配置的预定义符号列表中删除 BSXL8353RS_REVA。

    我认为这就是规范中的所有主要步骤。 请确保此时编译代码并查看遇到了哪些错误(如果有)。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    非常感谢您提供的详细答复。

    可以。 我们将使用 DRV8300U 而不是 DRV8353RS。 它是一款简单的 PWM 驱动器 IC、不带任何通信/寄存器设置。   

    对于电流放大,我们使用  INA4181A1IPWR 。
    我们已确保在定制板中 、微控制器侧的所有信号都与具有 DRV8353RS 的评估板完全相同。  不使用 SPI 信号。

    我们已完成对电路板所有部分的完整调通。

    通过   在现有配置的固件中使用 Flash_lib_DRV8353RS_3Sc 进行一些微小的更改(当前满量程增益设置、PWM 死区时间更改等   ),我们能够使用 DMC_Level 2运行小型电机(并非我们最终需要的集线器电机)。  

      现有代码中的 DRV 读取、写入、SPI 通信等函数 现在未添加注释。     当我们在电路板上运行时没有得到任何错误/故障。

     在接下来的几天内评论这些部分并 查看其性能。 (评论这是真的需要吗?)

    在2级   中,下面是我们在 CCS 图中看到的电流和电压波形( motorVars_M1.IRMS_A[0]和 motorVars_M1.V_V[0])。 将频率设置为2Hz。

    1.有  电流电压波形需要注意。 (当前平坦区域 看起来不像正弦波形!!!)

    2.我可以尝试 DMC Level 3 下一步吗?

    3. BTW 与较高的设定频率,我们在图中并没有获得良好的正弦波形。 看起来将会存在采样频率限制。  是否有办法获得 更高的采样频率的图形数据?

    4、 评论 DRV 读写 SPI 通信 等是否真的需要?

    谢谢。此致、

    阿尼尔

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

    Anil,

    1. 请参阅通用电机控制实验用户指南。 您的波形与指南构建级别2一节中的示例波形有何比较? (提示:它们看起来很好! 与示波器相比、它们从 DAC 输出可能更平滑一些。)
    2. 我建议使用连接到 DAC 输出的示波器。 请参阅用户指南。
    3. 基于我的理解、如果您保留它们、应该没有问题。 但是、这意味着您将占用运行不必要的无意义代码的周期。 此外、如果还有任何其他问题、在尝试跟踪该问题时、额外的代码可能会成为混乱的来源。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    很多好消息!!!

    1.我们可以  在电路板的所有 DMC 级别(1、2、3、4)内运行小型电机。 工作正常

    2.我们可以 在2和3级运行集线器电机。 低至30Hz。 然后它会针对过流而跳闸。

    感谢您目前的支持...

    目前 、我们正在研究解决以 高于30Hz 的速度运行集线器电机的过流跳闸问题。

    1) 1) 我不完全了解如何设置过流位。  由于我们 现在没有使用 DRV8353RS、如何 找到过流 ?

    您可以看到下面设置 OC 位的代码部分。

    空 runMotor1Control (MOTOR_Handle handle)
    {
    motor_Vars_t * obj =(MOTOR_Vars_t *) handle;
    Motor_SetVars_t * objSets =(MOTOR_SetVars_t *)(obj->motorSetsHandle);
    USER_PARAMS * objUser =(USER_PARAMS *)(obj->userParamsHandle);

    if (HAL_getPwmEnableStatus (obj->halMtrHandle)== true)
    {
    if (HAL_getMtrTripFaults (obj->halMtrHandle)!= 0)

    {
    obj->faultMtrNow.bit.moduleOverCurrent = 1;

    以及...

    静态内联 uint16_t HAL_getMtrTripFaults (HAL_MTR_Handle handle)
    {
    HAL_MTR_Obj * obj =(HAL_MTR_Obj *)句柄;
    uint16_t tripFault = 0;

    TripFault =(ePWM_getTripZoneFlagStatus (obj->pwmHandle[0])和
    (EPWM_TZ_FLAG_OST | EPWM_TZ_FLAG_DCAEVT1 | EPWM_TZ_FLAG_DCAEVT2)|
    (EPWM_getTripZoneFlagStatus (obj->pwmHandle[1])和
    (EPWM_TZ_FLAG_OST | EPWM_TZ_FLAG_DCAEVT1 | EPWM_TZ_FLAG_DCAEVT2)|
    (EPWM_getTripZoneFlagStatus (obj->pwmHandle[2])和
    (EPWM_TZ_FLAG_OST | EPWM_TZ_FLAG_DCAEVT1 | EPWM_TZ_FLAG_DCAEVT2);

    返回(tripFault);

    您能否解释如何  设置跳闸故障和过流位?   

    2)。   BTW 我们的定制电路板中没有 DAC 配置。 我们致力于通过 UART 转储数据并绘图以调试目的、从而获得比 CCS Graph 更快的采样。

    此致、

    阿尼尔

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

    Anil 您好!

    好消息! 很高兴听到此电路板正常工作。

    过流由 ePWM 跳闸区域的状态进行控制。 如果 ePWM 跳闸(即禁用)、则会设置过流标志。 用两种不同的方式来控制 ePWM 触发区:

    1. 如果电机驱动器 跳闸、电机驱动器的 TRIP-OUT 引脚可驱动两个相关的 ePWM 跳闸输入中的一个。
    2. 如果 C2000比较器子系统 CMPSS 检测到电流的 ADC 读数已超过用户定义的限制、则 CMPSS 驱动两个相关的 ePWM 跳闸输入中的一个。

    这意味着 实际上、过流位是电机驱动器的过流跳闸机制和 C2000的过流跳闸机制的或操作 。 这些是冗余机制。 我们在通用电机控制实验中提供了这两者的使用示例、以展示这两种概念的使用示例。

    为了确定触发了两种机制中的哪一种、请检查相关 CMPSS 模块的跳闸标志。 如果已设置 CMPSS 跳闸标志、则过流跳闸来自 CMPSS。 如果没有、则电机驱动器会发生过流跳闸。

    至于 DAC、感谢您让我知道。 所幸的是、正如您所看到的、DAC 并不重要。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    非常感谢有关过流功能的介绍。  现在很明显、正确地固定了限值、 现在不会获得 OC。

    使用集线器电机,DMC 级别4,可以 用 FAST 算法运行-(无传感器,没有霍尔)。

    使用4级集线器电机、在 MOTOR1_HALL 启用的情况下、 电机 未运行。 可能会听到一些电流向电机绕组流动的噪声。 电机不运动。   

    1.这是因为任何相位/霍尔服务器问题。 我尝试交换2根相位线。 它没有帮助。 请建议如何保持正确的相位/大厅坐标。

    2.我尚未    在预定义的符号中启用 HALL_CAL。 真的需要它吗?  这是什么功能呢?

    预定义符号屏幕截图 如下...

    谢谢。此致、

    阿尼尔

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

    Anil、我建议至少运行一次 HAL 校准。 校准不足可能与您的电机问题有关。

    请参阅以下从 motor1_drive.c 摘录的内容:

    如果您不使用上面列出的其中一个预定义电机、由于第195行、您应该会遇到编译错误。 (F28002x 的这条线路可能不同、但它应该仍然存在。)

    若要运行校准例程、请启用 MOTOR1_HALL、启用 HALL_CAL、并注释掉第195行。

    运行校准例程后、在第194行前添加以下代码、将[Motor]替换为 user_mtr1.h 中的电机名称、将[Buffer]替换为 hall_M1.thetaCalBuf在校准后的内容。

    #elif (USER_MOTOR1 == [Motor])
    const float32_t hallAngleBuf[7] = { [Buffer] };

    我还建议此时取消#error 的注释。

    此致、
    杰森·奥斯博尔恩

    请注意、CCS Ctrl+h 文件搜索选项在确定给定的#define 预定义的作用方面非常有用-通常、和上面的例子一样、预定义的行为将在代码的注释中解释。

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

    大家好、Jason、

    好消息是 可以使用霍尔反馈运行4级认证。

    必须输入正确的电机惯性值(需要更高的转速 KP),增大过流限值。

    HAL_CAL 也已按照您的建议完成。

    现在的 问题是 、电机使用 FAST+HALL 算法产生很多噪声、而 FAST 无传感器算法运行顺畅。

    探测霍尔信号。 房间 非常干净。

     通过在以下代码中使用数据日志+图形查看了转子角度和 A 相电流

    datalogObj->iptr[0]=&motorVars_M1.angleFOC_rad;
    datalogObj->iptr[1]=&motorVars_M1.adcData.I_A.值[0];

    使用快速算法、可获得平滑的转子角度和正弦电流。

    使用霍尔+快速算法时、电流波形不是正弦波形。 看起来是2或3段正弦电流随着霍尔传感器位置 的变化而变化。

     同时使用 +速度参考和-速度参考进行查看 电流波形损坏。

    我们 使用了  #define USER_M1_SIGNAL_CURRENT_SF      (-1.0f)  、用于解决外部电流检测放大器的反相问题。

    已尝试全部6种霍尔信号组合。 其中2个工作正常。   2个工作霍尔传感器组合的电机发出错误的电流信号+噪声... 也尝试了互换相线。

    请建议 下一步操作。

    这与 使用  #define USER_M1_SIGN_CURRENT_SF 有什么关系吗?      (-1.0f) ?

    下面是 FAST 算法和 FAST+HOLL 算法的数据记录器图。

    另外,请告诉我为什么在用户指南中 显示它, 与 FAST+霍尔, 电流是正 弦在正向和非正弦在反向。

    谢谢。此致、

    阿尼尔

     

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

    Anil,

    很高兴听说电机能够在4级运行!

    我将进一步研究与用户指南有关的问题、但一目了然、黄色信号似乎表示通用实验室实际用于控制电机的角度值。 这意味着在正向方向、它们使用 FAST 显示电机的性能;在反向方向、它们使用霍尔传感器显示电机的性能。

    由于霍尔传感器具有不同的角度值、而不是平滑的计算、因此性能明显会更差。 过去、我已经看到基于电机基准速度(来自速度控制环路、INTO)插值霍尔角值、Ref_Hz 已知角度值会在启动过程完成后成功插值。

    我认为您看到的霍尔波形不是  USER_M1_SIGN_CURRENT_SF 造成的。 如果是这种情况、FAST 也将无法正常工作。 此时、我将使用 FAST 在电机上运行电机识别例程、并相应地更新 user_mtr1.h 中的值。 如果这些值离实际值足够远、则可能会导致 ISR 中出现错误计算。

    请告诉我您完成后的结果!

    此致、
    杰森·奥斯博尔恩

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

    谢谢 Jason 的细节。

    我们已在快速模式下根据用户指南完成电机识别。  值在代码中进行更新。 电流波形仍然不是正弦波形、我们从电机获得的噪声对于我们的电动自行车应用来说并非所有都可接受。

    我进行了其他一些 e2e 讨论、可以看到 有人提到使用 Hall、它是一种简单的6步算法、电流波形不是正弦波形。  

    我们没有一个霍尔+快速算法,其中"根据电机的参考速度内插霍尔角值 ", 你在前面的消息中提到?   

    BTW、我曾尝试 在电机运行且全部电气噪声消失的情况下将估算模式从霍尔更改为快速。 但是、我们 在切换到 FAST 后不使用霍尔反馈是否会影响性能?

    请建议如何去? 我们的应用(eBike) 需要  在霍尔效应下具有正弦电流、因此我们可以平稳瞬时地启动。

    谢谢。此致、

    阿尼尔

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

    Anil,

    通用电机控制实验室的 HALL + FAST 模式不会同时使用这两者。 相反、它被设计为允许您在运行时在两个估算器之间动态切换、以便于测试。 通用电机控制实验室没有内置的霍尔角值插值。

    至于霍尔与 FAST,根据我个人的经验,如果您的 user_mtr1.h 物理电机参数与您使用的电机精确,那么我通常从 FAST 中看到比从霍尔编码器中获得更好的性能。 当然,这只是我个人的经历。

    对于较差的霍尔性能、在高速和低速下都是如此吗? 它是否仅在启动期间出现、仅在正常运行期间出现、还是同时出现这两种情况? 这些问题的答案将帮助我进一步诊断您的其他问题的可能原因。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    使用 FAST、我们可以获得非常平稳的性能。 我只关心起步不那么顺利的问题。 实际上需要检查这是否会成为电动自行车应用的问题。

    在霍尔模式下、整个速度范围内都存在噪声。

    到目前为止,继续与开始与大厅, chaging to fast ...

    使用以下代码(如果...否则...) Section)的   while (systemVars.flagEnableSystem == true)部分。 请告诉我您是否有任何问题...

    while (systemVars.flagEnableSystem == true)
      {
      //在启用系统标志为 true 时循环
      systemVars.mainLoopCnt++;

    如果(motorVars_M1.motorState >= MOTOR_CL_RUNNING)
      {
           motorVars_M1.estimatorMode = Estimator_mode_fast;
      }
    否则为(motorVars_M1.motorState < MOTOR_CL_RUNNING)
      {
          motorVars_M1.estimatorMode = Estimator_mode_hall;
      }

    此致、

    阿尼尔

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

    Anil,

     为了保持一致性,我个人会将该代码放在 runMotor1Control()函数中或其附近,但我看不到任何问题,除了该偏好。

    对于霍尔性能、如果尚不存在 GPIO 限制条件、则可能有必要向霍尔引脚添加 GPIO 限制条件、或者增加限制条件。 相关的 Driverlib 函数如下:

    GPIO_setQualificationMode

    GPIO_setQualificationPeriod

    有关这些参数的用法以及它们在滤波时所增加的延迟量的详细信息、请参阅《器件技术参考手册》。  如果引脚上的噪声仍然是一个问题、请检查是否可以在这些引脚上添加一个简单的 RC 滤波器来代替外部滤波(不是太大、或者上升时间可能会受到显著影响)

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    正如您建议的那样移动  runMotor1Control()中的代码。 工作正常。

    霍尔信号通过 RC 进行滤波、而进入 uC 的信号是完全无噪声的。 也完成了 HAL_CAL。

    我的是一款48V/23Amp/220Hz 电机。 您能评论一下我在下面使用的参数值吗?

    #define USER_MOTOR1_FLUX_CURRENT_A  15.0
    #define USER_MOTOR1_ALIGN_CURRENT_A  1.5
    #define USER_MOTOR1_STARTUP_CURRENT_A 15.0  

    理想情况下,对于 BLDC 电机,磁通电流应该为零,我想吗?  磁通电流和对齐电流的确切用途是什么?

    在 user_mtr1.h 中可以找到参数定义的详细说明吗? 是否有文件?

    BTW、我们现在已将油门连接到代码、正在从油门运行电机。 工作正常。 不得不取消一些延迟   

    updateExtCmdPotFreq()使电动机 在油门 为零和满时立即启动。

    此致、

    阿尼尔

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

    Anil,

    感谢您的更新。 对于这些参数、我将在假设使用估算器模式= Estimator_MODE_HALL 来执行启动的 情况下对其进行描述。 FAST 将非常相似、但不一定完全相同。

    下面是我将要介绍的内容的汇总表:

    电机状态 Id 参考值 Iq 参考电流
    电机对齐 当前对齐 0
    电机_OL_START 0 (1个 ISR 的磁通电流) 启动电流
    电机_CL_正在运行 0 IsRef_A (速度 PI 控制器的输出)
    电机_CTRL_run 0 IsRef_A (速度 PI 控制器的输出)
    • 在启动期间、ID 的 PI 控制器参考值设置为对齐电流。 这是在电机状态 MOTOR_ALIGNMENT (~2s)期间、此后、它设置为在电机进入 MOTOR_OL_START 状态时产生磁通电流。
      • 通用电机控制实验用户指南即将发布、其中包含以下用于介绍 USER_MOTOR1_ALIGN_CURRENT_A 的文本:
        • 此参数定义了用于运行电机转子对齐的电流、以 A 表示。此参数应设置为电机额定电流的5%-50%。

    • 在启动期间、ID 的 PI 控制器参考值被设置为在向电机状态 MOTOR_OL_START 转换期间非常简单地设置为磁通电流。 然而、这几乎会被结合项目所使用的设置的值0立即覆盖。 因此、该值恰好与1个 ISR 相关。 (如果在启动期间使用 FAST、则使用的时间会更长。)
      • 通用电机控制实验用户指南即将发布、其中包含以下文本用于介绍 USER_MOTOR1_FLUX_CURRENT_A
        • 此参数定义了用于在强制开环中运行电机的电流、以 A 表示。此参数应设置为电机额定电流的5%-50%。
    • 在启动期间、Iq 的 PI 控制器参考值设置为启动电流。 这是在电机状态 MOTOR_OL_START 期间
      • 通用电机控制实验用户指南即将发布、其中包含以下用于介绍 USER_MOTOR1_STARTUP_CURRENT_A 的文本
        • 此参数定义了 a 中的电流、用于在速度低于定义的启动速度(USER_MOTOR1_SPEED_START_Hz)时运行电机。 此参数应设置为额定电机电流的10%-100%。

    如果电机额定电流为23A、对齐电流应设置在~1A 至~11.5A 之间。 启动电流应设置在~1A 至23A 之间。 根据我的经验、我通常看到这些设置约为额定电流的10-15%。 对于负载电机、尤其可能需要提高启动速度。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    您的解释太好了。 我现在很清楚启动顺序。 非常感谢。

    在 快速模式和霍尔模式下、我都会获得大约2秒的延迟。

    减小 #define USER_M1_ALIGN_TIME_SET        (2000U)没有帮助。

    2秒延迟对于 eBike 应用是不可接受的。 一旦提供油门, 电动机应在几毫秒内移动。

     即使对于霍尔传感器、也需要 MOTOR_ALIGNMENT 吗? 因为我们已经知道霍尔/转子位置。  

    如果它被启用,是否 可以在霍尔模式中将其禁用?

    此外、 霍尔效应启动延迟的其他可能原因是什么。 我 从 Expression 窗口跑、并也用 油门进行测试。 (在 POT 引脚位置连接油门且启用了 CMD_POT_EN)。 在两种情况下都有延迟。

    再次感谢您的支持。

    此致、

    阿尼尔

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

    Anil,

    很高兴我的解释是有帮助的! 不过、为了实现电机对齐、我会把它留给我自己从中学到的专家:

    如果霍尔传感器是绝对编码器、我认为没有必要进行校准。 但事实并非如此。

    启动过程中最显著的延迟如下所示、 如 motor1_drive.c 中所示:

    • flyingStartTimeDelay、在 initMotor1CtrlParameters 中定义为0.5 * ISR 频率、以 Hz 为单位  
      • 如果系统启动后电机从未运转过、 flagEnableFlyingStart 可设置为"false"以完全绕过。
    • alignTimeDelay、在  initMotor1CtrlParameter 中定义为0.1 * ISR 频率、以 Hz 为单位
    • startupTimeDelay、在  initMotor1CtrlParameter 中定义为2 * ISR 频率、以 Hz 为单位

    要调整、请调整这些定义。 我相信它们是通过 user_mtr1.h 中的#define 参数定义的、我不知道它们为什么不定义。 我将对其进行研究。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、
    感谢提供有关启动可能延迟的详细说明以及有关对齐相关说明的文档。
    我明白其中很多。 仍需了解更多。

    BTW 通过数据记录器图形、我们在启动过程中绘制了电机状态。 其他通道的实际速度。

    在启动期间、状态为 MOTOR_SEEK_POS = 5且持续时间较长、MOTOR_ALIGNMENT = 6、然后变为 MOTOR_CL_RUNNING = 9、

    对齐时间是霍尔+快速模式和快速模式下的主要贡献。 已尝试减小  #define USER_M1_ALIGN_TIME_SET。 未显示任何影响。  

    根据您的解释并可以在图中看到 、对于霍尔 效应、我们也在进行调整以使启动更加顺利。

    1)。 是否有办法测试 霍尔模式下的旁路对准。 一旦我们到达大厅的第一边缘、旋转就应该是平滑的、对吧? 至少 我们可以测试并感受到启动的感觉。 如果 我们可以绕过、如果您可以将我指向代码中需要进行更改的部分、那很好。

    2) 2) 您将3个延迟解释为  

    flyingStartTimeDelay = 0.5 *以 Hz 为单位的 ISR 频率
    alignTimeDelay = 0.1 * ISR 频率、单位为 Hz
    startupTimeDelay = 2 *以 Hz 为单位的 ISR 频率

    以 Hz 为单位的 ISR 频率,是否必须使用  "#define USER_M1_ISR_FREQ_Hz" ?

    3) 3)根据上述说明、启动时间延迟最高。 但      在启动期间未获得 MOTOR_OL_START = 8的状态? 请解释

    4)。 下面是在数据记录器图形中捕捉的图形。 您能解释一下如何根据样本计算实际时间吗? 我也尝试了以 ms 为单位的 x 轴。 时间不正确。

    估计器类型: FAST_HOLL

    估算器模式:霍尔

    此致、

    阿尼尔

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

    Anil,

    根据我在实验练习代码中看到的内容、#define 时间延迟目前是不起作用的。 相反  Freq_Hz ,代码(如 motor1_drive.c 函数 initMotor1CtrlParameters()中所示)使用 objUser->ctrproce(乘以常数)来确定时间延迟。 要更改时间延迟、请更改这些常数。

    1. 如果要绕过对齐,请导航至 motor1_drive.c 函数 initMotor1CtrlParameters (),然后 在与系统相关的代码部分中更改 obj->flagEnableAlignment (fast 和 hall)。 我强烈建议对该解决方案进行非常彻底的测试-是否能发挥作用将在很大程度上取决于您使用的电机。
    2. 代码使用"objUser->ctrisr"表示 Freq_Hz 频率。  objUser->ctr定义 Freq_Hz 为 USER_M1_ISR_FREQ_Hz。 我建议按照所述更改常量、 而不是  CONTROL/ISR 频率。
    3. 再次看一下代码、看起来在使用霍尔效应时、系统仅在1个 ISR 内保持 MOTOR_OL_START 状态。 但是,参考 runMotor1Control()函数, 在进入 MOTOR_CL_RUNNING 后存在依赖于 startupTimeDelay 的值。
    4. 通用电机控制用户指南中所述的设置通常应正确、以提供近似实时的数据。
      1.  如果使用的时钟速度不是100MHz、则应更新采样率。

    此致、
    杰森·奥斯博尔恩

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

    谢谢你的所有细节... 可通过缩短代码的对齐时间来解决启动问题。

    将 motor1_drive.c 中的  

    obj->alignTimeDelay =(uint16_t)(objUser->ctr52 Freq_Hz * 2.0f);// 2.0s

    至   

    obj->alignTimeDelay =(uint16_t)(objUser->ctr52 Freq_Hz * 0.1f);  

    现在启动要快得多。  

    无需绕过对准。

    计划开始在车辆上进行测试。

    将回来与下一组问题为您的支持:-)

    1.将正确的惯性放在车辆测试时非常关键的位置。 我计划放入大约 0.1 kgm2的值、

    2. 您是否建议调谐车载的速度环路 KP, Ki ?

    此致、

    阿尼尔

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

    Anil,

    我很高兴听到该问题已得到解决!

    1. 如果您的初始值不正确、精确的惯性值将会极大地提高电机的效率。
    2. 我通常建议调整 PI 控制器的 KP/KI 参数。

    此致、
    杰森·奥斯博尔恩

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

    大家好、 Jason、

    正忙于测试 2Wheeler (电动自行车)。  在对电流、增益等进行一些调整后、我们获得了合理的良好性能。  

    到目前为止、我们 通过 FAST 算法 本身获得了良好的性能 、因此目前还未使用霍尔传感器。

    有以下3个问题。 请建议如何继续。

    1)在一个特定条件下,快速启动不工作(因 OC 而跳闸)。

    即当电机 以某种速度运行时、如果油门(模拟速度参考) 变为零并立即变为高电平、则发生 OC 跳闸。 此时、电机已在运行、快速启动本应该已注意到这一点。

    看起来像   restartMotorControl(handle );正在被调用(使 Abs_Hz =0 ),因为  objmtr->cmdPout.flagCmdRun= fals;和 true,这 使它从 飞行开始条件出来。

    查看代码,以下部分中的 feeled objMtr->cmdPoet.flagCmdRun = false。  

    if (objMtr -> adcData.potAdc <= objMtr -> cmdPot。adcMin)
    {
    objmtr->cmdPoet.waitTimecnt++;

    if (objMtr->cmdPoet.waitTimeCnt > objMtr->cmdPoet.waitTimeSet)
    {
    objmtr->cmdPoet.flagCmdRun = false;
    objMtr->cmdPot Set_Hz = 0.0f;

    2. 即使是一次 OC 跳闸,我们也需要从 Expression 窗口手动清除故障,以便继续运行模式。 请建议更改代码 、以便代码将清除故障、电机将自行运行、直到故障数量等于重新启动次数。

    也可以找到一个 没有被使用的变量"overCurrentTimesSet"。 是否有计划添加此功能? 如果您已经有这方面的示例代码、请分享。

    3.启用快速启动时, 我们能 得到非再生制动吗?

    使用两轮车应用中的再生制动、当节气门变为零时、我们没有车轮自由转动。 即、 当油门水平降低时、将首选自由运行的电机、而不是受控制动/减速。

    谢谢。此致、

    阿尼尔

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

    Anil、您好

    Jason 今天很出色。 请允许他多花一些时间回到你的身边。 感谢您的理解。

    此致!

    凯文

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

    尊敬的 Kevin:感谢您提供的信息。  

    等杰森回来,等待他的答复。

    此致、

    阿尼尔

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

    Anil,

    1. 这是我不知道的快速启动和 cmd 电位器模式的有趣交互-感谢您告知我们这一点! 简单来说、我 认为 这一改动可能会有所帮助(与往常一样、所有建议都是在没有机会进行测试的前提下提出的、在实施到任何最终应用之前都应经过全面测试):
      1. 更改您提到的代码片段:

        if(objMtr->adcData.potAdc <= objMtr->cmdPot.adcMin)

        至:

        if((objMtr->adcData.potAdc <= objMtr->cmdPot.adcMin) && (objMtr->speed_Hz < objMtr->speedFlyingStart_Hz))

      2. 这应确保在快速启动的情况下、电机不会错误地或提前进入"关闭"状态。 至于限制、我立即看到、在这个建议的实现方案中没有对 cmdPoet.waitTimeCnt 变量的处理、其中也需要添加一些内容。 例如、可能将该值复位为其他情况?
    2. 只需设置代码以 在延时时间后自动设置 obj->flagClearFaults,即可执行此操作。 当前实现仅针对调试场景而设计、因此需要手动清除。
      1. 请注意、根据项目中其他地方使用的惯例、"overCurrentTimesSet"变量 不 是自动清除过流故障的变量。 相反、它会将过流故障激活延迟设定的时间。 我没有看到该功能的许多用例。
    3. 我将探讨再生制动问题、然后回复给您。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    非常感谢您提供的详细信息...

    关于第1点),我已经尝试了一些类似你提到的代码. 请参阅以下代码...

    if (objMtr -> adcData.potAdc <= objMtr -> cmdPot。adcMin)
    {

    objMtr->cmdPot Set_Hz = 0.0f;
    if (motorVars_M1.speed_Hz <=3.0)
            objmtr->cmdPoet.flagCmdRun = false;

    否则
    {
        objmtr->cmdPoet.flagCmdRun = true;

    有了这个,我能够使 OC 不发生在节流期间为零和最大后立即.

    但 当我们尝试在车辆上进行测试时会出现问题。 当节气门设置为零位置时、电机以受控的速率减速。 对于此代码、 在此十倍频时间内应用制动时、我们必须针对电机控制的十倍频应用制动。  这不适用于2W 应用、我们需要此时轮子空闲、并且需要机械制动控制何时停止电机。  

    在这种情况下,有 cmdPoet.waitTimeCnt 很重要吗?

    我感觉此时处于再生制动模式。 请建议 如何继续。

    将在稍后回复您对2的评论。

    此致、

    阿尼尔

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

    大家好、Jason、

    你可以看看我 在上一篇文章中提到的问题吗? (在下面再次复制)

    "但 当我们尝试在车辆上进行测试时出现了问题。 当节气门设置为零位置时、电机以受控的速率减速。 对于此代码、 在此十倍频时间内应用制动时、我们必须针对电机控制的十倍频应用制动。  这对于2W 的应用是不可行的、我们此时需要轮子是空闲的、并且需要机械制动控制何时停止电机。"

    我当时在寻找一种方法、 在 POT ADC 计数小于 ADC 最小值时、在停止期间使扭矩为零(或非常小的值)。 我这样感觉到、一旦 骑手应用机械制动器、 控制器侧就不会产生任何反作用力 、并且车辆将能够平稳地停止。

    请查看以下代码是否会执行该操作。 (尚未在车辆上进行测试)

    if (objMtr -> adcData.potAdc <= objMtr -> cmdPot。adcMin)
    {

    objMtr->cmdPot Set_Hz = 0.0f;
    motorVars_M1.IsSet_A = 0.0f;// 1。 以使扭矩为零
    if (motorVars_M1.speed_Hz <=3.0)
    objmtr->cmdPoet.flagCmdRun = false;

    否则
    {
        motorVars_M1.IsSet_A = USER_MOTOR1_TORING_CURRENT_A;// 2. 以使转矩变为旧值
        objmtr->cmdPoet.flagCmdRun = true;

    IsSet_A 是控制转矩的变量吗? 如果不是、请建议使用正确的变量。

    我希望今天就回复一下。

    此致、

    阿尼尔

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

    Anil,

    在构建级别4中、

    ISSET_A 不是正确的变量-只有在构建4中完全未使用速度环路时才会使用此变量。

    IsRef_A 应该是正确的变量、此变量通常由速度环路设定。

    在构建级别3中、 idq_set_a 是正确的变量。

    如果我漏掉了任何问题、敬请告知!

    此致、
    杰森·奥斯博尔恩

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

    谢谢 Jason。

    我的目的是在将节气门设置为零位置时使扭矩为零、以便机械制动器可以控制车辆停止。

    已尝试以下代码。 不按预期工作。 我尝试在相对于 POT_ADC 的图中绘制 IsRef_A。 一旦 POT_ADC 为零、IsRef_A 就不会变为零。

    有什么建议可能是错误的?

    在 motor_common.c >>>

    if (objMtr -> adcData.potAdc <= objMtr -> cmdPot。adcMin)
    {

    objMtr->cmdPot Set_Hz = 0.0f;
    STANGE_RUNNING = 1;

    if (motorVars_M1.speed_Hz <=3.0)
    objmtr->cmdPoet.flagCmdRun = false;

    否则
    {
    objmtr->cmdPoet.flagCmdRun = true;

    STALL_RUNNING = 0;

    在 motor1_drive.c 中>>>

    //用于切换反向速度闭环控制
    pi_setui (obj->piHandle_spd、obj->IsRef_a);

    如果(STANGE_RUNNING == 1)
           obj->IsRef_a = 0;

    请参见下图、其中包括电位 ADC (1)和 下面的 IsRef_A (2)。

    2仅在电机停止后变为零。

    此致、

    阿尼尔

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

    我认为 still _runing = 0;根据您在 motor1_drive.c 中应用的逻辑、它位于 if/else 语句的错误部分。

    此致、
    杰森·奥斯博尔恩

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

    大家好,Jason,  

    STALL_RUNNING = 0位置看起来正常。

    一些电路板问题和 其他优先事项。 从今天开始着手处理这项工作。 将更新您...

    此致、

    阿尼尔

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

    大家好、Jason、

    今天对两轮车进行了测试。

    1.使用代码>>    if (stally_runing == 1),   obj->IsRef_a = 0;

    运行时、当油门变为零位置时、扭矩会减小。 我们能够通过施加制动来停止电机。 静止时仍显示一些阻力/扭矩。 是否还有关于电流环路污染的任何建议?

    2.起动时扭矩似乎变小。 有时车辆需要稍微推动才能移动。 一旦移动、性能就相当好。

    当前设置为>>>
            校准电流为0.7安培
            起始电流7.5安培
            最大电流为23A

    考虑增加对齐电流和起始电流。  还将尝试提高速度 KP。   

    你的建议是什么?

    3.我们现在正在使用 FAST 算法(未 使用霍尔传感器)。   对于 FAST (无霍尔),它是 SEEK_POS 状态(非对齐)吗?

    SEEK_POS 状态的当前适用情况是什么? 它只是对齐电流吗?

    谢谢。此致、

    阿尼尔

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

    Anil,

    1. 接下来、我不知道问题出在哪里。 "我不会骗你的。"
    2. 增加启动电流是我的最初想法、或许会增加启动加速度。
    3. SEEK_POS 应为快速启动电机状态、这意味着它最初不施加电流。 在快速启动时间延迟后、它将移至对准(如果电机处于静止状态)或运行状态(如果电机已在旋转)。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    正忙于清理测试,添加一些更多的功能现场试验等。

    到目前为止、有一个主要问题需要解决。

       设置如下所示。

          *完全制动

           *速度参考已应用  

    因此、 电机以固定的 低速运行、 获取  user_mtr1.h 中设置的电机最大电流。  

    显示的电机转速约为  -127 Hz (请注意、电机的物理方向未发生变化)。

    现在、如果遥控器负载、电机不会重新进入控制状态。 它以该低速运行、消耗最大电流。

    唯一的方法就是,使速度参考= 0。

    请参阅下面的表达式窗口屏幕截图

    图 A 是 POT ADC

    图 B 是 Speed_Hz

    你能建议, 如何去在调试这个?

    此致、

    阿尼尔

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

    Anil,

    我不确定导致这种情况的原因可能是什么。 作为主要的调试步骤、我会查看 ADC 测量值和 alpha/beta 或 d/q 轴测量值、看看是否有明显的痕迹。  我还将浏览 PI 控制器中的值、以查看是否任何东西都已完全饱和。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    每当我增加 USER_M1_ADC_FULL_SCALE_CURRENT_A ,得到这个问题>在上一篇文章中提到。 无法 修复它。 借助于权变措施(在代码中添加一个新的比例因子来处理分流值的变化和范围的增加)。 现在代码  具有默认  USER_M1_ADC_FULL_SCALE_CURRENT_A。

    现在性能非常好的 2轮车与多达 2人在正常水平道路上骑 (需要10安培 rms )和也在高达7度斜坡(需要40安培 rms ),除了一个问题。

    *从7度斜坡开始, 电机 试图移动一点点,减速,然后向后移动。 我们已将最大电流增加至45安培 rms、将磁通电流增加至35安培。 没有帮助。

      通过 UART 每隔1ms 获取一次内部参数、从而记录设置速度、实际速度、ID、Iq 和状态日志。 请参阅下面绘制的数据。  

    在正常速度控制环路中设置代码。

    一旦设定速度 (蓝线)变为高电平,状态就变为5,然后变为9
    此时、ID (黄线) 变为35安培(代码中设置的磁通电流)

    Iq (蓝色)随着代码中达到最大电流设定值( 上图中为52)的斜坡而增加  
    速度(图中为红线) 缓慢增加、减慢速度、 然后变为负值(电机反向移动)

    请建议如何解决这个问题。

    尝试  通过一些大胆的改变来增加代码中的最大电流。 不确定这是否有用。 在一些情况下已经看到、在 Iq 达到稳定状态/最大值之前、速度开始下降。   

    柳时钟是否认为提前和更快地启动 IQ 会有助于 解决这一问题? 请建议如何操作。

    提前感谢您的帮助。 这似乎 是最后一个主要问题..

    此致、

    阿尼尔

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

    Anil,

    根据您之前提供的电机规格,  您超过了额定电机电流。  电机是否已更换?

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    电机是相同的。

    短时间内3倍额定电流是可以的。  

    请检查我在上一条消息中发送的图形。 想知道、  

    *如何在电机启动时加快引入 Iq 组件。

    *在斜坡中,当我们尝试启动时,没有感觉到任何扭矩。 这是一个很好的正常的 kevel 路。

    此致、

    阿尼尔

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

    Anil,

    我会非常小心地把电机运行得远远超出规格。 至于您的问题、

    1. 运行时状态应为10 (MOTOR_CTRL_RUN)、而不是9 (MOTOR_CL_RUNNING)
      1. runMotor1Control (...) 函数通常控制此状态转换、但也可以使用 prev。 我为解决此问题而建议的更改并不能完全正常工作。
      2. 尝试在以下文件中将所有"MOTOR_CL_RUNing"实例替换为"MOTOR_CTRL_RUN":
        1. 电机_common.c
        2. motor1_drive.c
        3. SYS_main.c
      3. 这应该会有所改善、但我不知道这是否是您问题的根本原因。
    2. 您能否向我展示相同的性能图、但能成功启动吗? 例如、基于您的前倾、倾斜6度。 帖子。 具有直接比较点有助于进行调试。

    此致、
    杰森·奥斯博尔恩

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

    大家好、Jason、

    正如 之前的文章之一所提到的 ,我们现在只使用 FAST 算法。

     我们之前讨论过的大厅以及从大厅到快速通道的转换、但这一过程并未涉及。

    明天尝试1中提到的要点。   遇到了一些设置问题。

    此外,将 在明天之前提供您在2中提出的详细信息。

    还有一个问题...

    1A 您提到,它是 调优   startupTimeDelay 吗?

    具有  obj->startupTimeDelay =(uint16_t)(objUser->ctrf) Freq_Hz;  // 现在为2.0s。

    此时 电机处于 MOTOR_CL_RUNNING 状态?  我可以看到当磁通电流处于 MOTOR_CL_RUNNING 状态时作为 Id 施加。  

    您能否简单地解释一下  在   使用 FAST 算法的情况下,状态 MOTOR_CL_RUNNING 会发生什么情况?

    BTW、如果我将  您在1b 中提到的"MOTOR_CL_RUNNing"替换为"MOTOR_CTRL_RUN"、ID 是否会=磁通电流  ? 解决任何问题。   

    此致、

    阿尼尔