登录
首页 单片机论坛
回帖 发帖
正文

主题:单片机C语言控制直流步进马达

点击:3142 回复:8

不知道我为什么不能传压缩文件,需要KEIL 源代码的留下邮箱。
//两相5、6线步进电机,分为四拍和八拍,
//八拍:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
/*主程序***********************************************************/
void main()
{
//这里只给出正传程序,反转程序只要把正转脉冲程序反顺序就可以了。
//实际使用中,运行:控制延时由慢到快;停止:控制延时由快到慢。
while(1)
 {
 
//如果控制方式为2相4拍,一圈是200个脉冲。那一个脉冲是1.8度。
//如果电机连接机械运行一圈是100mm,那一个脉冲是0.5mm。
//如果你要电机运行248mm,知道给几个脉冲了吧?如果不知道安就撞墙了。
if(P1_0==0)Right2(800,12); //P1_0按下,电机运行800个脉冲。12是延时,数越大速度就越慢。
else P0=0x0F;//停止后将四个脚输出置高
}
}
源码:http://blog.gkong.com/download.aspx/2009213192034944.rar?file=uploadfile3/2009213192034944.rar
说明文档:http://blog.gkong.com/download.aspx/200921319219198.pdf?file=uploadfile3/200921319219198.pdf
http://blog.gkong.com/download.aspx/2009213191918946.jpg?file=uploadfile3/2009213191918946.jpg
最后修改:2009-2-13 20:02:58
09-02-13 19:45
//QQ:228939191.
//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
//#include
#include "STC89C52.H"
#include
//定义两相电机的四组线,
sbit LA1=P0^0;  //为 A相
sbit LB1=P0^1;  //为 B相
sbit LA2=P0^2;  //为/A相
sbit LB2=P0^3;  //为/B相
#define uchar unsigned char
 
void mDelay(unsigned int DelayTime);  //延时函数
//2相4拍
/************************************************************************************/
//两个参数代表步进步数和转速
void Right1(unsigned int BuShu,unsigned int SuDu)
{
//步进节拍:A-AC-C-CB-B-BD-D-DA
while(1)
{
  LA1=0;LB1=1;LA2=1;LB2=1;  
  mDelay(SuDu); //这里的延时就可控制转速
  if(!BuShu--)break; //判断步进量走完没?以下都是,每走一步,判断一次
 
  LA1=0;LB1=0;LA2=1;LB2=1;
mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=0;LA2=1;LB2=1;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=0;LA2=0;LB2=1;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=1;LA2=0;LB2=1;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=1;LA2=0;LB2=0;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=1;LA2=1;LB2=0;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=0;LB1=1;LA2=1;LB2=0;
  mDelay(SuDu);
if(!BuShu--)break;
}
// P0=0xFF;
}
//2相4拍
/************************************************************************************/
void Right2(unsigned int BuShu,unsigned int SuDu)
{
//步进节拍:A1B1-B1A2-A2B2-B2A1
while(1)
{
  LA1=0;LB1=0;LA2=1;LB2=1;
  mDelay(SuDu);//这里的延时就可控制转速
  if(!BuShu--)break;
 
  LA1=1;LB1=0;LA2=0;LB2=1;
mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=1;LB1=1;LA2=0;LB2=0;
  mDelay(SuDu);
  if(!BuShu--)break;
 
  LA1=0;LB1=1;LA2=1;LB2=0;
  mDelay(SuDu);
  if(!BuShu--)break;
}

}  
/************************************************************************************/
void mDelay(unsigned int DelayTime)  //延时函数
{  
unsigned char j=0;
while(DelayTime--)
{
  for(j=0;j<20;j++){}
  }
}
/************************************************************************************/
void main()
{

while(1)
{
 
//如果控制方式为2相4拍,一圈是200个脉冲。那一个脉冲是1.8度。
//如果电机连接机械运行一圈是100mm,那一个脉冲是0.5mm。
//如果你要电机运行248mm,知道给几个脉冲了吧?如果不知道俺就撞墙了。
if(P1_0==0)Right2(800,12); //P1_0按下,电机运行800个脉冲。12是延时,数越大速度就越慢。
else P0=0x0F;//停止后将四个脚输出置高
}
}
最后修改:2009-2-13 19:55:20
09-02-13 19:54
楼上的好强啊   我好羡慕啊  能不能叫我学单片机啊
09-04-09 17:14
我的剩余有限!
你自己买几本书、买块有网站论坛的学习板,自己学习吧,
09-04-10 22:58
给我发一份吧,谢谢楼主了。peihongjie@163.com
09-04-19 08:59
为什么老是说我没登陆不能下载啊?我已经登陆了啊!
09-04-29 19:39
我想要直流电机的 我的邮箱zhangguodong1111@yahoo.com.cn
感谢楼主分享 谢谢
09-05-06 19:52
没有直流电机的。很简单,自己写写。
09-05-12 08:02
学习了
10-07-13 15:08

工控新闻

更多新闻资讯