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.

[参考译文] LP-AM243:LP-AM243x + BissC

Guru**** 2460850 points
Other Parts Discussed in Thread: BP-AM2BLDCSERVO

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478244/lp-am243-lp-am243x-bissc

器件型号:LP-AM243
主题中讨论的其他器件:BP-AM2BLDCSERVO

工具与软件:

您好!

我有 AM243x-LP、正在尝试读取 BiSS-C 单分辨率26位编码器。  我使用以下示例代码。 "C:\ti\motor_control_sdk_am243x_09_02_00_09\examples\position_sense\bissc_diagnostic\single_channel\am243x-lp"

菜单选项如下:

#define BISC_CMD_ENC_LOOP_OVER_CYC (5)
#define BISC_CMD_PERIODIC_TRIGGER (6)

当我使用(5)时、我获取角度值

当我对 CMP*值使用(6) 12500 / 3000时、代码卡在"int32_t bissc_get_pos (struct bissc_private *priv)"函数中的"ret = bissc_get_pos (struct bissc_priv)"。  

当我调试 (5)和(6)时、我可以非常清楚地看到(5)运行、但(6)不运行。

此致、

Vedat

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

    你(们)好

     您配置的 BiSS-C 时钟频率的值是多少?

    此致

    Dhaval

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

    尊敬的 Dhaval:

    这是1 MHz! 根据"2:选择以 MHz 为单位的时钟频率(1/2/5/8/10)"和 cmp3/cmp0不起作用。

    此致、

    Vedat

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

    你(们)好  

    您使用的编码器的单圈和多圈分辨率是多少?  

    我看到您将 IEP Count 配置为12500、这意味着您尝试在16 KHz 位置周期中运行 BiSS 编码器。 一个完整周期的时间为62.5 μ s。 如果您的 BiSS-C 周期时间超过此值、则连续模式将会失败。  

    查看以下主题、了解如何进行计算。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1446338/mcu-plus-sdk-am243x-bissc-encoder-interface-with-16khz-cycle/5558906?tisearch=e2e-sitesearch&keymatch=%25252525252520user%2525252525253A630978#5558906

    您可以将周期时间估计为1*(发送的总位数) us + 20us (bissc 的静态超时)-针对1 MHz 处的 BiSS-C 时钟频率

    或者、您可以运行命令5、捕获时钟和 Rx 信号并使用逻辑分析仪检查周期时间。  

    还可以尝试配置更高的 IEP 计数并进行检查。  

    此致  
    Arnav  

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

    您好、Arnav、

    感谢您的支持。  在8MHz、我的21位位置26位(21 +CRC +错误位) 、单字母编码器以连续模式(6)运行。

    输入 IEP 周期计数(必须大于 BISS 周期时间,包括超时周期,以 IEP 周期为单位): 12500

    |输入 IEP 触发时间(必须小于或等于 IEP 周期计数、以 IEP 周期为单位):2500

    |

    |按 ENTER 停止连续模式

    通道:0 - Enc1:角度:11.122895241000、CRC 错误计数 enc1:460438

      

     我还有一些问题。

    我使用"C:\ti\motor_control_sdk_am243x_09_02_00_09\examples\tidep_01032_dual_motor_drive\single_chip_servo\am243x-lp\system_freertos_nortos"

    我有一个带 BissC 编码器的 PMSM 伺服电机(如上所述)、因此我不使用 r5fss0-1。 我不使用 EtherCAT r5fss1-0。

    我使用类似的代码 Jianyu Wang https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1410308/lp-am243-sddf-cycle-time-icssg0-pru0-affects-bissc-cycle-time-icssg0-pru1

    当我调试 r5fss0-0时、我看到"bissc_get_pos (priv);"读数为0-360度、但存在 CRC 错误计数。 但我在 gLoopCnt++循环中使用此函数、而不是在"pruEncoderIrqHandler"中使用此函数。 在"pruEncoderIrqHandler"中使用算法时、这些 CRC 错误是否会对算法产生影响。

     

    在"pruEncoderIrqHandler"中。编码器读数(对于 endat 和 i use、适用于 bissC) 如下所示;

    #if!defined (use_pure_open_loop)&&!defined (use_open_loop_with_SDDF)

               /*从编码器获取最新的机械 θ 和多圈位置*/

               if (localEnDatGetSingleMulti (&mechTheta、&Multiturn、0)!= 0)

               {

                   gEncErrCnt++;

                   返回;

               }

               gPruEncoderIrqCnt_after ++;

    #endif

    我的"localEnDatGetSingleMulti "将如下所示;

    uint8_t localEnDatGetSingleMulti (float32_t * mechTheta){

       uint32_t pos;

       INT result = 0;

       result = bissc_get_pos (priv);

       pos = priv->enc_pos_data[0].position[0];

       * mechTheta =(float32_t) pos /(float32_t) priv->step * 360.0;

       返回0;

    }

     

    我认为等式"(float32_t) pos /(float32_t) priv->step * 360.0;"将位置计数转换为 Angle。 我是否可以使用"mechTheta = priv->enc_pos_data[0].angle[0];"?

     

    什么是

    ///#define USE_PURE_OPEN_LOOP

    //#define USE_OPEN_LOOP_WITH_SDDF

     在"setting.h"中

    我使用

    #define BUILDLEVEL            CLOSED_LOOP_SPEED

    我认为我必须使用"use_open_loop_with_SDDF" 从编码器获取位置

     此致、

    Vedat

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

    你(们)好

    当我调试 r5fss0-0时、我看到"bissc_get_pos (priv);"读出的角度为0-360度、但有 CRC 错误计数。 但我在 gLoopCnt++循环中使用此函数、而不是在"pruEncoderIrqHandler"中使用此函数。 在"pruEncoderIrqHandler"中使用算法时、这些 CRC 错误是否会对算法产生影响。[/QUOT]

    您是否进行了任何更改来修改 BiSS-C 位置请求的触发时间?

    [报价 userid="584594" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478244/lp-am243-lp-am243x-bissc/5687408 #5687408"]

    什么是

    ///#define USE_PURE_OPEN_LOOP

    //#define USE_OPEN_LOOP_WITH_SDDF

     在"setting.h"中

    [报价]

    这用于无反馈的开环测试。 如果已定义这些宏、位置反馈将不会 启用。

    此致

    Dhaval

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

    尊敬的 Dhaval:

    我没有进行任何更改来修改 BiSS-C 位置请求的触发时间。 我该怎么办? 如果是、该怎么做?

    有没有一个文档可以在其中找到您已解释的有关开环宏的信息。 我使用"SPRAD03–2022年3月"。

    在本文档中为"11.4步骤3. 开环 IQ 控制(BUILDLEVEL == OPEN_LOOP_IQ_ID)"部分说明了如何检查  "gSddfChOffsets"和"gMechAngleOffset"。 Δ T 被 ıt 为"Σ Δ 偏移量应在-1000到1000范围内。"。 我的优惠约为123865000。 我正在使用 BP-AM2BLDCSERVO 电路板、我的 J11、J13、J26跳线对于电流检测短接1-2、对于 SDFM 时钟短接 J17短接1-2。 有什么问题吗?

    此致、

    Vedat

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

    Vedat

    [报价 userid="584594" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478244/lp-am243-lp-am243x-bissc/5687899 #5687899"]

    我没有进行任何更改来修改 BiSS-C 位置请求的触发时间。 我该怎么办? 如果是、该怎么做?

    [报价]

    您可能需要对以下文件进行更改:

    1. endat_periodic_trigger.c
    • 根据 motor_control_sdk\examples\position_sense\bissc_diagnostic\bissc_periodic_trigger.c 进行审查和更新
    2. endat_periodic_trigger.h
    • 根据 motor_control_sdk\examples\position_sense\bissc_diagnostic\bissc_periodic_trigger.h 进行检查和更新
    3. example.syscfg
    • 删除 ENDAT 模块实例并添加 BiSS-C 实例(根据您的设置启用具有负载共享的通道0、2)
    4. settings.h
    • 根据更改#1、#2和#8中的相应更改重命名和更新 ENDAT_EVENT 宏
    5. single_chip_servo.c

    • 更新 BiSS-C 的包含路径

      #include 
      #include 
      #include 
      #include "endat_periodic_trigger.h"
      
      #if CONFIG_ENDAT0_MODE = ENDAT_MODE_MULTI_CHANNEL_SINGLE_PRU
      #include 
      #endif #if
      
      (CONFIG_ENDAT0_MODE = ENDAT_MODE_MULTI_CHANNEL_MULTI_PRU)#INCLUDE
      
      #endif #if
      
      (CONFIG_ENDAT0_MODE = ENDAT_MODE_MULTI_CHANNEL_MULTI_PRU)#INCLUDE
      
      #endif #if
      
      (CONFIG_ENDAT0_MODE = ENDAT_MODE_MULTI_CHANNEL_MULTI_PRU)#INCLUDE
      
      #endif #if
      
      CONFIG_ENDAT0_MODE = ENDAT_MODE_SINGLE_CHANNEL_SINGLE_PRU
      #include 
      #endif 

    6.
    • 更新全局变量和宏的名称
    • 有关更改、请参阅 examples\position_sense\bissc_diagnostic\bissc_diagnostic.c
    7.
    • 更新函数定义和函数调用
      • 替换 endat_get_fw_version  
      • 替换 endat_pruss_init
      • 查看并添加 bissc_pruicss_init 调用 、而不是 endat_pre_init (删除 endat_pre_init)
      • 替换 endat_pruss_load_run_fw  
      • 从 init_encoder 中删除 endat 特定代码、并将其替换为 examples\position_sense\bissc_diagnostic\bissc_diagnostic.c 中 bissc_main 和其他函数中的代码
      • 删除 endat_calc_clock、endat_handle_prop_delay、endat_do_sanity_TST_delay、endat_init_clock
      • 更新 localEnDatGetSingleMulti 函数以从 BiSS-C 结构中读取数据
    • 有关更改、请参阅 examples\position_sense\bissc_diagnostic\bissc_diagnostic.c
    8.

    PRU 固件

    source\position_sense\bissc\firmware\*

    • 根据需要进行更改、将数据直接存储到 TCM 或其他全局存储器中

    在本文档中、"11.4步骤3"。 开环 IQ 控制(BUILDLEVEL == OPEN_LOOP_IQ_ID)"部分说明了如何检查  "gSddfChOffsets"和"gMechAngleOffset"。 Δ T 被 ıt 为"Σ Δ 偏移量应在-1000到1000范围内。"。 我的优惠约为123865000。 我正在使用 BP-AM2BLDCSERVO 电路板、我的 J11、J13、J26跳线对于电流检测短接1-2、对于 SDFM 时钟短接 J17短接1-2。 有什么问题...?

    您对此进行了哪些更改? 您是否根据 ICSS SDFM 的需要连接电流反馈引脚?

    此致

    Dhaval

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

    尊敬的 Dhaval:

    非常感谢您提供详细的更改程序。 我将按照这8个步骤操作。

    Dhaval 说:

    Dhaval 说了什么:您做了哪些测试? 您是否根据 ICSS SDFM 的需要连接电流反馈引脚?

    在 SPRAD03–2022年3月 PDF 文档中、  "11.4步骤3. 开环 IQ 控制(BUILDLEVEL == OPEN_LOOP_IQ_ID)"部分说明了如何检查  "gSddfChOffsets"和"gMechAngleOffset"。 我只是在 gSDDFOfsetComplete = true 后检查偏移、并获得大约 123865000的浮点值、根据本文档、该值应在-1000/1000之间。 当我运行原始的 endat 代码时(虽然连接了 BissC 编码器),我得到了在正确范围内的以下偏移量。  

    在我的代码中、RTUirq 正在运行、但 ADC 值错误。 当 endat 代码正确读取 ADC 偏移时、我认为我的3个电机相位已正确连接。 是否有办法  根据需要检查电流反馈引脚的连接?

    我将按照您的步骤操作、并在星期一通知您。

    此致、

    Vedat