ARDUINO驅動步進電機需要庫文件 放到library里就好了
0.png (41.74 KB, 下載次數: 108)
下載附件
2018-6-13 01:59 上傳
L293D Arduino單片機源程序如下:
- // Adafruit Motor shield library
- // copyright Adafruit Industries LLC, 2009
- // this code is public domain, enjoy!
- #if ARDUINO >= 100
- #include "Arduino.h"
- #else
- #include "WProgram.h"
- #endif
- #include <avr/io.h>
- #include "AFMotor.h"
- static uint8_t latch_state;
- #define MICROSTEPS 16 // 8, 16 & 32 are popular
- //#define MOTORDEBUG 1
- AFMotorController::AFMotorController(void) {
- }
- void AFMotorController::enable(void) {
- // setup the latch
- /*
- LATCH_DDR |= _BV(LATCH);
- ENABLE_DDR |= _BV(ENABLE);
- CLK_DDR |= _BV(CLK);
- SER_DDR |= _BV(SER);
- */
- pinMode(MOTORLATCH, OUTPUT);
- pinMode(MOTORENABLE, OUTPUT);
- pinMode(MOTORDATA, OUTPUT);
- pinMode(MOTORCLK, OUTPUT);
- latch_state = 0;
- latch_tx(); // "reset"
- //ENABLE_PORT &= ~_BV(ENABLE); // enable the chip outputs!
- digitalWrite(MOTORENABLE, LOW);
- }
- void AFMotorController::latch_tx(void) {
- uint8_t i;
- //LATCH_PORT &= ~_BV(LATCH);
- digitalWrite(MOTORLATCH, LOW);
- //SER_PORT &= ~_BV(SER);
- digitalWrite(MOTORDATA, LOW);
- for (i=0; i<8; i++) {
- //CLK_PORT &= ~_BV(CLK);
- digitalWrite(MOTORCLK, LOW);
- if (latch_state & _BV(7-i)) {
- //SER_PORT |= _BV(SER);
- digitalWrite(MOTORDATA, HIGH);
- } else {
- //SER_PORT &= ~_BV(SER);
- digitalWrite(MOTORDATA, LOW);
- }
- //CLK_PORT |= _BV(CLK);
- digitalWrite(MOTORCLK, HIGH);
- }
- //LATCH_PORT |= _BV(LATCH);
- digitalWrite(MOTORLATCH, HIGH);
- }
- static AFMotorController MC;
- /******************************************
- MOTORS
- ******************************************/
- inline void initPWM1(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- TCCR2A |= _BV(COM2A1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2a
- TCCR2B = freq & 0x7;
- OCR2A = 0;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- TCCR1A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc1a
- TCCR1B = (freq & 0x7) | _BV(WGM12);
- OCR1A = 0;
- #endif
- pinMode(11, OUTPUT);
- }
- inline void setPWM1(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- OCR2A = s;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- OCR1A = s;
- #endif
- }
- inline void initPWM2(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2B (pin 3)
- TCCR2A |= _BV(COM2B1) | _BV(WGM20) | _BV(WGM21); // fast PWM, turn on oc2b
- TCCR2B = freq & 0x7;
- OCR2B = 0;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 3 is now PE5 (OC3C)
- TCCR3A |= _BV(COM1C1) | _BV(WGM10); // fast PWM, turn on oc3c
- TCCR3B = (freq & 0x7) | _BV(WGM12);
- OCR3C = 0;
- #endif
- pinMode(3, OUTPUT);
- }
- inline void setPWM2(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer2A on PB3 (Arduino pin #11)
- OCR2B = s;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 11 is now PB5 (OC1A)
- OCR3C = s;
- #endif
- }
- inline void initPWM3(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A / PD6 (pin 6)
- TCCR0A |= _BV(COM0A1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on OC0A
- //TCCR0B = freq & 0x7;
- OCR0A = 0;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- TCCR4A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc4a
- TCCR4B = (freq & 0x7) | _BV(WGM12);
- //TCCR4B = 1 | _BV(WGM12);
- OCR4A = 0;
- #endif
- pinMode(6, OUTPUT);
- }
- inline void setPWM3(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A on PB3 (Arduino pin #6)
- OCR0A = s;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- OCR4A = s;
- #endif
- }
- inline void initPWM4(uint8_t freq) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0B / PD5 (pin 5)
- TCCR0A |= _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); // fast PWM, turn on oc0a
- //TCCR0B = freq & 0x7;
- OCR0B = 0;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 5 is now PE3 (OC3A)
- TCCR3A |= _BV(COM1A1) | _BV(WGM10); // fast PWM, turn on oc3a
- TCCR3B = (freq & 0x7) | _BV(WGM12);
- //TCCR4B = 1 | _BV(WGM12);
- OCR3A = 0;
- #endif
- pinMode(5, OUTPUT);
- }
- inline void setPWM4(uint8_t s) {
- #if defined(__AVR_ATmega8__) || \
- defined(__AVR_ATmega48__) || \
- defined(__AVR_ATmega88__) || \
- defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega328P__)
- // use PWM from timer0A on PB3 (Arduino pin #6)
- OCR0B = s;
- #elif defined(__AVR_ATmega1280__)
- // on arduino mega, pin 6 is now PH3 (OC4A)
- OCR3A = s;
- #endif
- }
- AF_DCMotor::AF_DCMotor(uint8_t num, uint8_t freq) {
- motornum = num;
- pwmfreq = freq;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
AFMotor.rar
(7.38 KB, 下載次數: 180)
2018-6-12 12:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|