找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10086|回复: 8
收起左侧

AFMotor驱动步进电机库文件下载(L293D库文件)

  [复制链接]
ID:350166 发表于 2018-6-12 12:06 | 显示全部楼层 |阅读模式
ARDUINO驱动步进电机需要库文件 放到library里就好了
0.png


L293D Arduino单片机源程序如下:
  1. // Adafruit Motor shield library
  2. // copyright Adafruit Industries LLC, 2009
  3. // this code is public domain, enjoy!

  4. #if ARDUINO >= 100
  5.   #include "Arduino.h"
  6. #else
  7.   #include "WProgram.h"
  8. #endif
  9. #include <avr/io.h>

  10. #include "AFMotor.h"

  11. static uint8_t latch_state;

  12. #define MICROSTEPS 16  // 8, 16 & 32 are popular

  13. //#define MOTORDEBUG 1

  14. AFMotorController::AFMotorController(void) {
  15. }

  16. void AFMotorController::enable(void) {
  17.   // setup the latch
  18.   /*
  19.   LATCH_DDR |= _BV(LATCH);
  20.   ENABLE_DDR |= _BV(ENABLE);
  21.   CLK_DDR |= _BV(CLK);
  22.   SER_DDR |= _BV(SER);
  23.   */
  24.   pinMode(MOTORLATCH, OUTPUT);
  25.   pinMode(MOTORENABLE, OUTPUT);
  26.   pinMode(MOTORDATA, OUTPUT);
  27.   pinMode(MOTORCLK, OUTPUT);

  28.   latch_state = 0;

  29.   latch_tx();  // "reset"

  30.   //ENABLE_PORT &= ~_BV(ENABLE); // enable the chip outputs!
  31.   digitalWrite(MOTORENABLE, LOW);
  32. }


  33. void AFMotorController::latch_tx(void) {
  34.   uint8_t i;

  35.   //LATCH_PORT &= ~_BV(LATCH);
  36.   digitalWrite(MOTORLATCH, LOW);

  37.   //SER_PORT &= ~_BV(SER);
  38.   digitalWrite(MOTORDATA, LOW);

  39.   for (i=0; i<8; i++) {
  40.     //CLK_PORT &= ~_BV(CLK);
  41.     digitalWrite(MOTORCLK, LOW);

  42.     if (latch_state & _BV(7-i)) {
  43.       //SER_PORT |= _BV(SER);
  44.       digitalWrite(MOTORDATA, HIGH);
  45.     } else {
  46.       //SER_PORT &= ~_BV(SER);
  47.       digitalWrite(MOTORDATA, LOW);
  48.     }
  49.     //CLK_PORT |= _BV(CLK);
  50.     digitalWrite(MOTORCLK, HIGH);
  51.   }
  52.   //LATCH_PORT |= _BV(LATCH);
  53.   digitalWrite(MOTORLATCH, HIGH);
  54. }

  55. static AFMotorController MC;


  56. /******************************************
  57.                MOTORS
  58. ******************************************/
  59. inline void initPWM1(uint8_t freq) {
  60. #if defined(__AVR_ATmega8__) || \
  61.     defined(__AVR_ATmega48__) || \
  62.     defined(__AVR_ATmega88__) || \
  63.     defined(__AVR_ATmega168__) || \
  64.     defined(__AVR_ATmega328P__)
  65.     // use PWM from timer2A on PB3 (Arduino pin #11)
  66.     TCCR2A |= _BV(COM2A1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2a
  67.     TCCR2B = freq & 0x7;
  68.     OCR2A = 0;
  69. #elif defined(__AVR_ATmega1280__)
  70.     // on arduino mega, pin 11 is now PB5 (OC1A)
  71.     TCCR1A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc1a
  72.     TCCR1B = (freq & 0x7) | _BV(WGM12);
  73.     OCR1A = 0;
  74. #endif
  75.     pinMode(11, OUTPUT);
  76. }

  77. inline void setPWM1(uint8_t s) {
  78. #if defined(__AVR_ATmega8__) || \
  79.     defined(__AVR_ATmega48__) || \
  80.     defined(__AVR_ATmega88__) || \
  81.     defined(__AVR_ATmega168__) || \
  82.     defined(__AVR_ATmega328P__)
  83.     // use PWM from timer2A on PB3 (Arduino pin #11)
  84.     OCR2A = s;
  85. #elif defined(__AVR_ATmega1280__)
  86.     // on arduino mega, pin 11 is now PB5 (OC1A)
  87.     OCR1A = s;
  88. #endif
  89. }

  90. inline void initPWM2(uint8_t freq) {
  91. #if defined(__AVR_ATmega8__) || \
  92.     defined(__AVR_ATmega48__) || \
  93.     defined(__AVR_ATmega88__) || \
  94.     defined(__AVR_ATmega168__) || \
  95.     defined(__AVR_ATmega328P__)
  96.     // use PWM from timer2B (pin 3)
  97.     TCCR2A |= _BV(COM2B1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2b
  98.     TCCR2B = freq & 0x7;
  99.     OCR2B = 0;
  100. #elif defined(__AVR_ATmega1280__)
  101.     // on arduino mega, pin 3 is now PE5 (OC3C)
  102.     TCCR3A |= _BV(COM1C1) | _BV(WGM10); // fast PWM, turn on oc3c
  103.     TCCR3B = (freq & 0x7) | _BV(WGM12);
  104.     OCR3C = 0;
  105. #endif
  106.     pinMode(3, OUTPUT);
  107. }

  108. inline void setPWM2(uint8_t s) {
  109. #if defined(__AVR_ATmega8__) || \
  110.     defined(__AVR_ATmega48__) || \
  111.     defined(__AVR_ATmega88__) || \
  112.     defined(__AVR_ATmega168__) || \
  113.     defined(__AVR_ATmega328P__)
  114.     // use PWM from timer2A on PB3 (Arduino pin #11)
  115.     OCR2B = s;
  116. #elif defined(__AVR_ATmega1280__)
  117.     // on arduino mega, pin 11 is now PB5 (OC1A)
  118.     OCR3C = s;
  119. #endif
  120. }

  121. inline void initPWM3(uint8_t freq) {
  122. #if defined(__AVR_ATmega8__) || \
  123.     defined(__AVR_ATmega48__) || \
  124.     defined(__AVR_ATmega88__) || \
  125.     defined(__AVR_ATmega168__) || \
  126.     defined(__AVR_ATmega328P__)
  127.     // use PWM from timer0A / PD6 (pin 6)
  128.     TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0A
  129.     //TCCR0B = freq & 0x7;
  130.     OCR0A = 0;
  131. #elif defined(__AVR_ATmega1280__)
  132.     // on arduino mega, pin 6 is now PH3 (OC4A)
  133.     TCCR4A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc4a
  134.     TCCR4B = (freq & 0x7) | _BV(WGM12);
  135.     //TCCR4B = 1 | _BV(WGM12);
  136.     OCR4A = 0;
  137. #endif
  138.     pinMode(6, OUTPUT);
  139. }

  140. inline void setPWM3(uint8_t s) {
  141. #if defined(__AVR_ATmega8__) || \
  142.     defined(__AVR_ATmega48__) || \
  143.     defined(__AVR_ATmega88__) || \
  144.     defined(__AVR_ATmega168__) || \
  145.     defined(__AVR_ATmega328P__)
  146.     // use PWM from timer0A on PB3 (Arduino pin #6)
  147.     OCR0A = s;
  148. #elif defined(__AVR_ATmega1280__)
  149.     // on arduino mega, pin 6 is now PH3 (OC4A)
  150.     OCR4A = s;
  151. #endif
  152. }



  153. inline void initPWM4(uint8_t freq) {
  154. #if defined(__AVR_ATmega8__) || \
  155.     defined(__AVR_ATmega48__) || \
  156.     defined(__AVR_ATmega88__) || \
  157.     defined(__AVR_ATmega168__) || \
  158.     defined(__AVR_ATmega328P__)
  159.     // use PWM from timer0B / PD5 (pin 5)
  160.     TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
  161.     //TCCR0B = freq & 0x7;
  162.     OCR0B = 0;
  163. #elif defined(__AVR_ATmega1280__)
  164.     // on arduino mega, pin 5 is now PE3 (OC3A)
  165.     TCCR3A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc3a
  166.     TCCR3B = (freq & 0x7) | _BV(WGM12);
  167.     //TCCR4B = 1 | _BV(WGM12);
  168.     OCR3A = 0;
  169. #endif
  170.     pinMode(5, OUTPUT);
  171. }

  172. inline void setPWM4(uint8_t s) {
  173. #if defined(__AVR_ATmega8__) || \
  174.     defined(__AVR_ATmega48__) || \
  175.     defined(__AVR_ATmega88__) || \
  176.     defined(__AVR_ATmega168__) || \
  177.     defined(__AVR_ATmega328P__)
  178.     // use PWM from timer0A on PB3 (Arduino pin #6)
  179.     OCR0B = s;
  180. #elif defined(__AVR_ATmega1280__)
  181.     // on arduino mega, pin 6 is now PH3 (OC4A)
  182.     OCR3A = s;
  183. #endif
  184. }

  185. AF_DCMotor::AF_DCMotor(uint8_t num, uint8_t freq) {
  186.   motornum = num;
  187.   pwmfreq = freq;
  188. ……………………

  189. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
AFMotor.rar (7.38 KB, 下载次数: 177)

评分

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

查看全部评分

回复

使用道具 举报

ID:520542 发表于 2019-4-24 15:50 | 显示全部楼层
我准备在 用这个驱动在L293D文件里面驱动 28BYJ-48步进电机,不知道具体如何操作。
回复

使用道具 举报

ID:510469 发表于 2019-7-8 09:57 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:168565 发表于 2019-12-26 14:07 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:168565 发表于 2019-12-26 14:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:691753 发表于 2020-2-10 17:00 | 显示全部楼层

我准备在 用这个驱动在L293D文件里面驱动 28BYJ-48步进电机,不知道具体如何操作。
回复

使用道具 举报

ID:696970 发表于 2020-2-23 15:35 | 显示全部楼层
好东西,我来下载了
回复

使用道具 举报

ID:696970 发表于 2020-2-23 15:35 | 显示全部楼层
好东西
回复

使用道具 举报

ID:825969 发表于 2020-10-20 11:51 | 显示全部楼层
谢谢,这个板就是占用的IO口太多
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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