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.

[参考译文] TMS570LS1224:从 N2HET 到 CPU 的信息

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/666762/tms570ls1224-information-from-n2het-to-cpu

器件型号:TMS570LS1224
主题中讨论的其他器件:HALCOGEN

你好

我已经从事一个项目已经有一段时间了、但我一直在为 N2HET 而挣扎。 该项目涉及11个带编码器的直流电机、这些电机通过 N2HET 模块读取、并在博客上找到一个代码。 我对该代码有一些问题、无法正确读取边缘(在仿真中)、但很明显、模拟信号设置不当会导致问题。  

现在我的问题是、我没有找到如何从 CPU 上的 N2HET 实际读取信息。 如果我要控制电机、我需要每 X 次读取一次信息。 但我还没有找到这方面的一些示例...

我非常感谢您的帮助。  

谢谢、致以诚挚的问候

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

    您好、Miguel、

    对于电机控制、MCU 需要生成 PWM 信号、捕获脉冲并对 ADC 进行采样。 对于 PWM、通常使用3条指令:计数器(CNT)、比较(ECMP 等)、更新(MOV32、MOV64、RADM64等)。 您可以通过将数据直接写入更新指令的数据字段(例如 MOV32)来更新 PWM 周期和占空比。

    N2HET RAM 被执行为4组96位宽双端口 RAM。 这意味着总共有8个可用端口;四个读取端口和四个写入端口。 通常、N2HET 一次最多将使用其中的两个端口。 一个读取端口被用来允许 N2HET 预取下一个 N2HET 指令、而一个写入端口可被用来更新由于执行当前指令而改变的数据或者控制字段。

    N2HET 对其自身内部 RAM 的访问被授予优先于来自外部主机(CPU 或 DMA)的访问、这使得 N2HET 程序执行是确定性的、这是一个定时器的关键要求。

    每个 N2HET 指令为96位宽、但与128位边界对齐。 指令由三个32位字段组成:程序、控制和数据。 如果 MOV32是代码的第三条指令、您可以使用以下命令访问数据字段:

    hetRAM->指令[3].Data

    HALCoGen 生成了一个示例代码来从 NHET RAM 获取/写入值、例如:

    pwmSetSignal (hetRAMBASE_t * hetRAM、uint32 PWM、hetSIGNAL_t 信号);

    edgeGetCounter (hetRAMBASE_t * hetRAM、uint32边缘);

    等等

    您可以在 RTI ISR 中调用这些函数。  

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

    你(们)好

    感谢您的回复

    [引用 USER="QJ Wang ]对于电机控制、MCU 需要生成 PWM 信号、捕获脉冲并对 ADC 进行采样。 对于 PWM、通常使用3条指令:计数器(CNT)、比较(ECMP 等)、更新(MOV32、MOV64、RADM64等)。 您可以通过将数据直接写入更新指令(例如 MOV32)的数据字段来更新 PWM 周期和占空比。[/QUERT]

    使用 ePWM 模块生成 PWM。 IM 仅缺少执行控件的反馈。  

    如果您正确理解这一行

    [引用 user="QJ Wang "]可获取计数器(hetRAMBASE_t * hetRAM、uint32边缘);[/quot]

    我可以使用它来根据我为每个边沿指定的名称、根据它们所处的 RAM 获取边沿?   

    比如 edgeGetCounter (hetRAMBASE_t * 1、uint32编码器_1_A);?

    这样、我会直接从编码器1通道 A 恢复实际数据?  

    谢谢

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

    您好、Miguel、

    是的、您可以使用此函数读取计数器。 我更喜欢根据 NHET 微代码和通过 NHET IDE 生成的头文件编写我自己的函数。

    头文件(通过 HET IDE 生成)定义了所有 HET 指令的变量。 例如、Phet_start_0指向我的示例代码中的第一条指令:

    如果要更改第一条指令的数据字段、我们可以使用 Phet_start_0来访问 START 指令: