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.

[参考译文] DRV8220:驱动螺线管锁存阀时 MCU 复位

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1473235/drv8220-mcu-resets-when-driving-a-solenoid-latch-valve

器件型号:DRV8220

工具与软件:

大家好。

我目前正在开发一个板,除其他外,有 ESP32-WROVER-E 微控制器和 DRV8220-DRL H 桥电机驱动器,我用它来驱动一个12 VDC 闭锁电磁阀,模型 Aquative Plus 从 Netafim(点击 很好 用于阀的数据表)。

问题是、当我将 DRV8220置于正向或反向驱动状态以打开/关闭阀门时、微控制器就会复位、即使发生这种情况、电流也会继续流过阀门、这是不好的、因为它是锁存阀、所以不应该有电流连续通过阀门。

现在、在上下文中、下面是有关电路板的一些数据。 板应使用3.7V 的电池运行、因此它有一个电池充电器 IC、但对于 这些测试、我要将电源直接放在电池应有的位置、这意味着我将"绕过"充电器 IC。 之后、我要有一个3.3V 的降压-升压电源、它可以为微控制器和12V 的升压电源供电。这个升压 PS 就是为阀门供电的电源。

下面是 DRV8220 IC 的电路:

IN1和 IN2引脚直接连接到 MCU。

此外、从技术角度而言、我在 MCU 中放置了滤波电容器、以避免出现复位问题(显然不会发生此类问题)。 这是用于 MCU "使能"引脚的电路:

这是针对 MCU 的3V3线路的电路:

作为额外信息、我已经尝试将一些电阻与阀串联、以尝试限制阀电流、但不会阻止 MCU 复位。

此外、我还尝试了以下 DRV8220序列来驱动阀门:

序列1:

  1. IN1 = 1、IN2 = 0 (正向驱动)
  2. 200ms 延迟(也尝试50ms 和100ms)
  3. IN1 = 0、IN2 = 0 (睡眠)

序列2:

  1. IN1 = 1、IN2 = 0 (正向驱动)
  2. 200ms 延迟(也尝试50ms 和100ms)
  3. IN1 = 1、IN2 = 1 (制动)
  4. 延迟为1秒
  5. IN1 = 0、IN2 = 0 (睡眠)

我猜是、 驱动 阀门时会出现电流峰值、这会导致3V3线路上出现压降、从而导致 MCU 复位。 但从技术上讲、我已经将所有电源设计为支持高达2A 的电流。

对可能发生的情况有什么想法? 如果需要更多信息、请告诉我。 谢谢大家。

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

    最新动态:

    我做了一个测试、将2个电阻器并联220和100欧姆、两者都与阀门串联。 此外、鉴于我的实验室电源具有您可以设置其所能 提供最大电流的配置、我将其增加到了2A。随着这2种变化、阀会正确驱动、尽管我注意到驱动它时它达到接近1A、这对我来说有点高、但该阀的数据表未提供基准电流、因此我不确定。

    测试完成后、我已尝试在没有这些电阻器的情况下驱动阀门、即使最大电流配置为2A、MCU 仍会复位。

    似乎解决方案是简单地将一个 电阻器与阀门串联、但我觉得它是接线的、因为在 DRV8220的数据表中、电路示例从未提及需要串联电阻器的任何情况。 或许有另一种解决方案。

    有什么建议吗?

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

    嗨、Franco、

    我同意您对可能发生的情况的分析。  您是否有具有模拟输入的示波器或逻辑分析仪可用于捕获该3.3V 线路?

    也可能发生相反的情况-螺线管可能会导致电压尖峰、从而导致 MCU 复位以保护其自身。   

    您能否尝试在可能200ms 内应用从0%至100%占空比的 PWM 斜坡来尝试降低启动电流尖峰?   

    您还可以尝试测试将大容量电容器 C21增大到更大的值、如47uF。  大容量电容的"经验法则"是"每瓦电机功率的电容为1到4μF、因此对于12V * 1A、 可提供12uF 到48uF 的电容。   

    仅供参考、您应该尝试一个与负载串联的电感器、而不是串联电阻器、这应该有助于减缓电流尖峰。  但希望您完全不需要它们。  

    此致!

    Jacob

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

    你好、Jacob。

    非常感谢您的帮助。 关于3V3线的捕获、我进行了与我提到的相同的测试、不使用串联电阻器、这是我在示波器中获得的测试:

    很抱歉质量不好。 如您所见、在驱动阀门之前、电压正确、大约为3V3。 然后、当驱动阀门时、电压下降到大约2.2V。因此肯定是的、当驱动阀门时、3V3线路上的电压会下降。

    关于 PWM 斜坡、很抱歉我没有了解、但我不明白您的意思。 您能否说明一下如何使用与我在引脚 IN1和 IN2中描述的序列类似的序列? 例如、类似于:

    1. IN1 = 0、IN2 = 0
    2. IN1 = 1、IN2 = 0
    3. 20ms 延迟
    4. IN1 = 0、IN2 = 0
    5. 100ms 延迟
    6. IN1 = 1、IN2 = 0
    7. 等等

    关于 C21、我明白您的意思。 问题是、鉴于我使用了 SMD 电容器、尝试将其替换为您提到的值之一会有点困难、尤其是因为我手头没有任何这样的电容器。 但我一定会尝试找到一种方法来测试它。 可能是移除该电容器并焊接一个通孔电容器。

    关于电感器、我在选择电阻器之前曾讨论过这个问题、但我也认为:"好的、阀门是一个电感负载、如果我添加电感器、压降可能会变差"。 但我可以错了。 对于该电感器、您有任何值建议吗?

    此致、

    佛朗哥。

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

    Franco

    感谢示波器屏幕截图-电压骤降的持续时间是多久?  如果是由于阀浪涌尖峰导致的、它只能持续几毫秒-看起来始终保持低电平、这是奇数。 我认为这可能是升压电源电路而非电机驱动器的问题-升压电源无法为阀提供足够的12V 电源。  要对此进行测试、请尝试使用外部12V 电源代替升压电路、看看是否仍然发生这种情况、或者尝试使用更强大的升压转换器使12V?   

    对于 PWM 斜坡、基本上不是将 IN1从0变为1 (0%占空比变为100%占空比)、而是  随着时间的推移将占空比加速至100%。   

    1.IN2 = 0。  对于(int i = 0、i <=100、i++){ledcWrite (IN1、I);Delay (1); //这会将 IN1引脚上的占空比从0斜升至100%占空比超过100ms (延迟1ms * 100次)

    2. 20ms 延迟

    3.反向回路-  for (int i = 100, i >0, i -){ledcWrite(in1, i ); delay(1);

    4.100ms 延迟

    大幅降低电流尖峰不需要太多时间、即使超过10ms 的 PWM 也会有所帮助。  

    也许应移除该电容器并焊接一个通孔电容器。

    这是一种方法、也可以尝试将另一个10uF 电容器堆叠在现有电容器顶部、或尝试将引线式电容器的引线焊接到 SMD 电容器的两侧。   

    如前所述、即使阀门本身是电感器、它也可能具有低电感、因此额外的电感有助于控制峰值电流。  尝试使用1uH - 50uH 电感器。  但首先尝试其他东西、因为该电感器应该不是必需的。   

    此致!

    Jacob

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

    你好、Jacob。

    非常感谢您的建议和解释。

    [报价 userid="525022" url="~/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1473235/drv8220-mcu-resets-when-driving-a-solenoid-latch-valve/5655355 #5655355"]感谢观看示波器快照-电压骤降持续多久?  如果是由于阀浪涌尖峰导致的、它只能持续几毫秒-看起来始终保持低电平、这是奇数。 我认为这可能是升压电源电路而非电机驱动器的问题-升压电源无法为阀提供足够的12V 电源。  要对此进行测试、请尝试使用外部12V 电源代替升压电路、看看是否仍然发生这种情况、或者尝试使用更强大的升压转换器使12V?   [报价]

    首先、您让我实现了2点:一是我的电路板中的 IN1和 IN2不直接连接到 ESP32、而是连接到 I2C I/O 扩展器(器件型号 TCA9534PWR)、因此当 ESP32复位时、这些引脚保持在相同的逻辑电平、这就是您看到恒定压降的原因。 另外、查看我的12V 电源、这是一个 MIC2288、我发现它具有 典型值为1.2A 的开关电流限制:

    从技术上讲、我认为阀的峰值电流低于该值、但可能我弄错了、这可能是3V3线路上出现压降的原因。 我选择这个电源是因为我认为阀门电流应该在500 mA 附近、但是通过这次测试、我看到电流峰值高达900 mA。 也许我需要具有更高开关电流限制的电源。

    关于 PWM 斜坡、现在我明白了。 问题是、鉴于如我之前所说、IN1和 IN2被连接到 I/O 扩展器、我无法使用 ESP32中的 PWM 功能。 不过、我使用了"vTaskDelays"来近似计算 PWM 斜坡、使用以下代码:

    ESP_LOGW(TAG, "Forward Drive ramp up");
    for(int i = 0; i < 10; i++)
    {
        xLastWakeTime = xTaskGetTickCount();
        set_io(OUT2_IN1, 1);
        xDelayTimeTicks = pdMS_TO_TICKS(i+1);
        vTaskDelayUntil(&xLastWakeTime, xDelayTimeTicks);
    
        xLastWakeTime = xTaskGetTickCount();
        set_io(OUT2_IN1, 0);
        xDelayTimeTicks = pdMS_TO_TICKS(10-i);
        vTaskDelayUntil(&xLastWakeTime, xDelayTimeTicks);
    }
    
    vTaskDelay(pdMS_TO_TICKS(20));
    
    ESP_LOGW(TAG, "Forward Drive ramp down");
    for(int i = 0; i < 10; i++)
    {
        xLastWakeTime = xTaskGetTickCount();
        set_io(OUT2_IN1, 1);
        xDelayTimeTicks = pdMS_TO_TICKS(10-i);
        vTaskDelayUntil(&xLastWakeTime, xDelayTimeTicks);
    
        xLastWakeTime = xTaskGetTickCount();
        set_io(OUT2_IN1, 0);
        xDelayTimeTicks = pdMS_TO_TICKS(i+1);
        vTaskDelayUntil(&xLastWakeTime, xDelayTimeTicks);
    }

     在 IN1引脚上生成此信号:

    鉴于我必须使用 FreeRTOS 延迟、我的延迟限制为1ms、所以是可以得到的最佳结果。 但是、即使具有此伪 PWM 斜坡、ESP32仍会复位。 我可以尝试将 IN1和 IN2直接焊接到两个 ESP32引脚上、以便我可以尝试使用 PWM 功能、您认为即使在我完成测试后也值得尝试吗?

    此外、我注意到了一些东西、这可能非常明显、但只是为了以防万一。 假设您驱动阀向前、然后重置 MCU、再尝试再次驱动阀向前。 发生这种情况时、您还会得到电流峰值。 我认为这是正常的、因为即使阀门的机械部分已经正向移动、阀门的线圈仍然可以传导电流。

    此致、

    佛朗哥。

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

    嗨、Franco、

    3.3V 电压降的根本原因似乎并不是此处的电机驱动器、而是系统的另一个问题。  

    您是否可以尝试更轻的负载、如继电器、LED 或更小的阀门、看看您在使用较小的负载时是否会得到较小的压降或没有压降?  还是尝试空载?   

    假设您驱动阀门前进、然后复位 MCU、接着它将再次尝试驱动阀门前进。 发生这种情况时、您还会得到电流峰值。 我认为这是正常的,因为即使阀门的机械部分已经向前移动,阀门的线圈仍然可以传导电流。[/报价]

    是的、正确、即使阀门已经正向、线圈仍会传导电流。  许多传动器/阀使用具有电流调节功能的"峰值和保持"控制方案、以便驱动器调节流过阀的电流、以便仅使用在初始峰值电流后将其保持在适当位置所需的尽可能多的电流。  遗憾的是、DRV8220没有集成的电流调节功能。

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

    你好、Jacob。

    3.3V 电压降的根本原因似乎并不是此处的电机驱动器、而是系统的另一个问题。  

    您是否可以尝试更轻的负载、如继电器、LED 或更小的阀门、看看您在使用较小的负载时是否会得到较小的压降或没有压降?  还是尝试空载?   

    [报价]

    我不知道这是否有帮助、但我之前已经在未连接负载的情况下进行了尝试、即引脚 IN1和 IN2悬空、并且运行良好、因为我是第一次测试是否获得+12V 和-12V 电压脉冲。  电阻器 会有所帮助? 因为我只有该阀门模型。 但就在一种情况下、我已经 使用一些与之串联的电阻器对阀门进行了测试、在这种情况下、MCU 未复位、这就是我个人认为问题一定是由阀门驱动引起的电流峰值问题、否则即使与串联的电阻器也无法正常工作的原因。 "你说什么?

    正确、即使阀已向前、线圈仍将传导电流。  许多传动器/阀使用具有电流调节功能的"峰值和保持"控制方案、以便驱动器调节流过阀的电流、以便仅使用在初始峰值电流后将其保持在适当位置所需的尽可能多的电流。  遗憾的是、DRV8220没有集成电流调节功能。[/报价]

    哦、好的、现在我明白了、谢谢。

    此致、

    佛朗哥。

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

    你好、Jacob。

    我想我已经找到了一些富有启发性的消息。 我想测量在驱动阀门时流经阀门的电流、为此放置一个100欧姆的串联电阻、然后将示波器与该电阻器并联、通过测量电阻器上的压降、我可以得到电流。 我得到的结果是:

    如您所见、电阻器两端的最大电压约为10.6V、这意味着由于电阻器为100欧姆、因此最大电流为106 mA。 不过、我使用实验室电源为板供电、板上有显示负载电流的显示屏、而且当 我驱动阀门时、我可以肯定地看到从500 mA 到900 mA 的电流。 显然、ESP32和电路板的其他组件也消耗电流、但在静止模式下、该电流约为150 mA。 这意味着目前有250 -650 mA 的电流在某个地方。

    总之、我想说的是、您可能对系统中的其他部分在驱动阀门时消耗的电流会比驱动阀门时消耗的电流要大。 因为、正如我说过的、如果我在空载的情况下运行驱动程序、那不会发生。 有什么建议吗?

    以下是与驱动器电路直接或间接相关的所有电路的原理图(如果有用):

    电源输入降压/升压转换器3V3:

    12V 升压转换器:

    阀1驱动器电路:

    此致、

    佛朗哥。

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

    尊敬的 Franco:

    感谢您发送更多详细信息。

    我会和我的团队一起向您发送更新。

    谢谢!

    Ibinu

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

    伊比努的问候。

    感谢你的帮助。 但是、在过去几天再做几次测试后、我想我发现了这个问题。

    我做了以下测试:

    • 我已经切断了为12V 开关电源供电的3V3线路的轨道、并将电缆直接焊接到12V 线路的输出端。 然后、我使用实验室电源为12V 供电、并尝试驱动阀门。 结果是微控制器没有复位、阀门被正确驱动。

    • 我使用实验室电源(3.3V)为12V 开关电源供电。 在这种情况下、虽然微控制器未复位(这无疑是由于3V3线的切割)、但我无法驱动阀门。

    我想、通过这些测试、我可以说问题是 12V 开关电源无法为阀提供足够的电流。 然后、我将把这个 PS 替换为能够提供至少2A 电流的 PS。

    另一方面、在进行这些测试时、我在网上搜索了 闭锁阀驱动器电路的参考、发现在某些情况下、将一个相当大的电容器与12V 线路并联、其值在3000-5000uF 范围内。 我猜测的是、它用于在电源无法提供足够电流的情况下向阀提供电流。 但考虑到它的尺寸和成本,如果我可以避免它,它将是伟大的。 如果真的有必要、有什么想法吗? 因为在 DRV8220数据表中、它对该电容器没有任何说明。

    此致、

    佛朗哥。

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

    嗨、Franco、  

    很高兴您找到了一些变通办法/前进路线!

    如果电源尺寸足够大、能够提供电流来驱动阀门、则应该不需要这么大的电容器。  类似这样的大电容实际上仅在您使用尺寸过小的电源时才使用、并且仅在几毫秒内驱动您的负载、如在锁存阀或继电器的情况下。  但是对于我们的驱动器、如果您仅使用电容来处理浪涌峰值电流、则根据您的情况、它应该不需要超过50 μ F。   

    此致!

    Jacob

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

    你好、Jacob。

    很棒,我很理解。 然后、我要  像您建议的那样、将12V 线路中的10uF 电容器替换为50uF 电容器。 非常感谢您的帮助。

    我要让这个帖子打开、所以当我采用新的 PCB 设计并且能够对其进行测试时、我可以分享结果、这样我们就可以确认确实存在电源问题。

    此致、

    佛朗哥。

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

    尊敬的 Franco:

    听起来不错。 期待听到结果。

    此致!

    David