打印

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

[复制链接]
2932|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wealqm|  楼主 | 2010-11-25 09:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
程序:
#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char
uint i,cpw;
sbit cpp=P1^5;
void main()
{
init();
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=(65536-10)/256;
TL0=(65536-10)%256;
i++;
if(i==2)
{
  i=1;
  cpw=!cpw;
  cpp=cpw;
}
}
void init(void)
{
TMOD=0x01;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
EA=1;
ET0=1;
cpw=1;
i=1;
}

我想发送一个周期是20us的方波,10us低电平,10us高电平。

现在是电机也转,就是噪音太大,好像电机里在打架。

此套设备用PLC测试通过了。换成单片机就不行。不知道是程序的问题还是电路的问题,请给位帮帮忙看一看

SJ-230M2电机解法.JPG (25.55 KB )

SJ-230M2电机解法.JPG

相关帖子

沙发
wealqm|  楼主 | 2010-11-25 10:24 | 只看该作者
程序上边那个我是敲代码过来的,少了点东西,下面是我把源码黏贴过来了。
#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
{
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        i++;
            if(cpp==1)
                {
                        if(i==3)
                        {
                                i=1;
                                cpp=!cpp;
                        }
                 }
                if(cpp==0)
                {
                        if(i==3)
                        {
                                i=1;
                                cpp=!cpp;
                        }
            
                }
}

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

使用特权

评论回复
板凳
wealqm|  楼主 | 2010-11-25 10:25 | 只看该作者
各位师傅master有谁用过指点一二,谢谢了。

使用特权

评论回复
地板
wealqm|  楼主 | 2010-11-25 11:03 | 只看该作者
I am waiting

使用特权

评论回复
5
wealqm|  楼主 | 2010-11-25 13:00 | 只看该作者
继续等待

使用特权

评论回复
6
wealqm|  楼主 | 2010-11-25 15:11 | 只看该作者
为什么大侠都不在呢?

使用特权

评论回复
7
wealqm|  楼主 | 2010-11-25 15:58 | 只看该作者
等待的滋味好苦啊。

使用特权

评论回复
8
wealqm|  楼主 | 2010-11-25 16:21 | 只看该作者
继续等待。

使用特权

评论回复
9
HC1987| | 2010-11-25 18:10 | 只看该作者
为什么初始化函数不在while循环里面呢。。。

使用特权

评论回复
10
hdp7891000| | 2010-11-25 18:30 | 只看该作者
1# wealqm
你用示波器看下波形,在我的印象里,51单片机貌似发不出20us的波形,无论你定时调的多么小

使用特权

评论回复
11
sandsea| | 2010-11-25 19:25 | 只看该作者
我也觉得应该是PWM的频率低了些,LZ试着把频率提高试试!

使用特权

评论回复
12
sandsea| | 2010-11-25 19:25 | 只看该作者
我也觉得应该是PWM的频率低了些,LZ试着把频率提高试试!

使用特权

评论回复
13
wealqm|  楼主 | 2010-11-25 20:29 | 只看该作者
TO:hdp7891000 and sandsea
Ok i will try  tomorrow.
TO:HC1987
Why init() in while?
Did you want it to perform ever time?

使用特权

评论回复
14
ma9453| | 2010-11-25 21:08 | 只看该作者
楼主,我原来想用51产生发射红外线的载波,结果失败了
估计问题和你这个一样,不知道楼主用的晶振频率多大,
像if这种语句,编译成汇编后会是许多语句,执行一次需要若干微秒(12M晶振)
有时甚至需要十几微秒,这个通过keil的软件仿真可以看,
如果你的中断时间太短,在判断if的时候就会出现未知的错误
不知道楼主是不是这个问题

使用特权

评论回复
15
ytysy| | 2010-11-25 21:08 | 只看该作者
attention

使用特权

评论回复
16
后青春的诗| | 2010-11-25 21:18 | 只看该作者
步进电机没用定时器来编,借鉴楼主的程序

使用特权

评论回复
17
ma9453| | 2010-11-25 21:18 | 只看该作者
补充一下红外线载波周期26us

使用特权

评论回复
18
wealqm|  楼主 | 2010-11-25 21:22 | 只看该作者
我用的是11.0592MHZ的晶振。这个我明天试验一下。我明天把周期调到500us看看。

使用特权

评论回复
19
ma9453| | 2010-11-25 21:26 | 只看该作者
你写个if看下汇编的软件仿真估计能看出问题

使用特权

评论回复
20
Jack602| | 2010-11-26 07:42 | 只看该作者
楼主,我原来想用51产生发射红外线的载波,结果失败了
估计问题和你这个一样,不知道楼主用的晶振频率多大,
像if这种语句,编译成汇编后会是许多语句,执行一次需要若干微秒(12M晶振)
有时甚至需要十几微秒,这个 ...
ma9453 发表于 2010-11-25 21:08


51不能产生红外载波????:o

使用特权

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

本版积分规则

0

主题

77

帖子

1

粉丝