发新帖我要提问
12
返回列表
打印

关于89S52驱动步进电机的问题

[复制链接]
楼主: wealqm
手机看帖
扫描二维码
随时随地手机跟帖
21
wealqm|  楼主 | 2010-11-26 11:02 | 只看该作者 回帖奖励 |倒序浏览
#include<reg52.h>



#define uint unsigned int

#define uchar unsigned char

uint i;

sbit cpp=P1^5;
void init();

void main()
{
        init();
        while(1)
        {
        }
}

void timer0() interrupt 1
{
        if(cpp==1)
    {
                TH0=(65536-132)/256;
                TL0=(65536-132)%256;
        }
        else
        {
                TH0=(65536-140)/256;
                TL0=(65536-140)%256;
        }
        i++;
            if(cpp==1)
                {
                        if(i==3)
                        {
                                i=1;
                                cpp=!cpp;
                        }
                        else
                        {
                        }
                 }
                if(cpp==0)
                {
                        if(i==3)
                        {
                                i=1;
                                cpp=!cpp;
                        }
            
                }
}

void init()
{
        TMOD=0x01;
        TH0=(65536-140)/256;
        TL0=(65536-140)%256;
        EA=1;
        ET0=1;
    TR0=1;
        cpp=0;
        i=1;
}

这是修改后的程序还是有噪音。
高低电平转换的时候语句占用了17us 和7us

使用特权

评论回复
22
GDYJ| | 2010-11-26 11:29 | 只看该作者
频率高了,步进电机响应不了那么快的速度,失步严重。
另外,驱动三极管为什么要接成这样?好像是射极跟随输出了,
把电阻接到vcc到集电极之间,射极接地,输出接集电极。后面的是步进电机驱动吗?

使用特权

评论回复
23
wealqm|  楼主 | 2010-11-26 13:01 | 只看该作者
SJ-230M2是步进电机驱动器。现成的,只需要从CP脚输入脉冲即可。

哦,我看SJ-230M2是共阴极的所以把电路改了一下。我在按你说的实验一下。看看。

不过 如果SJ-230M2是共阴极,如果我从集电极输出那电机不是一直供电了。

使用特权

评论回复
24
wealqm|  楼主 | 2010-11-26 13:02 | 只看该作者
请问频率一般在什么范围比较合理。谢谢。

使用特权

评论回复
25
ma9453| | 2010-11-26 13:20 | 只看该作者
能,只是我的写法不对。。。。
呃。。。。。我是菜鸟一个
20# Jack602

使用特权

评论回复
26
wealqm|  楼主 | 2010-11-26 15:07 | 只看该作者
有什么经验可以交流一下啊,我也是小菜呵呵。

使用特权

评论回复
27
ytysy| | 2010-11-26 16:15 | 只看该作者
本帖最后由 ytysy 于 2010-11-26 16:33 编辑

楼主你的程序可能产生不了那么短的周期,我用示波器测了一下,为7.246kHz也就是138us。
给你改下程序,这样频率可以达到23.81K,周期为42us,我用的是11.0592m的晶振,如下:
#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit cpp=P1^0;
void init();

void main()
{
        init();
        while(1)
        {
        }
}

void timer0() interrupt 1
{
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
                 
        cpp=!cpp;
                  
         
}

void init()
{
        TMOD=0x01;
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        EA=1;
        ET0=1;
        TR0=1;

}

这样改为最高了:
void timer0() interrupt 1
{
        TH0=0xff;
        TL0=0xfe;
   
        cpp=!cpp;
                  
         
}

频率为:35.71KHz 周期28us

使用特权

评论回复
28
5880527| | 2010-11-26 16:30 | 只看该作者
一般500HZ左右步进电机能转起来,需要对加速度进行处理才能更高速,脉冲要均匀,滑溜

使用特权

评论回复
29
wealqm|  楼主 | 2010-11-27 14:00 | 只看该作者
谢谢 ytysy 我试验一下。

另外,现在有人高所我说是三极管有失真,需要增加偏置电路。电路我没有学过,不知道那个大哥,可以教教我这个偏置电路如何加。

使用特权

评论回复
30
wealqm|  楼主 | 2010-11-27 14:10 | 只看该作者
ytysy 不行啊。程序下载进去电机都不动。谢谢,在帮测一下啊,我没有示波器。

使用特权

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

本版积分规则