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

[复制链接]
 楼主| 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
GDYJ 发表于 2010-11-26 11:29 | 显示全部楼层
频率高了,步进电机响应不了那么快的速度,失步严重。
另外,驱动三极管为什么要接成这样?好像是射极跟随输出了,
把电阻接到vcc到集电极之间,射极接地,输出接集电极。后面的是步进电机驱动吗?
 楼主| wealqm 发表于 2010-11-26 13:01 | 显示全部楼层
SJ-230M2是步进电机驱动器。现成的,只需要从CP脚输入脉冲即可。

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

不过 如果SJ-230M2是共阴极,如果我从集电极输出那电机不是一直供电了。
 楼主| wealqm 发表于 2010-11-26 13:02 | 显示全部楼层
请问频率一般在什么范围比较合理。谢谢。
ma9453 发表于 2010-11-26 13:20 | 显示全部楼层
能,只是我的写法不对。。。。
呃。。。。。我是菜鸟一个
20# Jack602
 楼主| wealqm 发表于 2010-11-26 15:07 | 显示全部楼层
有什么经验可以交流一下啊,我也是小菜呵呵。
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
5880527 发表于 2010-11-26 16:30 | 显示全部楼层
一般500HZ左右步进电机能转起来,需要对加速度进行处理才能更高速,脉冲要均匀,滑溜
 楼主| wealqm 发表于 2010-11-27 14:00 | 显示全部楼层
谢谢 ytysy 我试验一下。

另外,现在有人高所我说是三极管有失真,需要增加偏置电路。电路我没有学过,不知道那个大哥,可以教教我这个偏置电路如何加。
 楼主| wealqm 发表于 2010-11-27 14:10 | 显示全部楼层
ytysy 不行啊。程序下载进去电机都不动。谢谢,在帮测一下啊,我没有示波器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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