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

[复制链接]
 楼主| 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测试通过了。换成单片机就不行。不知道是程序的问题还是电路的问题,请给位帮帮忙看一看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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
 楼主| wealqm 发表于 2010-11-25 13:00 | 显示全部楼层
继续等待
 楼主| wealqm 发表于 2010-11-25 15:11 | 显示全部楼层
为什么大侠都不在呢?
 楼主| wealqm 发表于 2010-11-25 15:58 | 显示全部楼层
等待的滋味好苦啊。
 楼主| wealqm 发表于 2010-11-25 16:21 | 显示全部楼层
继续等待。
HC1987 发表于 2010-11-25 18:10 | 显示全部楼层
为什么初始化函数不在while循环里面呢。。。
hdp7891000 发表于 2010-11-25 18:30 | 显示全部楼层
1# wealqm
你用示波器看下波形,在我的印象里,51单片机貌似发不出20us的波形,无论你定时调的多么小
sandsea 发表于 2010-11-25 19:25 | 显示全部楼层
我也觉得应该是PWM的频率低了些,LZ试着把频率提高试试!
sandsea 发表于 2010-11-25 19:25 | 显示全部楼层
我也觉得应该是PWM的频率低了些,LZ试着把频率提高试试!
 楼主| 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?
ma9453 发表于 2010-11-25 21:08 | 显示全部楼层
楼主,我原来想用51产生发射红外线的载波,结果失败了
估计问题和你这个一样,不知道楼主用的晶振频率多大,
像if这种语句,编译成汇编后会是许多语句,执行一次需要若干微秒(12M晶振)
有时甚至需要十几微秒,这个通过keil的软件仿真可以看,
如果你的中断时间太短,在判断if的时候就会出现未知的错误
不知道楼主是不是这个问题
ytysy 发表于 2010-11-25 21:08 | 显示全部楼层
attention
后青春的诗 发表于 2010-11-25 21:18 | 显示全部楼层
步进电机没用定时器来编,借鉴楼主的程序
ma9453 发表于 2010-11-25 21:18 | 显示全部楼层
补充一下红外线载波周期26us
 楼主| wealqm 发表于 2010-11-25 21:22 | 显示全部楼层
我用的是11.0592MHZ的晶振。这个我明天试验一下。我明天把周期调到500us看看。
ma9453 发表于 2010-11-25 21:26 | 显示全部楼层
你写个if看下汇编的软件仿真估计能看出问题
Jack602 发表于 2010-11-26 07:42 | 显示全部楼层
楼主,我原来想用51产生发射红外线的载波,结果失败了
估计问题和你这个一样,不知道楼主用的晶振频率多大,
像if这种语句,编译成汇编后会是许多语句,执行一次需要若干微秒(12M晶振)
有时甚至需要十几微秒,这个 ...
ma9453 发表于 2010-11-25 21:08


51不能产生红外载波????:o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

77

帖子

1

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