Unipolar Stepper Motor Library

Committer:
bant62
Date:
Mon Jul 16 04:32:42 2012 +0000
Revision:
1:ce3991daa407
Child:
2:abb7425e1a5b
init revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bant62 1:ce3991daa407 1 /**
bant62 1:ce3991daa407 2 *****************************************************************************
bant62 1:ce3991daa407 3 * File Name : UniStepperMotor.h
bant62 1:ce3991daa407 4 *
bant62 1:ce3991daa407 5 * Title : Unipolar Stepper Motor Class Header File
bant62 1:ce3991daa407 6 * Revision : 0.1
bant62 1:ce3991daa407 7 * Notes :
bant62 1:ce3991daa407 8 * Target Board : mbed NXP LPC1768
bant62 1:ce3991daa407 9 * Tool Chain : ????
bant62 1:ce3991daa407 10 *
bant62 1:ce3991daa407 11 * Revision History:
bant62 1:ce3991daa407 12 * When Who Description of change
bant62 1:ce3991daa407 13 * ----------- ----------- -----------------------
bant62 1:ce3991daa407 14 * 2012/07/8 Hiroshi M init
bant62 1:ce3991daa407 15 *****************************************************************************
bant62 1:ce3991daa407 16 *
bant62 1:ce3991daa407 17 * Copyright (C) 2012 Hiroshi M, MIT License
bant62 1:ce3991daa407 18 *
bant62 1:ce3991daa407 19 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
bant62 1:ce3991daa407 20 * and associated documentation files (the "Software"), to deal in the Software without restriction,
bant62 1:ce3991daa407 21 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
bant62 1:ce3991daa407 22 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
bant62 1:ce3991daa407 23 * furnished to do so, subject to the following conditions:
bant62 1:ce3991daa407 24 *
bant62 1:ce3991daa407 25 * The above copyright notice and this permission notice shall be included in all copies or
bant62 1:ce3991daa407 26 * substantial portions of the Software.
bant62 1:ce3991daa407 27 *
bant62 1:ce3991daa407 28 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
bant62 1:ce3991daa407 29 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
bant62 1:ce3991daa407 30 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
bant62 1:ce3991daa407 31 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bant62 1:ce3991daa407 32 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
bant62 1:ce3991daa407 33 *
bant62 1:ce3991daa407 34 **/
bant62 1:ce3991daa407 35
bant62 1:ce3991daa407 36 #ifndef MBED_STEPPER_MOTOR_H
bant62 1:ce3991daa407 37 #define MBED_STEPPER_MOTOR_H
bant62 1:ce3991daa407 38
bant62 1:ce3991daa407 39 /* Includes ----------------------------------------------------------------- */
bant62 1:ce3991daa407 40 #include "mbed.h"
bant62 1:ce3991daa407 41
bant62 1:ce3991daa407 42 /* typedef ------------------------------------------------------------------ */
bant62 1:ce3991daa407 43 typedef enum {PWM_ON, PWM_OFF} pwm_state;
bant62 1:ce3991daa407 44 typedef enum {CLOCK_WISE, ANTI_CLOCK_WISE} motor_dir;
bant62 1:ce3991daa407 45
bant62 1:ce3991daa407 46 struct speed_data_t {
bant62 1:ce3991daa407 47 int max_pulse_count;
bant62 1:ce3991daa407 48 int pwm_ratio;
bant62 1:ce3991daa407 49 uint8_t *clockwise_ptn;
bant62 1:ce3991daa407 50 uint8_t *anticlockwise_ptn;
bant62 1:ce3991daa407 51 int ptn_count;
bant62 1:ce3991daa407 52 };
bant62 1:ce3991daa407 53
bant62 1:ce3991daa407 54 /* define ------------------------------------------------------------------- */
bant62 1:ce3991daa407 55 #define PULSE_INTERVAL 14 // 14us
bant62 1:ce3991daa407 56
bant62 1:ce3991daa407 57 /* macro -------------------------------------------------------------------- */
bant62 1:ce3991daa407 58 /* variables ---------------------------------------------------------------- */
bant62 1:ce3991daa407 59 /* class -------------------------------------------------------------------- */
bant62 1:ce3991daa407 60
bant62 1:ce3991daa407 61 class StepperMotor {
bant62 1:ce3991daa407 62 public:
bant62 1:ce3991daa407 63 StepperMotor(PinName x_pin_no, PinName y_pin_no, PinName nx_pin_no, PinName ny_pin_no, motor_dir set_direction);
bant62 1:ce3991daa407 64 ~StepperMotor();
bant62 1:ce3991daa407 65
bant62 1:ce3991daa407 66 void SetSpeed(int speed);
bant62 1:ce3991daa407 67 void PulseEnable(void);
bant62 1:ce3991daa407 68 void PulseDisable(void);
bant62 1:ce3991daa407 69
bant62 1:ce3991daa407 70 private:
bant62 1:ce3991daa407 71 pwm_state state;
bant62 1:ce3991daa407 72 motor_dir direction;
bant62 1:ce3991daa407 73 motor_dir forward_direction;
bant62 1:ce3991daa407 74 motor_dir backward_direction;
bant62 1:ce3991daa407 75
bant62 1:ce3991daa407 76 int ptn_index;
bant62 1:ce3991daa407 77 int ptn_count;
bant62 1:ce3991daa407 78 int pwm_ratio;
bant62 1:ce3991daa407 79 int pwm_on_count;
bant62 1:ce3991daa407 80 int pwm_off_count;
bant62 1:ce3991daa407 81 int max_pulse_count;
bant62 1:ce3991daa407 82 int pulse_count;
bant62 1:ce3991daa407 83 uint8_t *ptn;
bant62 1:ce3991daa407 84 uint8_t ptn_data;
bant62 1:ce3991daa407 85
bant62 1:ce3991daa407 86 DigitalOut _x;
bant62 1:ce3991daa407 87 DigitalOut _y;
bant62 1:ce3991daa407 88 DigitalOut _nx;
bant62 1:ce3991daa407 89 DigitalOut _ny;
bant62 1:ce3991daa407 90
bant62 1:ce3991daa407 91 Ticker Pulse;
bant62 1:ce3991daa407 92
bant62 1:ce3991daa407 93 void SetPulse14us(void);
bant62 1:ce3991daa407 94 void PulseOut(void);
bant62 1:ce3991daa407 95 void PulseStop(void);
bant62 1:ce3991daa407 96 };
bant62 1:ce3991daa407 97
bant62 1:ce3991daa407 98 #endif