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.

[参考译文] DRV8838:电机未反向旋转

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/969802/drv8838-motor-not-rotating-in-reverse-direction

器件型号:DRV8838
主题中讨论的其他器件: DRV8837

我正在使用 SAMD21,Adafruit 羽毛 M0烧成引导加载程序,通过 DRV8838控制直流电机的方向,并使用代码来使电机前进:  

(三  
const int enablein = 9;
const int phpin = 18;
const int nsleppin = 17;
void setup(){ ​​​​​​​
 PinMode (enablein、输出);
 引脚模式(引脚、输出);
 PinMode (nsleppin、输出);
} ​​​​​​​
void loop(){ ​​​​​​​
 digitalWrite (phpin、HIGH);
 digitalWrite (nsleppin、HIGH);
 digitalWrite (enablein、high);  
} ​​​​​​​
(二
反向旋转电机的代码:
(小部分
const int enablein = 9;
const int phpin = 18;
const int nsleppin = 17;
void setup(){ ​​​​​​​
 PinMode (enablein、输出);
 引脚模式(引脚、输出);
 PinMode (nsleppin、输出);
} ​​​​​​​
void loop(){ ​​​​​​​
 digitalWrite (phpin、low);
 digitalWrite (nsleppin、HIGH);
 digitalWrite (enablein、high);  
} ​​​​​​​
秘书长的报告
使用此代码、电机确实开始正向旋转、但当更改为 digitalWrite (phpin、low)时;要反向旋转电机、电机不会旋转但停止、则会听到电机发出的振动噪声。

我已使用电压表进行检查、UC 引脚上的3.3V 短接至 ENABLE & NSLEEP 引脚、UC 引脚上的0V 短接至 DRV8838的 pH 引脚、 我还验证了 DRV8838在其 VM 和 VCC 引脚上获得3.3V 电压、使能和休眠引脚处于3.3V 电压、pH 引脚处于0V 电压、但电机仍不会反向旋转。 已尝试更换 DRV8838、但即使更换了两个新的卷带 IC、同一问题仍然存在。 电机仅正向旋转。

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

    PICS 包含电路板的原理图和布局部分、其中显示了从 uC 到 DRV8838的布线以及数据表中提供的逻辑表

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

    Manan、您好!

    感谢您在电机驱动器论坛上发帖。

    我有几个问题:

    1. 电机在反向(PH=0)而非正向启动时是否旋转?
    2. 在反转电机方向之前、您提供了多大的延迟(如果有)?
    3. 您是否具有 EN 切换或是否始终设置为0?
    4. 您是否在方向变化期间监控了输出电流和 VM/VCC?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pablo、

    1.电机仅正向旋转(PH=0)、不反向旋转(PH=1)。 否当电机反向启动(PH=1)时不旋转、仅在正向启动(PH=0)时旋转

    2.我尝试了从1s 到10s 的各种延迟、并结合使用、从正向(PH=0)和反向(PH=1)开始。

    3、是的、我始终使 EN = 1。

    当电机正向旋转(PH=0)时、电机灌入0.05A、但一旦方向变为反向(PH=1)、电机灌入的电流为0A、VM 和 Vcc 处的电压始终为3.3V、 但是、为了测量 VM 和 VCC 的电压、我测量了电容器 C21和 C22两端的电压、如布局所示。

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

    Manan、您好!

    感谢您回答我的问题。

    您是否检查过电机是双向的? 如果它是单向的、它将解释为什么它只在一个方向上旋转。 我确定您已经检查过此项、但我只想确认。

    如果您保持 EN=1并且只改变 PH 来改变方向、我希望电机驱动器正确地改变输出端子上的极性以使电机中的电流反向。 您能否尝试从输出端移除电机并重复同一实验? 测量 OUT1和 OUT2正向和反向的电压? 我想验证驱动器是否正确更改了输出状态。

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

    您好 Pablo、

    电机是双向的。

    是的、我保持 EN=1并且只更改 PH 来改变方向、尝试您建议的实验、移除电机、 和在改变方向时测量电压、当电机正向旋转(PH=1)时、当电压表的正极探针连接到 OUT 2引脚、而负极探针连接到 DRV8838上的 OUT 1引脚时、我获得正3.3V 电压。 当方向改变时、PH=0、电压表显示0V 而不是-3.3V。 此外、还测量了电机正向旋转时的电流、我获得50mA 的读数、但当我尝试反向运行电机时、电流表读数为0A。

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

    Manan、您好!

    在执行实验时、您是否使用万用表验证了 EN 和 PH 电压值? 电机方向反向时的值是多少?

    如果 EN 和 PH 逻辑遵循数据表的表2、则必须检查器件是否存在问题。 您能否尝试使用新的 DRV8838 IC 切换电流并重试该实验?

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

    Manan、您好!

    是否有更新? 您是否能够执行我建议的实验?

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

    您好 Pablo、

    很抱歉,我的回答是的,我做了您说过的实验,就是我在更改电机方向时使用万用表验证 EN 和 PH 电压。 正向旋转电机时、EN 电压始终为3.3V、PH 电压为0V;当 PH 电压为3.3V 时、电机未反向旋转。

    此外、还更换了 IC 并执行了上述所有实验并获得了相同的结果。

    但是,我发现了一件真正的事情,我没有按照数据表中提到的真值表,即反转电机的代码,就能够反转电机:

    const int enablein = 9;
    const int phpin = 18;
    const int nsleppin = 17;

    void setup()

     Serial.begin(115200);
     PinMode (enablein、输出);
     引脚模式(引脚、输出);
     PinMode (nsleppin、输出);

    void loop()
    {  
     如果(Serial.Available ()>0)
     {
       int inByte = Serial.Read();
       开关(INByte)
       {
         案例"0"://开关语句停止电机
         digitalWrite (nsleppin、HIGH);
         digitalWrite (enablein、high);
         digitalWrite (phpin、HIGH);   
         serial.println ("制动器");
         中断;

         案例"1"://开关语句、用于正向旋转电机
         digitalWrite (nsleppin、HIGH);
         digitalWrite (enablein、high);
         digitalWrite (phpin、low);
         serial.println("forward");
         中断;

         案例"2"://开关语句,用于反向旋转电机
         digitalWrite (nsleppin、HIGH);
         digitalWrite (enablein、low);
         digitalWrite (phpin、HIGH);
         serial.println ("反向");
         中断;

    从代码中可以看到、我通过将使能引脚下拉至0V 来反向电机、我是说、是的、这毫无意义、 但现在电机沿两个方向旋转、并检查了1和2个引脚上的电压、 对于正向、当正极探针位于 OUT1上、而万用表的 GND 探针位于 OUT 2上时、电压读数为-3.3V;对于电机反向旋转、电压读数为3.3V。 我不知道这是怎么做的。

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

    Manan、您好!

    感谢您的更新。

    您确定拥有的器件是 DRV8838吗? 如您在数据表中所见、DRV8837是 DRV8838的 PWM 接口变体。 PWM 接口的真值表似乎与代码逻辑一致。

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

    Manan、您好!

    是否有更新? 您的问题是否已解决?

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

    您好、Pablo、

    我非常肯定的是 DRV8838、而不是 DRV8837、我是说我能够运行电机、但逻辑是反向的。

    谢谢  

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

    是的,我已经订购了 DRV8838,下面是我订购它的链接:  

    lcsc.com/.../Motor-Drivers_Texas-Instruments-DRV8838DSGR_C86667.html

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

    Manan、

    明白了。 感谢您的确认。

    如果是这种情况、那么我很困惑、为什么更改代码中的逻辑可以解决这个问题。 只要输入信号遵循真值表中的正向和反向、电机就应该能够以两种方式旋转。 在前面的答复中、您确认了输入信号的逻辑值与 真值表保持一致、但仅正向旋转。 您还确认更换 IC 没有任何帮助、因此我们不能肯定地将单个坏 IC 作为问题的原因。最有可能的是、问题可能出在代码实现方面。

    顺便说一下、当您修改代码时 EN 和 PH 值是否发生了变化?

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

    您好、Pablo、

    我检查了库存、结果结果确实是 drv8837、而不是38、导致了来源错误。

    很抱歉。

    感谢您提供的所有帮助。

    此致、

    Manan Mehta