0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于mst358芯片的调试drv8833马达控制设计方案

基于mst358芯片的调试drv8833马达控制设计方案

来源: elecfans
2021-07-08
类别:工业控制
eye 54
文章创建人 拍明

原标题:基于mst358芯片的调试drv8833马达控制设计方案

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

  电路:

  


  马达座子接了12V步进电机(X1项目是5V的步进电机),马达驱动IC——DRV8833PWPR,对软件来说,需要控制的是NSTEEP、AIN-1、AIN-2、BIN-1、BIN-2引脚,它们的功能是:

  NSTEEP:拉低则芯片睡眠;

  


  软件:

  代码比较简单,本文只是挑选部分代码解释。其中提供了。/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; } 需要注意的是,这个结论是不接马达的时候测试的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。

  


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯