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.

[参考译文] TMS320F2800157:使用 F2800157 Launchpad 且带有使用编码器反馈的 DRV8353电源板的48V ABZ+PWM 电机的位置控制

Guru**** 2535650 points
Other Parts Discussed in Thread: DRV8353, LAUNCHXL-F2800157, DRV8353RS-EVM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1322407/tms320f2800157-position-control-of-the-48v-abz-pwm-motor-using-f2800157-launchpad-with-drv8353-power-board-using-encoder-feedback

器件型号:TMS320F2800157
主题中讨论的其他器件:DRV8353LAUNCHXL-F2800157DRV8353RS-EVM

您好、团队成员:

我正在使用 F2800157 Launchpad 并借助编码器反馈的 DRV8353电源板来进行48V ABZ+PWM 电机的位置控制。 我正在使用 TI 通用电机代码(UMC)、并且已启用与电机编码器相关的宏。 启用 MOTOR1_ENC 后、电机将在无编码器反馈的情况下运行、并且以恒定速度运行、与 motorVars_M1.52值无关。Ref_Hz

之前、我已通过使用 F2800157 Launchpad 和 DRV8353 MOSFET 板的电流和电压反馈测试霍尔反馈和 MOTOR_FAST 方法、其工作正常、能够改变两个方向的速度。

  • 请就上述问题提供帮助、以及与 MOTOR1_FAST 方法相比、是否需要更改 UMC 中的任何内容以使用编码器反馈运行48V PWM+ABZ 电机。

谢谢、此致、

K·H·P

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

    Kirana,

    这很遗憾。 我有一个澄清性问题。 在启用 MOTOR1_ENC 的情况下运行时、MOTOR1_FAST 是启用还是禁用? 这两个选项之间存在一些差异。 这可以在预定义中或在运行期间通过检查 systemVars.estType 的值( EST_TYPE_ENC vs EST_TYPE_FAST_ENC )来检查。

    有关调试步骤、请告知我以下情况:

    1. 运行 MOTOR1_ENC 时、其值是否 motorHandle_M1->motorState变化? 当它以稳定的速度运行并且忽略 Ref_Hz 时、当前状态是什么?
    2. 当运行在稳定速度和忽略 Ref_Hz 时,当前值是多少 encHandle->encState
    3. 电机运行的恒定速度是多少? 它等于 USER_MOTOR1_SPEED_FORCE_Hz user_mtr1.h 中的#define 宏吗?

    基本而言、我认为这里正在发生的情况是、我们会以某种方式卡在启动状态。 这些问题将让我们知道它是由于 motorState 还是由于 encState 而卡住。 此后、我将能够进一步提供帮助。

    此致、
    杰森·奥斯博尔恩

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

    您好@Jason Osborn,

    感谢您的答复。

    以下是所附的屏幕截图。

    MOTOR1_ENC ->已启用

    MOTOR1_FAST ->已禁用

    电机状态变化和卡在故障状态下、作为模块过流。 甚至尝试将过流值增加到300、但仍出现错误"模块过流"。 相同的仅代码配置更改为 Hall (启用了 MOTOR1_HOLL)并检查了工作正常。

    相同的代码将配置更改为 Encode (MOTOR1_ENC)无法运行、并始终类似于模块过流故障。

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

    Shankar、

    1. 这是指与  Kirana 相同的项目吗? 以前,他们说电机运行速度稳定,但没有对 Ref_Hz 作出反应。 从那时到现在进行了哪些更改?
    2. 是对我的 prev 中的问题的答案。 是关于已知的旧行为吗?
    3. 是否已验证 MOTOR1_ENC 配置的所有 IO 配置? 默认情况下、它们与 motor1_hall 的不同。

    此致、
    杰森·奥斯博尔恩

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

    Jason、您好!

    在 MOTOR1_ENC 方法中运行电机时、会禁用 MOTOR1_FAST。

    1.电机运行时的 值为  motorHandle_M1->motorState is MOTOR_CTRL_RUN

    2.的当前值 encHandle->encState 为 ENC_WAIT_FOR_INDEX

    电机正以定义的值运行、#define USER_MOTOR1_SPEED_FORCE_Hz -(60.0)

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

    Jason、您好!

    1.我和@提到了 同一个项目。 在启用之前、MOTOR1_ENC 电机以恒定速度运行、无论 SPEED_Ref 值如何、此时 MOTOR1_FAST 会被禁用。 我使用 GPIO20、GPIO21和 GPIO43提供编码器反馈、之前这些引脚配置不正确、现在我已配置这些引脚。

    2.但现在我面临的是模块过流故障。

    3.我已验证 MOTOR1_ENC 的 IO 配置,但仍遇到相同的错误。 甚至尝试将过流值增加到300、但仍显示错误"模块过流"。

    下面我分享了屏幕截图  for motorHandle_M1->motorState and encHandle->encState values after enabling the flagEnableRunandIdentity flag.

      

    Please suggest the method to run the motor in MOTOR1_ENC method.

    此致、

    K·H·P

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

    Kirana,

    感谢您的答复! 这是非常有用的信息。

    在开始代码调试之前、如果您还不知道、请向 CCS 提供一条快速建议、这使得此过程容易很多:

    • 此外、如果 CCS 启用"可缩放模式"、我建议 取消选中 设置中显示"disable editor live parsing"的选项。

    现在、用于实际调试。

    1. encHandle->encState = ENC_WAIT_FOR_INDEX
      1. 让我们来看看 encoder.h 文件、看看这意味着什么。
      2. 请注意黄色高亮显示。 在 ENC_WAIT_FOR_INDEX 中、编码器正在等待 eQEP 索引事件中断进行锁存。
      3. 调试步骤:
        1. 检查 eQEP 索引引脚是否配置正确。  确保使用引脚配置选项 GPIO_x_EQEP1_INDEX 配置正确的 GPIO、其中"x"是编码器的索引信号路由到的引脚的 GPIO 编号。 可以在 hal.c 中找到 IO 配置
        2. 此外、  仔细检查其他 eQEP 引脚的配置。   也必须正确配置 GPIO_x_EQEP1_A 和 GPIO_x_EQEP1_B。 可以在 hal.c 中找到 IO 配置
        3. 最后、对于 eQEP 配置、请确保  将 MTR1_QEP_BASE 分配给正确的 eQEP 模块。  您可以在 hal.h 中找到这些信息。


    2. eQEP 的硬件配置
      1. 调试:  某些 C2000 EVM 允许将 eQEP 引脚路由到电路板上的不同位置。 例如、  LAUNCHXL-F2800157具有 S5 (QEP 选择开关)。 必须将其放置在正确的位置进行连接、否则实际上并不连接 eQEP 引脚!
      2. 关于 GPIO20/21/43 LAUNCHXL-F2800157 ,这意味着 S5 SEL1 (左)= 0 (下)。


    3. 过流故障
      1. 在通用电机控制实验中、存在2个可能的(冗余)过流故障源。
        1. CMPSS 比较外设、它使用我们的#define 值。 听起来您已经对这些内容进行了几次更改、而且还没有取得积极的效果。
        2. DRV8353RS-EVM  电路板具有内置过流保护、可触发过流故障。  根据我的经验、这通常是由几个不同的问题之一导致的。  调试步骤:
          1. 确保 SPIA_PTE 信号  (也称为 SPIA_STE)  正确地从 LAUNCHXL-F280015x 跳转到 DRV8353RS-EVM 的引脚 J2-17。
          2. 将"drvicVars_M1"添加到"Expressions"窗口。
            1. 初始化完成后、检查配置寄存器中的值。 将这些值与 hal.c 中的 DRV8353RS-EVM 配置进行比较。 如果一切匹配、则 SPI 配置良好。 否则、请再次检查所有 SPIA 引脚!
            2. 函数名称--> HAL_MTR_setGateDriver (HAL_MTR_Handle handle)
          3. 如果 SPI 配置良好、但您仍然看到过流故障、请 检查  drvicVars_M1中的状态寄存器。 哪些状态寄存器读为"1"?

    这里有大量的调试步骤。 我建议仔细检查它们以获得最佳结果。 此外、在另一线程中、我提到必须使用准确的物理电机参数更新 user_mtr1.h。 这仍然是事实。

    此致、
    杰森·奥斯博尔恩
    注: 重要 主题 调试建议 通过此帖子  粗体显示。

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

    Jason、您好!

    感谢您对此问题的简要说明。

    我已经按照您的说明操作、现在我不会遇到过流故障。

     1.我已将 USER_MOTOR1_STARTUP_CURRENT_A 值设置为(3.5)、因为对于闭环。 现在我没有看到任何错误、但电机未运行、它正在振动、并且没有从电机侧获得任何编码器脉冲。

    2.将编码器 ABZ 反馈连接到 J12之后,我测量了 ABZ 引脚的电压电平,我在下面提到了它。

         GPIO20 (A)= 0V

         GPIO21 (B)= 5V

         GPIO43 (Z)= 5V

    3. QEP (S5)开关位置如下:Q1=低电平、Q2=高电平。

    4.我观察到  启用 flagEnableRunandIdentity 标志后、encHandle->encState = ENC_WAIT_FOR_INDEX。

    5.我怀疑 USER_MOTOR1_STARTUP_CURRENT_A 值存在问题、因为 当我以 MOTOR1_FAST 方法 运行电机时、电机未在 USER_MOTOR1_STARTUP_CURRENT_A = 3.5下运行、会出现过流故障、但如果我将其设置为20、则电机运行正常。

    因此、请告诉我 在编码器反馈中运行电机所需的 USER_MOTOR1_STARTUP_CURRENT_A 正确值。

    如果上述问题与 USER_MOTOR1_STARTUP_CURRENT_A 值无关、 请建议解决上述问题的方法。  

    此致、

    K·H·P

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

    Kirana,

    很高兴听到我的指示是有帮助的。

    1. 根据电机数据表/规格表、您正在使用的物理电机的额定电流是多少? 这对于你的前言的第1点、第4点和第5点很重要。 文章以及您的最后一个问题。
    2. 请注意、C2000是3.3V 器件、不能处理5V 电压。
      1. 以下摘录自 F280015x 数据表、位于绝对最大额定值下:
    3. 我建议使用示波器来监控电机的索引/零信号。 该线圈在每次旋转时应产生一次脉冲。 这会发生吗?

    此致、
    杰森·奥斯博尔恩

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

    Jason、

    1.根据产品说明书、电机的额定电流为150A。

    是的、C2000是3.3V 器件。 但电机编码器反馈是5V、我们将其提供给 J12和电平转换器 IC、然后将转换后的3.3V 脉冲提供给控制器。

    3.当我给  USER_MOTOR1_STARTUP_CURRENT_A 设为 3.5时、电机正在振动、并且未产生任何编码器脉冲。

    如果我通过连接5V 和 GND 编码器引脚手动旋转电机、我将在旋转一周后获得5V 信号。

    此致、

    K·H·P

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

    Kirana,

    感谢您对5V 的澄清、我误解了您之前的帖子。 抱歉!

    至于 用户_MOTOR1_STARTUP_CURRENT_A ,该值必须足够高才能运行电机的启动。 该值会因电机而异、但通常情况下、我已经看到该值应为 至少为额定电机电流的10% 。 根据很多因素、电流可能需要高于此值-如果您的启动因电流过低(即电机未在旋转)而失败、则进一步增加电流。

    我已经用粗体突出了该段中最相关的部分。 让我了解当 USER_MOTOR1_STARTUP_CURRENT_A (以及其他电机电流参数,包括 USER_MOTOR1_ALIGN_CURRENT_A、 USER_MOTOR1_OVER_CURRENT_A 和 USER_MOTOR1_MAX_CURRENT_A )进行缩放以匹配电机的规格时电机的运行情况。

    此外、现在是验证 user_mtr1.h 中的其他电机规格也是否准确的好时机、例如 USER_MOTOR1_RATED_VOLTAGE_V、 USER_MOTOR1_VHz Rs_Ohm、USER_MOTOR1_RATED_FLUX_VpHz 等。

    此致、
    杰森·奥斯博尔恩

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

    Jason、

    感谢您的答复。

    1.正如我提到的 、根据数据表、电机的额定电流为150A。 我正在改变  用户_MOTOR1_STARTUP_CURRENT_A 从 3.5到10、在本例中、电机不会运行振动、因为从电机侧我不会获得任何编码器反馈。

    2、电机运行了两秒钟,我保持了 用户_MOTOR1_STARTUP_CURRENT_A 值介于11到19之间、然后我收到 STARTUP_FAILED 故障。 在本例中、我将收到这两秒的编码器反馈。

    2.如果我提高  用户_MOTOR1_STARTUP_CURRENT_A = 20无论编码器反馈如何、电机都以恒定速度运行。 在这种情况下、如果我从 Launchpad 中删除编码器反馈并重新启动电机、那么无论 speedRef 值如何、电机也会以恒定速度运行。 电机以定义的值运行、 用户_MOTOR1_SPEED_FORCE_Hz  =(60.0)且在这种情况下会禁用 MOTOR1_FAST。

    3.我 在中保留了以下值 user_mtr1.h ,  

           USER_MOTOR1_STARTUP_CURRENT_A = 3.5A

           USER_MOTOR1_OVER_CURRENT_A = 75A

           USER_MOTOR1_MAX_CURRENT_A = 50A

           USER_MOTOR1_RATED_VOLTAGE_V = 48V

           USER_MOTOR1_MODE Rs_Ohm = 0.00460001 Ω

           USER_MOTOR1_RATED_FLUX_VpHz = 120Hz

    请参考上述值并建议使用 MOTOR1_ENC 方法运行电机的方法。

    请参阅我之前亲自与您共享的文件。

    此致、

    K·H·P

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

    Kirana,

    此帖子中的粗体文本将指示要点:

    列出的所有参数都应来自电机或电路板的物理特性。

    • 用户 M1_ADC_FULL_SCALE_CURRENT_A 需要是 ADC 测得的最大可能电流。 也就是说、当 ADC 读数为3.3V 时、您的系统中的电流是多少? 这将取决于您的
      • 如果此参数低于您期望 在电机中看到的最高峰值电流、那么性能可能会很差。   
    • 用户_MOTOR1_STARTUP_CURRENT_A 需要成为  最小值  额定电机电流(150A)的10%。 10%* 150A = 15A。 根据您的实验、它可能也需要高于该值、 ~20-25A。
    • 用户_MOTOR1_MAX_CURRENT_A 需要是您希望通过 电机看到的最大可能电流。 该值应为电机额定电流的~100%、  ~150A
    • USER_MOTOR1_RATED_VOLTAGE_V ,  用户_motor1_ Rs_Ohm 和  用户_MOTOR1_RATED_FLUX_VpHz  所有这些都应为电机数据表中的值:额定电压(以 V 为单位)、定子电阻(以欧姆为单位)和额定磁通(以 V/Hz 为单位)。

     

    启动后故障指示根据速度计算、电机转速在启动过程中未超过最小值(USER_M1_FAIL_SPEED_MIN_Hz)。 为安全起见、假设这是由于启动时出现故障导致的、并且系统进入 FAULT 状态。

    好的、让我们来看看为什么系统卡在一个恒定速度、假设禁用了 FAST 并启用了 ENC。 启用 MOTOR1_ENC 后、以下代码可控制电机转速:

    换句话说、如果我们处于 MOTOR_CL_RUNNING 状态(这意味着我们 已完成启动 )时、电机加速至 用户设置速度基准 链接。

    但是、如果我们 不 处于该状态(这意味着我们 仍处于启动状态 )、 电机加速至 USER_MOTOR1_SPEED_FORCE_Hz

    电机启动时、motorState 进入 MOTOR_ALIGNMENT。 在短暂的延迟后、它进入 MOTOR_OL_START 状态。 在 MOTOR_OL_START 中、编码器设置为  ENC_WAIT_FOR_INDEX。

    在该状态下、编码器下次看到索引脉冲时、会立即进入 ENC_CALIBRATION_DONE 状态。

    当编码器达到 ENC_CALIBRATION_DONE 时、motorState 变为 MOTOR_CL_RUNNING、并设置速度目标 Ref_Hz。

    如果您的代码从未离开 ENC_WAIT_FOR_INDEX、则 eQEP 将永远看不到您的索引事件。

    此致、
    杰森·奥斯博尔恩

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

    Jason、

    我已经执行了你上面提到的步骤。 但我仍然无法运行电机。  

    编码器状态显示为等待索引。

    我已附上调试窗口的屏幕截图。 我还在个人聊天中将项目文件分享给了您。

    您能检查一下吗、帮我解决问题吗?  

    此致、

    K·H·P

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

    Kirana,

    根据这张屏幕截图、speed_Hz 为零。 情况不应该是这样。 将"motorVars_M1.angleHall_rad"和"motorVars_M1.452"添加到调试视图中。Hall_Hz 它们在变化吗?

    此致、
    杰森·奥斯博尔恩