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.

[参考译文] CCS/LAUNCHXL-F28069M:速度控制-借助 Motorware 的 LAUNCHXL-f28069m、BOOSTXL-DRV8305EVM 和 proj_lab06e 提高分辨率5rpm

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/566874/ccs-launchxl-f28069m-speed-control---improve-resolution-5rpm-with-launchxl-f28069m-boostxl-drv8305evm-and-proj_lab06e-of-motorware

器件型号:LAUNCHXL-F28069M
主题中讨论的其他器件: MOTORWAREcontrolSUITE

工具/软件:Code Composer Studio

尊敬的所有人:

我正在为两个电机开发速度控制。 我将 LAUNCHXL-f28069m 与两个 BOOSTXL-DRV8305EVM 搭配使用。 我使用的程序是 motorware 的 proj_lab06e。

目标是通过模拟输入电压0–3.3V 在外部调节速度。 最大 速度为5krpm。

在源代码“proj_lab06e”中,提供了几个函数。

 程序代码摘录:

(使用此代码、我得到的分辨率为1krpm。 即、我只有5种速度:1krpm、2krpm、3krpm、4krpm 和5krpm。)

 

值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_14); //读取 ADC 设置值

pAdcData->DCBus =值;//保存 ADC 值

值=_IQmpy (gAdcData[HAL_MTR2].DCBus、_IQ (0.0012820512820513));           //最大值 速度= 5krpm、最大 ADC 值3900 -> 5/3900 = 0.00128205...

gMotorVars[HAL_MTR1].SpeedRef_KRPM =_IQ (值);

 

使用另一个代码脚本可以获得40rpm 的分辨率。 但该分辨率也太低。 (但我认为这不是正确的表示法)

                            

值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_14);

refvalue =_IQmpy (value、_IQ (8));

pAdcData->DCBus =_IQmpy (refvalue、_IQ (0.004));

refValue =_IQmpy (_IQ (1)、gAdcData[HAL_MTR2].DCBus);

gMotorVars[HAL_MTR1].SpeedRef_krpm =_IQmpy (_IQ (refValue)、gSpeed_Hz_TO_krpm_SF[HAL_MTR1]*1.31);

gMotorVars[HAL_MTR1].SpeedRef_KRPM =计算值;         

 

我知道“值”是一种_IQ 类型,范围为127.999。 -128、分辨率约为0.000 000 060。

但我的怀疑是,我只能计算“整数”:

127 = 5krpm                                                                          

126 = 4.96krpm

125 = 4.92krpm

因为我无法实现例如125.5 = 4.941krpm。 我出了什么问题?

 

要获得更高的分辨率(例如5rpm)、我需要做什么? 您能给我一个解决这个问题的建议吗?

 

我完全使用 proj_lab06e、基本上我更改了:

proj_lab06e.c  >第713–749行

hal_2mtr.h        >第681–710行

文件已附加。

此外、电机是我自己的电机-没有标准电机。 实际上连接了两个电机。 只会观察/测量一个电机、另一个电机获得与观察到的电机相同的参数和值。 因此、这很好。

提前感谢大家。

e2e.ti.com/.../SpeedControlCode.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信您看到的问题是 ADC_readResult()函数返回类型 uint_least16_t 的值,该值只能返回整数。 您将无法将 uint16转换为_iQ24并期望小数结果

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

    感谢您的回复、我认为您是对的。 我还有一些问题:

    假设 ADC 读取的输入电压为3.0V、相应的 ADC 值为4095。 我指定5krpm 的速度具有最大值 ADC 值4095。
    如果输入电压为2.3V、则 ADC 值为3140、对应的速度为3.833krpm。 在此假设中、我附加了一个 Excel 表。
    此外、我还有关于 uint16到_iq 数据转换的问题。 在文件“hal_2mtr.h”中,它被写入:

    //转换电流 A
    值=(_IQ) ADC_readResult (obj->adcHandle、ADC_ResultNumber_1);
    值=_IQ12mpy (值、CURRENT_SF);
    pAdcData->I.value[0]=值;

    此代码由 lab06e 的编程器编写。
    •我认为应该可以将 uint16值处理为_iQ24值。
    •我还认为 uint16值具有非常好的分辨率。 它的变化率仅为每 mV 1-2rpm。 请参阅随附的 Excel 表格。

    但是、要根据输入电压获取速度、该值应转换为_IQ24。 我现在的问题是、我该怎么做?

    我的假设:
    我的输入电压为2.3V。 ADC 值为3140 (十进制)-> uint16 = 0000 1100 0100 0100 (二进制)
    由于上面的代码段、应该可以将 uint16转换为_iQ24。
    现在_iQ24的值是:000 0000.0000 0000 1100 0100 0100。

    但不幸的是,这不能按计划工作。 我做了什么错误或推理有什么错误?

    非常感谢你的帮助。

    e2e.ti.com/.../2604.resolution_5F00_speed.xlsx

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

    如果 ADC 范围为4096、并且您希望将该范围映射到5k RPM

    4096/5000 = 0.8192步进/rpm、并且由于您的变量 SpeedRef_krpm 以 kRPM 为单位、因此819.2步进/krpm

    (ADC 值)/819.2 =转速、单位为 krpm

    您可以执行类似的操作

    _iq mySpeed;
    _iq12除数=_IQ12 (819.2);
    mySpeed =_IQ12toIq (_IQ12div (((_iq12) gAdcData[HAL_MTR2].DCBus),除数));

    然后、mySpeed 应该是 iQ24格式的0-5之间的值。

    通常,要在 IQ 数值之间转换,请使用_IQtoIQN()或_IQNtoIQ(),其中 IQ 始终是全局 Q 类型

    查看 controlSUITE 中的 IQmath_Quickstart PDF、了解所有 IQmath 函数调用

    肖恩