当前位置:   article > 正文

drv8833 马达控制

drv8833 马达控制

本文基于mst358芯片的调试drv8833马达控制。

电路:
在这里插入图片描述
马达座子接了12V步进电机(X1项目是5V的步进电机),马达驱动IC——DRV8833PWPR,对软件来说,需要控制的是NSTEEP、AIN-1、AIN-2、BIN-1、BIN-2引脚,它们的功能是:
NSTEEP:拉低则芯片睡眠;
在这里插入图片描述

软件:
驱动代码:https://download.csdn.net/download/suwen8100/18209003
代码比较简单,本文只是挑选部分代码解释。其中提供了./sys/light_machine_motor/panel_focus_forward和./sys/light_machine_motor/panel_focus_reverse,来控制马达的正转或翻转。move_motor()函数对四个IN引脚控制,一开始调试时没搞明白输入和输出的逻辑关系,只是依赖逻辑分析仪来判断输出电平的高低,后面在代码中对4个引脚的16总控制进行测试(下文有说明)。供应商给的马达控制时序如下(-表示低电平,空白表示高电平):
在这里插入图片描述
相关代码参考light_machine_motor.c move_motor()函数。
在这里插入图片描述
调试过程遇到的问题:
1、应该先了解清楚控制IN引脚后OUT的输出是怎样的。
一开始调试时没搞明白输入和输出的逻辑关系,只是依赖逻辑分析仪来判断输出电平的高低,后面在代码中对4个引脚的16总控制进行测试,代码和结论如下:


static ssize_t _focus_operate_step_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
    int temp;

    temp = simple_strtol(buf, NULL, 0);
    //for test
    if( (0 <= temp) && (temp < 16) )
    {
        gpio_direction_output(g_motor_data.ai1, temp & 0x8);
        gpio_direction_output(g_motor_data.ai2, temp & 0x4);
        gpio_direction_output(g_motor_data.bi1, temp & 0x2);
        gpio_direction_output(g_motor_data.bi2, temp & 0x1);
    }
    else if(temp == 16)
    {
        gpio_direction_output(g_motor_data.sleep, 1);
    }
    else if(temp == 17)
    {
        gpio_direction_output(g_motor_data.sleep, 0);
    }

    return count;
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

需要注意的是,这个结论是不接马达的时候测试的OUT引脚电平,实际上接上马达后,OUT处于Z状态时引脚电平是高的,这样才有AOUT1和AOUT2都为高的时候。总结测试的结论是:|
在这里插入图片描述
和DRV8833规格书说的不一样的是(不清楚原因),IN引脚为低时输出是低电平的,为高时输出是高阻态的。另外,控制AIN实际控制BOUT,而控制BIN实际控制AOUT。

2、这个马达时序需要8个Step,每个Step之间需要一点点延时,延时越大马达力矩越大。
如下代码:
在这里插入图片描述
每个Step处理mdelay延时,还有其他代码,这些代码运行都需要时间,但执行MOTOR_DGB打印信息时,会增加几毫米的运行时间,这就严重影响马达扭矩了。另外这段代码运行时可能被抢占,导致实际某些时刻Step运行时间远超motor_delay毫秒。
后面调试总体感觉是,只要大部分时间按照mdelay就可以了,即使有个别超过mdelay,也不太影响马达运转。

3、马达设置Stop模式时还持续发热
马达不使用时,应该设置为Stop模式,这样马达不会持续有大电流经过、发热而影响马达使用。X1 的马达Stop模式是把4个引脚拉低,但是在X1 Proj无论是拉高还是拉低,都会导致马达持续发热。最终的解决办法是控制NSTEEP引脚,来“启动”和“关闭”马达。
Uboot的TFTP烧录和固件升级时也要把NSTEEP拉低,所以需要再uboot中把NSTEEP引脚默认拉低。

4、马达驱动力不够
现象:马达拿出来,是可以正转和翻转的,但是放到光机里面,转一点点就不动了,手动给它一点点力就可以继续转,怀疑是扭矩不够,但是修改每个Step之间的时间差没有效果。
解决方法是把下面的5V改为10V。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/599736
推荐阅读
  

闽ICP备14008679号