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/TMS320F28335:eZdsp 实现的闭环控制-升压转换器问题

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/609821/ccs-tms320f28335-issues-with-ezdsp-implemented-closed-loop-contol---boost-converter

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好!

我想我需要帮助。 我正在使用 eZdsp F28335在升压转换器上实现闭环积分控制、我发现一旦输出达到基准、它就会等待一两秒钟、并继续逐渐上升到大约13v、然后开始下降、直到它崩溃。 我将3V 升压到8V。  我 之前使用过运算放大器来实现电路、因此我知道积分控制应该足够了。 我使用 Ki = 5。

在下面的模型中、我将通过 ADC 向 PID 控制器馈送误差信号。 通常、随着占空比的增加、误差应接近零、而占空比(积分器的输出)应变为恒定、但在我的情况下、当误差变为零时、占空比不会停止增加、 就好像-ve 误差也会导致占空比增加。 这不应该是!

请告诉我。

谢谢。

图1 - ePWM、输出电压、栅极驱动器脉冲

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我写信告诉您、C2000团队成员已被分配到此帖子、应该很快回答。

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

    我看到您的其他线程、很抱歉听到您仍然遇到这种困难。 我已经回答了如何离散化预期的增益系数。

    您的模型包含一个具有输出饱和的 PID 控制器。 您能确认您已实施抗饱和吗? 您应该在块属性的"PID Advanced"选项卡中找到它。

    我会仔细查看您正在采样的信号以及控制器的输入和输出、以查看是否存在异常。 您可以使用"到工作区"块将变量导出到 Matlab 工作区、并在其中绘制变量。 这可能会为您提供一些线索。

    此外、由于您在外部实现了一个误差接点、请在示波器上仔细检查基准和反馈信号。 仔细查看 ADC 采样的设置及其与 PWM 时序的关系。 应将采样点放置在远离任何 PWM 边沿的位置、以避免此处的毛刺脉冲影响。 在 C 代码中、这是在 PWM 设置中通过将 ADC SOC 分配给时序模式中的适当事件来完成的。 Simulink 块集中必须有相似的功能。

    BTW、我注意到在您最近发布的控制器之后的速率转换块中:它的用途是什么?

    除此之外、根据您提供的信息、我很遗憾无法看到任何会阻止控制工作的东西。

    此致、

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

    谢谢 Richard。

    速率转换块基本上不执行任何操作。 我想现在我更了解了。

    2.抗饱和:我使用钳位、我使用并行离散 PID (正向 Euler)。

    3.我已经开始研究你给我的建议, 现在、我正在尝试 弄清楚如何配置 SCI Tx/Rx 以 将 ADCRESULT 绘制到示波器中或将 其导出到工作区 、以便我可以知道发生错误的时间和可能的情况。 配置可能是我可能需要进一步的提示、以便我可以看到 问题、然后思考如何解决问题。 哈哈。  希望我今天能解决这个问题。

    希望很快收到您的回复。

    此致。

    David。

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

    谢谢。 请告诉我们您的发现。 祝你好运。

    此致、

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

    我找到了我的错误。 我没有向误差信号添加偏移、因此一旦误差过零、尤其是当它变为-ve 时、MCU 就会开始出现行为错误。 一旦我添加了偏移、它就开始正常工作。 我完全忘记了!!! **模数8**

    但是、我仍然存在精度问题。 我记录了高达-0.5V 的误差。 这是我现在要解决的主要问题。 我甚至放大了误差信号以增加 SNB、但我无法记录太多差异。

    请:

    1.关于如何大幅提高 ADC 精度的想法。

    2.有关如何使用带有 SCI Tx/Rx 的 MATLAB Simulink 示波器进行监控的提示/说明或示例。 到目前为止、我只使用了 CCS 监视窗口。

    希望很快收到您的回复。

    David。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我发现误差随基准电压的降低而增大。 在发送到 ADC 之前、我添加到误差中的0.505v 参考值似乎大于从 ADC 输出中减去的数字值(即0.5*TBPRD/3)。 *向上计数*...

    以(0.5*7499/3=1250)偏移为例,在大约10V 的基准电压下,我得到的输出电压为10,有时为10.1,但当我将基准电压降为6V 时,我得到的电压大约为6.43v,这是非常糟糕的。 偏移量的数字值似乎正在变化。 我不知道为什么!

    此外、当我通过 CCS 存储器视图检查32位二进制文件时、最后的24 LSB 似乎正在发生变化、我认为通过将 ADCRESEXT 接地为22千欧、而通过2.2微法拉陶瓷电容器将 ADCREFM 和 ADCREFP 接地将会减少变化。

    我很感谢就这些问题提供建议/指导

    谢谢。

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

    David、

    积分器的操作是将环路误差驱动为零。  只要有一个非零值进入积分路径、输出就应该以一种或另一种方式斜升。  您能否在积分器输入的稳定状态下发生什么情况下采取闭环?  您可以检查 ADC 输入引脚和 ADC 结果。

    BTW、您如何处理 ADC 结果?  它是有符号数、范围是多少?

    ADC 具有12位分辨率、您说它是左对齐32位数字吗?  如果是、您 会看到只有底部4位由于噪声而发生变化。  是这样吗?

    此致、

    Richard

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

    感谢您的回答。

    我要做的是、我向误差信号添加0.5V 偏移(我之前将其除以10) 在将其发送到 ADC 之前、我先从 ADC 输出中减去偏移的数字值、然后再将后续结果馈送到积分器中。

    2.我已将 ADC 的输出设置为 Unit16 (范围0 - 65535)。 由于我正在使用 AdcRegs.ADCRESULT0而不是 AdcMirror.ADCRESULT0以获得最小的等待状态,因此结果会右移4 (即>>4)。

    在稳态下、我得到一个介于0.02和0.04 iE 之间的误差、大约0.48v 进入 ADC、这对应于0.46v 偏移和0.02v 误差。 我不知道我在哪里损失0.4v、因为我提供0.5V 作为直流偏移、并且我正在为所有电源使用公共接地。 此外、观察窗口中的 AdcRegs.ADCRESULT0的值介于21300和21800 (UINT16)和0101010011100000 (二进制)之间、前5msb 的值被固定并且其它值发生变化。 另外,当我检查了(&AdcRegs.ADCRESULT0)的内存位置并检查其32位二进制值时,我看到了这样的情况(00000101110100000101010100000000),其中只有前9个 MSB 是固定的,其它情况也在发生变化。

    此外、我获得的输出会关闭、有时我会得到大约0.5V 的误差。

    还有一点、我发现、如果我相应地改变偏移的数字值(例如、如果我在高占空比下运行、如果我将其降低到大约1200、我将获得更高的精度、如果我在低占空比下运行、 如果我将其增加到大约1400,我也会获得更好的准确度)。 这使我认为积分器正常工作、但失调电压出现问题。

    我有点困惑。

    David。

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

    David、

    只是想确保我理解。  请确认:

     -您的误差信号在缩放之后、但在偏移之前、介于-0.5V 至+0.5V 之间。

     -您添加+0.5V 偏移、因此 ADC 输入端的信号为0V 至+1V

     -原始 ADC 结果在0至65535范围内(因为 ADCRESULT 寄存器是左对齐的)

     -您正在读取~21800、这对应于大约1V 的输入(由于 ADC 范围为0V 至3V)

     -您说您将结果右移4位(为什么?)

    ADCRESULT 寄存器是16位寄存器、而不是32位寄存器。  如果您执行32位读取(如何执行?) 您可能会读取连接的两个寄存器结果。  ADCRESULT0是偶数字对齐的、因此我认为32位读取会返回低16位和高16位中的 ADCRESULT1。

    我不认为我完全理解您在做什么。  您能否确认我对上述内容的理解?  我觉得我缺少了什么东西。  谢谢。

    此致、

    Richard

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

    1.是的。 但更像是- 0.5V 至+0.75V。
    2.是的。 约为0v 至+1.25V。
    3、是的、我得到的十进制值超过20、000。
    4.正确。 我认为21800也没有意义、因为当我手动测量进入 ADC 的信号(即误差+偏移)时、我得到大约0.5V 的电压。
    5.也许我没有使用正确的术语,但我的意思是这个 AdcRegs.ADCRESULT0>>4,我想我也可以使用 AdcMirror.ADCRESULT0,因为这不需要移位。 我从 F2833x 模数转换器手册中获得了相关信息。
    6. 32位读取。 我通过 CCSV3.3进入 View->memory、然后在地址窗口中键入&AdcRegs.ADCRESULT0来查看正在发生的情况。 由于我仅转换一个信号、我不确定是否会有多个结果串联。 但是、即使是我从观察窗口获得的16位结果、只有前5个 MSB 是固定的。

    我很困惑,时间太长了!

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

    尊敬的 David:

    感谢您提供信息。 我想您至少面临两个问题。 为了取得进展、我认为您需要将这些内容分开、并逐一处理。

    我看到您单独的有关 ADC 转换问题的论坛主题。 在处理系统问题之前,首先解决这些问题是谨慎的。

    获得可靠的 ADC 数据后、下一步是查看您在稳态下获得的结果。 根据您的说明、零环路误差对应于 ADC 引脚上的0.625V、这在右移0x2154进入控制器后结束。 满量程负和正分别为0x0000和0x4208。 您可以在 ADC 输入端使用电压源进行检查。 从那时起、事情就应该开始融合在一起。

    此致、

    Richard

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

    你是绝对正确的、处理混乱的数字值就像试图在篮子中取水一样!

    这里的其他专业人员也一直在努力帮助我更清楚地了解我的 ADC 转换堆叠。 我有两块电路板、我很难相信这两块电路板同时也会很糟糕! 我已经运行了不同的测试、正如 Tommy 所建议的、我后退一步尝试 ADC_SOC 示例。 我转换了 adclo、在0到20之间、完全在可接受的限制范围内、但当我尝试转换0.5V 时、我得到了大约1500。 我已经移除了与电路板的所有其他连接、我只使用接地的 adclo 和 RC 滤波的 ADCINA (10欧姆和10pF)。 我还打开了 adcrefin、因为我正在使用内部基准。 我还不知道如何解决问题。

    David。