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.

[参考译文] LAUNCHTXL-F2.8069万M:将绝对旋转位置磁性编码器与InstaSpin-Motion集成

Guru**** 2598205 points
Other Parts Discussed in Thread: BOOSTXL-DRV8305EVM, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/663317/launchxl-f28069m-integrating-an-absolute-rotary-position-magnetic-encoder-with-instaspin-motion

部件号:LAUNCHTXL-F2.8069万M
线程中讨论的其他部件: BOOSTXL-DRV8305EVMcontrolSUITE

您好,  

我正在尝试将绝对位置编码器(AS5048A - ams.com/.../AS5048A 与LAUNCHTXL-F2.8069万M和BOOSTXL-DRV8305EVM配合使用,以按照TI安装实验室12x - 13x的实验来控制PMS电机的位置。 我正在使用绝对编码器,因为我的应用程序需要在几乎0速度下精确定位电机,启动运动很少/没有。 我已经建立了一个SPI接口到传感器,并且成功读取了该值(一个14位整数,表示电机的绝对机械角度),但很难以正常工作的方式将其与SpinTAC控制器集成。  

下面是我尝试过的方法:

我开始做实验2x来确定我的电机的电阻,电感等。 在那里似乎一切都很好。 运行实验室3次也成功地将电机旋转至所需的转速。

我已将编码器信号垂直插入`enc`模块,而不是正交信号。 为^正确转换,我设置了`enc`模块,将2 14/4作为编码器线路数,因为它似乎将编码器线路*4 - 1视为最大输入值。 `此操作,我可以使`enc模块通过编码器信号生成电机的电气角度。 这似乎工作正常,因为它在1个电机旋转期间从0循环至1 14次,这是正确的,因为我有一个14极对电机。

此时,我似乎已经正确设置了反馈回路。 我运行了实验12a来确定我的系统的惯性,在改变了斜坡时间和目标速度之后,它似乎工作了。 但是,当我运行实验室12b时,我看到电机有非常奇怪的行为。 虽然电机尝试旋转至目标转速(100),但它开始旋转,但似乎停止运转,并稍微来回移动。 然后它将再次开始旋转。 此循环在每组脉冲之间重复几秒钟。  

我是否错过了编码器集成的关键部分,或者是否还有其他问题丢失了? 感谢您提前提供的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您无需更改和使用ENC模块,因为您从绝对编码器获得转子位置和角度,您需要根据绝对编码器的数据计算转子角度,可以将数据转换为_iQ24, 将使用lab12a中的Tor eplace ENC_getElectAngle (encHandle)和其他项目。 然后使用lab12a来识别电机惯性。
    角度为电动角度,公式为(编码器数据*2^24*pole pairs/2^14+角度偏移),*2^24用于转换器数据到iQ24,2^14是编码器的分辨率。 您必须执行偏移校准,以获得lab12a的角度偏移,lab12a使用Rs重新计算来实施校准。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速回复Yanming,我采纳了您的建议,完全取消了`enc`模块。 以下是替换代码的摘要:

    /***** 在我的AS5048A库中***** /
    uint16_t AS5048A_SPIA_READ_REPLICATED (HAL_HANDLE句柄,AS5048A_Address_e addr)
    {
    /*...通过SPI读取编码器值并将计数返回给用户... */
    }
    
    _IQ AS5048A_getMechAngle (uint16_t encoderVal,_IQ mechAngleZer){
    
    静态const _IQ oneIq =(((UINT32_t) 1)<24);
    静态const _IQ增益= oneIq / AS5048A_MAX_COUNT;
    静态const _IQ wrapIq = 0x00ffffffffff;
    Return (Gain * encoderVal + oneIq - mechAngleZero)& wrapIq;
    }
    
    _IQ AS5048A_getElectromangle(_IQ mechAngle,uint16_t poleFairs)
    {
    静态const _IQ wrapIq = 0x00ffffffffff;
    回波(mechAngle * poleFairs)& wrapIq;
    }/*****
    
    
    在主"while (gMotorVars.Flag_enableSys)"循环中***** /
    //将编码器值读入全局
    编码器编码器Val = AS5048A_SPIA_REREAD_REALIZIZIZREGAL(halHandle, AS5048A_Address_Angle);
    encoderMechAngle = AS5048A_getElectromAngle = AS5048A_getElectromAngle
    user_motor_NUM_pole_pairs);
    
    
    /***** 在主ISR *****中 //...
    
    Ctrl_run (ctrlHandle,halHandle,&gAdcData,&gPwmData,encoderElectAngle);
    //...
    IF ((EST_getState(obj->estHandle)== EST_STATE_Rs)&&(user_motor_type == motor_Type_pm)
    {
    encoderMechAngleZero = AS5048A_getMechAngle(encoderVal, 0);
    }
    
    
    

    我在做实验12a时仍然遇到问题。 我正在查看机械角度和电气角度的值,它们似乎工作正常(与我在实验3b中确定的电动机旋转方向的标志相同)。 每当我开始识别过程时,电机只会来回脉动一次,而不是经过所需的斜坡,直至达到指定的转速。 如果我稍微利用目标转速和斜坡时间,我可以让它有时只朝1个方向移动,但通常它只旋转约10 - 30度,然后快退到它开始的位置。 不用说,它所产生的惯性和摩擦估计是不合逻辑的(通常是负面的)。 是否还有其他指针?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否能够在此处解决您的问题? 如果是,我会将此线程标记为闭合。 如果情况并非如此,请随时回复或开始新的线程。

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很遗憾,不是,我在之前的回复中发布的信息+问题仍然代表我的问题的(未解决)状态。

    谢谢!

    Isaac
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    lab12x~lab13x项目使用增量编码器,您必须设计或更改位置传感器接口功能,如果您使用绝对位置编码器,则不要直接使用ENC模块。 在使用偏移校准之前,还需要进行偏移校准,并在设置函数中设置偏移。
    您可以参考"IDDK_PM_Servo_F2837x-v2"项目来设计如下所示的接口模块。
    C:2.0 \ti\controlSUITE\DEPEND_KITS\TMDSIDDK_Vx\IDDK_PM_Servo_F2837x_v2_00_00_00
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Isacc,

    您的问题是否得到了解决? 如果没有,我有一些建议可能会对您有所帮助。

    电气角度的零角度必须与电机中的磁轴对齐。

    如果您尚未运行lab1-3,请执行此操作,并将传感器的电角输出与EST_getAngle_PU()的输出进行比较,查看它们是否匹配。 如果可以匹配它们,则可以尝试用传感器输出替换ANGLE_PU (Ctrl.h)。

    传感器处理完毕后,您可以运行lab4 (用传感器输出替换ANGLE_PU)来调整当前的回路PI。

    完成上述操作后,尝试返回标签12并识别您的电机参数。 希望这能解决您的问题。

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

    我尝试了您的建议,回到早期的实验中集成编码器,很高兴地报告,我们能够让电机成功实现位置控制(实验13b)。 回到实验1和实验2非常有帮助,因为我能够绘制估算器的角度与编码器的角度, 这有助于我们确定我们的电机实际使用了错误数量的极对(正确值为7极对,我们最初将规格表解释为我们有14个极对,而实际上我们有14个极对)。 纠正此错误后,在EST_STATE _RS步骤中将编码器的机械/电子校零归零足以对齐编码器的零值和电气角度。 我们可以使用编码器的角度来代替估算器/ QEP的角度来完成实验2a,12a,12b,13a,13b。

    我的主要问题现已解决,但我有一个与我在这些实验中看到的一些行为相关的跟进问题。 在实验2a中使用编码器电动角度驱动电机时,我们注意到,在低于80 rpm的转速下行驶会产生奇怪的行为(周期性抽搐/卡滞)。 您认为这可能是因为编码器采样速度不够快,或者测量时可能有一些滞后/不准确? 在实验12b中,电机能够以更低的转速(甚至低至~20 rpm左右)更好地旋转,但在旋转过程中仍有一些抖动。 这两个模块都能够以大于100 rpm的转速可靠地旋转电动机。

    谢谢!

    Isaac

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

    Issac,

    编码器的运行频率是多少? 当速度非常低时,细节就很重要。 例如,如果您可以将传感器与控制中断同步,这将非常有用。 我不知道现在是否是这样。

    您可以尝试的另一个方法是通过握住电机轴来手动添加一些扭矩负载,并查看它是否会对您的结果产生任何影响。 谢谢。

    此致,

    韩文  

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

    我们的编码器通过SPI主环路(而不是控制ISR)采样。 我对线条进行了范围界定,可以看到样本的周期是关于0.3 ms。 似乎向电机添加电阻扭矩并不能提高性能。 0.3 毫秒的时间是否足够长,从而导致同步问题? 我尝试将样品移至控制ISR内,但似乎它对低转速下的性能帮助不大。

    谢谢!

    Isaac

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

    以下提示可能会帮助您:

    1.读取SPI总线的时间不是传感器采样的时间。 您可以尝试深入研究传感器的文档,看看是否有任何方法可以从MCU控制/同步样品。

    2.您是否可以尝试以相同的低速以开环(速度环路)方式运行电机并查看抖动是否仍然存在? 您可以通过执行此操作来隔离速度环路和电流环路问题。

    3.由于电机以低速运行,您能否判断是否存在任何图案(例如:与转子的机械相位/固定时间段相关)?

    谢谢。

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

    感谢您的提示,下面是我的发现:  

    3.(首先回答3,因为它可能更好地通知您其他的)电机似乎暂时停止,然后继续正常旋转。 这种震动是*非常*周期性的--当以20转/分运行时,它们似乎是均匀分布的,每旋转一个电机大约7个(也许是因为我们有一个7极对电机?)。 如果运行速度更慢(10 rpm),电机看起来就像在杆方向之间单独步进--在电机周围14个均匀分布的位置中的每一个位置暂停大约四分之一秒。  

    1.在编码器规格中,我找不到任何关于同步采样时间的信息。 我确实看到指定的"系统传播时间"为100微秒,但除此之外,我的理解是,传感器在我启动SPI交换时采样。

    2.我运行lab1b来测试电机的开环控制,它在低速(甚至低至~20 rpm)时的工作表现似乎比我使用传感器时要好得多。 它肯定会在电机中产生一些振动,但与上述周期性抖动完全不一样。

    谢谢!

    Isaac

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

    根据您的描述,纹波似乎与"齿接扭矩"有关。 您可以尝试通过以"恒速"旋转电动机的外部扭矩来测量反电动势波形,并测量两个端子之间的电压波形。 如果此波形不是正弦信号,则正弦电压产生的扭矩将不平稳。

    对于开环测试,我建议使用开式速度回路(闭合电流回路时)。 您可能希望尝试lab05a并查看响应。 谢谢。

    此致,
    韩文