资源简介
//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
代码片段和文件信息
//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
#include
#include
sbit la=P2^0; //定义两相电机的四组线,从板上设计来分配,选择P2口的低四位输出相应的输出也可以反应在LED灯上
//P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相
sbit lb=P2^1;
sbit lc=P2^2;
sbit ld=P2^3;
#define uchar unsigned char
code unsigned int lhj[]={1501001508011005001204003080050100
150120020080140020150130020090050150};
//定义电机动作的参数,每三个数为一组,第一个是方向(1、正转,0、反转)
//第二个是步进量,第三个是转速
unsigned char key();//键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)
unsigned char right(unsigned int Speedunsigned int road); //正转
unsigned char left(unsigned int Speedunsigned int road); //反转
void mDelay(unsigned int DelayTime); //延时函数
void main()
{
uchar i=0;
while(1){
if(key()==0xde){//8的按键按下
for(i=0;i<34;i+=3){//循环输出我们定义好的动作数据
if(lhj[i]) //调入数组,先判断正反转
right(lhj[i+1]lhj[i+2]); //两个参数代表步进量和转速
else
left(lhj[i+1]lhj[i+2]);
if(key()==0xee)//C的按键按下
break;
}
}
}
}
unsigned char right(unsigned int Speedunsigned int road)//两个参数代表步进量和转速
{
//步进节拍:A-AC-C-CB-B-BD-D-DA
while(1){
if(!Speed) //判断步进量走完没?以下都是,每走一步,判断一次
break;
ld=1;
la=0; //a
mDelay(road);//这里的延时就可控制转速
if(!Speed--)
break;
lc=0; //ac
mDelay(road);
if(!Speed--)
break;
la=1; //c
mDelay(road);
if(!Speed--)
break;
lb=0; //cb
mDelay(road);
if(!Speed--)
break;
lc=1; //b
mDelay(road);
if(!Speed--)
break;
ld=0; //bd
mDelay(road);
if(!Speed--)
break;
lb=1; //d
mDelay(road);
if(!Speed--)
break;
la=0; //da
mDelay(road);
Speed--;
}
P3=P3|0x0f;//将四个脚输出置高
}
unsigned char left(unsigned int Speedunsigned int road)//两个参数代表步进量和转速
{
//步进节拍A-AD-D-DB-B-BC-C-CA
while(1){
if(!Speed)//判断步进量走完没?以下都是,每走一步,判断一次
break;
lc=1;
la=0; //a
mDelay(road);
if(!Speed--)
break;
ld=0; //ad
mDelay(road);
if(!Speed--)
break;
la=1; //d
mDelay(road);
if(!Speed--)
break;
lb=0; //db
mDelay(road);
if(!Speed--)
break;
ld=1; //b
mDelay(road);
if(!Speed--)
break;
lc=0; //bc
mDelay(road);
if(!Speed--)
break;
lb=1; //c
mDelay(road);
if(!Speed--)
break;
la=0; //ca
mDelay(road);
Speed--;
}
P3=P3|0x0f;//将四个脚输出置高
}
void mDelay(unsigned int DelayTime) //延时函数
{
unsigned char j=0;
while(DelayTime--){
for(j=0;j<10;j++){}
}
}
unsigned char key()//键盘扫描是否有键按下,这里只扫描一列四个键,其它不用
{
uchar KeyV;
P0=0xfe;
KeyV=P0;
if(KeyV==0xfe)//只扫描一列
return(0);
mDelay(100);
KeyV=P0;
if(KeyV==0xfe)
return(0);
else
return(KeyV);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3147 2008-08-07 21:06 新建文件夹\两相5、6线步进电1.c
文件 3249 2008-09-06 21:01 新建文件夹\两相5、6线步进电2.c
目录 0 2010-06-27 21:51 新建文件夹
----------- --------- ---------- ----- ----
6396 3
- 上一篇:银行家算法的设计与实现 操作系统课程设计
- 下一篇:IC验证的一些理解
相关资源
- VC程序实现了波形显示与FFT算法
- 欧姆龙PLC四层电梯程序
- 老外写的OFDM的C程序,适合有一定基础
- 经典的DSP的C程序和汇编程序库常用例
- 51单片机设计交通灯仿真C程序.rar
- aw60 adc c程序
- 电机抱死-c程序
- 雾化香薰机器源程序代码
- 多线程安全链表操作的C程序
- 基于c51的1602液晶显示字符与浮点数
- 经典内弹道C程序源代码
- AD7793 c程序
- 红绿灯控制PLC程序
- 能运行很好的GPC程序。
- 51单片机频率精确测量C程序
- 机械手程序 及上位机 (51 C程序)
- 基于pic16f1947 和ADM2483、rs485电路发送接
- 万能的BDC程序
- 50HZ陷波器的C程序源码.
- 光电编码器C程序
- 1602LCD显示仿手机键盘按键字符
- 最简洁马走日c程序回溯打印所有能走
- MCP3421 i2c程序
- lms算法自适应滤波器的dsp5402实现c程序
- 低频信号发生器protues仿真与C程序
- 16X16点阵仿真_C程序
- C程序及仿真文件.zip
- 三电平SVpwmC程序
- unicodegbk编码相互转换C程序
- 伺服电机定位的欧姆龙PLC程序
评论
共有 条评论