- /******************************************************
- **四相步进电机驱动范例,与LPC2148核心板接线如下**
- **P1.16--------------In1**
- **P1.17--------------In2**
- **P1.18--------------In3**
- **P1.19--------------In4**
- ******************************************************/
- #include <LPC214X.H>
- #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 <LPC214X.H>
- #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);
- }
复制代码
全部资料51hei下载地址:
L293电机驱动模块介绍.rar
(764.57 KB, 下载次数: 13)
|