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.

[参考译文] MCF8316AEVM:通过 Code CCS 从 RAM (易失性)寄存器映射中读取值

Guru**** 2480505 points
Other Parts Discussed in Thread: MCF8316AEVM, MCF8316A, MSP430FR2355

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1213319/mcf8316aevm-read-values-from-ram-volatile-register-map-by-code-ccs

器件型号:MCF8316AEVM
主题中讨论的其他器件: MCF8316AMSP430FR2355

大家好、

我们有一个风扇设计项目。 我们基于 TI 的 MCF8316EVM 电路板设计、为第一个设计版本设计了自己的 MCF8316AEVM 电路板和 GUI 连接。 我们通过设置参数并遵循结构调优指南、成功地通过 MCF8316A GUI 1.1.8运行了电机。

为了掌握参数和速度调整、我们决定通过嵌入 CCS 编程来运行电机、而不使用应用 GUI。

我要感谢 Eric Chen 提供了代码文件:

根据该指令、我们可以通过 CCS v12.0读取 EEROM。 但是、它只是与 EEROM 的连接。 现在、我们要从 RAM (易失性)寄存器映射中读取值、就像我们使用 GUI 读取电机状态(BEMF、速度、相电压、相电流、ID、 IQ、Vd、Vq 基准、、、)

您能否向我展示如何操作以及提供源代码来读取这些值?

我想通过 I2C 通过编码 CCS 来设置速度参考。 通过 CCS 控制转速电机时、我必须执行什么操作?

此致、

Vuong N.T.

 

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

    您好、Vuong、

    我将稍微修改代码、并在下周提供更新的项目。

    此致、
    埃里克·C·

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

    尊敬的 Eric Chen:

    我对掌握 GUI 软件以动态调整参数非常感兴趣。  因此、我非常希望您能提供 GUI 源代码。 这是我的电子邮件: ntvuong@most.gov.vn。 您可以通过电子邮件提供。 谢谢!

    此致、

    Vuong N.T.

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

    您好、Vuong、  

    我们的团队今天在美国度假时不在办公室、但下周会重新上任。  

    届时、请预计回复会延迟、但我们会尽可能方便地回复您对问题进行评论。  

    此致、  
    Andrew  

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

    我真心希望您能提供 GUI 源代码

    此致、

    Vuong N.T.

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

    您好、Vuong、

    可使用 硬件 I2C_MSP430FR2355_MCF8316AEVM 中相同的 I2C 读取/写入命令访问 RAM 寄存器。

    但是、要访问算法变量 RAM 寄存器、需要略微修改代码、因为算法变量地址为12位而不是8位。

    在 I2C 命令中构造控制字时、以下行:

    line 143    // Construct the 24 bit control word (refer to datasheet section 7.6.2.1)
    line 144    char control_word[3] = {0x10, 0x00, addr&0xFF};

    line 222    // Construct the 24 bit control word (refer to datasheet section 7.6.2.1)
    line 223    char control_word[3] = {0x90, 0x00, addr&0xFF};

    需要更改为:

    line 143    // Construct the 24 bit control word (refer to datasheet section 7.6.2.1)
    line 144    char control_word[3] = {0x10, (addr&0x0000FF00)>>8, addr&0x000000FF};

    line 222    // Construct the 24 bit control word (refer to datasheet section 7.6.2.1)
    line 223    char control_word[3] = {0x90, (addr&0x0000FF00)>>8, addr&0x000000FF};

    请找到更新后的 CCS 工程: e2e.ti.com/.../7444.HardwareI2C_5F00_MSP430FR2355_5F00_MCF8316AEVM.zip

    然后可以使用 I2C_read32 ()从算法变量寄存器中读取,例如:

    I2C_read32(0x210, &result_var, I2C_TIMEOUT);

    若要 通过 I2C 设置速度基准、只需执行以下操作即可

    • 将 PIN_CONFIG.SPEED_MODE 寄存器设置为"寄存器覆盖模式"
    • 通过设置 ALGO_CTRL1.DIGITAL_SPEED_CTRL 寄存器来控制速度基准

    此致、
    埃里克·C·

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

    尊敬的 Erics:

    但是,要访问 algorithm_variable RAM 寄存器,代码需要稍作修改,因为算法变量地址是12位而不是8位。

    是的,我看到了,并按照你的指示。

    然后使用 I2C_read32()从算法变量寄存器读取,例如:

    您可以为我共享 I2C_read32 ()的源代码吗?

    此致、

    Vuong N.T.

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

    Eric、

    通过设置 algo_CTRL1.digital_speed_ctrl 寄存器控制速度参考

    可以。 但我想通过代码 CCS 而不是 GUI 控制速度基准。 您能帮我讲一讲规范吗?

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

    您好、Vuong、  

    Eric 目前不在办公室、但应在下周回到办公室、以便为您提供有关后续步骤的意见。  

    此致、  
    Andrew  

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

    您好、Vuong、

    I2C_read32 ()的源代码包含在我在 上面的响应中随附的 CCS 工程的 main.c 文件中

    设置覆盖位并将 DIGITAL_SPEED_CTRL 更改为10%、53%和100%的示例代码:

        // Temporary variable
        long read_result;
        
        // First read the PIN_CONFIG register so that we don't affect other bits when setting SPEED_MODE
        I2C_read32(0xA4, &read_result, I2C_TIMEOUT);
        
        // Set the PIN_CONFIG.SPEED_MODE bitfield to Register Override Mode (2h) while retaining other bits
        I2C_write32(0xA4, (read_result & (~0x00000003)) | 0x00000002, I2C_TIMEOUT);
        
        /*
         * DIGITAL_SPEED_CTRL is 15-bits, so max value is 32767 = 100% speed cmd
         * Multiply 32767 by speed cmd percentage, then bit shift left by 16 before writing to ALGO_CTRL1 register
         */
        
        // Set the ALGO_CTRL1.DIGITAL_SPEED_CTRL bitfield to 10%
        I2C_write32(0xEC, ((int)(0.10 * 32767)) << 16, I2C_TIMEOUT);
        
        // Set the ALGO_CTRL1.DIGITAL_SPEED_CTRL bitfield to 53%
        I2C_write32(0xEC, ((int)(0.53 * 32767)) << 16, I2C_TIMEOUT);
        
        // Set the ALGO_CTRL1.DIGITAL_SPEED_CTRL bitfield to 100%
        I2C_write32(0xEC, ((int)(1.00 * 32767)) << 16, I2C_TIMEOUT);

    读取 Algorithm_State 和 speed_fdbk 等算法变量的示例代码:

        // Temporary variable
        long read_result;
        
        // Read ALGORITHM_STATE algorithm variable
        I2C_read32(0x210, &read_result, I2C_TIMEOUT);
        
        // Read SPEED_FDBK algorithm variable
        I2C_read32(0x752, &read_result, I2C_TIMEOUT);

    此致、
    埃里克·C·

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

    您好、Eric、

    I2C_read32 ()的源代码包含在我在 上面的响应中随附的 CCS 工程的 main.c 文件中

    设置覆盖位并将 DIGITAL_SPEED_CTRL 更改为10%、53%和100%的示例代码:

    [/报价]
    我遵循了您的源代码、结果不错。 不过、要对读取 speed_fdbk 和另一个 RAM 的参数进行编码、 
    结果不正确。


    能否解释一下如何更正此代码?

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

    您好、Vuong、

    每个 RAM 算法变量都有自己的方式从寄存器 十六进制值解释为最终有意义的单元。  请参阅每个算法变量的数据表说明、了解 需要进行哪些额外计算来将寄存器十六进制值中每个变量的值转换为相应的单位。

    例如、对于 speed_fdbk 寄存器:

    您需要将 READ_RESULT 除以2^(27)、然后乘以 CLOSED_LOOP4.MAX_SPEED 寄存器中配置的值、以获得以 Hz 为单位的最终估算速度。

    此致、
    埃里克·C·