找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3303|回复: 8
收起左侧

为什么电机实际转数与程序设定的不一样?请高手指教!

[复制链接]
ID:86913 发表于 2017-1-25 13:33 | 显示全部楼层 |阅读模式
所用单片机STC89C52RC,驱动为L298N,电机为42步进电机
实际运行后发现问题;
1、只有正转,(转2圈多后停一下又正转2圈多,如此反复而没有反转);
2、转动函数中的J值不论是何值,电机总是转2圈另96度。程序中要求1圈。
因为自己是新手,对此弄不明白,望高手指教 。程序如下:

#include <reg52.h>               //单片机:STC89C52RC
#define uchar unsigned char      //采用42电机
#define uint  unsigned int
uchar code up_data[8]={0xFE,0xFC,0xFD,0xF9,0xFB,0xF3,0xF7,0xF6};//正转代码
uchar code down_data[8]={0xF6,0xF7,0xF3,0xFB,0xF9,0xFD,0xFC,0xFE};//反转代码      
/********以下是延时函数********/                                                          
void Delay_ms(uint xms)                               
{
        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}
/********以下是步进电机1相励磁法正转函数********/
void  motor_up(uint n)
{
        uchar i;
  uint  j;
  for (j=0; j<50*n; j++)               //转n圈
  {
          for (i=0; i<8; i++)        //用42电机,步距角1.8°。八拍为0.9°。
                                        //8次共转0.9×8=7.2°,
                                        //J=50可转7.2°*50=360°(1圈)
       {
                       P1 = up_data[i];       //取正转数据
                  Delay_ms(500);         //转一个角度停留的时间
             }
        }
}
/********步进电机1相励磁法反转函数********/
void  motor_down(uint n)
{
        uchar i;
        uint  j;
        for (j=0; j<50*n; j++)           
  {
          for (i=0; i<8; i++)            
       {
                       P1 = down_data[i];      //取反转数据
                  Delay_ms(500);           //转一个角度停留的时间

       }
        }
}
/********以下是主函数********/
main()
{   
        while(1)                     
  {  
          motor_up(1);                  //电机正转1圈
                P1=0xff;                //电机停转
       Delay_ms(2000);          //换向延时为2s
       motor_down(1);           //电机反转1圈
                P1=0xff;        //电机停转
       Delay_ms(2000);          //换向延时为2s
        }
}
回复

使用道具 举报

ID:162984 发表于 2017-1-26 20:00 | 显示全部楼层
感觉延时是不是有点长,0.9°延时0.5秒,一圈就要延时200s。
回复

使用道具 举报

ID:86913 发表于 2017-1-27 11:44 | 显示全部楼层
是啊,应该转得很慢,但是实际上转得很快,第二是只会正转不会反转,第三是设定的是一圈,而实际上转了二圈多,刚刚开始学单片机,知识浅薄理解不了,非常疑惑
回复

使用道具 举报

ID:86913 发表于 2017-1-27 11:53 | 显示全部楼层
是不是程序有错?我自己看不出来。希望得到帮助
回复

使用道具 举报

ID:86913 发表于 2017-1-27 12:27 | 显示全部楼层
设定的每圈所需时间为8*50=400个脉冲计200秒,但实际测量是9秒左右,相差了20多倍。第二,只有正转没有反转。第三,设定的是一圈,实际转了二圈另97度。第四,把0.9°延时0.5秒改为0.05秒,运行状态还是没变化。由于学习不久,知识浅薄,错在哪里不知道。万望高手援助!
回复

使用道具 举报

ID:86913 发表于 2017-1-27 12:50 | 显示全部楼层
阿杜 发表于 2017-1-26 20:00
感觉延时是不是有点长,0.9°延时0.5秒,一圈就要延时200s。

实测一圈只用了9秒左右,与设定的8*50/0.5=200秒相差太大了
回复

使用道具 举报

ID:123289 发表于 2017-2-4 17:30 | 显示全部楼层
可能是对硬部分的理解不足。建议查看一下硬件驱动部分的手册,特别是驱动的极性、起动时间、驱动电流。
回复

使用道具 举报

ID:86913 发表于 2017-2-10 21:37 | 显示全部楼层
谢谢7楼的指导!
回复

使用道具 举报

ID:86913 发表于 2017-2-14 10:32 | 显示全部楼层
谢谢大家的帮助,这个问题已经解决了`
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表