打印

请教一下步进电机转动抖动很大的问题。

[复制链接]
17508|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
枫恋00|  楼主 | 2012-8-18 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人在用39系列的两相四线的步进电机,有几个问题一直不知道怎么解决:
(1):电机转动的时候抖动很大。
(2):每次启动电机的时候都是来回转一下然后在转动起来。(ps:以用了加减速的方法去启动步进电机了,还是会出现这种情况)
(3):步进的角度很难控制,要让它转动一定角度的时候,都是来回的转动。根本达不到要求。
求高手帮忙解决。小弟不甚感激!!!

相关帖子

沙发
大道至简| | 2012-8-19 08:25 | 只看该作者
估计你软件有问题哦

使用特权

评论回复
板凳
枫恋00|  楼主 | 2012-8-19 09:26 | 只看该作者
2# 大道至简 2# 大道至简 软件吗?应该不会吧!
#include <c8051f410.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^4;
sbit key2=P0^5;
sbit key3=P0^6;
sbit key4=P0^7;
uchar code CCW[]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9}; //逆时钟旋转相序表
uchar code CW[]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8}; //正时钟旋转相序表
uchar num=4;
/********************延时********************************/
void delayms(uint z)    //延时ms
{
uint x,y;
for(x=z;x>0;x--)
  for(y=10;y>0;y--);
}
void f410_init()
{
PCA0MD=0X00;
OSCICN=0XC0;//设置时钟振荡,为内部时钟,并且为16分频
XBR0=0X00;
XBR1=0X40;//交叉开关使能,弱上拉使能。
          //XBARE=1;//使能交叉开关。
P0MDOUT=0xff;
P0MDIN=0XF0;
}
/*********************/
uchar keyscan()
{
if(key1==0)
{
  delayms(2);
  if(key1==0)
     {
     num=0; //正转45
     }
    while(!key1);
}
  if(key2==0)
{
  delayms(2);
  if(key2==0)
     {
     num=1; //正转90
     }
  while(!key2);
}
  if(key3==0)
{
  delayms(2);
  if(key3==0)
     {
     num=2; //反转45
     }
     while(!key3);
}
  if(key4==0)
{
  delayms(2);
  if(key4==0)
     {
     num=3; //反转90
     }
  while(!key4);
}
return num;
}
/*********************/
void zheng()
{
uint b,a,i,j=100;
for(a=0;a<25;a++)
{
for(i=0;i<8;i++)
{
delayms(j);
P0=CCW;
if(b<8)
{
b++;
j=j-10;
}
else {j=10;b=10;}
}
}
}
/********************/
void zheng1()
{
uint b,a,i,j=100;
for(a=0;a<150;a++)
{
for(i=0;i<8;i++)
{
delayms(j);
P0=CCW;
if(b<8)
{
b++;
j=j-10;
}
else {j=10;b=10;}
}
}
}
/**********************/
void fan()
{
uint b,a,i,j=100;
for(a=0;a<50;a++)
{
for(i=0;i<8;i++)
{
delayms(j);
P0=CW;
if(b<8)
{
b++;
j=j-10;
}
else {b=10;j=10;}
}
}
}
/**********************/
void fan1()
{
uint b,a,i,j=100;
for(a=0;a<25;a++)
{
for(i=0;i<8;i++)
{
delayms(j);
P0=CW;
if(b<8)
{
b++;
j=j-10;
}
else {b=10;j=10;}
}
}
}
/**********************/
void ting()
{
P0=0Xf0;
}
/**********************/
void zhuansu(uchar c)
{
switch(c)
{
case 0:zheng();num=4;break;
case 1:zheng1();num=4;break;
case 2:fan();num=4;break;
case 3:fan1();num=4;break;
case 4:ting();break;
default:break;
}
}
/**********************/
void main()
{
f410_init();
while(1)
{
zhuansu(keyscan());
}
}
这个是我写的一个按键控制步进电机转过角度的程序,可是电机就只是来回的抖动,
软件的话我也用了“加减速”的方法。

使用特权

评论回复
地板
ningling_21| | 2012-8-19 20:24 | 只看该作者
用一个专门的驱动电路试试,单片机只要输出两个信号就可以了,一个方波用来控制转动角度,一个高低用来控制正反转。

使用特权

评论回复
5
airwill| | 2012-8-19 22:28 | 只看该作者
(1):电机转动的时候抖动很大。
这是驱动的问题, 楼主整步驱动方法解决不了问题, 可以采用恒流型的驱动器, 可大大减少振动

(2):每次启动电机的时候都是来回转一下然后在转动起来。(ps:以用了加减速的方法去启动步进电机了,还是会出现这种情况)
除了加减速的问题, 更重要的是, 要**起动前的电机电气位置.

(3):步进的角度很难控制,要让它转动一定角度的时候,都是来回的转动。根本达不到要求。
恐怕上面的问题解决了, 这个问题也迎刃而解了.
用好步进电机也不是那么容易的, 看来楼主还是新手呢, 先好好钻研钻研步进电机再做控制吧

使用特权

评论回复
6
枫恋00|  楼主 | 2012-8-21 20:33 | 只看该作者
5# airwill 是啊,刚开始研究步进电机,没有想象的那么简单,特别是控制小角度转动的时候,老是来回的抖动。不好控制

使用特权

评论回复
7
枫恋00|  楼主 | 2012-8-21 20:35 | 只看该作者
4# ningling_21 专门的驱动电路吗?我用的是两相四线的步进电机,有没有比较好的驱动电路。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

60

帖子

0

粉丝