3858|1

7514

帖子

18

TA的资源

五彩晶圆(高级)

楼主
 

LPC1500体验+SCT_3、28byj步进电机 [复制链接]

本帖最后由 freebsder 于 2014-8-15 22:34 编辑

图就不上了,驱动某宝上买的,uln2003a+28bjy,有类似设备的朋友可以试试,没设备的看了痒痒不如不看。控制板就lpcxpresso1549 那,sct out引脚用的sct0 的 out0-3, 配置和原理图上的一样, 具体见 app_setup_pin。占空比和频率的调整只需要改变对应的MATCHREL/MATCH即可。

主函数:使能sct,初始化引脚,lpcopen挺方便,就不折腾寄存器了。
  1. /*
  2. ===============================================================================
  3. Name        : pwm.c
  4. Author      : $(author)
  5. Version     :
  6. Copyright   : $(copyright)
  7. Description : main definition
  8. ===============================================================================
  9. */

  10. #if defined (__USE_LPCOPEN)
  11. #if defined(NO_BOARD_LIB)
  12. #include "chip.h"
  13. #else
  14. #include "board.h"
  15. #endif
  16. #endif

  17. #include <cr_section_macros.h>

  18. // TODO: insert other include files here
  19. #include "sct_fsm.h"

  20. // TODO: insert other definitions and declarations here
  21. #define SCT_PWM                    LPC_SCT0 /* Use SCT0 for PWM */
  22. #define SCT_PWM_RATE                   1000000        /* PWM frequency 1MHz */

  23. /* Setup board specific pin muxing */
  24. static void app_setup_pin(void)
  25. {
  26.         /* Enable SWM clock before altering SWM */
  27.         Chip_SWM_EnableFixedPin(SWM_FIXED_SCT0_OUT3);

  28.         Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
  29.         /* Connect SCT output 1 to PIO0_29 */
  30.         Chip_SWM_MovablePinAssign(SWM_SCT0_OUT0_O, 6);
  31.         Chip_SWM_MovablePinAssign(SWM_SCT0_OUT1_O, 29);
  32.         Chip_SWM_MovablePinAssign(SWM_SCT0_OUT2_O, 26);
  33.         Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

  34. }

  35. int main(void) {

  36. #if defined (__USE_LPCOPEN)
  37. #if !defined(NO_BOARD_LIB)
  38.     // Read clock settings and update SystemCoreClock variable
  39.     SystemCoreClockUpdate();
  40.     // Set up and initialize all required blocks and
  41.     // functions related to the board hardware
  42.     Board_Init();
  43.     // Set the LED to the state of "On"
  44.     Board_LED_Set(0, true);
  45. #endif
  46. #endif

  47.     // TODO: insert code here
  48.         Chip_SCTPWM_Init(SCT_PWM);
  49.         Chip_SCTPWM_Stop(SCT_PWM);
  50.         app_setup_pin();
  51.         Chip_SCT_Config(SCT_PWM, SCT_CONFIG_16BIT_COUNTER);
  52.     sct_fsm_init();

  53.     Chip_SCTPWM_Start(SCT_PWM);

  54.     // Force the counter to be placed into memory
  55. // Enter an infinite loop, just incrementing a counter
  56.     while(1) {
  57.         __WFI();
  58.     }
  59.     return 0 ;
  60. }
复制代码


四拍

  1. /* Generated by fzmparser version 2.6 --- DO NOT EDIT! */

  2. /* Uses following resources: */
  3. /* 4 events, 0+0 states, 0 inputs, 4 outputs, 4+0 match regs, 0+0 capture regs */

  4. #include "sct_fsm.h"
  5. #if 1
  6. #define MATACNT (2250)    // slowest
  7. #else
  8. #define MATACNT (4000)    // fastest
  9. #endif

  10. #define MATBCNT (MATACNT*2)
  11. #define MATCCNT (MATACNT*3)
  12. #define MATDCNT (MATACNT*4)

  13. void sct_fsm_init (void)
  14. {
  15.         LPC_SCT0->CTRL_L |= 71 << 5;

  16.         /* MATCH/CAPTURE registers */
  17.         LPC_SCT0->REGMODE_L = 0x0000;         /* L: 4x MATCH, 0x CAPTURE, 12 unused */
  18.         LPC_SCT0->MATCH[0].L = MATACNT;             /* MATA */
  19.         LPC_SCT0->MATCHREL[0].L = MATACNT;
  20.         LPC_SCT0->MATCH[1].L = MATBCNT;             /* MATB */
  21.         LPC_SCT0->MATCHREL[1].L = MATBCNT;
  22.         LPC_SCT0->MATCH[2].L = MATCCNT;             /* MATC */
  23.         LPC_SCT0->MATCHREL[2].L = MATCCNT;
  24.         LPC_SCT0->MATCH[3].L = MATDCNT;             /* MATD */
  25.         LPC_SCT0->MATCHREL[3].L = MATDCNT;

  26. /* OUTPUT registers */
  27. LPC_SCT0->OUT[0].SET = 0x0000000E;        /* Output_pin_0 */
  28. LPC_SCT0->OUT[0].CLR = 0x00000001;
  29. LPC_SCT0->OUT[1].SET = 0x0000000D;        /* Output_pin_1 */
  30. LPC_SCT0->OUT[1].CLR = 0x00000002;
  31. LPC_SCT0->OUT[2].SET = 0x0000000B;        /* Output_pin_2 */
  32. LPC_SCT0->OUT[2].CLR = 0x00000004;
  33. LPC_SCT0->OUT[3].SET = 0x00000007;        /* Output_pin_3 */
  34. LPC_SCT0->OUT[3].CLR = 0x00000008;
  35.   /* Unused outputs must not be affected by any event */
  36. LPC_SCT0->OUT[4].SET = 0;
  37. LPC_SCT0->OUT[4].CLR = 0;
  38. LPC_SCT0->OUT[5].SET = 0;
  39. LPC_SCT0->OUT[5].CLR = 0;
  40. LPC_SCT0->OUT[6].SET = 0;
  41. LPC_SCT0->OUT[6].CLR = 0;
  42. LPC_SCT0->OUT[7].SET = 0;
  43. LPC_SCT0->OUT[7].CLR = 0;
  44. LPC_SCT0->OUT[8].SET = 0;
  45. LPC_SCT0->OUT[8].CLR = 0;
  46. LPC_SCT0->OUT[9].SET = 0;
  47. LPC_SCT0->OUT[9].CLR = 0;

  48. /* Conflict resolution register */

  49. /* EVENT registers */
  50. LPC_SCT0->EVENT[0].CTRL = 0x00001000;     /* L: */
  51. LPC_SCT0->EVENT[0].STATE = 0xFFFFFFFF;
  52. LPC_SCT0->EVENT[1].CTRL = 0x00001001;     /* L: */
  53. LPC_SCT0->EVENT[1].STATE = 0xFFFFFFFF;
  54. LPC_SCT0->EVENT[2].CTRL = 0x00001002;     /* L: */
  55. LPC_SCT0->EVENT[2].STATE = 0xFFFFFFFF;
  56. LPC_SCT0->EVENT[3].CTRL = 0x00001003;     /* L: */
  57. LPC_SCT0->EVENT[3].STATE = 0xFFFFFFFF;
  58.   /* Unused events must not have any effect */
  59. LPC_SCT0->EVENT[4].STATE = 0;
  60. LPC_SCT0->EVENT[5].STATE = 0;
  61. LPC_SCT0->EVENT[6].STATE = 0;
  62. LPC_SCT0->EVENT[7].STATE = 0;
  63. LPC_SCT0->EVENT[8].STATE = 0;
  64. LPC_SCT0->EVENT[9].STATE = 0;
  65. LPC_SCT0->EVENT[10].STATE = 0;
  66. LPC_SCT0->EVENT[11].STATE = 0;
  67. LPC_SCT0->EVENT[12].STATE = 0;
  68. LPC_SCT0->EVENT[13].STATE = 0;
  69. LPC_SCT0->EVENT[14].STATE = 0;
  70. LPC_SCT0->EVENT[15].STATE = 0;

  71. /* STATE registers */
  72. LPC_SCT0->STATE_L = 0; /* implicit value */
  73. LPC_SCT0->STATE_H = 0; /* implicit value */

  74. /* state names assignment: */

  75. /* CORE registers */
  76. LPC_SCT0->START_L = 0x0000;
  77. LPC_SCT0->STOP_L =  0x0000;
  78. LPC_SCT0->HALT_L =  0x0000;
  79. LPC_SCT0->LIMIT_L = 0x0008;
  80. LPC_SCT0->START_H = 0x0000;
  81. LPC_SCT0->STOP_H =  0x0000;
  82. LPC_SCT0->HALT_H =  0x0000;
  83. LPC_SCT0->LIMIT_H = 0x0000;
  84. LPC_SCT0->EVEN =    0x00000000;
  85. LPC_SCT0->DMA0REQUEST = 0x00000000;
  86. LPC_SCT0->DMA1REQUEST = 0x00000000;

  87. }
复制代码


八拍

  1. /* Generated by fzmparser version 2.6 --- DO NOT EDIT! */

  2. /* Uses following resources: */
  3. /* 8 events, 0+0 states, 0 inputs, 4 outputs, 8+0 match regs, 0+0 capture regs */

  4. #include "sct_fsm.h"

  5. #define BASECNT        1112
  6. #define MATABCNT (BASECNT*2)
  7. #define MATACNT (BASECNT*1)
  8. #define MATBCCNT (BASECNT*4)
  9. #define MATBCNT (BASECNT*3)
  10. #define MATCCNT (BASECNT*5)
  11. #define MATCDCNT (BASECNT*6)
  12. #define MATDACNT (BASECNT*8)
  13. #define MATDCNT (BASECNT*7)

  14. void sct_fsm_init (void)
  15. {
  16. LPC_SCT0->CTRL_L |= 71 << 5;


  17. /* MATCH/CAPTURE registers */
  18. LPC_SCT0->REGMODE_L = 0x0000;         /* L: 8x MATCH, 0x CAPTURE, 8 unused */
  19. LPC_SCT0->REGMODE_H = 0x0000;             /* H: 0x MATCH, 0x CAPTURE, 16 unused */
  20. LPC_SCT0->MATCH[0].L = MATACNT;             /* MATA */
  21. LPC_SCT0->MATCHREL[0].L = MATACNT;
  22. LPC_SCT0->MATCH[1].L = MATABCNT;             /* MATAB */
  23. LPC_SCT0->MATCHREL[1].L = MATABCNT;
  24. LPC_SCT0->MATCH[2].L = MATBCNT;             /* MATB */
  25. LPC_SCT0->MATCHREL[2].L = MATBCNT;
  26. LPC_SCT0->MATCH[3].L = MATBCCNT;             /* MATBC */
  27. LPC_SCT0->MATCHREL[3].L = MATBCCNT;
  28. LPC_SCT0->MATCH[4].L = MATCCNT;             /* MATC */
  29. LPC_SCT0->MATCHREL[4].L = MATCCNT;
  30. LPC_SCT0->MATCH[5].L = MATCDCNT;             /* MATCD */
  31. LPC_SCT0->MATCHREL[5].L = MATCDCNT;
  32. LPC_SCT0->MATCH[6].L = MATDCNT;             /* MATD */
  33. LPC_SCT0->MATCHREL[6].L = MATDCNT;
  34. LPC_SCT0->MATCH[7].L = MATDACNT;             /* MATDA */
  35. LPC_SCT0->MATCHREL[7].L = MATDACNT;

  36. /* OUTPUT registers */
  37. LPC_SCT0->OUT[0].SET = 0x0000007C;        /* Output_pin_0 */
  38. LPC_SCT0->OUT[0].CLR = 0x00000083;
  39. LPC_SCT0->OUT[1].SET = 0x000000F1;        /* Output_pin_1 */
  40. LPC_SCT0->OUT[1].CLR = 0x0000000E;
  41. LPC_SCT0->OUT[2].SET = 0x000000C7;        /* Output_pin_2 */
  42. LPC_SCT0->OUT[2].CLR = 0x00000038;
  43. LPC_SCT0->OUT[3].SET = 0x0000001F;        /* Output_pin_3 */
  44. LPC_SCT0->OUT[3].CLR = 0x000000E0;
  45.   /* Unused outputs must not be affected by any event */
  46. LPC_SCT0->OUT[4].SET = 0;
  47. LPC_SCT0->OUT[4].CLR = 0;
  48. LPC_SCT0->OUT[5].SET = 0;
  49. LPC_SCT0->OUT[5].CLR = 0;
  50. LPC_SCT0->OUT[6].SET = 0;
  51. LPC_SCT0->OUT[6].CLR = 0;
  52. LPC_SCT0->OUT[7].SET = 0;
  53. LPC_SCT0->OUT[7].CLR = 0;
  54. LPC_SCT0->OUT[8].SET = 0;
  55. LPC_SCT0->OUT[8].CLR = 0;
  56. LPC_SCT0->OUT[9].SET = 0;
  57. LPC_SCT0->OUT[9].CLR = 0;

  58. /* Conflict resolution register */

  59. /* EVENT registers */
  60. LPC_SCT0->EVENT[0].CTRL = 0x00001000;     /* L: */
  61. LPC_SCT0->EVENT[0].STATE = 0xFFFFFFFF;
  62. LPC_SCT0->EVENT[1].CTRL = 0x00001001;     /* L: */
  63. LPC_SCT0->EVENT[1].STATE = 0xFFFFFFFF;
  64. LPC_SCT0->EVENT[2].CTRL = 0x00001002;     /* L: */
  65. LPC_SCT0->EVENT[2].STATE = 0xFFFFFFFF;
  66. LPC_SCT0->EVENT[3].CTRL = 0x00001003;     /* L: */
  67. LPC_SCT0->EVENT[3].STATE = 0xFFFFFFFF;
  68. LPC_SCT0->EVENT[4].CTRL = 0x00001004;     /* L: */
  69. LPC_SCT0->EVENT[4].STATE = 0xFFFFFFFF;
  70. LPC_SCT0->EVENT[5].CTRL = 0x00001005;     /* L: */
  71. LPC_SCT0->EVENT[5].STATE = 0xFFFFFFFF;
  72. LPC_SCT0->EVENT[6].CTRL = 0x00001006;     /* L: */
  73. LPC_SCT0->EVENT[6].STATE = 0xFFFFFFFF;
  74. LPC_SCT0->EVENT[7].CTRL = 0x00001007;     /* L: */
  75. LPC_SCT0->EVENT[7].STATE = 0xFFFFFFFF;
  76.   /* Unused events must not have any effect */
  77. LPC_SCT0->EVENT[8].STATE = 0;
  78. LPC_SCT0->EVENT[9].STATE = 0;
  79. LPC_SCT0->EVENT[10].STATE = 0;
  80. LPC_SCT0->EVENT[11].STATE = 0;
  81. LPC_SCT0->EVENT[12].STATE = 0;
  82. LPC_SCT0->EVENT[13].STATE = 0;
  83. LPC_SCT0->EVENT[14].STATE = 0;
  84. LPC_SCT0->EVENT[15].STATE = 0;

  85. /* STATE registers */
  86. LPC_SCT0->STATE_L = 0; /* implicit value */
  87. LPC_SCT0->STATE_H = 0; /* implicit value */

  88. /* state names assignment: */

  89. /* CORE registers */
  90. LPC_SCT0->START_L = 0x0000;
  91. LPC_SCT0->STOP_L =  0x0000;
  92. LPC_SCT0->HALT_L =  0x0000;
  93. LPC_SCT0->LIMIT_L = 0x0080;
  94. LPC_SCT0->START_H = 0x0000;
  95. LPC_SCT0->STOP_H =  0x0000;
  96. LPC_SCT0->HALT_H =  0x0000;
  97. LPC_SCT0->LIMIT_H = 0x0000;
  98. LPC_SCT0->EVEN =    0x00000000;
  99. LPC_SCT0->DMA0REQUEST = 0x00000000;
  100. LPC_SCT0->DMA1REQUEST = 0x00000000;

  101. }
复制代码


此帖出自NXP MCU论坛

最新回复

楼主, 我也想玩电机、小车之类的啊。  详情 回复 发表于 2014-9-19 17:29

赞赏

1

查看全部赞赏

点赞 关注
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复
举报

656

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
楼主, 我也想玩电机、小车之类的啊。
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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