双步进电机控制程序 - 范文中心

双步进电机控制程序

03/06

#include

#define uchar unsigned char

#define uint unsigned int

int num=0;

uchar flag_1=0,flag_2=0,flag_3=0;

int i=0,ii=0,iii=0,iiii=0;

uint count=0,jd=1;

sbit pwm=P3^5;

uchar code table_1[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; // 反转

uchar code table_2[]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; // 正转

void delay(uint t)

{

uint i,j;

for(i=t;i>0;i--)

for(j=80;j>0;j--);

}

void TMOD_init(void)

{

TMOD=0x01;

TH0=(65536-917)/256; //1ms中断初始化

TL0=(65536-917)%256;

EA=1;

ET0=1;

TR0=1;

}

/* 函数功能:步进电机1 转N圈,修改变量t可调整圈数。*/

void motor_1(uint t,uchar tt)

{

uchar i;

uint j,a;

if(tt==1) // 如果Z=1,t代表减速后圈数,就是输出轴转一圈 t=t*43;

else // 如果Z=0,t代表减速前圈数,

t=t;

for(a=0;a

{

for (j=0; j

{

for (i=0; i

{

P0=table_1[i]; //取数据

delay(1); //调节转速

}

}

}

P0=0xff;

flag_1=1;

}

/* 函数功能:步进电机2 转N圈,修改变量t可调整圈数。此函数在中断中运行*/ void motor_2(uint t,uchar tt,uchar z)

{

if(num==1)

{

num=0;

if(i==8) //一个周期转30度

{

i=0;

ii++;

if(ii==12) { ii=0; iii++; //转1圈 (减速前) if(tt==1) { if(iii==43) //转1圈 (减速后)减速比1/43 { iii=0; iiii++; if(iiii==t) //转n圈 { flag_2=0; iiii=0; } } } else { if(iii==t)

flag_2=0;

iii=0;

}

}

}

}

if(z==1) //z=1,正转 P2=table_2[i];

else

P2=table_1[i];

i++;

}

}

void main()

{

TMOD_init();

while(1)

{

switch(flag_1)

{

case 0: //开电机2,印印泥,同时电机1开动 jd=3; //舵机打脚

flag_2=1; //开电机2,正转,直到印到印泥 flag_3=1;

motor_1(1,1); //开电机 //void 圈小圈

//delay(200);

flag_1=1;

break; 圈 (2,1)转两圈 (2,0)转2/43圈

case 1:

flag_2=1; // 开电机2

flag_3=2; //反转

jd=1; //舵机收回

motor_1(1,1); //开电机1

//delay(200);

flag_1=2; motor_1(uint t,uchar tt) t 圈数 tt 大 //例如(1,1)转一圈 (1,0)转1/43

case 2:

flag_2=1; //开电机2,

flag_3=3; //正转 // motor_1(1,1); //开电机1

delay(500);

flag_1=3;

break;

case 3:

flag_2=1; // 开电机2

flag_3=4; //反转

delay(100);

motor_1(1,1); //开电机1

//delay(200);

flag_1=0;

break;

}

}

}

void T0_time() interrupt 1

{

TH0=(65536-917)/256;

TL0=(65536-917)%256;

if(flag_2==1)

{

num++;

switch(flag_3)

{

case 0:

P2=0xff;

break;

case 1:

//1ms中断服务,步进电机2控制

motor_2(30,0,1); break; 正反转

case 2:

motor_2(30,0,0); break;

case 3:

motor_2(30,0,1); break;

case 4:

motor_2(30,0,0); break; }

}

else

P2=0xff;

}

//正转 //void motor_2(uint t,uchar tt,uchar z) t 圈数 tt 大圈小圈 z //反转


相关内容

  • 关于单片机的毕业论文
    分 类 号: 单位代码: 临沂大学 业论文(设计) 基于单片机的步进电机控制系统设计 姓 名 ******* 学 号 ************** 年 级 ***** 专 业 ************* 系 (院) ******* 指导教师 ...
  • 长安福特招聘试题
    关键词: 变频器.控制方式.工作原理 近年来,随着电力电子技术.微电子技术及大规模集成电路的发展,生产工艺的改进及功率半导体器件价格的降低,变频调速越来越被工业上所采用.如何选择性能好的变频其应用到工业控制中,是我们专业技术人员共同追求的目 ...
  • 步进电机常见问题解答
    步进电机常见问题解答 发布日期:2007-09-11 信息来源:技术支持部 点击次数:2541 1.什么是步进电机? 步进电机是一种将电脉冲转化为角位移的执行机构.当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角 ...
  • 交流伺服电机
    交流伺服电机 交流伺服电机 伺服电机内部的转子是永磁铁,驱动器控制的U/V/W三相电形成电磁场, 转子在此磁场的作用下转动,同时电机自带的编码器反馈信号给驱动器,驱动器根据反馈值与目标值进行比较,调整转子转动的角度.伺服电机的精度决定于编码 ...
  • 伺服电机的工作原理
    伺服电机内部的转子是永磁铁,驱动器控制的U /W三相电形成电磁场,转子在此磁场的作用下转动,同时电机自带的编码器反馈信号给驱动器,驱动器根据反馈值与目标值进行比较,调整转子转动的角度.伺服电机的精度决定于编码器的精度(线数). 什么是伺服电 ...
  • 直流步进电机综合控制系统设计
    南昌大学实验报告 学生姓名: 胡文松 学 号: 6103413007 专业班级: 生物医学工程131班 实验类型:□ 验证 ■综合 □设计 □ 创新 实验日期: 实验成绩: 综合实验一 直流.步进电机综合控制系统设计 一.实验目的 1.初步 ...
  • 步进电机的单片机控制外文翻译
    附录2:英文资料及其中文翻译 Stepper motor is an electrical pulse will be converted into angular displacement of the implementing agen ...
  • 新能源电机行业梳理
    新能源驱动电机行业梳理 目 录 新能源驱动电机行业梳理 ............................................................................................ ...
  • 双馈电机运行原理
    变速恒频双馈风力发电机运行原理 风力发电以其无污染和可再生性,日益受到世界各国的广泛重视,近年来得到迅速发展.采用双馈电机的变速恒频风力发电系统与传统的恒速恒频风力发电系统相比具有显著的优势,如风能利用系数高,能吸收由风速突变所产生的能量波 ...
  • 数控伺服系统简介
    目录 目录................................................................................................................... ...