LPC2148+L293电机驱动模块源程序

发布者:eaff86最新更新时间:2020-07-12 来源: 51hei关键字:LPC2148  L293  电机驱动模块 手机看文章 扫描二维码
随时随地手机看文章

/******************************************************

**四相步进电机驱动范例,与LPC2148核心板接线如下**

**P1.16--------------In1**

**P1.17--------------In2**

**P1.18--------------In3**

**P1.19--------------In4**

******************************************************/

#include


#include "Timer.h"

#include "type.h"


#define key  (1 << 16)                //P0.16接按键,控制电机正反转

#define LED  (1 << 24)      //P1.24控制LED


INT8U direction;


const INT8U phasic_tab[]={0x01,0x03,0x02,0x05,0x04,0x0c,0x08,0x09};        //四相八拍


int main()

{

        INT8U i;

        init_timer();           //定时器初始化

        IO1DIR = 0x01ff0000;//P1.16-P1.24 使能输出


        while(1)

        {

                IO1SET |= LED;

                if(! (IO0PIN & key))

                {

                        delayms(20);        //延时去抖动

                        if(! (IO0PIN & key))

                                direction ^= 0xff; //方向取反

                        while(! (IO0PIN & key));

                }

                IO1PIN = (IO1PIN & 0xff00ffff) | (INT32U)(phasic_tab[i] << 16); //输出脉冲

                if(direction)

                {  //正转

                        

                        if(++i > 7)

                                i = 0;

                }

                else

                {  //反转

                        

                        if(--i > 7 )

                          i = 7;

                }

                IO1CLR |= LED;

                delayms(10); //延时的长短可控制电机转速,不能超过步进电机的最高运行频率

                             //并且起动的时候不能超过步进电机的最高起动频率,否则会失步

        }

}

复制代码

//文件名:Time.c

//功能:  定时器Timer0的初始化以及定时器中断函数和延时函数


#include                         


#include "type.h"



unsigned long volatile timeval;  //延时用的全局变量


/************************************************************/

/*  函数名称 :   Tick                                       */

/*  函数功能 : 定时器中断函数,每进入一次中断,timeval加1  */

/*  参数     :  无                                          */

/*  返回值   :  无                                          */

/*----------------------------------------------------------*/


void Tick (void) __irq  

{

          ++timeval;

          T0IR        = 1;                            // 清除中断标志

          VICVectAddr = 0;                            // 对VICVectAddr执行写操作,通知VIC中断处理结束

}



/**********************************************************************/

/*  函数名称 :   init_timer                                           */

/*  函数功能 : 定时器timer0的初始化,包括计数初值,设置中断优先级等  */

/*  参数     :  无                                                    */

/*  返回值   :  无                                                    */

/*--------------------------------------------------------------------*/

void init_timer (void)

{

          T0MR0 = 15000;//1ms的计数初值,当前处理器的时钟频率为12 * 5 = 60M,具体设置见startup.s

          T0MCR = 3;    // 设置T0MR0匹配后复位T0TC,并产生中断标志

          T0TCR = 1;    //启动定时器                              

          VICVectAddr0 = (INT32U)Tick;//设置中断服务程序的地址         

          VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0                    

          VICIntEnable |= 1 << 0x00000004;//timer0中断使能                 

}



/**********************************************************************/

/*  函数名称 :  delayms                                               */

/*  函数功能 : 延时函数                                                                                          */

/*  参数     :  ms,单位ms(毫秒)                                    */

/*  返回值   :  无                                                    */

/*--------------------------------------------------------------------*/

void delayms (unsigned int ms)  

{                             

          unsigned long i;

          i = timeval;

          while ((i + ms) != timeval);                  

}


关键字:LPC2148  L293  电机驱动模块 引用地址:LPC2148+L293电机驱动模块源程序

上一篇:ARM-Linux开发与MCU开发有何不同?
下一篇:ARM流水灯实验 LPC213芯片

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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