单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 226|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
SSX00 发表于 2020-3-31 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /******************************************************
  2. **四相步进电机驱动范例,与LPC2148核心板接线如下**
  3. **P1.16--------------In1**
  4. **P1.17--------------In2**
  5. **P1.18--------------In3**
  6. **P1.19--------------In4**
  7. ******************************************************/
  8. #include <LPC214X.H>

  9. #include "Timer.h"
  10. #include "type.h"

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

  13. INT8U direction;

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

  15. int main()
  16. {
  17.         INT8U i;
  18.         init_timer();           //定时器初始化
  19.         IO1DIR = 0x01ff0000;//P1.16-P1.24 使能输出

  20.         while(1)
  21.         {
  22.                 IO1SET |= LED;
  23.                 if(! (IO0PIN & key))
  24.                 {
  25.                         delayms(20);        //延时去抖动
  26.                         if(! (IO0PIN & key))
  27.                                 direction ^= 0xff; //方向取反
  28.                         while(! (IO0PIN & key));
  29.                 }
  30.                 IO1PIN = (IO1PIN & 0xff00ffff) | (INT32U)(phasic_tab[i] << 16); //输出脉冲
  31.                 if(direction)
  32.                 {  //正转
  33.                         
  34.                         if(++i > 7)
  35.                                 i = 0;
  36.                 }
  37.                 else
  38.                 {  //反转
  39.                         
  40.                         if(--i > 7 )
  41.                           i = 7;
  42.                 }
  43.                 IO1CLR |= LED;
  44.                 delayms(10); //延时的长短可控制电机转速,不能超过步进电机的最高运行频率
  45.                              //并且起动的时候不能超过步进电机的最高起动频率,否则会失步
  46.         }
  47. }
复制代码
  1. //文件名:Time.c
  2. //功能:  定时器Timer0的初始化以及定时器中断函数和延时函数

  3. #include <LPC214X.H>                        

  4. #include "type.h"


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

  6. /************************************************************/
  7. /*  函数名称 :   Tick                                       */
  8. /*  函数功能 : 定时器中断函数,每进入一次中断,timeval加1  */
  9. /*  参数     :  无                                          */
  10. /*  返回值   :  无                                          */
  11. /*----------------------------------------------------------*/

  12. void Tick (void) __irq  
  13. {
  14.           ++timeval;
  15.           T0IR        = 1;                            // 清除中断标志
  16.           VICVectAddr = 0;                            // 对VICVectAddr执行写操作,通知VIC中断处理结束
  17. }


  18. /**********************************************************************/
  19. /*  函数名称 :   init_timer                                           */
  20. /*  函数功能 : 定时器timer0的初始化,包括计数初值,设置中断优先级等  */
  21. /*  参数     :  无                                                    */
  22. /*  返回值   :  无                                                    */
  23. /*--------------------------------------------------------------------*/
  24. void init_timer (void)
  25. {
  26.           T0MR0 = 15000;//1ms的计数初值,当前处理器的时钟频率为12 * 5 = 60M,具体设置见startup.s
  27.           T0MCR = 3;    // 设置T0MR0匹配后复位T0TC,并产生中断标志
  28.           T0TCR = 1;    //启动定时器                              
  29.           VICVectAddr0 = (INT32U)Tick;//设置中断服务程序的地址         
  30.           VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0                    
  31.           VICIntEnable |= 1 << 0x00000004;//timer0中断使能                 
  32. }


  33. /**********************************************************************/
  34. /*  函数名称 :  delayms                                               */
  35. /*  函数功能 : 延时函数                                                                                          */
  36. /*  参数     :  ms,单位ms(毫秒)                                    */
  37. /*  返回值   :  无                                                    */
  38. /*--------------------------------------------------------------------*/
  39. void delayms (unsigned int ms)  
  40. {                             
  41.           unsigned long i;
  42.           i = timeval;
  43.           while ((i + ms) != timeval);                  
  44. }
复制代码

全部资料51hei下载地址:
浙江体彩6+1玩法L293电机驱动模块介绍.rar (764.57 KB, 下载次数: 1)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51hei电子论坛 管理员QQ:125739409;技术交流QQ群174280170

Powered by 单片机教程网

快速回复 返回顶部 返回列表