步进电机驱动问题!求解答

[复制链接]
3167|15
 楼主| 日暮惜乔 发表于 2013-1-21 15:39 | 显示全部楼层 |阅读模式
驱动步进电机时设为8细分时最高能达到670转没分,,但是设为16细分时最高才只有360转每分,,常理讲细分越大应该转速更快些??求高手解答!!
lbygtwx 发表于 2013-1-21 16:41 | 显示全部楼层
细分越大运行越平稳。
wsnsyy 发表于 2013-1-21 16:54 | 显示全部楼层
步進電機的精度怎麼控制啊?
sky大花猫 发表于 2013-1-21 17:14 | 显示全部楼层
你说的细分应该就是转一圈走几步,16步的就是转一圈16个脉冲,频率相同情况下,圈数=频率/步数,步数越小圈数越大。但超过一定速度再减小步数速度也不增加了。。所以选择稍大点的电机留有余量
 楼主| 日暮惜乔 发表于 2013-1-21 17:43 | 显示全部楼层
lbygtwx 发表于 2013-1-21 16:41
细分越大运行越平稳。

嗯,是的,但是为什么细分大但是速度上不去呢???理论是能上去的
lbygtwx 发表于 2013-1-23 08:50 | 显示全部楼层
日暮惜乔 发表于 2013-1-21 17:43
嗯,是的,但是为什么细分大但是速度上不去呢???理论是能上去的

细分越大,转一圈需要的步数越多,速度要上去,频率要增大。步进电机要先加速,再匀速运行,不能一下子把速度加上去,那样容易失步。
ayb_ice 发表于 2013-1-23 09:27 | 显示全部楼层
细分越大,同样的脉冲下,转速当然小了,要想达到原来的速度,脉冲必须对应放大细分倍数

细分后运转更平稳,带载能力强些
duhemayi 发表于 2013-1-23 10:33 | 显示全部楼层
 楼主| 日暮惜乔 发表于 2013-1-23 16:21 | 显示全部楼层
ayb_ice 发表于 2013-1-23 09:27
细分越大,同样的脉冲下,转速当然小了,要想达到原来的速度,脉冲必须对应放大细分倍数

细分后运转更平稳,带 ...

脉冲对应放大细分倍数是什么意思??
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit clk=P3^5;
sbit ENA=P1^7;
sfr AUXR=0x8e;
uchar num,bb;
float cc;
unsigned char flag;
void delay(unsigned int aa)
{
        while(--aa);
}
void main()
{
        ENA=1;
        num=70;
        AUXR=0x80;
        TMOD=0x01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        IE=0x82;
        TR0=1;
        while(1)
        {
                clk=~clk;
                delay(num);
                if(flag==1)
                {
                        num=25;
                }
        }
}
void Timer0_ISR() interrupt 1
{
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        bb++;
        if(bb==2)
        {
                //bb=0;
                num--;
                if(num==25)
                {
                        flag=1;
                }
        }
       
}
拜托高手帮帮忙吧!!我感觉程序没什么问题啊。。。可是到了16细分速度就是上不去啊。为什么呢
 楼主| 日暮惜乔 发表于 2013-1-23 16:22 | 显示全部楼层
lbygtwx 发表于 2013-1-23 08:50
细分越大,转一圈需要的步数越多,速度要上去,频率要增大。步进电机要先加速,再匀速运行,不能一下子把 ...

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit clk=P3^5;
sbit ENA=P1^7;
sfr AUXR=0x8e;
uchar num,bb;
float cc;
unsigned char flag;
void delay(unsigned int aa)
{
        while(--aa);
}
void main()
{
        ENA=1;
        num=70;
        AUXR=0x80;
        TMOD=0x01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        IE=0x82;
        TR0=1;
        while(1)
        {
                clk=~clk;
                delay(num);
                if(flag==1)
                {
                        num=25;
                }
        }
}
void Timer0_ISR() interrupt 1
{
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        bb++;
        if(bb==2)
        {
                //bb=0;
                num--;
                if(num==25)
                {
                        flag=1;
                }
        }
       
}
能帮我看看是不是程序的问题吗!拜托啦
 楼主| 日暮惜乔 发表于 2013-1-23 16:23 | 显示全部楼层
duhemayi 发表于 2013-1-23 10:33
看看

什么!!
ayb_ice 发表于 2013-1-23 16:56 | 显示全部楼层
本帖最后由 ayb_ice 于 2013-1-23 16:58 编辑

都说了,如果
细分由1变成16的话,脉冲要加大16倍

那么应该这样
TH0=(65536-2000/16)/256;
TL0=(65536-2000/16)%256;
可能你的MCU处理不过来的,而来你的时钟不是在中断里处理的,还可能引入额外的延时

而且你这还只是个DEMO,实际中还要处理传感器等其它信号...

 楼主| 日暮惜乔 发表于 2013-1-23 19:17 | 显示全部楼层
ayb_ice 发表于 2013-1-23 16:56
都说了,如果
细分由1变成16的话,脉冲要加大16倍

现在是频率能达到那个值,但是就是实际达到的频率但是16细分转不起来,只能到360转每分??请问这是怎么回事呢???我写的是用定时器给脉冲的,所以可以处理传感器和其他信号,非常感谢

受不了了 发表于 2013-1-23 22:31 | 显示全部楼层
楼主都发了好多帖子了,还没好啊,你的程序没加减速,这个是控制步进电机必须的。脉冲均匀,频率平滑,无突跳,那样才能高速运行。用示波器观察一下脉冲的疏密变化自然流畅不
ayb_ice 发表于 2013-1-24 08:09 | 显示全部楼层
本帖最后由 ayb_ice 于 2013-1-24 08:12 编辑
日暮惜乔 发表于 2013-1-23 19:17
现在是频率能达到那个值,但是就是实际达到的频率但是16细分转不起来,只能到360转每分??请问这是怎么 ...


那很可能是丢步了,
脉冲太快,加减速没有做好.电机本身都有可能的,你这个可以肯定是程序的问题的

你的程序利用flag变量同步中断与主循环,就有可能有问题的,不能实时处理,特别是受主循环的延时程序影响大,当然这只是随便看一下的结论,没有时间仔细看

 楼主| 日暮惜乔 发表于 2013-1-24 08:44 | 显示全部楼层
受不了了 发表于 2013-1-23 22:31
楼主都发了好多帖子了,还没好啊,你的程序没加减速,这个是控制步进电机必须的。脉冲均匀,频率平滑,无突 ...

是有加减速的,,,我用示波器观察过,,加速度开始变化小后来变化大。。。哎。。还是很感谢你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部