找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请大家帮我分析一下该单片机控制步进电机驱动器的程序

[复制链接]
跳转到指定楼层
楼主
ID:4574 发表于 2008-10-3 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做了一个单片机控制步进电机驱动器的电路板,开始它的脉冲输出控制PUL端使用计时器控制输出,但是,有的时候会输出脉冲不一样,有时刚好等于那个数,有时却少了(没有多的时候),仔细观察计时器的时间常数,有时会不一样,所以请大家来一起分析一下,为何会这样?
下面我给出部分相关程序:

//******主程序内工作子程序:

void work_Auto (void)
{
 if (QD_flag)   //启动按钮标志为1时,表示按了启动按钮 
 {


do         //先执行一次,再测是否为自动运行,自动运行,则继续,不继续则停机
 {
  ENA=0;    //步进电机驱动器允许运行

  DIR=0;    //正转
  maichong=0;   //脉冲量清零

  TH0=-7000/256;   //装启动时间常数
  TL0=-7000%6 ;

  PUL=0;
  ET0=1;    //允许计时器T0中断
  TR0=1;    //启动计时器T0,让PUL端输出脉冲
  

  while (maichong <= jiaodujishuan )  ;        //等待转动角度达到设定值  为总共角度除以每步角度
 
  ET0=1;    //允许计时器T0中断
    TR0=0;
  delay(1);

  DIR=1;    //设定反转

  maichong=0;   //脉冲量清零
  TH0=-7000/256;   //装启动时间常数
  TL0=-7000%6 ;
  PUL=0;

  TR0=1;    //重新启动,但为反转
  while  (maichong <= jiaodujishuan );   //等待反转到设定值
  
  TR0=0;            //停转
  DIR=0;
   ENA=1;            //关闭步进电机驱动
 maichong=0; 
  _nop_();
  _nop_();

  delay ( 100*zhanting );   //延时设定暂停时间,单位为0.1S

  _nop_();
  _nop_();
  QD_flag=0;

        }
  while (Auto_flag);    //检测是否为自动模式,自动模式则继续运行,半自动则跳出再去检查是否有启动按键 按下

     }


     }
 

//*****************计时器中断子程序:

 

void zd0(void ) interrupt 1
{
             //此中断程序用输出脉冲给步进电机驱动板速度控制端

  _nop_();
  _nop_();
  if ((maichong<10) || (maichong >(jiaodujishuan-20)))
  {
 TH0=-7000/256;
 TL0=-7000/256;
          }
     else
{
 TH0=-T/256;
 TL0=-T/256;
       }
 maichong++;  //脉冲量计数加1   

 PUL=!PUL;  //脉冲输出反相

     }

 

 敬请大家分析!

[此贴子已经被admin于2008-10-4 1:34:58编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:475888 发表于 2019-2-28 14:24 | 只看该作者
你好,能分享这个程序给新萌的我吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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