找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[求助]求步进电机加减速控制程序,单片机的C51语言程序,要是用定时器实现的加减速控制。

[复制链接]
跳转到指定楼层
楼主
ID:42436 发表于 2012-7-5 08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 就是为了步进电机有一个比较高的速度启动时让步进电机有一个加速过程,从而得到比较高的速度,现在就要求用定时器中断来完成,大神会的指导一下小弟,非常的感谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:27916 发表于 2012-7-5 09:15 | 只看该作者
步进电机的速度快不到哪里去哦
回复

使用道具 举报

板凳
ID:42436 发表于 2012-7-5 11:01 | 只看该作者
 我现在不加减速的话速度只能到300多,我现在需要它到600多,版主知道怎么弄么?最好能有程序,感谢了。
回复

使用道具 举报

地板
ID:27916 发表于 2012-7-5 12:41 | 只看该作者
延时减短就可以
回复

使用道具 举报

5#
ID:42436 发表于 2012-7-5 14:48 | 只看该作者
 延时是可以,但是我现在需要用定时期来延时,因为我需要同时控制两个电机运行。我是通过给定时器赋值,然后改变这个值弄的,但不明白为什么就是实现不了,这是我的程序,麻烦帮我看一下,有没有什么错误。
// 加大转速   加减速过程


#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit A1=P1^0;  //定义脉冲输出
sbit B1=P1^1;  //定义方向输出


 unsigned int i=0;

 unsigned int j=1000;


/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
  TMOD |= 0x01;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响            
  TH0=(65536-j)/256;//TH0=0x00;          //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  TL0=(65536-j)%256; //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}

/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
       Init_Timer0();
       while(1);

}

/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr() interrupt 1
{

 TH0=(65536-j)/256;         
 TL0=(65536-j)%256;       
 
     if(i<=80)  //       匀速
        {
              B1=0;    // 正方向
            A1=~A1;        //用示波器可看到方波输出
             i++;

            j=j-10;
        }

     if(i>80&&i<=6000)  // 匀速
        {
            B1=0;   // 正方向
            A1=~A1;        //用示波器可看到方波输出
             i++;
        }

        if(i>6000&&i<=6080)  // 减速
        {
            B1=0;   // 正方向
            A1=~A1;        //用示波器可看到方波输出
             i++;

        }

        if(i>6080)        // 停
        {
            TR0=0;
        }
}
回复

使用道具 举报

6#
ID:42565 发表于 2012-7-7 23:47 | 只看该作者
“interrupt 1”中,数字有没有错误
回复

使用道具 举报

7#
ID:42586 发表于 2012-7-8 14:09 | 只看该作者

能否将MAIN()的主程序也放上来看看呢?

回复

使用道具 举报

8#
ID:506152 发表于 2019-4-19 21:55 | 只看该作者
我现在也遇到了和楼主一样的问题,楼主解决了没
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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