搜索
bottom↓
回复: 7

请教:AT89S52+L297+L298+两相六线步进电机 的程序

[复制链接]

出0入0汤圆

发表于 2010-2-6 15:56:46 | 显示全部楼层 |阅读模式
使用AT89S52+L297+L298控制步进电机,在步进电机的起点和返回点各有一个光电开关,另外在外面还有一光电开关是用来触发电机起动的。

        动作是:系统通电,电机没有动作----光电开关给一个“1”------电机正转运行-------运行到返回点----返回点的光电开关给一个“1”--------电机反转-----反转回到起点-----起点的光电开给一个“1”-----电机停止。直到下一个触发信号到来,再有动作。

1,在这里,所有的光电开关是用C集电极输出信号,常态是开关通的,通过E发射极接地,给P口一个“0”。

2,有一个难点,需要编程解决:在返回起点,光电开关会给停止信号,而且电机还在起点位置,这个信号就一直存在,会和启动的光电开关信号有冲突。

3,各个接口在AT89S52上的定义是:启动光电开关(P2.0),起点光电开关(P2.1),返回点光电开关(P2.2),ENABLE-MCU(P.3),RST-MCU(P2.4),CW/CCW-MCU(P2.5),HALF/FULL-MUC(P2.6),CLK-MCU(P2.7)。

4,由于有L297的存在,单片机不需要考虑相顺序的问题,在编程时,内容少些。

以上的编程有那位高手能帮下,C或汇编都行。  祝各位新春快乐!!!!!!!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2010-2-6 21:36:14 | 显示全部楼层
正在看有关的参考程序,希望有人指点下。

出0入0汤圆

发表于 2010-2-6 22:10:57 | 显示全部楼层
这个芯片可以在片内实现该功能

(原文件名:3.gif)


(原文件名:6.gif)

点击此处下载 ourdev_532835.pdf(文件大小:355K) (原文件名:TMC223_ShortSpec.pdf)

出0入0汤圆

 楼主| 发表于 2010-2-7 19:39:01 | 显示全部楼层
这个电路需要外部时钟,有谁知道这个芯片的成品板那里有?

出0入0汤圆

发表于 2010-2-7 20:04:38 | 显示全部楼层
if(P2.0==1)//启动信号为高
{
   让它启动(具体代码不知道)
}
else if(P2.1==1)起始位置的停止信号为高
{
   让它停止(具体代码不知道)
}


不知是我想的太简单还是你想的太复杂

出0入0汤圆

 楼主| 发表于 2010-2-7 22:35:23 | 显示全部楼层
谢谢楼上,能否在下面的程序修改:
----------------------------------------------





// 控制线接到MCU的P1口 独立键盘的接口接到MCU的P2口。
// KEY0- 右运动一步; KEY1- 左运动一步;
// KEY2- 右运动200步; KEY3- 左运动200步
// KEY4- 右运动1000步;
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit en=P1^0;                  // 定义P1.0口
sbit rst=P1^1;                 // 定义P1.1口
sbit ccw=P1^2;                 // 定义P1.2口
sbit hf=P1^3;                  // 定义P1.3口
sbit clk=P1^4;                 // 定义P1.4口
sbit k1=P1^5;                  // 定义P1.5口
sbit k2=P1^6;                  // 定义P1.6口


void ShortDelay(void)
{ uchar x,y;
  for(x=0;x<5;x++)
     for(y=0;y<125;y++)
              _nop_();
  return;
}


void outclk(uint a)
{  uint i,j;

while(a--)
    { en=1;                  // 定义P1.0口
      rst=1;                 // 定义P1.1口
      //if((k1&k2)!=0)         // K1,K2限位置判断
       // {
                clk=1;
         for(i=150;i>0;i--)           //200
         for(j=150;j>0;j--);           //200
         clk=0;  
       // }
     // else {rst=1;en=0;}  
    }   

}

uchar  key(void)
{uchar key_num;

   if( ( P2 & 0x3f) != 0x3f )        //判断按键
   {
       ShortDelay();                //消除抖动
       if( ( P2 & 0x3f ) != 0x3f )
           {
         
          switch ( P2 & 0x3f )             //将按键码转换成键值
          {  
             case  0x3e: return  key_num=01;  
             case  0x3d: return  key_num=02;
             case  0x3b: return  key_num=03;
             case  0x37: return  key_num=04;
             case  0x2f: return  key_num=05;
             case  0x1f: return  key_num=06;
             default :   return  key_num=00;
          }
           }
          
   }
   return key_num;
}


void main(void)
{ uchar b;

while(1)
{
  
   b= key();
   switch(b)
      {                //4步走1CM设定走5Cm 半应该是200的为了调整误差所以少4步 (10CM为多8步)
        case 00:rst=1;break;//0
        case 01:ccw=1; outclk(1);break;//1    右运动1步
        case 02:ccw=0; outclk(1);break;//2    左运动1步
        case 03:ccw=1; outclk(200);break;//3          右运动1CM
        case 04:ccw=0; outclk(200);break;//4   左运动1CM
        case 05:ccw=1; outclk(1000);break;//5   右运动5CM
        //case 06:ccw=0; outclk(1000);break;//6  左运动5CM
        default:break;
          }
}
}

出0入0汤圆

发表于 2010-2-8 10:25:26 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2010-2-25 11:03:53 | 显示全部楼层
回复【3楼】cfydev
这个电路需要外部时钟,有谁知道这个芯片的成品板那里有?
-----------------------------------------------------------------------

回复【4楼】yahooxiaozi
if(P2.0==1)//启动信号为高
{
   让它启动(具体代码不知道)
}
else if(P2.1==1)起始位置的停止信号为高
{
   让它停止(具体代码不知道)
}
不知是我想的太简单还是你想的太复杂
-----------------------------------------------------------------------
按这个来做,怎样解决-----在返回起点,光电开关会给停止信号(P2.1==1),而且电机还在起点位置,这个信号就一直存在,会和启动的光电开关信号(P2.0==1)有冲突.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 23:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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