标题: 这个单片机步进电机匀加速程序有问题吗? [打印本页]

作者: 旅途1    时间: 2020-12-3 18:09
标题: 这个单片机步进电机匀加速程序有问题吗?
求大神看看下列程序有没有问题
谢谢了

#include<reg52.h>
sbit shudu=P1^4;
sbit ENA=P1^5;
unsigned int Tspeed[3]={20,4000,10000};
unsigned int XL=1000;
unsigned int q=0;
void time();
void can();
void time()
{
    TMOD=0x01;
          TH0=(65536-XL)/256;
          TL0=(65536-XL)%256;
          EA=1;
          ET0=1;
          TR0=1;
}
void main()
{
           time();
     while(1);
           {
                   can();
                 }
}
void can()
{
        
                if(q==800)   //1/4圈脉冲
{
        XL-=100;
              q=0;   
}
    if(XL==100)
{
              q=0;
}
}
void clock() interrupt 1
{
    TH0=(65536-XL)/256;
          TL0=(65536-XL)%256;
          shudu=~shudu;
          q++;
}


作者: daemondong    时间: 2020-12-4 09:32
基本没问题,800个脉冲调速一次,不过10次以后XL减到零还需要改良一下
作者: 旅途1    时间: 2020-12-4 16:17
daemondong 发表于 2020-12-4 09:32
基本没问题,800个脉冲调速一次,不过10次以后XL减到零还需要改良一下

但是  我试了一下
步进电机并没有加速
而是保持初始XL=1000的脉冲频率一直转
这是怎么回事啊
作者: robinsonlin    时间: 2020-12-4 16:29
改变量太小了,脉冲的频率和步进电机的转速并不是线性关系的,在某些区间,几乎对转速改变不大。
作者: 旅途1    时间: 2020-12-4 17:53
robinsonlin 发表于 2020-12-4 16:29
改变量太小了,脉冲的频率和步进电机的转速并不是线性关系的,在某些区间,几乎对转速改变不大。

我试了试  改变量大了也不行
能指点一下 怎么写匀加速程序吗
谢谢了

作者: robinsonlin    时间: 2020-12-4 18:47
TH0=(65536-XL)/256;  改成  TH0=(65535-XL)/256;
TL0=(65536-XL)%256; 改成  TL0=(65535-XL)%256;
再试试
作者: 1922323908    时间: 2020-12-4 21:07
驱动步进电机起步时不应该让电机慢慢加速吗
作者: 旅途1    时间: 2020-12-5 11:53
1922323908 发表于 2020-12-4 21:07
驱动步进电机起步时不应该让电机慢慢加速吗

对啊
我就是想让它匀加速
但是程序有问题
找不出来
作者: 旅途1    时间: 2020-12-5 12:04
robinsonlin 发表于 2020-12-4 18:47
TH0=(65536-XL)/256;  改成  TH0=(65535-XL)/256;
TL0=(65536-XL)%256; 改成  TL0=(65535-XL)%256;
再 ...

也不行
我编了好多的程序
只要改变中断里的变量XL就行不通 (是不是定时器中断不能有变量?)
总是保持第一个初始XL的频率运行、
所以一直弄不明白
作者: robinsonlin    时间: 2020-12-5 14:38
旅途1 发表于 2020-12-5 12:04
也不行
我编了好多的程序
只要改变中断里的变量XL就行不通 (是不是定时器中断不能有变量?)

刚刚仔细看了你的代码, 程序框架结构上有点漏洞。  请尝试把  if(q==800)  改为 if(q>=800)  ,至于原因,自己慢慢体会吧,多总结就会有提高了。
作者: 旅途1    时间: 2020-12-5 19:35
robinsonlin 发表于 2020-12-5 14:38
刚刚仔细看了你的代码, 程序框架结构上有点漏洞。  请尝试把  if(q==800)  改为 if(q>=800)  ,至于原因 ...

感谢你的回答




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1