Li Weiyi
/
BalanceCar
虽然移植完毕,但是不work。需要细调……
Microduino_Stepper_PWM.h@2:99785a1007a4, 2016-06-07 (annotated)
- Committer:
- lixianyu
- Date:
- Tue Jun 07 05:26:03 2016 +0000
- Revision:
- 2:99785a1007a4
Still not work......commit first.
Who changed what in which revision?
User | Revision | Line number | New 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__ |