主题中讨论的其他器件:C2000WARE、 SysConfig
您好、支持团队、
我可以使用 COMPH 或 COMPL 来设置 PWM 有效或无效。 但是、CMPSS 的迟滞对我来说是不够的。
我想知道我是否可以使用 COMPH 和 COMPL 来进行分解并启用 PWM 以实现更大的迟滞范围?
例如:
- ADC < 1V => PWM 引脚始终设置为低电平
- ADC > 2V => PWM 引脚可以工作
感谢您的支持、
阮
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.
您好、支持团队、
我可以使用 COMPH 或 COMPL 来设置 PWM 有效或无效。 但是、CMPSS 的迟滞对我来说是不够的。
我想知道我是否可以使用 COMPH 和 COMPL 来进行分解并启用 PWM 以实现更大的迟滞范围?
例如:
感谢您的支持、
阮
Prarthan,您好!
谢谢你的答复。
我阅读了示例并使用电路板进行了验证。 我想这个例子不适合我。
您只映射 CTRIPOUTH 至 PWM 交叉开关。 CTRIPOUTL 和 COMPL 不起任何作用。 仅应用1个阈值(VDD / 2)。 我想要一个具有2个阈值的示例
实际上、上述示例应改写为以下内容:
//! 当一个低输入( 小于 VDD / 2 )提供给 CMPIN1P,
//! -跳闸信号(GPIO14)输出为低电平
//! - PWM7B (GPIO13)提供 PWM 信号
此致、
夸伊
您好、Qy、
根据第一篇文章、您似乎想要根据信号输入是否低于阈值来触发 PWM 信号。
为此、您可以设置比较器的反相、以便 compl 逻辑将支持您需要的输出

[/报价]
- ADC < 1V => PWM 引脚始终设置为低电平
- ADC > 2V => PWM 引脚可以工作
因此、可以将 DAC 的负(-)引脚输入设置为所需的阈值、并在+ of compl 下提供输入
当您使用 COMPCTL[COMPLINV]设置倒置时,以下逻辑将适用您想要的:
->输入<阈值-比较输出为1 (0原始信号反相)
->输入>阈值-输出为0 (1 -原始信号反相)
足够简单?
请尝试一下、如果您需要其他支持、请告诉我
谢谢。
普拉森
您好、Qy、
感谢您的耐心等待。
下图显示了模块之间实现所需行为的连接:

要将 cmpss 模块配置为窗口比较器电路、您需要执行以下步骤:


此致、
哈迪
要将 cmpss 模块配置为窗口比较器电路、您需要执行以下步骤:
Hadi、您好!
感谢您的 NEAT 示例。
如果我理解正确、您的示例就很好地展示了"输入/输出范围电压"。 这意味着
-如果 DACL < ADC < DACH => PWM 可以工作
-否则、=> PWM 被设置为 High/Low/...
我们也可以使用 TRIPOUTINV 恢复它:
-如果 DACL < ADC < DACH => PWM 设置为高/低/...
否则、=> PWM 可以工作
但我的问题与此略有不同:
如果 ADC > 2V、则允许 PWM 工作
如果 ADC < 1V、PWM 设置为高电平/低电平...
如果1V< ADC < 2V、PWM 保持其 OLD 状态(正在工作或切换到高电平/低电平)
这是典型的迟滞问题。
我认为我们必须分别处理具有 PWM TRIP 4的 CTRIPH 和具有 PWM TRIP 5的 CTRIPL、并以某种方式在 PWM Tripzone 中将它们组合在一起。
但我没有任何其他想法。
此致、
夸伊
您好、Qy、
如果1V< ADC < 2V,则 PWM 保持其旧状态(正在工作或切换到高/低)
在退出 CMPSS 配置功能之前以及发生跳闸事件后、手动或自动过程中、清除跳闸区域标志非常重要。 其他 MCU 类不允许在任一 CMPSSn 上设置迟滞、怀疑 x25也是如此。 逆变器接地反弹可能导致随机跳闸事件、尤其是在低电感电机上。 添加缓冲器有助于减少误跳闸事件。 或者、您可以将事件的 PWM 消隐配置到 CMPSS 中、以避免出现峰值事件的前端周期、低于地电平的峰值可能是有问题的。 因此、范围捕捉事件以确定原因很重要、例如正尖峰和/或负尖峰。
此致、
尊敬的 Genatco:
谢谢你的答复。
很抱歉我的小姐。 "如果1V< ADC < 2V、PWM 保持其 OLD 状态(正在工作或切换到高电平/低电平)"是所需的行为。
对于 x25、我们可以将1 CMPH/L 的迟滞配置为12/24/36/48 LSB、但对于我们的应用、我们需要一个可调节的更大值。
目前、我仅使用1个 CMPH/L、将锁存输出映射到 PWM、并使用 PWM 跳闸 ISR 实现大迟滞。 我想知道是否有其他在运行时没有软件干扰的解决方案。
此致、
夸伊
您好、Qy、
利用 x25,我们可以将1 CMPH/L 的迟滞配置为12/24/36/48 LSB
不知道您指的是 LSB 的内容。 我们为预期的 ADC 跳变计数设置 DACL/H、CMPSS 输入迟滞仅具有如此大的作用。 您可以相对于±2048 ADC 计数反相输出 DACL 设置 CMPSS_DACVAL_L/H 跳闸点、将跳闸点计数设置为大于加载相电流。 这纯粹是硬件、因为 DACVAL_L/H 可以设置 PWM 标志触发高阻抗输出、也可以使其成为 L/H、无论您配置的 PWM 模块是什么。
/*设置比较器输入的3倍迟滞*/
CMPSS_setHysteresis (obj->cmpssHandle[cn]、3);
如果我理解正确,则表示硬件的最大滞后为3.3V*48/4096 = 386mV。
似乎它取决于可以配置的最大计数 DACVAL_L/H。
注意 通用 MCSDK 示例设置 DACL/H 初始加载值2048计数、后续代码 设置默认跳闸点。 如果故障迟滞 x4仍跳闸、您可能需要将 DACVAL_L/H 跳闸点设置为更高的值。 或者、添加缓冲电容器。 焊接在每个半桥高侧漏极到低侧源极上、可有效阻止故障跳变接地反弹。 下面的代码剪贴将在 user_mtr1h.h 中设置实际跳闸值、默认值 motor1_drive.c
#define USER_MOTOR1_OVER_CURRENT_A (1.5f) //! A
objSets->dacCMPValH = 2048U + 1024U;//设置默认正峰值
objSets->dacCMPValL = 2048U - 1024U;//设置默认负峰值
您好、Qy、
下面简要介绍了如何使用 SysConfig 中的 CLB 工具来实现此目的。 您可以将本 指南 用作特定实施的参考。 我还附加了一个代码示例、您可以将其复制并粘贴到.syscfg 文件中、作为起点:
如果您有任何进一步的问题、请告诉我。
/**
* Import the modules used in this configuration.
*/
const clb = scripting.addModule("/driverlib/clb.js", {}, false);
const clb1 = clb.addInstance();
const clbxbar = scripting.addModule("/driverlib/clbxbar.js", {}, false);
const clbxbar1 = clbxbar.addInstance();
const clbxbar2 = clbxbar.addInstance();
const TILE = scripting.addModule("/utilities/clb_tool/clb_syscfg/source/TILE", {}, false);
const TILE1 = TILE.addInstance();
/**
* Write custom configuration values to the imported modules.
*/
clb1.$name = "myCLB0";
clb1.attachTile = true;
clb1.initTile = true;
clb1.enableCLB = true;
clb1.inputTypeCLB_IN0 = "GLOBAL";
clb1.synchronizeCLB_IN0 = true;
clb1.inputsUsed = ["CLB_IN0","CLB_IN1","CLB_IN2"];
clb1.inputTypeCLB_IN1 = "GLOBAL";
clb1.globalConfigCLB_IN1 = "CLB_GLOBAL_IN_MUX_CLB_AUXSIG0";
clb1.synchronizeCLB_IN1 = true;
clb1.inputTypeCLB_IN2 = "GLOBAL";
clb1.globalConfigCLB_IN2 = "CLB_GLOBAL_IN_MUX_CLB_AUXSIG1";
clb1.synchronizeCLB_IN2 = true;
clb1.outputsToOverridePeripheral = ["CLB_OUT0"];
clbxbar1.$name = "myCLBXBAR0";
clbxbar1.useSourceSelect = true;
clbxbar1.sourceSignals = ["CMPSS1_CTRIPL"];
clbxbar2.$name = "myCLBXBAR1";
clbxbar2.auxInput = "XBAR_AUXSIG1";
clbxbar2.useSourceSelect = true;
clbxbar2.sourceSignals = ["CMPSS1_CTRIPH"];
TILE1.$name = "TILE0";
clb1.tile = TILE1;
TILE1.BOUNDARY.$name = "BOUNDARY0";
TILE1.LUT_0.$name = "LUT_0";
TILE1.LUT_1.$name = "LUT_1";
TILE1.LUT_2.$name = "LUT_2";
TILE1.FSM_0.$name = "FSM_0";
TILE1.FSM_0.e0 = "BOUNDARY.in0";
TILE1.FSM_0.e1 = "BOUNDARY.in1";
TILE1.FSM_0.eqn_s0 = "(s0 & ~e0) | (~s0 & e1)";
TILE1.FSM_1.$name = "FSM_1";
TILE1.FSM_2.$name = "FSM_2";
TILE1.COUNTER_0.$name = "COUNTER_0";
TILE1.COUNTER_1.$name = "COUNTER_1";
TILE1.COUNTER_2.$name = "COUNTER_2";
TILE1.OUTLUT_0.$name = "OUTLUT_0";
TILE1.OUTLUT_0.i0 = "BOUNDARY.in0";
TILE1.OUTLUT_0.i1 = "FSM_0.S0";
TILE1.OUTLUT_0.eqn = "i0 & i1";
TILE1.OUTLUT_1.$name = "OUTLUT_1";
TILE1.OUTLUT_2.$name = "OUTLUT_2";
TILE1.OUTLUT_3.$name = "OUTLUT_3";
TILE1.OUTLUT_4.$name = "OUTLUT_4";
TILE1.OUTLUT_5.$name = "OUTLUT_5";
TILE1.OUTLUT_6.$name = "OUTLUT_6";
TILE1.OUTLUT_7.$name = "OUTLUT_7";
TILE1.HLC.$name = "HLC_0";
TILE1.HLC.program0.$name = "HLCP_0";
TILE1.HLC.program1.$name = "HLCP_1";
TILE1.HLC.program2.$name = "HLCP_2";
TILE1.HLC.program3.$name = "HLCP_3";
TILE1.AOC_0.$name = "AOC_0";
TILE1.AOC_1.$name = "AOC_1";
TILE1.AOC_2.$name = "AOC_2";
TILE1.AOC_3.$name = "AOC_3";
TILE1.AOC_4.$name = "AOC_4";
TILE1.AOC_5.$name = "AOC_5";
TILE1.AOC_6.$name = "AOC_6";
TILE1.AOC_7.$name = "AOC_7";
Luke、您好!
非常感谢您提供非常详细的指南。
这些天我在学习模块 CLB、非常确信您的指南正是我需要的。 它与用户指南 CLB 工具中的示例"4.2.2示例2–GPIO 输入滤波器"类似。
我还有一个问题。 寄存器 CLB_LUT4_FN1_0的值是使用 CCS 自动计算的、没有用于转换的显式公式。 这是否正确?
例如、 "示例2–GPIO 输入滤波器"中的"(~s0 & e1)|(s0 &(~e0))"转换为 CLB_LUT4_FN1_0 = 0x5555
我需要您确认记录和评论。
谢谢、此致。
夸伊
您好、Qy、
我不太熟悉 CLB 寄存器本身、因为我不是 CLB 专家、我的经验主要是使用 CLB GUI 工具、这从未导致我在正确配置 CLB 寄存器时出现问题。 不过、您可以通过打开生成的 clb_config.h 或 CLB_config.c 文件来跟踪 SysConfig 生成的代码到寄存器、以查看被调用的 driverlib 函数、并在 C2000Ware 中打开这些函数的内容。 有关 GUI 如何配置寄存器的更多详细信息、我将请您咨询我们的一位 CLB 专家。
谢谢!
卢克
您好、Qy、
寄存器 CLB_LUT4_FN1_0的值是使用 CCS 自动计算的、没有可用于转换的显式公式。 这是对吗?
该值由 SysConfig 中的 CLB 工具自动计算、正确。