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:SDDF 周期时间(ICSSG0-PRU0)影响 BissC 周期时间(ICSSG0-PRU1)

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

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

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

工具与软件:

大家好、我正在尝试修改 single_chip_servo_am243x-lp_r5ss0-0_nortos_ti-arm-clang 中的代码、以构建可在 AM2431上运行的演示。

将 USE_OPEN_LOOP_with_SDDF 定义为使用 sddf 运行开环。

我使用 ICSSG0_PRU1将编码器从 ENDAT 更改为 BissC (代码基于 BissC 单通道诊断)。

波特率为2MHz。 内核时钟和 IEP 时钟为200MHz。

结构 SdfmPrms gTestSdfmPrms 中的 IEP 时钟也更改为200MHz。

配置的位置周期为16kHz。

问题是、

如果在 pwm.h 中定义的 APP_EPWM_OUTPUT_FREQ 为4K 或8K、则循环位置为16kHz。

2. 如果   APP_EPWM_OUTPUT_FREQ 为20k 或50k、则时钟和数据中没有输出。

3.如果 APP_EPWM_OUTPUT_FREQ 为16k、则周期时间约为310us。

在全部3个测试用例中、电机都将正常旋转。 位置数据在第1和3种情况下可用、而在第2种情况下不可用。

我的问题是 SDDF 和 BissC 是否可以在16kHz 频率下使用 ICSSG0、因为 ICSSG1应用于 EtherCAT。

谢谢。

因此、我的目标是获得  

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

    Jainyu、您好!

    感谢您的提问。

    我会检查一下、然后回复给您。

    您是否还可以在已进行更改的地方共享代码?   

    此致

    Achala Ram

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

    我添加了文件 bissc_periodic_trigger.c 和  bissc_periodic_trigger.h、以及相对库、其中包括。

    添加了文件 BissCHandle.c、 BissCHandle.h

    文件 Single_chip_servo.c 主要更改了函数 single_chip_servo_remote_core_start ()并删除了 ENDAT 相关函数。

    e2e.ti.com/.../Added-and-modified-files.zip

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

    我再次检查代码。 该工程可使用具有17位 BissC 编码器的旋转电机运行。 更改  APP_EPWM_OUTPUT_FREQ 会影响 PWM 频率和编码器的数据请求频率。

    e2e.ti.com/.../single_5F00_chip_5F00_servo_5F00_am243x_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

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

    您好、建宇、

    在我看到的代码中、CMP0和 EMPW 同步输出两个事件都用于复位 IEP、因此您还需要更改 CMP0值以同步 EPWM 周期和位置周期。

    我认为您没有 根据 ePWM 周期时间更改反馈捕获周期时间、因此没有得到正确的周期时间。

    为了获得所需的周期时间、您必须始终将 CMP0值定义为等于 EPWM 周期时间*IEP 时钟值 漂移  

    [报价用户 id="622144" url="~/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 ]]如果在 pwm.h 中定义的 APP_EPWM_OUTPUT_FREQ 是4K 或8K、则循环位置为16kHz。[/QUOT]

    在代码中定义的 cmp0 (12500(62.5us @16KHz ))值用于16KHz EPWM 周期、因此周期时间始终为16kHz。  

    您是否能够将 CMP0值定义为等于 ePWM 周期时间并尝试?  

    谢谢、此致

    Achala Ram  

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

    尊敬的 Achala:

    我没有跟你走。

    公式应为1/APP_EPWM_OUTPUT_FREQ (16k)* IEP_CLK (200MHz)= 200,000,000 / 16,000 = 12500。

    如果  APP_EPWM_OUTPUT_FREQ 设置为8K 或4K、则反馈周期时间正确。  

    我已经更新了 CMP3和 CMP0作为您的建议。 当  APP_EPWM_OUTPUT_FREQ = 16K 时、结果仍然不正确。

    但另一个问题,我不确定是否相关。

    首先、在原始编码器中、CMP0和 CMP3设置为3000。 由于 IEP 时钟为300MHz、周期时间应为10us。

    其次、我比较了 single_chip_servo_am243x-lp_r5ss0-0_nortos_ti-arm-clang 中的 endat_periodic_trigger.c 和 endat_diagnostic_single_channel_am243x-lp_r5ss0-0_freertos_ti-arm-clang 中的相同文件。 CMP0加倍。 我不知道这种差异的目的,并想知道这是否与我的问题有关。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在原始编码器中、CMP0和 CMP3设置为3000。 由于 IEP 时钟为300MHz、周期时间应为10us。[/报价]

    否、对于50kHz ePWM 周期、该值为20us。 在 EnDAT 中、编码器 CMP3用于在 EPWM 周期中间触发位置反馈、CMP0用于在 EPWM 周期结束时复位 IEP。

    您可以在原始代码中看到、位置反馈点使用3000 (EPWM 周期的确切中间值@50kHz)、IEP 复位点使用2 * 3000 (EPWM 周期的20us 结束@50kHz)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已更新 CMP3和 CMP0作为您的建议。 当  APP_EPWM_OUTPUT_FREQ = 16K 时、结果仍然不正确[/QUOT]

    能否分享更多有关这方面的详细信息? 您在周期时序中看到了多大差异?

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

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

    非常有趣。 我根据 cmp0和 cmp3编写的代码都是3k、实际上 cmp0是6000、cmp3是3000。

    现在我做下面的改变、BissC 周期时间现在是正确的。

    那么、您对 cmp3的值选择有什么建议吗? 我还尝试了 cmp3 = cmp0/2、但引脚上没有数据和时钟。 感觉 cmp3有一个最小值(当过小时会停止输出)、有一个最大值( 应低于且不等于 cmp0)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么您对 cmp3的值选择有何建议吗? 我还尝试了 cmp3 = cmp0/2、但引脚上没有数据和时钟。[/QUOT]

    您可以在"0"和配置的 cmp0值之间进行配置、正如我提到的 、IEP 同时获取两个复位事件(一个来自 CMP0内部、一个来自 EPWM 同步输出外部)、这可能会导致边缘情况出现问题、我的意思是 cmp3=0和 cmp3=cmp0、但 CMP3的这两个值应正常工作。 让我再次检查一下 cmp3 = cmp0 / 2配置的代码、原始代码在本例中正常运行、其中 cmp3 = 3000、cmp0 = 6000 (cmp3 = cmp0 / 2)

    我也尝试过 cmp3 = cmp0/2 、但引脚上没有数据和时钟

    这意味着 IEP CMP3没有命中、并且固件没有开始与编码器通信、因为固件正在等待达到 CMP3事件、您可以检查 IEP 寄存器吗? 检查 CMP3寄存器值和 IEP CMP 状态寄存器值?

    谢谢、此致、

    Achala Ram

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着 IEP CMP3未命中、固件未开始与编码器通信、因为固件正在等待 CMP3事件发生、您能检查 IEP 寄存器吗? 检查 CMP3寄存器值和 IEP CMP 状态寄存器值?[/QUOT]

    目前我使用16kHz、因此 cmp3为6250、CM0为12500。 IEP CMP 状态残桩1.

    在代码中,函数 bissc_command_wait()中的 bissc 位置函数存根, cycle_trigger[0]存根1。

    我今天尝试了几个值、结果是、如果 cmp3  小于8500、则编码器不返回任何值。

    还有一些我想知道的问题。

    cmp3和 SYNC 延迟

    这张图片是示波器、绿色是 U 相、橙色是编码器的数据、蓝色是 clk 。 cmp3值为8500。 测量 U 为低电平时中点与 clk -起始点之间的德拉时间。 增量时间为18.67us、 当 cmp3为11500时、该时间会增加至24.93us。

    我可以看到 PWM 和编码器时间已同步。  但我无法知道如何计算差值时间、将 cmp3增加3000应该会得到15us、对吧?

    2.反馈函数的实现。

    我在 bissc_drv.c 文件中检查了函数 bissc_get_pos ()、  

    在 bissc_command_process 中、包含2个步骤:

    -设置 pruicss_xchg->cycle_trigg[ch]= 1

    -等待 pruicss_xchg->cycle_trigg[ch] = 0。

    那么、我想必须执行该步骤、才能在 priv->pruicss_xchg->pos_data_res[sl_num].raW_DATA 中更新 bissc 反馈?

    但是、while 循环不适合放入 PWM_ISR 处理程序、源端代码也没有 while 循环。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="622144" url="~/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/5406089 #5406089"]

    目前我使用16kHz、因此 cmp3为6250、CM0为12500。 IEP CMP 状态残桩1.

    [报价]

    您需要检查标记的 CMP 寄存器。  

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

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

    设置 CMP3状态位、以便至少应进行一次通信、对于 CMP3值6250、您是否在数据和时钟线上看不到任何通信?

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

    Jainyu、您好!

    将 cmp3增加3000应该能得到15 μ s、对吗?

    是、正确、因为 IEP 正在运行@200MHz。  

    我有几个问题

    您看到的4K 和8K ePWM 频率的结果是什么。 ? 这是否适用于 CMP3 = CMP0/2的情况?

    只是为了澄清,你能分享所有的情况,它是工作和不工作? 还请分享您在非工作案例中看到的问题。

    工作案例:

    无法正常工作的情况:

    谢谢、此致、

    Achala Ram

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

    工作案例:

    4k、8k ePWM 频率、cmp3 = cmp0/2。 16k ePWM 频率、cmp3 >= 8500

    无法正常工作的情况:

    16k ePWM 频率、cmp3 < 8500

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

    感谢您的分享!

    我将对这个无法正常工作的情况进行测试和调试、然后回复给您。

    同时、可以检查 IEP 是否已正确复位

    BR、

    Achala Ram

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

    这适用于原始代码、我在代码中做了两处更改、改为使用16kHz

    • APP_EPWM_OUTPUT_FREQ = 16000
    • endat_periodic_interface.cmp3 = 300000000/(2* APP_EPWM_OUTPUT_FREQ)

    您能看一下下面提到的内容吗?

    1. IEP 计数器是否复位?
    2. 停止 PRU 内核并检查其卡住的位置?  
    3. 如果设置了 IEP CMP3状态位、则编码器通信必须至少发生一次

    谢谢、此致、

    Achala Ram