您的位置 首页 发布

根据PIC单片机对全功能步进电机的操控规划

基于PIC单片机对全功能步进电机的控制设计-//适合3ePIC实验板。

#include //包含单片机内部资源预定义

#include

void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒

void run(); //步进电机运行控制函数

void stop(); //步进电机停止函数

//合适3ePIC试验板。

#include //包括单片机内部资源预界说

#include

void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒

void run(); //步进电机运转操控函数

void stop(); //步进电机中止函数

根据P%&&&&&%单片机对全功能步进电机的操控规划

//界说变量

unsigned int count; //延时函数用计数器

staTIc int step_index; //步进索引数,值为0-7

staTIc bit turn; //步进电机滚动方向

staTIc bit stop_flag; //步进电机中止标志

staTIc int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快

static int steptimecount; //步进电机每步时长倒计数

static unsigned char powertimecount; //步进电机每步已通电时刻计数

void main(void)

{

TRISE2=0;

TRISC2=0;

TRISC0=0;

TRISC1=0;

step_index = 0;

stop_flag = 0;

steptimecount = 0;

stop();//步进电机中止

T0CS=0;//挑选内部指令周期信号为TMR0的时钟

PSA=0;//TMR0运用预分频器

PS2=0;//预分频器分频比1:16

PS1=1;

PS0=1;

T0IF=0;//铲除TMR0中止符号

TMR0=0X65;//TMR0设置初值

T0IE=1;//TMR0中止答应

GIE=1; //大局中止使能

do{

stop_flag=0;

turn = 0;

speedlevel =7;

delay(1000);//延时2.5秒

speedlevel = 3;

delay(1000);

stop_flag=1;

delay(1000);

stop_flag=0;

turn = 1;

speedlevel = 7;

delay(1000);

speedlevel =3;

delay(1000);

stop_flag=1;

delay(1000);

}while(1);

}

//守时器0中止处理

void interrupt clkint(void)

{

TMR0=0X65;//设守时每隔2.5MS中止一次

T0IF=0;//铲除TMR0中止符号

count++;

steptimecount–;

if(powertimecount《=1)//每步最短通电时刻5ms

{

powertimecount++;//未达最大值时加1

}

if(powertimecount==1)

{

stop();

}

else if(steptimecount《=0)

{

powertimecount=0;

if (stop_flag==1)

{

stop();

}

else

{

steptimecount = speedlevel;

run();

}

}

}

void delay(unsigned int endcount)

{

count=0;

do{}while(count}

void run()

{

switch(step_index)

{

case 0:RC2=1;RC0=0;RC1=0;RE2=0;break;

case 1:RC2=1;RC0=1;RC1=0;RE2=0;break;

case 2:RC2=0;RC0=1;RC1=0;RE2=0;break;

case 3:RC2=0;RC0=1;RC1=1;RE2=0;break;

case 4:RC2=0;RC0=0;RC1=1;RE2=0;break;

case 5:RC2=0;RC0=0;RC1=1;RE2=1;break;

case 6:RC2=0;RC0=0;RC1=0;RE2=1;break;

case 7:RC2=1;RC0=0;RC1=0;RE2=1;

}

if (turn==0)

{

step_index++;

if (step_index》7)

step_index=0;

}

else

{

step_index–;

if (step_index《0)

step_index=7;

}

}

void stop()//使步进电机处于停机状况

{

RC2=0;//M1

RC0=0;//M3

RC1=0;//M2

RE2=0;//M4

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/347116.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部