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.

[参考译文] TMS320F28379D:Launchpad

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1175623/tms320f28379d-launchpad

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

我尝试使用 eQEP 模块进行速度和位置检测、并在 Launchpad 器件上使用 c2000ware 中的 eQEP_posspeed 示例。 电机通过另一个微控制器上的无传感器算法运行。 我正在读取 TI 电路板上的编码器脉冲、以估算速度和位置。 速度估算工作正常。 唯一的问题是、示波器上观察到的电气 θ 不与索引同步。 响应就好像电路板没有接收到索引信号一样。  

以下是我正在使用的 poss_speed 函数(根据示例进行了调整)

void POSSPEED_Init (void)

EQep1Regs.QUPRD = 1000000;// 100MHz 时100Hz 的单位定时器(时钟/FM)
// SYSCLKOUT
EQep1Regs.QDECCTL.bit.QSRC = 00;// QEP 正交计数模式
EQep1Regs.QEPCTL.bit.free_soft = 2;
EQep1Regs.QEPCTL.bit.PCRM = 00;//00;// PCRM = 00模式- QPOSCNT 复位打开
//索引事件
EQep1Regs.QEPCTL.bit.UTE = 1;//单元超时启用
EQep1Regs.QEPCTL.bit.QCLM = 1;//锁存单元超时
EQep1Regs.QPOSMAX = 0x1F3F;//7999 = 8000-1计数
EQep1Regs.QEPCTL.bit.QPEN = 1;// QEP 使能
EQep1Regs.QCAPCTL.BIT.UPPs = 5;//针对单元位置1/32
EQep1Regs.QCAPCTL.bit.CCPS = 6;//针对 CAP 时钟、为1/64
EQep1Regs.QCAPCTL.bit.CEN = 1;// QEP 捕捉使能

此外、我看到代码有一部分可以检查是否发生索引脉冲以及角度是否同步。  

//检查索引出现情况
//
if (EQep1Regs.QFLG.bit.IEL==1)//EQep1Regs.QFLG.bit.IEL

P->index_SYNC_FLAG = 0x00F0;//此数字为240
EQep1Regs.QCLR.bit.IEL = 1;//清除__interrupt 标志

我正在尝试观察"Expressions"窗口中的 index_SYNC_FLAG、但读取的值为零、表示没有接收到索引脉冲(即使电路板正在接收索引脉冲)。 我已确保 eQEP GPIO 初始化正确。  

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

    Tabish、您好!

    让我来看看这个问题。 通常、当检测到未检测到索引的问题时、对索引信号使用 GPIO 鉴定有助于确保检测到索引同步。 我可以在更详细地查看此问题后提供更多调试提示

    此致、

    Peter

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

    尊敬的 Peter:

    感谢您的回答。 我真的很感谢。 GPIO 初始化为:

    GpioCtrlRegs.GPAPUD.bit.GPIO20 = 1;//禁用 GPIO20上的上拉电阻(EQEP1A)
    GpioCtrlRegs.GPAPUD.bit.GPIO21 = 1;//禁用 GPIO21上的上拉电阻(EQEP1B)
    GpioCtrlRegs.GPAPUD.bit.GPIO22 = 1;//禁用 GPIO22上的上拉电阻(EQEP1S)
    GpioCtrlRegs.GPAPUD.bit.GPIO23 = 1;//禁用 GPIO23上的上拉电阻(EQEP1I)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0;//将 GPIO20与 SYSCLK 同步(EQEP1A)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0;//将 GPIO21同步到 SYSCLK (EQEP1B)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0;//将 GPIO22同步到 SYSCLK (EQEP1S)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0;//将 GPIO23同步到 SYSCLK (EQEP1I)


    GpioCtrlRegs.GPAGMUX2.bit.GPIO20 = 0;//  
    GpioCtrlRegs.GPAGMUX2.bit.GPIO21 = 0;//  
    GpioCtrlRegs.GPAGMUX2.bit.GPIO22 = 0;//  
    GpioCtrlRegs.GPAGMUX2.bit.GPIO23 = 0;//

    GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;//将 GPIO20配置为 EQEP1A
    GpioCtrlRegs.GPAMUX2.bit.GPIO21=1;//将 GPIO21配置为 EQEP1B
    GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1;//将 GPIO22配置为 EQEP1S
    GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1;//将 GPIO23配置为 EQEP1I

    即使 仅运行 posspeed 示例、控制器也不会检测到索引信号。  

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

    我已尝试对索引脉冲进行 GPIO 鉴定。 不幸的是,它不起作用。 单独尝试了以下所有操作:

     GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0;  //将 GPIO23同步到 SYSCLK (EQEP1I)

     GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 1;  // 鉴定3个样本  (EQEP1I)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 2;  //鉴定6个样本  (EQEP1I)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3;  //异步  

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

    Tabish、您好!

    您是否能够发送进入 MCU 的正交信号和索引信号的示波器图像? 如果未通过鉴定改进索引信号识别、则很可能是 eQEP 配置问题或与硬件相关的问题。

    我查看了您最初发送的配置、它看起来不像您更改了会破坏示例的任何主要 eQEP 设置。 您是否能够运行位于的基于 DriverLib 的示例  

    [C2000WARE]\driverlib\f2837xd\examples\cpu1\eQEP

    eQEP_ex2_pos_speed 的功能应与您使用的其他示例非常相似

    此致、

    Peter

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

    尊敬的 Peter:  

    感谢您的回答。 我从共享的配置开始、但在返回到该配置之前、我对一些内容(尤其是 IEI、PCRM、IEL)进行了调整。 似乎什么都不起作用。  

    我将为您分享一些示波器截图。 正弦波是电机电流、品红色是索引信号(8极电机)、我还绘制了由微控制器计算的电气位置图、该图与索引信号不一致。 如您所见、每次重置代码时、位置计数似乎开始随机重置、而不与索引同步。  

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

    Tabish、您好!

    感谢您提供这些信息。 您是否能够尝试使用 SDK 中提供的其他示例并查看这些示例是否注册了索引脉冲。 此外、您使用位于 LaunchPad 底部的专用 eQEP 接头对吗? 您能否验证从硬件角度正确配置了与索引信号相关的所有内容? 很奇怪、您没有得到索引信号。 您能否验证 QEPSTS 寄存器中的 FINF 位显示的内容是什么?

    此致、

    Peter

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

    尊敬的 Peter:

    感谢您的回答。  

    我尝试了 driverlib 示例、但遇到了许多问题。 该示例甚至不会生成索引脉冲(在 GPIO2上)。  EPWM1 A 和 B 上的编码器仿真正常。 我以前没有使用过 driverlib、因此我不确定 GPIO2上的索引生成有什么问题。  GPIO2的初始化/配置可能存在一些问题。 我尝试将编码器(旋转电机的)的索引引脚连接到 eQEP 接头、但即使如此、驱动程序库示例也不会检测到索引、因为 EQep1Regs.QPOSILAT 保持为零。  

    我认为从硬件的角度来看、一切都是正确的。 是的、我正在使用 eQEP1的专用标头、例如 J14位于底部。 编码器脉冲的振幅为5V (接头支持该振幅)、即使在启动期间、通过信号 A 和 B 进行的速度和方向估算也是正确的。 唯一的问题是索引信号的识别/对齐。  

    我检查了 FIMF 位。 它是零。

    我个人觉得存在设置/配置问题。

    最棒的  

    Tabish

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

    Tabish、您好!

    感谢您从硬件角度确认所有组件均已正确连接。 您回答正确、很可能是配置问题。 您之前提到过有关 PCRM、IEI 和 IEL 的一些设置的推文。 您调整了哪些更改? IEL 位配置软件索引触发器、但由于您处于 PCRM=00模式、该位将被忽略。 您能否尝试更改 PCRM=10、然后手动设置 QEP 控制寄存器中的此软件索引触发位? 这应将索引事件配置为锁存位置计数器。  

    EQep1Regs.QEPCTL.bit.IEL = 1.

    您还可以尝试设置此 IEL 位来配置索引事件、以在位置计数器上发出开始计数的信号

    EQep1Regs.QEPCTL.bit.IEI = 2.

    我相信您可能已经完成了此操作、但我不确定您为什么没有注册索引信号、从 fif 位判断。 您是否有其他编码器可供换用或切换到其他 LaunchPad?

    此致、

    Peter

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

    你(们)好。 我想我找到了一个解决方案。 LaunchPad 可能会将 eqep1索引路由到 GPIO 99。 TI 论坛对此进行了讨论:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/910790/ccs-tms320f28379d-f28379-eqep-pos-speed-example-not-registering-index#3374281

    我会尽快尝试,但我希望这能起作用。 我还尝试了 PCRM 和 IEL 的所有可能组合。

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

    Tabish、您好!

    我认为这可能是您问题的解决方案。 对于未检查 LaunchPad 引脚以使双重验证感到歉意。 是的、软件示例默认配置为在 controlCARD 上运行、因此会按此方式分配 GPIO。  

    我相信在我发送给您的较新示例中、有一个选项可以直接切换 GPIO、以便直接针对 LaunchPad 而不是 controlCARD 进行配置。 旧的位字段示例没有此功能、因此必须手动更改 GPIO

    此致、

    Peter

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

    尊敬的 Peter:

    是的,它确实起作用了! 感谢你的所有帮助

    此致、  

    Tabish