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.

[参考译文] LAUNCHXL-F28P55X:通用电机控制实验室 — Datalog DMA

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1567298/launchxl-f28p55x-universal-motor-control-lab---datalog-dma

器件型号:LAUNCHXL-F28P55X
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好、

我尝试使用 DATALOG 模块在 运行时观察电机电压和电流值、并设法从以下示例开始。

C:\ti\c2000\C2000Control_SDK_5_04_00_00\solutions\universal_motorcontrol_lab\f28p65x\ccs\motor_control Ware_Motor

我可以看到、在 DATALOGIF.c 和 datalogIF.h 内部有一些选项可以定义符号、以便将 2 通道 (DATALOGF2_EN) 或 4 通道 (DATALOGF4_EN) 数据日志与 DMA 配合使用。

但是、鉴于 f28p55x 芯片有 6 个 DMA 通道、我是否可以将其扩展到 6 个通道?

我知道电机控制 SDK 包含了 6 通道 DATALOG 源文件、我想问是否有任何说明如何使用它的示例?

C:\ti\c2000\C2000Control_SDK_5_04_00_00\libraries\utilities\datalog\source Ware_Motor

谢谢!

小号

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

    你好、小

    它应该是可行的。 不过、我们没有一个具体的示例来展示这一点。 您可以参考 4 通道的情况并进行开发。

    但是、鉴于 f28p55x 芯片有 6 个 DMA 通道、我想问是否可以将其扩展到 6 个通道?

    谢谢、

    Jiaxin

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

    你好、小

    我可以看到其中一个信道的最后一个数据点似乎是从其他信道捕获的数据。

    请确保各个存储器段之间没有重叠。 若要确定 DMA 的传输大小、请参阅 C28x Academy 上的 DMA 材料

    谢谢、

    Jiaxin

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

    大家好、我从示例中切换到测试 4 通道 DMA。  

    C:\ti\c2000\C2000Control_SDK_5_04_00_00\solutions\universal_motorcontrol_lab\f28p65x\ccs\motor_control Ware_Motor

    #if defined(DATALOGF4_EN)
    
    #define DATA_LOG_BUFF_SIZE      400     // Must be integral times of (20)
    #define DATA_SIZE_EXT           2       //
    
    #define DATA_LOG_BUFF_NUM       4       // = 4 for F28003x
    
    #define DLOG_BURST_SIZE         20       // write 200 to the register for
                                             // a burst size of 20
    
    #define DLOG_TRANSFER_SIZE      (3 + (2 * DATA_LOG_BUFF_SIZE / DLOG_BURST_SIZE)) //43

    可以看到缓冲器 2 和 4 中的最后一个索引值配置不正确?

    对于存储器段、我已确认没有重叠存储器。  

    我已经按照 C28x Academy 上的 DMA 材料 来确定 6 通道 DMA 的传输大小。

    #define DATA_LOG_BUFF_SIZE    300  //必须是 (20) 的积分时间
    #define DATA_SIZE_EXT           2.
    #define DATA_LOG_BUFF_NUM     6   // 6 通道 DMA
    #define DLOG_BURST_SIZE       20   //将 300 个样本写入的寄存器
                                      //突发大小为 20
    #define DLOG_TRANSFER_SIZE    (2 * DATA_LOG_BUFF_SIZE / DLOG_BURST_SIZE)//30

    您能否帮助验证它们是否正确?

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

    您无需更改其他参数、只需将  DATA_LOG_BUFF_NUM 更改为 6、并将 Buffer 数组增加到 6、并在 hal.h 和 hal.c 中分配 DMA 通道、如下所示。

    //在 hal.h 中为 Datalog 提供 DMA
    #define DMA_DATALOG1_BASE DMA_CH1_BASE
    #define DMA_DATALOG2_BASE DMA_CH2_BASE
    #define DMA_DATALOG3_BASE DMA_CH3_BASE
    #define DMA_DATALOG4_BASE DMA_CH4_BASE

    #define DMA_DATALOG5_BASE DMA_CH5_BASE
    #define DMA_DATALOG6_BASE DMA_CH6_BASE

    hal.c

    obj->dmaChHandle[0]= DMA_DATALOG1_BASE;//!< DMA 通道句柄
    obj->dmaChHandle[1]= DMA_DATALOG2_BASE;//!< DMA 通道句柄
    obj->dmaChHandle[2]= DMA_DATALOG3_BASE;//!< DMA 通道句柄
    obj->dmaChHandle[3]= DMA_DATALOG4_BASE;//!< DMA 通道句柄

    obj->dmaChHandle[4]= DMA_DATALOG5_BASE;//!< DMA 通道句柄

    obj->dmaChHandle[5]= DMA_DATALOG6_BASE;//!< DMA 通道句柄

    并调用 HAL_setupDMAforDLOG() 6 次以设置 DMA 通道。