PIC入门4,全功能步进电机实验

发布者:konglingdeyuan最新更新时间:2016-10-31 来源: eefocus关键字:PIC入门  步进电机 手机看文章 扫描二维码
随时随地手机看文章
//适合3ePIC实验板。

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

//声明本模块中所调用的函数类型
void delay(unsigned int endcount);  //延时函数,延时为endcount*0.5毫秒
void run();             //步进电机运行控制函数
void stop();             //步进电机停止函数

//定义变量
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
  }

关键字:PIC入门  步进电机 引用地址:PIC入门4,全功能步进电机实验

上一篇:PIC入门5,1602ALCD显示实验
下一篇:PIC入门3,SPI通信和串口调试实验

推荐阅读最新更新时间:2024-03-16 15:18

直流伺服电机、交流伺服电机和步进电机的优缺点
  为了适应数字控制的发展趋势,运动控制系统中大多采用步进电机、直流电机或全数字式交流伺服电机作为执行电动机。虽然三者在控制方式上相似,但在使用性能和应用场合上存在着的差异。现大兰电机小编就三者的优点用途作一比较。   交流伺服电机   优点:   ⑴无电刷和换向器,因此工作可靠,对维护和保养要求低。   ⑵定子绕组散热比较方便。   ⑶惯量小,易于提高系统的快速性。   ⑷适应于高速大力矩工作状态。   直流伺服电机   优点:   直流伺服电机特指直流有刷伺服电机——电机成本高结构复杂,启动转矩大,调速范围宽,控制容易,需要维护,但维护不方便(换碳刷),会产生电磁干扰,对环境有要求。因此它可以用于对成本敏感的普通工业和民用场合
[嵌入式]
基于嵌入式Linux的步进电机驱动程序设计
  1.引言   随着嵌入式技术的飞速发展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从而大幅度提高了处理能力,方便了设计开发。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品 。   嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU为
[工业控制]
步进电机细分控制
       1 步进电机        步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,即给一个脉冲,步进电机就转一个角度,因此非常合适单片机控制,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,电机则转过一个步距角,同时步进电机只有周期性的无累积误差,精度高。       步进电动机有如下特点:        1)步进电动机的角位移与输入脉冲数严格成正比。因此,当它转一圈后,没有累计误差,具有良好的跟随性。        2)由步进电动机与驱动电路组成的开环数控系统,既简单、廉价,又非常可靠,同时,它也可以与角度反馈环节组成高性能的闭环数控系统。
[嵌入式]
基于51单片机的步进电机控制性系统
功能: 控制步进电机实现加速、减速、正转,反转,停止,并用LCD12864显示相关信息。 程序运行图: 仿真原理图: 部分程序: #define KEY_GLOBAL 1 #include Key.h static uchar keyValueBuff; //读取键值的缓冲区 static uchar keyValueOld; //前一次的键值 static uchar keyValueTemp; //键值中间交换变量 static uint stillTimes; //键按下保持次数 static uint stillTimesMax; static uchar get_data_1_count(uchar n
[单片机]
步进电机与驱动器常见问题解答
驱动器细分后将对电机的运行性能产生质的飞跃,但是这一切都是由驱动器本身产生的,和电机及控制系统无关。在使用时,用户唯一需要注意的一点是步进电机步距角的改变,这一点将对控制系统所发的步进信号的频率有影响,因为细分后步进电机的步距角将变小,要求步进信号的频率要相应提高。以1.8度步进电机为例:驱动器在半步状态时步距角为0.9度,而在十细分时步距角为0.18度,这样在要求电机转速相同的情况下,控制系统所发的步进信号的频率在十细分时为半步运行时的5倍    什么是保持转矩(HOLDING TORQUE)?    驱动器细分后将对电机的运行性能产生质的飞跃,但是这一切都是由驱动器本身产生的,和电机及控制系统无关。在使用时,用户唯一需要注意的一
[嵌入式]
基于GD32-RS232接口一体化步进电机驱动控制器
  本应用旨在引导一种模块化(module)设计思想,将传统步进电机的控制器(controller)、驱动器(Driver)、运动算法(Arithmetic)三合一,使其成为一个模块,或者称其为Black Box,使用者可以不用了解Box内的电路设计,程序架构,只需关心接口(interface)即可,这种接口可以适应多种主机(Host)控制,诸如PC,MCU,FPGA,PLC之类。Black Box替用户完成大于95%的工作量,使用者只需完成少于5%的工作量,即可快速完成平台的系统搭建。   同时本应用也很好的验证了GD32的系统抗干扰性和稳定性,MCU和Driver之间没有任何隔离,电机启停瞬间没有丝毫影响MCU工作。设计之初
[嵌入式]
步进电机的噪音从何而来 如何使步进电机完全静音
步进电机广泛用于自动化、数字制造、医疗和光学设备等几乎所有类型的移动应用中。 步进电机的优点是成本相对较低,在不使用变速箱的情况下在静止和低速时具有高扭矩,以及对定位任务的固有适用性。与三相无刷电机和伺服驱动器相比,步进电机不一定需要复杂的控制算法或位置反馈来进行换向。 步进器的缺点是噪音很大,即使在低速或静止时也是如此。步进电机有两个主要的振动源:步进分辨率,以及斩波器和脉冲宽度调制 (PWM) 模式导致的副作用。 步进分辨率和微步 典型的步进电机有 50 个磁极,可实现 200 个完整步长,每个步距角为 1.8°,可实现 360° 的完整机械旋转。但也有步数较少的步进电机,甚至高达 800 个全步。最初,这些电机用
[嵌入式]
<font color='red'>步进电机</font>的噪音从何而来 如何使<font color='red'>步进电机</font>完全静音
基于GAL器件的步进电机控制器的研究与设计
摘要:介绍了利用阵列逻辑器件GAL16V8对三相六拍步进电机实现控制的方法及其电路设计。通过计算机编程器对GAL进行编程,可以满足各种控制要求。该电路简单,工作稳定可靠,编程灵活方便。 关键词:通用阵列逻辑器件 步进电机 GAL16V8 三相六拍 步进电机广泛应用于对精度要求比较高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。分散器件组成的环形脉冲分配器体积比较大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved