虽然移植完毕,但是不work。需要细调……

Dependencies:   mbed

Committer:
lixianyu
Date:
Tue Jun 07 08:14:15 2016 +0000
Revision:
3:c6caae712d5d
Parent:
2:99785a1007a4
??????????work? ?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 2:99785a1007a4 1 // Microduino_Stepper.cpp
lixianyu 2:99785a1007a4 2 //
lixianyu 2:99785a1007a4 3 // Copyright (C) 2009-2013 Shenyang
lixianyu 2:99785a1007a4 4 // $Id: Microduino_Stepper.cpp,v 1.00 2016/04/07 $
lixianyu 2:99785a1007a4 5
lixianyu 2:99785a1007a4 6 #ifndef __MICRODUINO_STEPPER_H__
lixianyu 2:99785a1007a4 7 #define __MICRODUINO_STEPPER_H__
lixianyu 2:99785a1007a4 8
lixianyu 2:99785a1007a4 9 //#include "MicroduinoPinNames.h"
lixianyu 2:99785a1007a4 10 #include "mbed.h"
lixianyu 2:99785a1007a4 11 #include <stdlib.h>
lixianyu 2:99785a1007a4 12 //#include <Arduino.h>
lixianyu 2:99785a1007a4 13
lixianyu 2:99785a1007a4 14 //#define _useTimer1
lixianyu 2:99785a1007a4 15 #define MAX_SPEED_S 4096
lixianyu 2:99785a1007a4 16 #define TIMER_COMP 327680/MAX_SPEED_S
lixianyu 2:99785a1007a4 17
lixianyu 2:99785a1007a4 18
lixianyu 2:99785a1007a4 19 //#define PIN_SET(pin) (*portOutputRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin))
lixianyu 2:99785a1007a4 20 //#define PIN_CLR(pin) (*portOutputRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin))
lixianyu 2:99785a1007a4 21
lixianyu 2:99785a1007a4 22 #define MAX_STEPPERS 4
lixianyu 2:99785a1007a4 23 #define INVALID_STEPPER 255
lixianyu 2:99785a1007a4 24
lixianyu 2:99785a1007a4 25 #if 0
lixianyu 2:99785a1007a4 26 #define PIN_EN 4 //PORTB,0
lixianyu 2:99785a1007a4 27 #define PIN_DIRA A0 //PORTA,7
lixianyu 2:99785a1007a4 28 #define PIN_STEPA 5 //PORTB,1
lixianyu 2:99785a1007a4 29 #define PIN_DIRB A1 //PORTA,6
lixianyu 2:99785a1007a4 30 #define PIN_STEPB 6 //PORTB,2
lixianyu 2:99785a1007a4 31 #define PIN_DIRC A2 //PORTA,5
lixianyu 2:99785a1007a4 32 #define PIN_STEPC 7 //PORTB,3
lixianyu 2:99785a1007a4 33 #define PIN_DIRD A3 //PORTA,4
lixianyu 2:99785a1007a4 34 #define PIN_STEPD 8 //PORTD,6
lixianyu 2:99785a1007a4 35 #elif 0
lixianyu 2:99785a1007a4 36 #define PIN_EN D4
lixianyu 2:99785a1007a4 37 #define PIN_DIRA A0
lixianyu 2:99785a1007a4 38 #define PIN_STEPA D5
lixianyu 2:99785a1007a4 39 #define PIN_DIRB A1
lixianyu 2:99785a1007a4 40 #define PIN_STEPB D6
lixianyu 2:99785a1007a4 41 #define PIN_DIRC A2
lixianyu 2:99785a1007a4 42 #define PIN_STEPC D7
lixianyu 2:99785a1007a4 43 #define PIN_DIRD A3
lixianyu 2:99785a1007a4 44 #define PIN_STEPD D8
lixianyu 2:99785a1007a4 45 #else
lixianyu 2:99785a1007a4 46 #define PIN_EN P0_25
lixianyu 2:99785a1007a4 47 #define PIN_DIRA P0_7
lixianyu 2:99785a1007a4 48 #define PIN_STEPA P0_24
lixianyu 2:99785a1007a4 49 #define PIN_DIRB P0_6
lixianyu 2:99785a1007a4 50 #define PIN_STEPB P0_1
lixianyu 2:99785a1007a4 51 #define PIN_DIRC P0_14
lixianyu 2:99785a1007a4 52 #define PIN_STEPC P0_20
lixianyu 2:99785a1007a4 53 #define PIN_DIRD P0_23
lixianyu 2:99785a1007a4 54 #define PIN_STEPD P0_19
lixianyu 2:99785a1007a4 55 #endif
lixianyu 2:99785a1007a4 56
lixianyu 2:99785a1007a4 57 #define DEFAULT_ACCEL 120
lixianyu 2:99785a1007a4 58
lixianyu 2:99785a1007a4 59 /* PWM的周期越小,频率越大,测试时发现这款步进电机的最大频率是2500Hz,也就是说周期为400us
lixianyu 2:99785a1007a4 60 * 频率频率越大,步进电机的速度越大,至于脉冲的宽度,1us即可
lixianyu 2:99785a1007a4 61 */
lixianyu 2:99785a1007a4 62 #define PERIOD_MAX 2000
lixianyu 2:99785a1007a4 63 #define PERIOD_MIN 450
lixianyu 2:99785a1007a4 64
lixianyu 2:99785a1007a4 65 void stepperAllEnable();
lixianyu 2:99785a1007a4 66 void stepperAllDisable();
lixianyu 2:99785a1007a4 67
lixianyu 2:99785a1007a4 68 class Stepper
lixianyu 2:99785a1007a4 69 {
lixianyu 2:99785a1007a4 70 public:
lixianyu 2:99785a1007a4 71
lixianyu 2:99785a1007a4 72 Stepper(PinName dirPin, PinName stepPin);
lixianyu 2:99785a1007a4 73
lixianyu 2:99785a1007a4 74 uint8_t begin();
lixianyu 2:99785a1007a4 75
lixianyu 2:99785a1007a4 76 void setSpeed(int16_t _speed);
lixianyu 2:99785a1007a4 77
lixianyu 2:99785a1007a4 78 void setMaxAccel(uint16_t _accel);
lixianyu 2:99785a1007a4 79
lixianyu 2:99785a1007a4 80 int16_t getSpeed();
lixianyu 2:99785a1007a4 81
lixianyu 2:99785a1007a4 82 uint16_t getMaxAccel();
lixianyu 2:99785a1007a4 83
lixianyu 2:99785a1007a4 84 void computeStep();
lixianyu 2:99785a1007a4 85
lixianyu 2:99785a1007a4 86 private:
lixianyu 2:99785a1007a4 87 pwmout_t pwmStep;
lixianyu 2:99785a1007a4 88 gpio_t dirOUT;
lixianyu 2:99785a1007a4 89 //gpio_t stepOUT;
lixianyu 2:99785a1007a4 90 uint8_t stepperIndex;
lixianyu 2:99785a1007a4 91 //uint8_t dirPin;
lixianyu 2:99785a1007a4 92 //uint8_t stepPin;
lixianyu 2:99785a1007a4 93 int16_t speed;
lixianyu 2:99785a1007a4 94 uint16_t maxAccel;
lixianyu 2:99785a1007a4 95 uint16_t period;
lixianyu 2:99785a1007a4 96 //uint16_t counter;
lixianyu 2:99785a1007a4 97
lixianyu 2:99785a1007a4 98 };
lixianyu 2:99785a1007a4 99
lixianyu 2:99785a1007a4 100 typedef struct {
lixianyu 2:99785a1007a4 101 //uint8_t isActive = false;
lixianyu 2:99785a1007a4 102 uint8_t isActive;
lixianyu 2:99785a1007a4 103 Stepper *stepper;
lixianyu 2:99785a1007a4 104 } Stepper_t;
lixianyu 2:99785a1007a4 105
lixianyu 2:99785a1007a4 106 #endif // __MICRODUINO_STEPPER_H__