LPS mod

Committer:
jsanchez
Date:
Mon May 02 13:07:52 2022 +0000
Revision:
7:2ff9788e2827
Parent:
6:7ca2eef852fd
added status enum

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsanchez 6:7ca2eef852fd 1 #include "mbed.h"
jsanchez 6:7ca2eef852fd 2 #include "lib_L6470DC.h"
jsanchez 6:7ca2eef852fd 3
jsanchez 6:7ca2eef852fd 4 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 5 // CONSTRUCTOR //
jsanchez 6:7ca2eef852fd 6 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 7
jsanchez 6:7ca2eef852fd 8 L6470DC::L6470DC(int nMax, PinName mosi, PinName miso, PinName sclk, PinName cs):m_spi(mosi, miso, sclk),m_cs(cs), nMotMax(nMax)
jsanchez 6:7ca2eef852fd 9 {
jsanchez 6:7ca2eef852fd 10 m_cs = 1;
jsanchez 6:7ca2eef852fd 11 m_spi.format(8,3);
jsanchez 6:7ca2eef852fd 12 m_spi.frequency(5000000);
jsanchez 6:7ca2eef852fd 13 }
jsanchez 6:7ca2eef852fd 14
jsanchez 6:7ca2eef852fd 15 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 16 // BASICS_FUNC //
jsanchez 6:7ca2eef852fd 17 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 18
jsanchez 6:7ca2eef852fd 19 unsigned char L6470DC::send(unsigned char nMOT,unsigned char temp)
jsanchez 6:7ca2eef852fd 20 {
jsanchez 6:7ca2eef852fd 21 unsigned char temp0;
jsanchez 6:7ca2eef852fd 22 int i;
jsanchez 6:7ca2eef852fd 23 m_cs = 0;
jsanchez 6:7ca2eef852fd 24 for (i = nMotMax - 1; i >= 0; i--) {
jsanchez 6:7ca2eef852fd 25 if(i==nMOT) temp =(unsigned char) m_spi.write(temp);
jsanchez 6:7ca2eef852fd 26 else temp0 =(unsigned char) m_spi.write(0x00);
jsanchez 6:7ca2eef852fd 27 }
jsanchez 6:7ca2eef852fd 28
jsanchez 6:7ca2eef852fd 29 m_cs = 1;
jsanchez 6:7ca2eef852fd 30 wait_us(1);
jsanchez 6:7ca2eef852fd 31 return(temp);
jsanchez 6:7ca2eef852fd 32 }
jsanchez 6:7ca2eef852fd 33
jsanchez 6:7ca2eef852fd 34 void L6470DC::send_bytes(unsigned char nMOT,unsigned char temp[],int i)
jsanchez 6:7ca2eef852fd 35 {
jsanchez 6:7ca2eef852fd 36 while(0 < i--) {
jsanchez 6:7ca2eef852fd 37 temp[i] = send(nMOT,temp[i]);
jsanchez 6:7ca2eef852fd 38 }
jsanchez 6:7ca2eef852fd 39 }
jsanchez 6:7ca2eef852fd 40
jsanchez 6:7ca2eef852fd 41 void L6470DC::NOP(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 42 {
jsanchez 6:7ca2eef852fd 43 send(nMOT,0x00);
jsanchez 6:7ca2eef852fd 44 }
jsanchez 6:7ca2eef852fd 45
jsanchez 6:7ca2eef852fd 46 void L6470DC::SetParam(unsigned char nMOT,L6470_Register param,int value)
jsanchez 6:7ca2eef852fd 47 {
jsanchez 6:7ca2eef852fd 48 int length,address;
jsanchez 6:7ca2eef852fd 49
jsanchez 6:7ca2eef852fd 50 switch(param) {
jsanchez 6:7ca2eef852fd 51 case ABS_POS:
jsanchez 6:7ca2eef852fd 52 length = LEN_ABS_POS;
jsanchez 6:7ca2eef852fd 53 address = ADD_ABS_POS;
jsanchez 6:7ca2eef852fd 54 break;
jsanchez 6:7ca2eef852fd 55 case EL_POS:
jsanchez 6:7ca2eef852fd 56 length = LEN_EL_POS;
jsanchez 6:7ca2eef852fd 57 address = ADD_EL_POS;
jsanchez 6:7ca2eef852fd 58 break;
jsanchez 6:7ca2eef852fd 59 case MARK:
jsanchez 6:7ca2eef852fd 60 length = LEN_MARK;
jsanchez 6:7ca2eef852fd 61 address = ADD_MARK;
jsanchez 6:7ca2eef852fd 62 break;
jsanchez 6:7ca2eef852fd 63 case SPEED:
jsanchez 6:7ca2eef852fd 64 length = LEN_SPEED;
jsanchez 6:7ca2eef852fd 65 address = ADD_SPEED;
jsanchez 6:7ca2eef852fd 66 break;
jsanchez 6:7ca2eef852fd 67 case ACC:
jsanchez 6:7ca2eef852fd 68 length = LEN_ACC;
jsanchez 6:7ca2eef852fd 69 address = ADD_ACC;
jsanchez 6:7ca2eef852fd 70 break;
jsanchez 6:7ca2eef852fd 71 case DEC:
jsanchez 6:7ca2eef852fd 72 length = LEN_DEC;
jsanchez 6:7ca2eef852fd 73 address = ADD_DEC;
jsanchez 6:7ca2eef852fd 74 break;
jsanchez 6:7ca2eef852fd 75 case MAX_SPEED:
jsanchez 6:7ca2eef852fd 76 length = LEN_MAX_SPEED;
jsanchez 6:7ca2eef852fd 77 address = ADD_MAX_SPEED;
jsanchez 6:7ca2eef852fd 78 break;
jsanchez 6:7ca2eef852fd 79 case MIN_SPEED:
jsanchez 6:7ca2eef852fd 80 length = LEN_MIN_SPEED;
jsanchez 6:7ca2eef852fd 81 address = ADD_MIN_SPEED;
jsanchez 6:7ca2eef852fd 82 break;
jsanchez 6:7ca2eef852fd 83 case KVAL_HOLD:
jsanchez 6:7ca2eef852fd 84 length = LEN_KVAL_HOLD;
jsanchez 6:7ca2eef852fd 85 address = ADD_KVAL_HOLD;
jsanchez 6:7ca2eef852fd 86 break;
jsanchez 6:7ca2eef852fd 87 case KVAL_RUN:
jsanchez 6:7ca2eef852fd 88 length = LEN_KVAL_RUN;
jsanchez 6:7ca2eef852fd 89 address = ADD_KVAL_RUN;
jsanchez 6:7ca2eef852fd 90 break;
jsanchez 6:7ca2eef852fd 91 case KVAL_ACC:
jsanchez 6:7ca2eef852fd 92 length = LEN_KVAL_ACC;
jsanchez 6:7ca2eef852fd 93 address = ADD_KVAL_ACC;
jsanchez 6:7ca2eef852fd 94 break;
jsanchez 6:7ca2eef852fd 95 case KVAL_DEC:
jsanchez 6:7ca2eef852fd 96 length = LEN_KVAL_DEC;
jsanchez 6:7ca2eef852fd 97 address = ADD_KVAL_DEC;
jsanchez 6:7ca2eef852fd 98 break;
jsanchez 6:7ca2eef852fd 99 case INT_SPD:
jsanchez 6:7ca2eef852fd 100 length = LEN_INT_SPD;
jsanchez 6:7ca2eef852fd 101 address = ADD_INT_SPD;
jsanchez 6:7ca2eef852fd 102 break;
jsanchez 6:7ca2eef852fd 103 case ST_SLP:
jsanchez 6:7ca2eef852fd 104 length = LEN_ST_SLP;
jsanchez 6:7ca2eef852fd 105 address = ADD_ST_SLP;
jsanchez 6:7ca2eef852fd 106 break;
jsanchez 6:7ca2eef852fd 107 case FN_SLP_ACC:
jsanchez 6:7ca2eef852fd 108 length = LEN_FN_SLP_ACC;
jsanchez 6:7ca2eef852fd 109 address = ADD_FN_SLP_ACC;
jsanchez 6:7ca2eef852fd 110 break;
jsanchez 6:7ca2eef852fd 111 case FN_SLP_DEC:
jsanchez 6:7ca2eef852fd 112 length = LEN_FN_SLP_DEC;
jsanchez 6:7ca2eef852fd 113 address = ADD_FN_SLP_DEC;
jsanchez 6:7ca2eef852fd 114 break;
jsanchez 6:7ca2eef852fd 115 case K_THERA:
jsanchez 6:7ca2eef852fd 116 length = LEN_K_THERA;
jsanchez 6:7ca2eef852fd 117 address = ADD_K_THERA;
jsanchez 6:7ca2eef852fd 118 break;
jsanchez 6:7ca2eef852fd 119 case ADC_OUT:
jsanchez 6:7ca2eef852fd 120 length = LEN_ADC_OUT;
jsanchez 6:7ca2eef852fd 121 address = ADD_ADC_OUT;
jsanchez 6:7ca2eef852fd 122 break;
jsanchez 6:7ca2eef852fd 123 case OCR_TH:
jsanchez 6:7ca2eef852fd 124 length = LEN_OCR_TH;
jsanchez 6:7ca2eef852fd 125 address = ADD_OCR_TH;
jsanchez 6:7ca2eef852fd 126 break;
jsanchez 6:7ca2eef852fd 127 case STALL_TH:
jsanchez 6:7ca2eef852fd 128 length = LEN_STALL_TH;
jsanchez 6:7ca2eef852fd 129 address = ADD_STALL_TH;
jsanchez 6:7ca2eef852fd 130 break;
jsanchez 6:7ca2eef852fd 131 case FS_SPD:
jsanchez 6:7ca2eef852fd 132 length = LEN_FS_SPD;
jsanchez 6:7ca2eef852fd 133 address = ADD_FS_SPD;
jsanchez 6:7ca2eef852fd 134 break;
jsanchez 6:7ca2eef852fd 135 case STEP_MODE:
jsanchez 6:7ca2eef852fd 136 length = LEN_STEP_MODE;
jsanchez 6:7ca2eef852fd 137 address = ADD_STEP_MODE;
jsanchez 6:7ca2eef852fd 138 break;
jsanchez 6:7ca2eef852fd 139 case ARARM_FN:
jsanchez 6:7ca2eef852fd 140 length = LEN_ARARM_FN;
jsanchez 6:7ca2eef852fd 141 address = ADD_ARARM_FN;
jsanchez 6:7ca2eef852fd 142 break;
jsanchez 6:7ca2eef852fd 143 case CONFIG:
jsanchez 6:7ca2eef852fd 144 length = LEN_CONFIG;
jsanchez 6:7ca2eef852fd 145 address = ADD_CONFIG;
jsanchez 6:7ca2eef852fd 146 break;
jsanchez 6:7ca2eef852fd 147 case STATUS:
jsanchez 6:7ca2eef852fd 148 length = LEN_STATUS;
jsanchez 6:7ca2eef852fd 149 address = ADD_STATUS;
jsanchez 6:7ca2eef852fd 150 break;
jsanchez 6:7ca2eef852fd 151 default:
jsanchez 6:7ca2eef852fd 152 length = 0;
jsanchez 6:7ca2eef852fd 153 address = 0;
jsanchez 6:7ca2eef852fd 154 break;
jsanchez 6:7ca2eef852fd 155
jsanchez 6:7ca2eef852fd 156 }
jsanchez 6:7ca2eef852fd 157
jsanchez 6:7ca2eef852fd 158 int n = length/8;
jsanchez 6:7ca2eef852fd 159 int m = length%8;
jsanchez 6:7ca2eef852fd 160 if(m==0) {
jsanchez 6:7ca2eef852fd 161 unsigned char temp[n+1];
jsanchez 6:7ca2eef852fd 162 temp[n] = 0x00|(unsigned char)(address);
jsanchez 6:7ca2eef852fd 163 while(0 < n--) {
jsanchez 6:7ca2eef852fd 164 temp[n]=(unsigned char) (value >> 8*n)&0xFF;
jsanchez 6:7ca2eef852fd 165 }
jsanchez 6:7ca2eef852fd 166 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 167 } else {
jsanchez 6:7ca2eef852fd 168 unsigned char temp[n+2];
jsanchez 6:7ca2eef852fd 169 temp[n+1] = 0x00|(unsigned char)(address);
jsanchez 6:7ca2eef852fd 170 temp[n] =(unsigned char) (value >> 8*n)&~(0xff<<m);
jsanchez 6:7ca2eef852fd 171 while(0 < n--) {
jsanchez 6:7ca2eef852fd 172 temp[n]=(unsigned char) (value >> 8*n)&0xFF;
jsanchez 6:7ca2eef852fd 173 }
jsanchez 6:7ca2eef852fd 174 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 175 }
jsanchez 6:7ca2eef852fd 176 }
jsanchez 6:7ca2eef852fd 177
jsanchez 6:7ca2eef852fd 178 int L6470DC::GetParam(unsigned char nMOT,L6470_Register param)
jsanchez 6:7ca2eef852fd 179 {
jsanchez 6:7ca2eef852fd 180 int value = 0;
jsanchez 6:7ca2eef852fd 181 int length,address;
jsanchez 6:7ca2eef852fd 182 switch(param) {
jsanchez 6:7ca2eef852fd 183 case ABS_POS:
jsanchez 6:7ca2eef852fd 184 length = LEN_ABS_POS;
jsanchez 6:7ca2eef852fd 185 address = ADD_ABS_POS;
jsanchez 6:7ca2eef852fd 186 break;
jsanchez 6:7ca2eef852fd 187 case EL_POS:
jsanchez 6:7ca2eef852fd 188 length = LEN_EL_POS;
jsanchez 6:7ca2eef852fd 189 address = ADD_EL_POS;
jsanchez 6:7ca2eef852fd 190 break;
jsanchez 6:7ca2eef852fd 191 case MARK:
jsanchez 6:7ca2eef852fd 192 length = LEN_MARK;
jsanchez 6:7ca2eef852fd 193 address = ADD_MARK;
jsanchez 6:7ca2eef852fd 194 break;
jsanchez 6:7ca2eef852fd 195 case SPEED:
jsanchez 6:7ca2eef852fd 196 length = LEN_SPEED;
jsanchez 6:7ca2eef852fd 197 address = ADD_SPEED;
jsanchez 6:7ca2eef852fd 198 break;
jsanchez 6:7ca2eef852fd 199 case ACC:
jsanchez 6:7ca2eef852fd 200 length = LEN_ACC;
jsanchez 6:7ca2eef852fd 201 address = ADD_ACC;
jsanchez 6:7ca2eef852fd 202 break;
jsanchez 6:7ca2eef852fd 203 case DEC:
jsanchez 6:7ca2eef852fd 204 length = LEN_DEC;
jsanchez 6:7ca2eef852fd 205 address = ADD_DEC;
jsanchez 6:7ca2eef852fd 206 break;
jsanchez 6:7ca2eef852fd 207 case MAX_SPEED:
jsanchez 6:7ca2eef852fd 208 length = LEN_MAX_SPEED;
jsanchez 6:7ca2eef852fd 209 address = ADD_MAX_SPEED;
jsanchez 6:7ca2eef852fd 210 break;
jsanchez 6:7ca2eef852fd 211 case MIN_SPEED:
jsanchez 6:7ca2eef852fd 212 length = LEN_MIN_SPEED;
jsanchez 6:7ca2eef852fd 213 address = ADD_MIN_SPEED;
jsanchez 6:7ca2eef852fd 214 break;
jsanchez 6:7ca2eef852fd 215 case KVAL_HOLD:
jsanchez 6:7ca2eef852fd 216 length = LEN_KVAL_HOLD;
jsanchez 6:7ca2eef852fd 217 address = ADD_KVAL_HOLD;
jsanchez 6:7ca2eef852fd 218 break;
jsanchez 6:7ca2eef852fd 219 case KVAL_RUN:
jsanchez 6:7ca2eef852fd 220 length = LEN_KVAL_RUN;
jsanchez 6:7ca2eef852fd 221 address = ADD_KVAL_RUN;
jsanchez 6:7ca2eef852fd 222 break;
jsanchez 6:7ca2eef852fd 223 case KVAL_ACC:
jsanchez 6:7ca2eef852fd 224 length = LEN_KVAL_ACC;
jsanchez 6:7ca2eef852fd 225 address = ADD_KVAL_ACC;
jsanchez 6:7ca2eef852fd 226 break;
jsanchez 6:7ca2eef852fd 227 case KVAL_DEC:
jsanchez 6:7ca2eef852fd 228 length = LEN_KVAL_DEC;
jsanchez 6:7ca2eef852fd 229 address = ADD_KVAL_DEC;
jsanchez 6:7ca2eef852fd 230 break;
jsanchez 6:7ca2eef852fd 231 case INT_SPD:
jsanchez 6:7ca2eef852fd 232 length = LEN_INT_SPD;
jsanchez 6:7ca2eef852fd 233 address = ADD_INT_SPD;
jsanchez 6:7ca2eef852fd 234 break;
jsanchez 6:7ca2eef852fd 235 case ST_SLP:
jsanchez 6:7ca2eef852fd 236 length = LEN_ST_SLP;
jsanchez 6:7ca2eef852fd 237 address = ADD_ST_SLP;
jsanchez 6:7ca2eef852fd 238 break;
jsanchez 6:7ca2eef852fd 239 case FN_SLP_ACC:
jsanchez 6:7ca2eef852fd 240 length = LEN_FN_SLP_ACC;
jsanchez 6:7ca2eef852fd 241 address = ADD_FN_SLP_ACC;
jsanchez 6:7ca2eef852fd 242 break;
jsanchez 6:7ca2eef852fd 243 case FN_SLP_DEC:
jsanchez 6:7ca2eef852fd 244 length = LEN_FN_SLP_DEC;
jsanchez 6:7ca2eef852fd 245 address = ADD_FN_SLP_DEC;
jsanchez 6:7ca2eef852fd 246 break;
jsanchez 6:7ca2eef852fd 247 case K_THERA:
jsanchez 6:7ca2eef852fd 248 length = LEN_K_THERA;
jsanchez 6:7ca2eef852fd 249 address = ADD_K_THERA;
jsanchez 6:7ca2eef852fd 250 break;
jsanchez 6:7ca2eef852fd 251 case ADC_OUT:
jsanchez 6:7ca2eef852fd 252 length = LEN_ADC_OUT;
jsanchez 6:7ca2eef852fd 253 address = ADD_ADC_OUT;
jsanchez 6:7ca2eef852fd 254 break;
jsanchez 6:7ca2eef852fd 255 case OCR_TH:
jsanchez 6:7ca2eef852fd 256 length = LEN_OCR_TH;
jsanchez 6:7ca2eef852fd 257 address = ADD_OCR_TH;
jsanchez 6:7ca2eef852fd 258 break;
jsanchez 6:7ca2eef852fd 259 case STALL_TH:
jsanchez 6:7ca2eef852fd 260 length = LEN_STALL_TH;
jsanchez 6:7ca2eef852fd 261 address = ADD_STALL_TH;
jsanchez 6:7ca2eef852fd 262 break;
jsanchez 6:7ca2eef852fd 263 case FS_SPD:
jsanchez 6:7ca2eef852fd 264 length = LEN_FS_SPD;
jsanchez 6:7ca2eef852fd 265 address = ADD_FS_SPD;
jsanchez 6:7ca2eef852fd 266 break;
jsanchez 6:7ca2eef852fd 267 case STEP_MODE:
jsanchez 6:7ca2eef852fd 268 length = LEN_STEP_MODE;
jsanchez 6:7ca2eef852fd 269 address = ADD_STEP_MODE;
jsanchez 6:7ca2eef852fd 270 break;
jsanchez 6:7ca2eef852fd 271 case ARARM_FN:
jsanchez 6:7ca2eef852fd 272 length = LEN_ARARM_FN;
jsanchez 6:7ca2eef852fd 273 address = ADD_ARARM_FN;
jsanchez 6:7ca2eef852fd 274 break;
jsanchez 6:7ca2eef852fd 275 case CONFIG:
jsanchez 6:7ca2eef852fd 276 length = LEN_CONFIG;
jsanchez 6:7ca2eef852fd 277 address = ADD_CONFIG;
jsanchez 6:7ca2eef852fd 278 break;
jsanchez 6:7ca2eef852fd 279 case STATUS:
jsanchez 6:7ca2eef852fd 280 length = LEN_STATUS;
jsanchez 6:7ca2eef852fd 281 address = ADD_STATUS;
jsanchez 6:7ca2eef852fd 282 break;
jsanchez 6:7ca2eef852fd 283 default:
jsanchez 6:7ca2eef852fd 284 length = 0;
jsanchez 6:7ca2eef852fd 285 address = 0;
jsanchez 6:7ca2eef852fd 286 break;
jsanchez 6:7ca2eef852fd 287
jsanchez 6:7ca2eef852fd 288 }
jsanchez 6:7ca2eef852fd 289
jsanchez 6:7ca2eef852fd 290 int n = length/8;
jsanchez 6:7ca2eef852fd 291 int m = length%8;
jsanchez 6:7ca2eef852fd 292 if(m==0) {
jsanchez 6:7ca2eef852fd 293 unsigned char temp[n+1];
jsanchez 6:7ca2eef852fd 294 for(int i = 0; i < n+1; i++) {
jsanchez 6:7ca2eef852fd 295 temp[i]=0;
jsanchez 6:7ca2eef852fd 296 }
jsanchez 6:7ca2eef852fd 297 temp[n] = 0x20|(unsigned char)(address);
jsanchez 6:7ca2eef852fd 298 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 299 while(0 < n--) {
jsanchez 6:7ca2eef852fd 300 value |= (int)temp[n] << 8*n;
jsanchez 6:7ca2eef852fd 301 }
jsanchez 6:7ca2eef852fd 302 } else {
jsanchez 6:7ca2eef852fd 303 n++;
jsanchez 6:7ca2eef852fd 304 unsigned char temp[n+1];
jsanchez 6:7ca2eef852fd 305 for(int i = 0; i < n+2; i++) {
jsanchez 6:7ca2eef852fd 306 temp[i]=0;
jsanchez 6:7ca2eef852fd 307 }
jsanchez 6:7ca2eef852fd 308 temp[n] = 0x20|(unsigned char)(address);
jsanchez 6:7ca2eef852fd 309 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 310 while(0 < n--) {
jsanchez 6:7ca2eef852fd 311 value |= (int)temp[n] << 8*n;
jsanchez 6:7ca2eef852fd 312 }
jsanchez 6:7ca2eef852fd 313 }
jsanchez 6:7ca2eef852fd 314
jsanchez 6:7ca2eef852fd 315 return(value);
jsanchez 6:7ca2eef852fd 316 }
jsanchez 6:7ca2eef852fd 317
jsanchez 6:7ca2eef852fd 318
jsanchez 6:7ca2eef852fd 319
jsanchez 7:2ff9788e2827 320 void L6470DC::Run(unsigned char nMOT,unsigned char dir,float spd)
jsanchez 6:7ca2eef852fd 321 {
jsanchez 6:7ca2eef852fd 322 unsigned char temp[4];
jsanchez 7:2ff9788e2827 323 int tmp_spd = L6470_Step_s_2_Speed(spd);
jsanchez 6:7ca2eef852fd 324 temp[3] = 0x50|dir;
jsanchez 7:2ff9788e2827 325 temp[2] = (unsigned char) (tmp_spd >> 16)&0x0F;
jsanchez 7:2ff9788e2827 326 temp[1] = (unsigned char) (tmp_spd >> 8)&0xFF;
jsanchez 7:2ff9788e2827 327 temp[0] = (unsigned char) (tmp_spd >> 0)&0xFF;
jsanchez 6:7ca2eef852fd 328 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 329 }
jsanchez 6:7ca2eef852fd 330
jsanchez 6:7ca2eef852fd 331 void L6470DC::StepClock(unsigned char nMOT,unsigned char dir)
jsanchez 6:7ca2eef852fd 332 {
jsanchez 6:7ca2eef852fd 333 send(nMOT,0x58|dir);
jsanchez 6:7ca2eef852fd 334 }
jsanchez 6:7ca2eef852fd 335
jsanchez 6:7ca2eef852fd 336 void L6470DC::Move(unsigned char nMOT,unsigned char dir,int n_step)
jsanchez 6:7ca2eef852fd 337 {
jsanchez 6:7ca2eef852fd 338 unsigned char temp[4];
jsanchez 6:7ca2eef852fd 339 temp[3] = 0x40|dir;
jsanchez 6:7ca2eef852fd 340 temp[2] = (unsigned char) (n_step >> 16)&0x3F;
jsanchez 6:7ca2eef852fd 341 temp[1] = (unsigned char) (n_step >> 8)&0xFF;
jsanchez 6:7ca2eef852fd 342 temp[0] = (unsigned char) (n_step >> 0)&0xFF;
jsanchez 6:7ca2eef852fd 343 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 344 }
jsanchez 6:7ca2eef852fd 345
jsanchez 6:7ca2eef852fd 346 void L6470DC::GoTo(unsigned char nMOT,int abs_pos)
jsanchez 6:7ca2eef852fd 347 {
jsanchez 6:7ca2eef852fd 348 unsigned char temp[4];
jsanchez 6:7ca2eef852fd 349 temp[3] = 0x60;
jsanchez 6:7ca2eef852fd 350 temp[2] = (unsigned char) (abs_pos >> 16)&0x3F;
jsanchez 6:7ca2eef852fd 351 temp[1] = (unsigned char) (abs_pos >> 8)&0xFF;
jsanchez 6:7ca2eef852fd 352 temp[0] = (unsigned char) (abs_pos >> 0)&0xFF;
jsanchez 6:7ca2eef852fd 353 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 354 }
jsanchez 6:7ca2eef852fd 355
jsanchez 6:7ca2eef852fd 356 void L6470DC::GoTo_DIR(unsigned char nMOT,unsigned char dir,int abs_pos)
jsanchez 6:7ca2eef852fd 357 {
jsanchez 6:7ca2eef852fd 358 unsigned char temp[4];
jsanchez 6:7ca2eef852fd 359 temp[3] = 0x68|dir;
jsanchez 6:7ca2eef852fd 360 temp[2] = (unsigned char) (abs_pos >> 16)&0x3F;
jsanchez 6:7ca2eef852fd 361 temp[1] = (unsigned char) (abs_pos >> 8)&0xFF;
jsanchez 6:7ca2eef852fd 362 temp[0] = (unsigned char) (abs_pos >> 0)&0xFF;
jsanchez 6:7ca2eef852fd 363 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 364 }
jsanchez 6:7ca2eef852fd 365
jsanchez 6:7ca2eef852fd 366 void L6470DC::GoUntil(unsigned char nMOT,unsigned char act,unsigned char dir,int spd)
jsanchez 6:7ca2eef852fd 367 {
jsanchez 6:7ca2eef852fd 368 unsigned char temp[4];
jsanchez 6:7ca2eef852fd 369 temp[3] = 0x82|(act << 3)|dir;
jsanchez 6:7ca2eef852fd 370 temp[2] = (unsigned char) (spd >> 16)&0x0F;
jsanchez 6:7ca2eef852fd 371 temp[1] = (unsigned char) (spd >> 8)&0xFF;
jsanchez 6:7ca2eef852fd 372 temp[0] = (unsigned char) (spd >> 0)&0xFF;
jsanchez 6:7ca2eef852fd 373 send_bytes(nMOT,temp,sizeof temp/sizeof temp[0]);
jsanchez 6:7ca2eef852fd 374 }
jsanchez 6:7ca2eef852fd 375
jsanchez 6:7ca2eef852fd 376 void L6470DC::ReleaseSW(unsigned char nMOT,unsigned char act,unsigned char dir)
jsanchez 6:7ca2eef852fd 377 {
jsanchez 6:7ca2eef852fd 378 send(nMOT,0x92|(act << 3)|dir);
jsanchez 6:7ca2eef852fd 379 }
jsanchez 6:7ca2eef852fd 380
jsanchez 6:7ca2eef852fd 381 void L6470DC::GoHome(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 382 {
jsanchez 6:7ca2eef852fd 383 send(nMOT,0x70);
jsanchez 6:7ca2eef852fd 384 }
jsanchez 6:7ca2eef852fd 385
jsanchez 6:7ca2eef852fd 386 void L6470DC::GoMark(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 387 {
jsanchez 6:7ca2eef852fd 388 send(nMOT,0x78);
jsanchez 6:7ca2eef852fd 389 }
jsanchez 6:7ca2eef852fd 390
jsanchez 6:7ca2eef852fd 391 void L6470DC::ResetPos(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 392 {
jsanchez 6:7ca2eef852fd 393 send(nMOT,0xD8);
jsanchez 6:7ca2eef852fd 394 }
jsanchez 6:7ca2eef852fd 395
jsanchez 6:7ca2eef852fd 396 void L6470DC::ResetDevice(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 397 {
jsanchez 6:7ca2eef852fd 398 send(nMOT,0xC0);
jsanchez 6:7ca2eef852fd 399 }
jsanchez 6:7ca2eef852fd 400
jsanchez 6:7ca2eef852fd 401 void L6470DC::SoftStop(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 402 {
jsanchez 6:7ca2eef852fd 403 send(nMOT,0xB0);
jsanchez 6:7ca2eef852fd 404 }
jsanchez 6:7ca2eef852fd 405
jsanchez 6:7ca2eef852fd 406 void L6470DC::HardStop(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 407 {
jsanchez 6:7ca2eef852fd 408 send(nMOT,0xB8);
jsanchez 6:7ca2eef852fd 409 }
jsanchez 6:7ca2eef852fd 410
jsanchez 6:7ca2eef852fd 411
jsanchez 6:7ca2eef852fd 412 void L6470DC::SoftHiZ(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 413 {
jsanchez 6:7ca2eef852fd 414 send(nMOT,0xA0);
jsanchez 6:7ca2eef852fd 415 }
jsanchez 6:7ca2eef852fd 416
jsanchez 6:7ca2eef852fd 417 void L6470DC::HardHiZ(unsigned char nMOT)
jsanchez 6:7ca2eef852fd 418 {
jsanchez 6:7ca2eef852fd 419 send(nMOT,0xA8);
jsanchez 6:7ca2eef852fd 420 }
jsanchez 6:7ca2eef852fd 421
jsanchez 6:7ca2eef852fd 422 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 423 // ADVANCED_FUNC //
jsanchez 6:7ca2eef852fd 424 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 425
jsanchez 6:7ca2eef852fd 426 void L6470DC::Config(unsigned char nMOT, L6470_MotorConf *conf)
jsanchez 6:7ca2eef852fd 427 {
jsanchez 6:7ca2eef852fd 428 L6470_MotorConf *MotorParameterData = (L6470_MotorConf *) conf;
jsanchez 6:7ca2eef852fd 429 StepperMotorRegister MotorRegister;
jsanchez 7:2ff9788e2827 430
jsanchez 6:7ca2eef852fd 431 ResetDevice(nMOT);
jsanchez 6:7ca2eef852fd 432
jsanchez 6:7ca2eef852fd 433 MotorRegister.ACC = L6470_Step_s2_2_Acc(MotorParameterData->acc);
jsanchez 6:7ca2eef852fd 434 MotorRegister.DEC = L6470_Step_s2_2_Dec(MotorParameterData->dec);
jsanchez 6:7ca2eef852fd 435 MotorRegister.MAX_SPEED = L6470_Step_s_2_MaxSpeed(MotorParameterData->maxspeed);
jsanchez 6:7ca2eef852fd 436 MotorRegister.MIN_SPEED = L6470_Step_s_2_MinSpeed(MotorParameterData->minspeed);
jsanchez 6:7ca2eef852fd 437 MotorRegister.FS_SPD = L6470_Step_s_2_FsSpd(MotorParameterData->fsspd);
jsanchez 6:7ca2eef852fd 438 MotorRegister.KVAL_HOLD = (uint8_t)((float)((float)(MotorParameterData->kvalhold * 256) / (MotorParameterData->motorvoltage)));
jsanchez 6:7ca2eef852fd 439 MotorRegister.KVAL_RUN = (uint8_t)((float)((float)(MotorParameterData->kvalrun * 256) / (MotorParameterData->motorvoltage)));
jsanchez 6:7ca2eef852fd 440 MotorRegister.KVAL_ACC = (uint8_t)((float)((float)(MotorParameterData->kvalacc * 256) / (MotorParameterData->motorvoltage)));
jsanchez 6:7ca2eef852fd 441 MotorRegister.KVAL_DEC = (uint8_t)((float)((float)(MotorParameterData->kvaldec * 256) / (MotorParameterData->motorvoltage)));
jsanchez 6:7ca2eef852fd 442 MotorRegister.INT_SPEED = L6470_Step_s_2_IntSpeed(MotorParameterData->intspeed);
jsanchez 6:7ca2eef852fd 443 MotorRegister.ST_SLP = L6470_s_Step_2_StSlp(MotorParameterData->stslp);
jsanchez 6:7ca2eef852fd 444 MotorRegister.FN_SLP_ACC = L6470_s_Step_2_FnSlpAcc(MotorParameterData->fnslpacc);
jsanchez 6:7ca2eef852fd 445 MotorRegister.FN_SLP_DEC = L6470_s_Step_2_FnSlpDec(MotorParameterData->fnslpdec);
jsanchez 6:7ca2eef852fd 446 MotorRegister.K_THERM = MotorParameterData->kterm;
jsanchez 6:7ca2eef852fd 447 MotorRegister.OCD_TH = L6470_mA_2_OcdTh(MotorParameterData->ocdth);
jsanchez 6:7ca2eef852fd 448 MotorRegister.STALL_TH = L6470_mA_2_StallTh(MotorParameterData->stallth);
jsanchez 6:7ca2eef852fd 449 MotorRegister.ALARM_EN = MotorParameterData->alarmen;
jsanchez 6:7ca2eef852fd 450 MotorRegister.CONFIG = MotorParameterData->config;
jsanchez 6:7ca2eef852fd 451 MotorRegister.STEP_MODE = MotorParameterData->step_sel;
jsanchez 6:7ca2eef852fd 452
jsanchez 6:7ca2eef852fd 453 /* Write the L6470 registers with the prepared data */
jsanchez 6:7ca2eef852fd 454 SetParam(nMOT, ACC, MotorRegister.ACC);
jsanchez 6:7ca2eef852fd 455 SetParam(nMOT, DEC, MotorRegister.DEC);
jsanchez 6:7ca2eef852fd 456 SetParam(nMOT, MAX_SPEED, MotorRegister.MAX_SPEED);
jsanchez 6:7ca2eef852fd 457 SetParam(nMOT, MIN_SPEED, MotorRegister.MIN_SPEED);
jsanchez 6:7ca2eef852fd 458 SetParam(nMOT, FS_SPD, MotorRegister.FS_SPD);
jsanchez 6:7ca2eef852fd 459 SetParam(nMOT, KVAL_HOLD, MotorRegister.KVAL_HOLD);
jsanchez 6:7ca2eef852fd 460 SetParam(nMOT, KVAL_RUN, MotorRegister.KVAL_RUN);
jsanchez 6:7ca2eef852fd 461 SetParam(nMOT, KVAL_ACC, MotorRegister.KVAL_ACC);
jsanchez 6:7ca2eef852fd 462 SetParam(nMOT, KVAL_DEC, MotorRegister.KVAL_DEC);
jsanchez 6:7ca2eef852fd 463 SetParam(nMOT, INT_SPD, MotorRegister.INT_SPEED);
jsanchez 6:7ca2eef852fd 464 SetParam(nMOT, ST_SLP, MotorRegister.ST_SLP);
jsanchez 6:7ca2eef852fd 465 SetParam(nMOT, FN_SLP_ACC, MotorRegister.FN_SLP_ACC);
jsanchez 6:7ca2eef852fd 466 SetParam(nMOT, FN_SLP_DEC, MotorRegister.FN_SLP_DEC);
jsanchez 6:7ca2eef852fd 467 SetParam(nMOT, K_THERA, MotorRegister.K_THERM);
jsanchez 6:7ca2eef852fd 468 SetParam(nMOT, OCR_TH, MotorRegister.OCD_TH);
jsanchez 6:7ca2eef852fd 469 SetParam(nMOT, STALL_TH, MotorRegister.STALL_TH);
jsanchez 6:7ca2eef852fd 470 SetParam(nMOT, STEP_MODE, MotorRegister.STEP_MODE);
jsanchez 6:7ca2eef852fd 471 SetParam(nMOT, ARARM_FN, MotorRegister.ALARM_EN);
jsanchez 6:7ca2eef852fd 472 SetParam(nMOT, CONFIG, MotorRegister.CONFIG);
jsanchez 6:7ca2eef852fd 473 }
jsanchez 6:7ca2eef852fd 474
jsanchez 6:7ca2eef852fd 475 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 476
jsanchez 6:7ca2eef852fd 477 int L6470DC::GetPosition(int nMOT)
jsanchez 6:7ca2eef852fd 478 {
jsanchez 6:7ca2eef852fd 479 return L6470_AbsPos_2_Position(GetParam(nMOT, ABS_POS));
jsanchez 6:7ca2eef852fd 480 }
jsanchez 6:7ca2eef852fd 481
jsanchez 6:7ca2eef852fd 482 int L6470DC::GetMark(int nMOT)
jsanchez 6:7ca2eef852fd 483 {
jsanchez 6:7ca2eef852fd 484 return L6470_AbsPos_2_Position(GetParam(nMOT, MARK));
jsanchez 6:7ca2eef852fd 485 }
jsanchez 6:7ca2eef852fd 486
jsanchez 6:7ca2eef852fd 487 int L6470DC::GetSpeed(int nMOT)
jsanchez 6:7ca2eef852fd 488 {
jsanchez 7:2ff9788e2827 489 return L6470_Speed_2_Step_s(GetParam(nMOT, SPEED));
jsanchez 7:2ff9788e2827 490 }
jsanchez 7:2ff9788e2827 491
jsanchez 7:2ff9788e2827 492 int L6470DC::GetStatus(int nMOT, FlagId_t FlagId)
jsanchez 7:2ff9788e2827 493 {
jsanchez 7:2ff9788e2827 494 int status = GetParam(nMOT, STATUS);
jsanchez 7:2ff9788e2827 495 int ack = -1;
jsanchez 7:2ff9788e2827 496
jsanchez 7:2ff9788e2827 497 switch(FlagId) {
jsanchez 7:2ff9788e2827 498 case MOT_STATUS_ID:
jsanchez 7:2ff9788e2827 499 ack = status & (3 << MOT_STATUS_ID);
jsanchez 7:2ff9788e2827 500 return ack >> MOT_STATUS_ID;
jsanchez 7:2ff9788e2827 501 break;
jsanchez 7:2ff9788e2827 502
jsanchez 7:2ff9788e2827 503 default :
jsanchez 7:2ff9788e2827 504 ack = status & (1 << FlagId);
jsanchez 7:2ff9788e2827 505 return ack >> FlagId;
jsanchez 7:2ff9788e2827 506 break;
jsanchez 7:2ff9788e2827 507 }
jsanchez 6:7ca2eef852fd 508 }
jsanchez 6:7ca2eef852fd 509
jsanchez 6:7ca2eef852fd 510 void L6470DC::SetHome(int nMOT)
jsanchez 6:7ca2eef852fd 511 {
jsanchez 6:7ca2eef852fd 512 ResetPos(nMOT);
jsanchez 6:7ca2eef852fd 513 }
jsanchez 6:7ca2eef852fd 514
jsanchez 6:7ca2eef852fd 515 void L6470DC::SetMaxSpeed(int nMOT, int speed)
jsanchez 6:7ca2eef852fd 516 {
jsanchez 7:2ff9788e2827 517 SetParam(nMOT, MAX_SPEED, L6470_Step_s_2_MaxSpeed(speed));
jsanchez 6:7ca2eef852fd 518 }
jsanchez 6:7ca2eef852fd 519
jsanchez 6:7ca2eef852fd 520 void L6470DC::SetMark(int nMOT, int mark)
jsanchez 6:7ca2eef852fd 521 {
jsanchez 6:7ca2eef852fd 522 SetParam(nMOT, MARK, L6470_Position_2_AbsPos(mark));
jsanchez 6:7ca2eef852fd 523 }
jsanchez 6:7ca2eef852fd 524
jsanchez 6:7ca2eef852fd 525
jsanchez 6:7ca2eef852fd 526 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 527 // CONVERSIONS //
jsanchez 6:7ca2eef852fd 528 ////////////////////////////////////////////////////////////////////////////////
jsanchez 6:7ca2eef852fd 529
jsanchez 6:7ca2eef852fd 530 int32_t L6470DC::L6470_AbsPos_2_Position(uint32_t AbsPos)
jsanchez 6:7ca2eef852fd 531 {
jsanchez 7:2ff9788e2827 532
jsanchez 6:7ca2eef852fd 533 if (AbsPos > L6470_MAX_POSITION)
jsanchez 6:7ca2eef852fd 534 return (AbsPos - (L6470_POSITION_RANGE + 1));
jsanchez 6:7ca2eef852fd 535 else
jsanchez 7:2ff9788e2827 536
jsanchez 7:2ff9788e2827 537 return AbsPos;
jsanchez 6:7ca2eef852fd 538 }
jsanchez 6:7ca2eef852fd 539
jsanchez 6:7ca2eef852fd 540 uint32_t L6470DC::L6470_Position_2_AbsPos(int32_t Position)
jsanchez 6:7ca2eef852fd 541 {
jsanchez 7:2ff9788e2827 542 if ((Position >= 0) && (Position <= L6470_MAX_POSITION))
jsanchez 7:2ff9788e2827 543 return Position;
jsanchez 7:2ff9788e2827 544 else {
jsanchez 7:2ff9788e2827 545 if ((Position >= L6470_MIN_POSITION) && (Position < 0))
jsanchez 7:2ff9788e2827 546 return (Position + (L6470_POSITION_RANGE + 1));
jsanchez 7:2ff9788e2827 547 else
jsanchez 7:2ff9788e2827 548 return (L6470_POSITION_RANGE + 1); // OVF
jsanchez 7:2ff9788e2827 549 }
jsanchez 6:7ca2eef852fd 550 }
jsanchez 6:7ca2eef852fd 551
jsanchez 6:7ca2eef852fd 552 float L6470DC::L6470_Speed_2_Step_s(uint32_t Speed)
jsanchez 6:7ca2eef852fd 553 {
jsanchez 6:7ca2eef852fd 554 return (Speed * ((float)14.9012e-3));
jsanchez 6:7ca2eef852fd 555 }
jsanchez 6:7ca2eef852fd 556
jsanchez 6:7ca2eef852fd 557 uint32_t L6470DC::L6470_Step_s_2_Speed(float Step_s)
jsanchez 6:7ca2eef852fd 558 {
jsanchez 7:2ff9788e2827 559 //if (Step_s <= (L6470_MAX_SPEED * ((float)14.9012e-3)))
jsanchez 7:2ff9788e2827 560 return (uint32_t)(Step_s / ((float)14.9012e-3));
jsanchez 7:2ff9788e2827 561 //else
jsanchez 7:2ff9788e2827 562 //return 0;
jsanchez 6:7ca2eef852fd 563 }
jsanchez 6:7ca2eef852fd 564
jsanchez 6:7ca2eef852fd 565 float L6470DC::L6470_Acc_2_Step_s2(uint16_t Acc)
jsanchez 6:7ca2eef852fd 566 {
jsanchez 6:7ca2eef852fd 567 if (Acc <= L6470_MAX_ACC)
jsanchez 6:7ca2eef852fd 568 return (Acc * ((float)1.4552e1));
jsanchez 6:7ca2eef852fd 569 else
jsanchez 6:7ca2eef852fd 570 return 0;
jsanchez 6:7ca2eef852fd 571 }
jsanchez 6:7ca2eef852fd 572
jsanchez 6:7ca2eef852fd 573 uint16_t L6470DC::L6470_Step_s2_2_Acc(float Step_s2)
jsanchez 6:7ca2eef852fd 574 {
jsanchez 6:7ca2eef852fd 575 if (Step_s2 <= (L6470_MAX_ACC * ((float)1.4552e1)))
jsanchez 6:7ca2eef852fd 576 return (uint16_t)(Step_s2 / ((float)1.4552e1));
jsanchez 6:7ca2eef852fd 577 else
jsanchez 6:7ca2eef852fd 578 return 0;
jsanchez 6:7ca2eef852fd 579 }
jsanchez 6:7ca2eef852fd 580
jsanchez 6:7ca2eef852fd 581 float L6470DC::L6470_Dec_2_Step_s2(uint16_t Dec)
jsanchez 6:7ca2eef852fd 582 {
jsanchez 6:7ca2eef852fd 583 if (Dec <= L6470_MAX_DEC)
jsanchez 6:7ca2eef852fd 584 return (Dec * ((float)1.4552e1));
jsanchez 6:7ca2eef852fd 585 else
jsanchez 6:7ca2eef852fd 586 return 0;
jsanchez 6:7ca2eef852fd 587 }
jsanchez 6:7ca2eef852fd 588
jsanchez 6:7ca2eef852fd 589 uint16_t L6470DC::L6470_Step_s2_2_Dec(float Step_s2)
jsanchez 6:7ca2eef852fd 590 {
jsanchez 6:7ca2eef852fd 591 if (Step_s2 <= (L6470_MAX_DEC * ((float)1.4552e1)))
jsanchez 6:7ca2eef852fd 592 return (uint16_t)(Step_s2 / ((float)1.4552e1));
jsanchez 6:7ca2eef852fd 593 else
jsanchez 6:7ca2eef852fd 594 return 0;
jsanchez 6:7ca2eef852fd 595 }
jsanchez 6:7ca2eef852fd 596
jsanchez 6:7ca2eef852fd 597 float L6470DC::L6470_MaxSpeed_2_Step_s(uint16_t MaxSpeed)
jsanchez 6:7ca2eef852fd 598 {
jsanchez 6:7ca2eef852fd 599 if (MaxSpeed <= L6470_MAX_MAX_SPEED)
jsanchez 6:7ca2eef852fd 600 return (MaxSpeed * ((float)15.2588));
jsanchez 6:7ca2eef852fd 601 else
jsanchez 6:7ca2eef852fd 602 return 0;
jsanchez 6:7ca2eef852fd 603 }
jsanchez 6:7ca2eef852fd 604
jsanchez 6:7ca2eef852fd 605 uint16_t L6470DC::L6470_Step_s_2_MaxSpeed(float Step_s)
jsanchez 6:7ca2eef852fd 606 {
jsanchez 6:7ca2eef852fd 607 if (Step_s <= (L6470_MAX_MAX_SPEED * ((float)15.2588)))
jsanchez 6:7ca2eef852fd 608 return (uint16_t)(Step_s / ((float)15.2588));
jsanchez 6:7ca2eef852fd 609 else
jsanchez 6:7ca2eef852fd 610 return 0;
jsanchez 6:7ca2eef852fd 611 }
jsanchez 6:7ca2eef852fd 612
jsanchez 6:7ca2eef852fd 613 float L6470DC::L6470_MinSpeed_2_Step_s(uint16_t MinSpeed)
jsanchez 6:7ca2eef852fd 614 {
jsanchez 6:7ca2eef852fd 615 if (MinSpeed <= L6470_MAX_MIN_SPEED)
jsanchez 6:7ca2eef852fd 616 return (MinSpeed * ((float)238.4186e-3));
jsanchez 6:7ca2eef852fd 617 else
jsanchez 6:7ca2eef852fd 618 return 0;
jsanchez 6:7ca2eef852fd 619 }
jsanchez 6:7ca2eef852fd 620
jsanchez 6:7ca2eef852fd 621 uint16_t L6470DC::L6470_Step_s_2_MinSpeed(float Step_s)
jsanchez 6:7ca2eef852fd 622 {
jsanchez 6:7ca2eef852fd 623 if (Step_s <= (L6470_MAX_MIN_SPEED * ((float)238.4186e-3)))
jsanchez 6:7ca2eef852fd 624 return (uint16_t)(Step_s / ((float)238.4186e-3));
jsanchez 6:7ca2eef852fd 625 else
jsanchez 6:7ca2eef852fd 626 return 0;
jsanchez 6:7ca2eef852fd 627 }
jsanchez 6:7ca2eef852fd 628
jsanchez 6:7ca2eef852fd 629 float L6470DC::L6470_FsSpd_2_Step_s(uint16_t FsSpd)
jsanchez 6:7ca2eef852fd 630 {
jsanchez 6:7ca2eef852fd 631 if (FsSpd <= L6470_MAX_FS_SPD)
jsanchez 6:7ca2eef852fd 632 return ((FsSpd+0.5) * ((float)15.25));
jsanchez 6:7ca2eef852fd 633 else
jsanchez 6:7ca2eef852fd 634 return 0;
jsanchez 6:7ca2eef852fd 635 }
jsanchez 6:7ca2eef852fd 636
jsanchez 6:7ca2eef852fd 637 uint16_t L6470DC::L6470_Step_s_2_FsSpd(float Step_s)
jsanchez 6:7ca2eef852fd 638 {
jsanchez 6:7ca2eef852fd 639 if (Step_s <= ((L6470_MAX_FS_SPD+0.5) * ((float)15.25)))
jsanchez 6:7ca2eef852fd 640 return (uint16_t)((float)(Step_s / ((float)15.25)) - (float)0.5);
jsanchez 6:7ca2eef852fd 641 else
jsanchez 6:7ca2eef852fd 642 return 0;
jsanchez 6:7ca2eef852fd 643 }
jsanchez 6:7ca2eef852fd 644
jsanchez 6:7ca2eef852fd 645 float L6470DC::L6470_IntSpeed_2_Step_s(uint16_t IntSpeed)
jsanchez 6:7ca2eef852fd 646 {
jsanchez 6:7ca2eef852fd 647 if (IntSpeed <= L6470_MAX_INT_SPEED)
jsanchez 6:7ca2eef852fd 648 return (IntSpeed * ((float)59.6046e-3));
jsanchez 6:7ca2eef852fd 649 else
jsanchez 6:7ca2eef852fd 650 return 0;
jsanchez 6:7ca2eef852fd 651 }
jsanchez 6:7ca2eef852fd 652
jsanchez 6:7ca2eef852fd 653 uint16_t L6470DC::L6470_Step_s_2_IntSpeed(float Step_s)
jsanchez 6:7ca2eef852fd 654 {
jsanchez 6:7ca2eef852fd 655 if (Step_s <= (L6470_MAX_INT_SPEED * ((float)59.6046e-3)))
jsanchez 6:7ca2eef852fd 656 return (uint16_t)(Step_s / ((float)59.6046e-3));
jsanchez 6:7ca2eef852fd 657 else
jsanchez 6:7ca2eef852fd 658 return 0;
jsanchez 6:7ca2eef852fd 659 }
jsanchez 6:7ca2eef852fd 660
jsanchez 6:7ca2eef852fd 661 float L6470DC::L6470_StSlp_2_s_Step(uint8_t StSlp)
jsanchez 6:7ca2eef852fd 662 {
jsanchez 6:7ca2eef852fd 663 return (StSlp * ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 664 }
jsanchez 6:7ca2eef852fd 665
jsanchez 6:7ca2eef852fd 666 uint8_t L6470DC::L6470_s_Step_2_StSlp(float s_Step)
jsanchez 6:7ca2eef852fd 667 {
jsanchez 6:7ca2eef852fd 668 if (s_Step <= (L6470_MAX_ST_SLP * ((float)1.5686e-5)))
jsanchez 6:7ca2eef852fd 669 return (uint8_t)(s_Step / ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 670 else
jsanchez 6:7ca2eef852fd 671 return 0;
jsanchez 6:7ca2eef852fd 672 }
jsanchez 6:7ca2eef852fd 673
jsanchez 6:7ca2eef852fd 674 float L6470DC::L6470_FnSlpAcc_2_s_Step(uint8_t FnSlpAcc)
jsanchez 6:7ca2eef852fd 675 {
jsanchez 6:7ca2eef852fd 676 return (FnSlpAcc * ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 677 }
jsanchez 6:7ca2eef852fd 678
jsanchez 6:7ca2eef852fd 679 uint8_t L6470DC::L6470_s_Step_2_FnSlpAcc(float s_Step)
jsanchez 6:7ca2eef852fd 680 {
jsanchez 6:7ca2eef852fd 681 if (s_Step <= (L6470_MAX_FN_SLP_ACC * ((float)1.5686e-5)))
jsanchez 6:7ca2eef852fd 682 return (uint8_t)(s_Step / ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 683 else
jsanchez 6:7ca2eef852fd 684 return 0;
jsanchez 6:7ca2eef852fd 685 }
jsanchez 6:7ca2eef852fd 686
jsanchez 6:7ca2eef852fd 687 float L6470DC::L6470_FnSlpDec_2_s_Step(uint8_t FnSlpDec)
jsanchez 6:7ca2eef852fd 688 {
jsanchez 6:7ca2eef852fd 689 return (FnSlpDec * ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 690 }
jsanchez 6:7ca2eef852fd 691
jsanchez 6:7ca2eef852fd 692
jsanchez 6:7ca2eef852fd 693 uint8_t L6470DC::L6470_s_Step_2_FnSlpDec(float s_Step)
jsanchez 6:7ca2eef852fd 694 {
jsanchez 6:7ca2eef852fd 695 if (s_Step <= (L6470_MAX_FN_SLP_DEC * ((float)1.5686e-5)))
jsanchez 6:7ca2eef852fd 696 return (uint8_t)(s_Step / ((float)1.5686e-5));
jsanchez 6:7ca2eef852fd 697 else
jsanchez 6:7ca2eef852fd 698 return 0;
jsanchez 6:7ca2eef852fd 699 }
jsanchez 6:7ca2eef852fd 700
jsanchez 6:7ca2eef852fd 701 float L6470DC::L6470_OcdTh_2_mA(uint8_t OcdTh)
jsanchez 6:7ca2eef852fd 702 {
jsanchez 6:7ca2eef852fd 703 if (OcdTh <= L6470_MAX_OCD_TH)
jsanchez 6:7ca2eef852fd 704 return ((OcdTh+1) * ((float)375));
jsanchez 6:7ca2eef852fd 705 else
jsanchez 6:7ca2eef852fd 706 return 0;
jsanchez 6:7ca2eef852fd 707 }
jsanchez 6:7ca2eef852fd 708
jsanchez 6:7ca2eef852fd 709 uint8_t L6470DC::L6470_mA_2_OcdTh(float mA)
jsanchez 6:7ca2eef852fd 710 {
jsanchez 6:7ca2eef852fd 711 float result, decimal;
jsanchez 6:7ca2eef852fd 712
jsanchez 6:7ca2eef852fd 713 if (mA <= ((L6470_MAX_OCD_TH+1) * ((float)375))) {
jsanchez 6:7ca2eef852fd 714 result = (mA / ((float)375));
jsanchez 6:7ca2eef852fd 715 decimal = result - (uint8_t)result;
jsanchez 6:7ca2eef852fd 716
jsanchez 6:7ca2eef852fd 717 if (decimal < (float)0.5)
jsanchez 6:7ca2eef852fd 718 return ((uint8_t)result - 1);
jsanchez 6:7ca2eef852fd 719 else
jsanchez 6:7ca2eef852fd 720 return ((uint8_t)result);
jsanchez 6:7ca2eef852fd 721 } else
jsanchez 6:7ca2eef852fd 722 return 0;
jsanchez 6:7ca2eef852fd 723 }
jsanchez 6:7ca2eef852fd 724
jsanchez 6:7ca2eef852fd 725 float L6470DC::L6470_StallTh_2_mA(uint8_t StallTh)
jsanchez 6:7ca2eef852fd 726 {
jsanchez 6:7ca2eef852fd 727 if (StallTh <= L6470_MAX_STALL_TH)
jsanchez 6:7ca2eef852fd 728 return ((StallTh+1) * ((float)31.25));
jsanchez 6:7ca2eef852fd 729 else
jsanchez 6:7ca2eef852fd 730 return 0; // Warning
jsanchez 6:7ca2eef852fd 731 }
jsanchez 6:7ca2eef852fd 732
jsanchez 6:7ca2eef852fd 733 uint8_t L6470DC::L6470_mA_2_StallTh(float mA)
jsanchez 6:7ca2eef852fd 734 {
jsanchez 6:7ca2eef852fd 735 float result, decimal;
jsanchez 6:7ca2eef852fd 736
jsanchez 6:7ca2eef852fd 737 if (mA <= ((L6470_MAX_STALL_TH+1) * ((float)31.25))) {
jsanchez 6:7ca2eef852fd 738 result = (mA / ((float)31.25));
jsanchez 6:7ca2eef852fd 739 decimal = result - (uint8_t)result;
jsanchez 6:7ca2eef852fd 740
jsanchez 6:7ca2eef852fd 741 if (decimal < (float)0.5)
jsanchez 6:7ca2eef852fd 742 return ((uint8_t)result - 1);
jsanchez 6:7ca2eef852fd 743 else
jsanchez 6:7ca2eef852fd 744 return ((uint8_t)result);
jsanchez 6:7ca2eef852fd 745 } else
jsanchez 6:7ca2eef852fd 746 return 0;
jsanchez 6:7ca2eef852fd 747 }
jsanchez 6:7ca2eef852fd 748