/******************************************************
**四相步进电机驱动范例,与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); }
设计资源 培训 开发板 精华推荐
- 使用 NXP Semiconductors 的 TEA1733 的参考设计
- 逆变电路
- 使用 Diodes Incorporated 的 ZXSC380 的参考设计
- ADR291GRUZ 低噪声、微功率 2.5V 精密电压基准的典型应用电路,具有开尔文连接的优势
- 使用 STMicroelectronics 的 L6562 的参考设计
- TB2924AFG D 类、20W x 2ch (BTL) 低频功率放大器的典型应用
- 使用 Semtech 的 SC1552 的参考设计
- IRDC3847-PVCCIO,用于 IR3847 同步降压转换器 600KHZ 的评估套件。先进的集成负载点 DC-DC 稳压器
- DC_5V/3V3_TWO Channel
- 【涂鸦智能】zigbee温湿度传感器