找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2321|回复: 10
打印 上一主题 下一主题
收起左侧

这个单片机步进电机匀加速程序有问题吗?

[复制链接]
跳转到指定楼层
楼主
ID:826204 发表于 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++;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:827243 发表于 2020-12-4 09:32 | 只看该作者
基本没问题,800个脉冲调速一次,不过10次以后XL减到零还需要改良一下
回复

使用道具 举报

板凳
ID:826204 发表于 2020-12-4 16:17 | 只看该作者
daemondong 发表于 2020-12-4 09:32
基本没问题,800个脉冲调速一次,不过10次以后XL减到零还需要改良一下

但是  我试了一下
步进电机并没有加速
而是保持初始XL=1000的脉冲频率一直转
这是怎么回事啊
回复

使用道具 举报

地板
ID:451718 发表于 2020-12-4 16:29 | 只看该作者
改变量太小了,脉冲的频率和步进电机的转速并不是线性关系的,在某些区间,几乎对转速改变不大。
回复

使用道具 举报

5#
ID:826204 发表于 2020-12-4 17:53 | 只看该作者
robinsonlin 发表于 2020-12-4 16:29
改变量太小了,脉冲的频率和步进电机的转速并不是线性关系的,在某些区间,几乎对转速改变不大。

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

使用道具 举报

6#
ID:451718 发表于 2020-12-4 18:47 | 只看该作者
TH0=(65536-XL)/256;  改成  TH0=(65535-XL)/256;
TL0=(65536-XL)%256; 改成  TL0=(65535-XL)%256;
再试试
回复

使用道具 举报

7#
ID:790408 发表于 2020-12-4 21:07 | 只看该作者
驱动步进电机起步时不应该让电机慢慢加速吗
回复

使用道具 举报

8#
ID:826204 发表于 2020-12-5 11:53 | 只看该作者
1922323908 发表于 2020-12-4 21:07
驱动步进电机起步时不应该让电机慢慢加速吗

对啊
我就是想让它匀加速
但是程序有问题
找不出来
回复

使用道具 举报

9#
ID:826204 发表于 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的频率运行、
所以一直弄不明白
回复

使用道具 举报

10#
ID:451718 发表于 2020-12-5 14:38 | 只看该作者
旅途1 发表于 2020-12-5 12:04
也不行
我编了好多的程序
只要改变中断里的变量XL就行不通 (是不是定时器中断不能有变量?)

刚刚仔细看了你的代码, 程序框架结构上有点漏洞。  请尝试把  if(q==800)  改为 if(q>=800)  ,至于原因,自己慢慢体会吧,多总结就会有提高了。
回复

使用道具 举报

11#
ID:826204 发表于 2020-12-5 19:35 | 只看该作者
robinsonlin 发表于 2020-12-5 14:38
刚刚仔细看了你的代码, 程序框架结构上有点漏洞。  请尝试把  if(q==800)  改为 if(q>=800)  ,至于原因 ...

感谢你的回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表