Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
UniStepperMotor.cpp
00001 /** 00002 ***************************************************************************** 00003 * File Name : UniStepperMotor.cpp 00004 * 00005 * Title : Unipolar Stepper Motor Class Source File 00006 * Revision : 0.1 00007 * Notes : 00008 * Target Board : mbed NXP LPC1768 00009 * Tool Chain : ???? 00010 * 00011 * Revision History: 00012 * When Who Description of change 00013 * ----------- ----------- ----------------------- 00014 * 2012/07/8 Hiroshi M init 00015 ***************************************************************************** 00016 * 00017 * Copyright (C) 2012 Hiroshi M, MIT License 00018 * 00019 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 00020 * and associated documentation files (the "Software"), to deal in the Software without restriction, 00021 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 00022 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 00023 * furnished to do so, subject to the following conditions: 00024 * 00025 * The above copyright notice and this permission notice shall be included in all copies or 00026 * substantial portions of the Software. 00027 * 00028 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 00029 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00030 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 00031 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00032 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00033 * 00034 **/ 00035 00036 /* Includes ----------------------------------------------------------------- */ 00037 #include "UniStepperMotor.h" 00038 #include "mbed.h" 00039 00040 /* Private typedef ---------------------------------------------------------- */ 00041 /* Private define ----------------------------------------------------------- */ 00042 /* Private macro ------------------------------------------------------------ */ 00043 /* Private variables -------------------------------------------------------- */ 00044 00045 static uint8_t ptn_ClockWise_1x1[] = {0x01, 0x02, 0x04, 0x08}; 00046 static uint8_t ptn_AntiClockWise_1x1[] = {0x08, 0x04, 0x02, 0x01}; 00047 00048 static uint8_t ptn_ClockWise_2x2[] = {0x03, 0x06, 0x0C, 0x09}; 00049 static uint8_t ptn_AntiClockWise_2x2[] = {0x09, 0x0C, 0x06, 0x03}; 00050 00051 static uint8_t ptn_ClockWise_1x2[] = {0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09, 0x01}; 00052 static uint8_t ptn_AntiClockWise_1x2[] = {0x01, 0x09, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03}; 00053 00054 #if MAXSPEED == 10 00055 static speed_data_t speed_data [] = 00056 { 00057 { 1, 0,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 0 00058 {500, 4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 1 500*2 => 1000 00059 {250, 4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 2 250*2 => 500 00060 {166, 4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 3 166*2 => 332 00061 {125, 6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 4 125*2 => 250 00062 {100, 6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, // 5 100*2 => 200 00063 {167, 8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, // 6 00064 {143, 8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, // 7 00065 {125, 9,ptn_ClockWise_1x1,ptn_AntiClockWise_2x2,4}, // 8 00066 {111, 10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, // 9 00067 {100, 10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4} // 10 00068 }; 00069 00070 #elif MAXSPEED == 63 00071 static speed_data_t speed_data [] = 00072 { 00073 {1,0,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00074 {3150,2,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00075 {1575,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00076 {1050,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00077 {788,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00078 {630,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00079 {525,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00080 {450,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00081 {394,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00082 {350,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00083 {315,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00084 {286,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00085 {263,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00086 {242,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00087 {225,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00088 {210,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00089 {197,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00090 {185,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00091 {175,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00092 {166,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00093 {158,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00094 {150,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00095 {143,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00096 {137,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00097 {131,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00098 {126,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00099 {121,6,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00100 {233,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00101 {225,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00102 {217,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00103 {210,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00104 {203,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00105 {197,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00106 {191,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00107 {185,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00108 {180,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00109 {175,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00110 {170,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00111 {166,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00112 {162,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00113 {158,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00114 {154,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00115 {150,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00116 {147,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00117 {143,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00118 {140,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00119 {137,8,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00120 {134,9,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00121 {131,9,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00122 {129,9,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00123 {126,9,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00124 {124,9,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00125 {121,9,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00126 {119,9,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00127 {117,9,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00128 {115,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00129 {113,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00130 {111,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00131 {109,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00132 {107,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00133 {105,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00134 {103,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00135 {102,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00136 {100,10,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4} 00137 }; 00138 00139 #else 00140 static speed_data_t speed_data [] = 00141 { 00142 {1,0,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00143 {6400,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00144 {4267,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00145 {3200,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00146 {2560,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00147 {2134,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00148 {1829,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00149 {1600,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00150 {1422,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00151 {1280,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00152 {1164,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00153 {1067,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00154 {985,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00155 {915,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00156 {854,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00157 {800,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00158 {753,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00159 {711,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00160 {674,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00161 {640,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00162 {610,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00163 {582,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00164 {557,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00165 {534,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00166 {512,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00167 {493,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00168 {474,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00169 {457,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00170 {442,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00171 {427,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00172 {413,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00173 {400,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00174 {388,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00175 {377,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00176 {366,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00177 {356,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00178 {346,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00179 {337,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00180 {328,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00181 {320,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00182 {312,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00183 {305,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00184 {298,3,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00185 {291,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00186 {285,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00187 {279,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00188 {273,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00189 {267,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00190 {261,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00191 {256,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00192 {251,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00193 {246,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00194 {242,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00195 {237,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00196 {233,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00197 {229,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00198 {225,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00199 {221,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00200 {217,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00201 {214,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00202 {210,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00203 {207,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00204 {203,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00205 {200,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00206 {197,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00207 {194,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00208 {191,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00209 {188,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00210 {186,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00211 {183,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00212 {181,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00213 {178,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00214 {176,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00215 {173,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00216 {171,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00217 {169,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00218 {166,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00219 {164,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00220 {162,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00221 {160,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00222 {158,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00223 {156,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00224 {154,4,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00225 {153,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00226 {151,5,ptn_ClockWise_1x2,ptn_AntiClockWise_1x2,8}, 00227 {298,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00228 {294,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00229 {291,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00230 {288,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00231 {284,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00232 {281,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00233 {278,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00234 {275,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00235 {272,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00236 {269,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00237 {267,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00238 {264,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00239 {261,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00240 {259,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00241 {256,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00242 {253,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00243 {251,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00244 {249,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00245 {246,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00246 {244,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00247 {242,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00248 {239,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00249 {237,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00250 {235,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00251 {233,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00252 {231,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00253 {229,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00254 {227,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00255 {225,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00256 {223,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00257 {221,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00258 {219,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00259 {217,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00260 {215,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00261 {213,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00262 {212,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00263 {210,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00264 {208,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00265 {206,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00266 {205,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00267 {203,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00268 {202,5,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00269 {200,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00270 {198,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00271 {197,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00272 {195,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00273 {194,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00274 {192,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00275 {191,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00276 {190,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00277 {188,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00278 {187,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00279 {186,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00280 {184,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00281 {183,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00282 {182,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00283 {180,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00284 {179,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00285 {178,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00286 {177,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00287 {175,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00288 {174,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00289 {173,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00290 {172,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00291 {171,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00292 {170,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00293 {168,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00294 {167,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00295 {166,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00296 {165,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00297 {164,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00298 {163,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00299 {162,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00300 {161,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00301 {160,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00302 {159,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00303 {158,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00304 {157,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00305 {156,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00306 {155,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00307 {154,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00308 {153,6,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00309 {152,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00310 {151,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00311 {151,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00312 {150,7,ptn_ClockWise_1x1,ptn_AntiClockWise_1x1,4}, 00313 {149,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00314 {148,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00315 {147,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00316 {146,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00317 {145,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00318 {145,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00319 {144,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00320 {143,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00321 {142,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00322 {141,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00323 {141,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00324 {140,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00325 {139,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00326 {138,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00327 {138,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00328 {137,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00329 {136,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00330 {135,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00331 {135,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00332 {134,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00333 {133,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00334 {133,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00335 {132,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00336 {131,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00337 {131,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00338 {130,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00339 {129,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00340 {129,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00341 {128,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00342 {127,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00343 {127,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00344 {126,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00345 {125,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00346 {125,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00347 {124,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00348 {124,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00349 {123,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00350 {122,7,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00351 {122,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00352 {121,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00353 {121,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00354 {120,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00355 {120,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00356 {119,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00357 {119,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00358 {118,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00359 {117,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00360 {117,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00361 {116,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00362 {116,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00363 {115,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00364 {115,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00365 {114,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00366 {114,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00367 {113,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00368 {113,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00369 {112,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00370 {112,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00371 {111,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00372 {111,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00373 {110,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00374 {110,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00375 {109,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00376 {109,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00377 {108,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00378 {108,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00379 {108,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00380 {107,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00381 {107,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00382 {106,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00383 {106,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00384 {105,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00385 {105,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00386 {104,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00387 {104,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00388 {104,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00389 {103,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00390 {103,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00391 {102,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00392 {102,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00393 {102,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00394 {101,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00395 {101,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00396 {100,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4}, 00397 {100,8,ptn_ClockWise_2x2,ptn_AntiClockWise_2x2,4} 00398 }; 00399 #endif 00400 00401 /* member fanctions --------------------------------------------------------- */ 00402 00403 // Constractor 00404 StepperMotor::StepperMotor(PinName x_pin_no, PinName y_pin_no, PinName nx_pin_no, PinName ny_pin_no, motor_dir set_direction) 00405 : _x(x_pin_no), _y(y_pin_no), _nx(nx_pin_no), _ny(ny_pin_no) 00406 { 00407 direction = forward_direction; 00408 forward_direction = set_direction; 00409 backward_direction = (forward_direction == CLOCK_WISE) ? ANTI_CLOCK_WISE : CLOCK_WISE; 00410 } 00411 00412 // Destrutctor 00413 StepperMotor::~StepperMotor() 00414 { 00415 } 00416 00417 // 00418 void StepperMotor::PulseEnable(void) 00419 { 00420 Pulse.attach_us(this,&StepperMotor::SetPulse14us,PULSE_INTERVAL); 00421 } 00422 00423 // 00424 void StepperMotor::PulseDisable(void) 00425 { 00426 Pulse.detach(); 00427 } 00428 00429 void StepperMotor::SetSpeed(int speed) 00430 { 00431 direction = (speed >= 0) ? forward_direction : backward_direction; 00432 00433 speed = abs(speed); 00434 if (speed > MAXSPEED) speed = MAXSPEED; 00435 00436 pwm_ratio = speed_data[speed].pwm_ratio; 00437 max_pulse_count = speed_data[speed].max_pulse_count; 00438 00439 if (direction == CLOCK_WISE) 00440 { 00441 ptn = speed_data[speed].clockwise_ptn; 00442 } 00443 else 00444 { 00445 ptn = speed_data[speed].anticlockwise_ptn; 00446 } 00447 ptn_count = speed_data[speed].ptn_count; 00448 00449 pulse_count = 0; 00450 ptn_index = 0; 00451 00452 pwm_on_count = pwm_ratio; 00453 pwm_off_count = 10 - pwm_ratio; 00454 00455 state = PWM_ON; 00456 } 00457 00458 00459 /* private functions */ 00460 00461 void StepperMotor::SetPulse14us(void) 00462 { 00463 00464 if (++pulse_count == max_pulse_count) 00465 { 00466 pulse_count = 0; 00467 00468 if (++ptn_index == ptn_count) 00469 { 00470 ptn_index = 0; 00471 } 00472 ptn_data = ptn[ptn_index]; 00473 } 00474 00475 if (pwm_ratio == 10) 00476 { 00477 PulseOut(); 00478 } 00479 else if (pwm_ratio == 0) 00480 { 00481 PulseStop(); 00482 } 00483 else 00484 { 00485 switch (state) 00486 { 00487 case PWM_ON: 00488 if (--pwm_on_count !=0) 00489 { 00490 PulseOut(); 00491 } 00492 else 00493 { 00494 pwm_on_count = pwm_ratio; 00495 state = PWM_OFF; 00496 } 00497 break; 00498 case PWM_OFF: 00499 if (--pwm_off_count != 0) 00500 { 00501 PulseStop(); 00502 } 00503 else 00504 { 00505 pwm_off_count = 10 - pwm_ratio; 00506 state = PWM_ON; 00507 } 00508 break; 00509 } 00510 } 00511 } 00512 00513 void StepperMotor::PulseOut(void) 00514 { 00515 //X 00516 if ((ptn_data & 0x01) == 0x01) 00517 { 00518 _x = 1; 00519 } 00520 else 00521 { 00522 _x = 0; 00523 } 00524 //Y 00525 if ((ptn_data & 0x02) == 0x02) 00526 { 00527 _y = 1; 00528 } 00529 else 00530 { 00531 _y = 0; 00532 } 00533 //Negative X 00534 if ((ptn_data & 0x04) == 0x04) 00535 { 00536 _nx = 1; 00537 } 00538 else 00539 { 00540 _nx = 0; 00541 } 00542 //Negative Y 00543 if ((ptn_data & 0x08) == 0x08) 00544 { 00545 _ny = 1; 00546 } 00547 else 00548 { 00549 _ny = 0; 00550 } 00551 } 00552 00553 void StepperMotor::PulseStop(void) 00554 { 00555 _x = 0; 00556 _y = 0; 00557 _nx = 0; 00558 _ny = 0; 00559 }
Generated on Tue Jul 26 2022 22:59:17 by
1.7.2