×

多种相位驱动综合实验程序

消耗积分:0 | 格式:rar | 大小:0.1 MB | 2017-09-06

分享资料个

1、1-2相驱动实验

/* ch10-3-3.c -   1-2相驱动实验 */
#include   // 包含reg51.h档 
#define  OUTPUT    P1 // 定义输出埠为P1
/* 1-2相驱动激励信号阵列 */
char code excite[]={0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09}; 
unsigned int times=50;  // 宣告延迟时间变数( 5ms) 
void step_rst(void);  // 宣告定位函数 
void delay5ms(int);   // 宣告延迟函数 
main()      // 主程式 
{ OUTPUT=0;    // 关闭输出 
 step_rst();    // 定位 
 delay5ms(200);   // 暂停1秒钟 
 while (1)    // while回圈 
  step_rst();   // 运转 
}       // 结束主程式 
//===================================================
void step_rst(void)   // 定位函数开始 
{ char i;     // 宣告变数 
 for(i=0;i<8;i++)  // 输出8个信号 
 { OUTPUT=excite[i]; // 输出激磁信号 
  delay5ms(times); // 延迟0.25秒 
 }      // 结束 
}
//===================================================
void delay5ms(int x)   // 延迟函数开始 
{ int i,j;      // 宣告变数 
 for(i=0;i   for(j=0;j<600;j++); } // j回圈 

2、单相驱动实验

 
/* ch10-3-1.c - 1相驱动实验 */
//利用delay5mDELAY子程序(5ms times), 产生驱动信号 
//由P1输出 速度为 1/(5ms timers) 步/秒 
#include   // 包含reg51.h档 
#define  OUTPUT  P1 // 定义输出埠为P1
unsigned int times=50; // 宣告延迟时间变量( 5ms) 
unsigned char excite; // 宣告激磁变量 
void step_rst(void); // 宣告定位函数 
void delay5ms(int);  // 宣告延迟函数 
//=====主程序======================================
main()    // 主程序开始 
{ OUTPUT=0;  // 关闭输出 
 step_rst();  // 定位 
 while (1)  // while回圈 
 { step_rst(); // 运转 
 }    // while回圈结束 
}     // 结束主程序 
//======定位函数========================================
void step_rst(void)    // 定位函数开始 
{ char i;      // 宣告变量 
 excite=1;     // 激磁初值 
 for(i=0;i<4;i++)   // 输出四个信号 
 { OUTPUT=excite;   // 输出激磁信号 
  delay5ms(times);  // 延迟0.25秒 
  excite<<=1;    // 左移,下一个激磁 
 }       // 结束 
}
//=======延迟函数=====================================
void delay5ms(int x)   // 延迟函数开始 
{ int i,j;       // 宣告变量 
 for(i=0;i   for(j=0;j<600;j++); } // j回圈 
 

3、双相驱动实验

/* ch10-3-2.c - 2相驱动实验 */
//利用timer中断子程序(0.05秒 times), 产生驱动信号 
//由P1输出 
//速度为 1/(0.05秒 timers) 步/秒 
//=================================================
#include   // 包含reg51.h档  
#define  OUTPUT   P1 // 定义输出埠为P1 
/* 2相驱动激励信号阵列 */
char code excite[]={ 0x03, 0x06, 0x0c, 0x09}; 
unsigned char times=50; // 宣告重复数( 5ms)
unsigned char counts=50;// 宣告重复变量(=times) 
T_H=(65536-5000)/256; // 宣告计时量之高八位元 
T_L=(65536-5000)%256; // 宣告计时量之低八位元 
unsigned char i=0;  // 宣告变量 
main()     // 主程序 
{ OUTPUT=0;   // 关闭输出 
 IE=0x82;   // 启用Timer 0
 TMOD=0x01;   // 设定为mode 1
 TH0=T_H;   // 填入计时量之高八位元 
 TL0=T_L;   // 填入计时量之低八位元 
 TR0=1;    // 启动Timer 0 
 while (1);   // 停滞 
}      // 结束主程序 
//===================================================
void timer0(void) interrupt 1 // Timer 0中断子程序开始 
{ TH0=T_H;     // 填入计时量之高八位元 
 TL0=T_L;     // 填入计时量之低八位元 
 if (--counts==0)   // 判断次数 
 { OUTPUT=excite[i];  // 输出 
  i++;     // 下一个信号 
  if (i==4) i=0;   // 如果超过4组,则从头开始 
  counts=times;  }  // 重填 
}        // Timer 0中断子程序结束 
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(1)
发评论
951204089 2017-11-29
0 回复 举报
谢谢 收起回复

下载排行榜

全部1条评论

快来发表一下你的评论吧 !