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.

[参考译文] MSPM0G3519-Q1:用于捕获到输出的比较器

Guru**** 2797815 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1576756/mspm0g3519-q1-comparator-to-capture-to-outputs

器件型号:MSPM0G3519-Q1
主题:SysConfig 中讨论的其他器件

工具/软件:

尊敬的:

我遇到以下情况的问题:

下图:

-粉红色:在 COMP0 上输入比较器

-黄色:参考 COMP0

-蓝色: COMP0 的输出

-绿色:无法在 ccp 输出中理解的信号。

配置:请参阅下一个代码

COMP0 用于捕获 CC2。 对于下面的配置、我希望输出跟随比较器。 如您所见、这没有发生(绿色)。

-比较器的上升沿零计数器,比较器的下降沿导致捕获。

-零事件将设置 CCP2 输出,捕捉事件将复位 CCP2 输出(蓝色在图中,但不正确)。

COMP0 也可以捕获 CC3。 对于以下配置、我期望输出跟随比较器。  输出 也同样不正确。  

功能相同、但 CCP3 输出上有信号。

空配置 (void)

静态常量 DL_TimerA_ClockConfig gClockConfig =

.clockSel = DL_TIMER_CLOCK_BUSCLK、
.divideRatio = DL_TIMER_CLOCK_Divide_1、//运行一半的 40MHz
.prescale = 0
};

DL_TimerA_RESET (TIMA0);
DL_TimerA_enablePower (TIMA0);
DELAY_CYCLES (POWER_STARTUP_DELAY);

DL_TimerA_setClockConfig (TIMA0、(DL_TimerA_ClockConfig*)&gClockConfig);
DL_TimerA_setCounterMode (TIMA0、DL_TIMER_COUNT_MODE_UP);
DL_TimerA_setCounterValueAfterEnable (TIMA0、DL_TIMER_COUNT_AFTER_EN_ZERO);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//第一个输出 (H1 = PA15)
//将 COMP0 路由到 CCP2 输入
DL_TimerA_setCaptureCompareInput (TIMA0、DL_TIMER_CC_INPUT_INV_NOINVERT、DL_TIMER_CC_IN_SEL_COMP0、DL_TIMERA_CAPTURE_COMPARE_2_INDEX);

//将 CCP2 配置为:
//-上升沿为零(复位计时器)
//-在下降沿捕获
DL_TimerA_setCaptureCompareCtl (TIMA0、DL_TIMER_CC_MODE_CAPTURE、DL_TIMER_CC_ZCOND TRIG_RISE | DL_TIMER_CC_ACOND _ TIMCLK | DL_TIMER_CC_CCOND_TRIG_FALL、DL_TIMER_CAPTURE_COMPARE_2_INDEX);

//设置 CCP2 输出行为:
//-上升沿高电平(零事件)
//-下降沿低电平(捕获事件)
DL_TimerA_setCaptureCompareAction (TIMA0、DL_TIMER_CC_ZACT_CCP_HIGH | DL_TIMER_CC_CUACT_CCP_LOW、DL_TIMERA_CAPTURE_COMPARE_2_INDEX);

////

//第二个输出 (L2 = PA28)
//将 COMP0 路由到 CCP3 输入
DL_TimerA_setCaptureCompareInput (TIMA0、DL_TIMER_CC_INPUT_INV_NOINVERT、DL_TIMER_CC_IN_SEL_COMP0、DL_TIMERA_CAPTURE_COMPARE_3_INDEX);

//将 CCP3 配置为:
//-上升沿为零(复位计时器)
//-在下降沿捕获
DL_TimerA_setCaptureCompareCtl (TIMA0、DL_TIMER_CC_MODE_CAPTURE、/* DL_TIMER_CC_ZCOND _TRIG_RISE |*/ DL_TIMER_CC_ACOND _TIMCLK | DL_TIMER_CC_CCOND_TRIG_FALL、DL_TIMER_CAPTURE_COMPARE_3_INDEX);

//设置 CCP3 输出行为:
//-上升沿高电平(零事件)
//-下降沿低电平(捕获事件)
DL_TimerA_setCaptureCompareAction (TIMA0、DL_TIMER_CC_ZACT_CCP_HIGH | DL_TIMER_CC_CUACT_CCP_LOW、DL_TIMERA_CAPTURE_COMPARE_3_INDEX);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CCP2 和 CCP3 引线到输出引脚

DL_TimerA_setCCPDirection (TIMA0、DL_TIMER_CC2_OUTPUT | DL_TIMER_CC3_OUTPUT);

//将计数器控制配置为在 CCP2 上升沿加载

DL_TimerA_setCounterControl (TIMA0、DL_TIMER_CZC_CCCTL2_ZCOND、DL_TIMER_CAC_CCCTL2_ACOND、DL_TIMER_CLC_CCCTL2_LCOND);

//启动 TimerA0、TimerA1
DL_TimerA_startCounter (TIMA0);
DL_TimerA_enableClock (TIMA0);

//配置 4 个输出

DL_GPIO_initPeripheralOutputFunction (GPIO_RXPAD_AR0_C3_IOMUX、GPIO_RXPAD_AR0_C3_IOMUX_FUNC);
DL_GPIO_enableOutput (GPIO_RXPAD_AR0_C3_PORT、GPIO_RXPAD_AR0_C3_PIN);

DL_GPIO_initPeripheralOutputFunction (GPIO_RXPAD_AR0_C2_IOMUX、GPIO_RXPAD_AR0_C2_IOMUX_FUNC);
DL_GPIO_enableOutput (GPIO_RXPAD_AR0_C2_PORT、GPIO_RXPAD_AR0_C2_PIN);
};


/* COMP_0 初始化*/
静态常量 DL_COMP_Config gCOMP_0Config ={
.channelEnable = DL_COMP_ENABLE_CHANNEL_POS_NEG、
.mode = DL_COMP_MODE_FAST、
.negChannel = DL_COMP_IMSEL_CHANNEL_0、
.posChannel = DL_COMP_IPSEL_CHANNEL_2、
.hysteresis = DL_COMP_HYSTERES_30、
POLARITY = DL_COMP_POLARITY_NON_INV
};
静态常量 DL_COMP_RefVoltageConfig gCOMP_0VRefConfig ={
.mode = DL_COMP_REF_MODE_STATIC、
.source = DL_COMP_REF_SOURCE_NONE、
.terminalSelect = DL_COMP_REF_terminal_select_POS、
.controlSelect = DL_COMP_DAC_CONTROL_COMP_OUT、
.inputSelect = DL_COMP_DAC_INPUT_DACCODE0
};

void InitComp0 (void)

DL_COMP_RESET (COMP0);
DL_COMP_enablePower (COMP0);
DELAY_CYCLES (POWER_STARTUP_DELAY);

DL_COMP_INIT (COMP0、(DL_COMP_Config*)&gCOMP_0Config);
DL_COMP_refVoltageInit (COMP0、(DL_COMP_RefVoltageConfig*)&gCOMP_0VRefConfig);
DL_COMP_enableOutputFilter (COMP0、DL_COMP_FILTER_DELAY_70);

DL_COMP_ENABLE (COMP0);
}

void init (void)

InitComp0();
configure();
DL_GPIO_initPeripheralOutputFunction (GPIO_COMP_0_IOMUX_OUT、GPIO_COMP_0_IOMUX_OUT_FUNC);//显示比较器输出(蓝色)
}

有任何建议、上述代码中可能有什么问题?

谢谢、此致、

John

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

    您好、John:

    您是否能够提供预期信号的外观图?

    此致、
    Brian

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

    尊敬的 Brian:

    请找到澄清资料的图片!

    希望这能帮助您提出解决方案的建议...

    谢谢您、

    John

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

    DL_TimerA_setCaptureCompareAction (TIMA0、DL_TIMER_CC_ZACT_CCP_HIGH | DL_TIMER_CC_CUACT_CCP_LOW、  

    TRM (SLAU846C) 表 27-78 指出、CUACT 发生“在 递增计数时检测到比较事件“。 这与(例如)CCUn 事件不同、CCUn 事件适用于 Capture 和 Compare、似乎是一个合理的扩展、但这并不是这些词语所说的。

    也就是说、我 无法看到导致 CCP2(永远)变为低电平的原因。 您能说出捕获是否正在发生吗?

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

    您好、John:

    如果您不使用 SysConfig、建议以与 SysConfig 相同的方式初始化应用程序所有使用的外设。

    我正在咨询团队专家以进一步提供帮助。

    此致、
    Brian

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

    >DL_TimerA_RESET (TIMA0);

    这会将 LOAD=0 和 REPEAT=0 复位、因此计时器将在第一个周期后自行禁用。 我确实观察到(即使在这种状态下)在恢复到 OCTL:CCPIV 值 (=0) 之前、ZCOND 似乎有一个短暂的效果(可能是 6 个周期)。 在任何情况下、您的捕获值都不会很有用。

    我想知道这里是否有其他(相关)代码未发布。

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

    实际上、当 LOAD=0 和 REPEAT=0 时、ZCOND 似乎会生成一个始终约为 2ms 的脉冲(在恢复到 CCPIV 之前)。 特别是、通过将输入(到 COMP0)周期调整为 2ms、我可以准确地获得原始布线中看到的 CCP2 输出(形状)。  我不能完全阅读这条迹线中的时间刻度、但我怀疑这是您看到的。 我不知道 2ms 是从哪里来的。

    通过“修复“重复和加载、我最终得到了我在 CCP2 上所期望的全部高电平。

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

    尊敬的 Bruce:

    我也在这里修复了计时器“repeat"和“和“load"。“。

    但是、我不清楚现在是否应在 CC2 输出引脚上找到信号。

    用途:

    我想通过 TIMERA0 SW 强制和 TIMERA0 故障单元启用 COMP0 输出、以到达 CC2 输出。

    在捕获模式下使用 TIMERA0 时、零事件和 CC 事件是否不会路由到信号输出发生器?  

    是否有任何解决方法、例如使用比较模式?

    非常感谢您的帮助和努力!

    此致、

    John

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

    CUACT 在捕获时似乎未触发。 在捕获模式下、它似乎也不会在比较(与之前的捕获值)上触发。 零会触发 ZACT。

    您是否需要捕获值?

    更笼统地说、为什么不只使用 COMP_OUT?

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

    我必须 连接 强制和故障逻辑背后.. 以某种方式在 COMP0 输出上...

    还有 2 个来源:COMP0 和 PWM... 连接至故障逻辑...

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

    我非常确定能看到一种将 COMP_OUT 作为侧沟道(原样)馈入故障逻辑的方法、但我尚未使用它、而且此处没有材料。 也许有一个电机控制向导可以提供建议吗?

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

    如果我正确理解了您的目标:我看不到任何内容表明您无法将 COMP_OUT 同时用于捕获触发器和故障触发器。

    我添加了这些行、我想我得到了您要寻找的行为:

    // Replacing the current CompareAction call:
    DL_TimerA_setCaptureCompareAction(TIMA0, 
           DL_TIMER_CC_ZACT_CCP_HIGH | DL_TIMER_FAULT_ENTRY_CCP_LOW|DL_TIMER_FAULT_EXIT_CCP_HIGH, 
           DL_TIMERA_CAPTURE_COMPARE_2_INDEX);
          
    // and down near the bottom:
    DL_Timer_setFaultSourceConfig(TIMA0, DL_TIMER_FAULT_SOURCE_COMP0_SENSE_LOW);
    DL_Timer_setFaultConfig(TIMA0, DL_TIMER_FAULT_CONFIG_FI_DEPENDENT|DL_TIMER_FAULT_CONFIG_FIEN_ENABLED);
    [编辑:固定的多 (FENACT) 命名约定]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个是闭锁,一个不是...所以这是不可能的。

    由于我们没有真正的解决方案、我们将继续添加一些外部逻辑。

    非常感谢您的帮助!