单片机
返回首页

基于PIC单片机对全功能步进电机的控制设计

2020-01-18 来源:elecfans

//适合3ePIC实验板。

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

#include

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

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

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

基于PIC单片机对全功能步进电机的控制设计

//定义变量

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)

{

ADCON1=0B00000110;//设置RE端口为普通I/O口

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

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章