Speed profile working
easyspin.h@1:9efe863db15e, 2015-08-26 (annotated)
- Committer:
- julientiron
- Date:
- Wed Aug 26 13:35:55 2015 +0000
- Revision:
- 1:9efe863db15e
- Parent:
- 0:cba942f8172a
Update for speed profile
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
julientiron | 0:cba942f8172a | 1 | /******************************************************//** |
julientiron | 0:cba942f8172a | 2 | * @file easyspin.h |
julientiron | 0:cba942f8172a | 3 | * @version V1.0 |
julientiron | 0:cba942f8172a | 4 | * @date June 29, 2015 |
julientiron | 0:cba942f8172a | 5 | * @brief Header for easyspin library for mbed |
julientiron | 0:cba942f8172a | 6 | * |
julientiron | 0:cba942f8172a | 7 | * This file is free software; you can redistribute it and/or modify |
julientiron | 0:cba942f8172a | 8 | * it under the terms of either the GNU General Public License version 2 |
julientiron | 0:cba942f8172a | 9 | * or the GNU Lesser General Public License version 2.1, both as |
julientiron | 0:cba942f8172a | 10 | * published by the Free Software Foundation. |
julientiron | 0:cba942f8172a | 11 | **********************************************************/ |
julientiron | 0:cba942f8172a | 12 | |
julientiron | 0:cba942f8172a | 13 | #ifndef __Easyspin_H_INCLUDED |
julientiron | 0:cba942f8172a | 14 | #define __Easyspin_H_INCLUDED |
julientiron | 0:cba942f8172a | 15 | |
julientiron | 0:cba942f8172a | 16 | #include "easyspin_config.h" |
julientiron | 0:cba942f8172a | 17 | #include "mbed.h" |
julientiron | 0:cba942f8172a | 18 | |
julientiron | 0:cba942f8172a | 19 | /// Define to print debug logs via the UART |
julientiron | 0:cba942f8172a | 20 | #ifndef _DEBUG_Easyspin |
julientiron | 0:cba942f8172a | 21 | //#define _DEBUG_Easyspin |
julientiron | 0:cba942f8172a | 22 | #endif |
julientiron | 0:cba942f8172a | 23 | |
julientiron | 0:cba942f8172a | 24 | |
julientiron | 0:cba942f8172a | 25 | /// Clear bit Macro |
julientiron | 0:cba942f8172a | 26 | #ifndef cbi |
julientiron | 0:cba942f8172a | 27 | #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
julientiron | 0:cba942f8172a | 28 | #endif |
julientiron | 0:cba942f8172a | 29 | |
julientiron | 0:cba942f8172a | 30 | /// Set bit Macro |
julientiron | 0:cba942f8172a | 31 | #ifndef sbi |
julientiron | 0:cba942f8172a | 32 | #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
julientiron | 0:cba942f8172a | 33 | #endif |
julientiron | 0:cba942f8172a | 34 | |
julientiron | 0:cba942f8172a | 35 | /// Current FW version |
julientiron | 0:cba942f8172a | 36 | #define Easyspin_FW_VERSION (1) |
julientiron | 0:cba942f8172a | 37 | |
julientiron | 0:cba942f8172a | 38 | /// Digital Pins used for the Easyspin MOSI pin |
julientiron | 0:cba942f8172a | 39 | #define Easyspin_MOSI_Pin PA_7 |
julientiron | 0:cba942f8172a | 40 | /// Digital Pins used for the Easyspin MISO pin |
julientiron | 0:cba942f8172a | 41 | #define Easyspin_MISO_Pin PA_6 |
julientiron | 0:cba942f8172a | 42 | /// Digital Pins used for the Easyspin SCK pin |
julientiron | 0:cba942f8172a | 43 | #define Easyspin_SCK_Pin PA_5 |
julientiron | 0:cba942f8172a | 44 | /// Digital Pins used for the Easyspin flag pin |
julientiron | 0:cba942f8172a | 45 | #define Easyspin_FLAG_Pin PA_10 //(2) |
julientiron | 0:cba942f8172a | 46 | /// Digital Pins used for the Easyspin chip select pin |
julientiron | 0:cba942f8172a | 47 | #define Easyspin_CS_Pin PB_6 |
julientiron | 0:cba942f8172a | 48 | /// Digital Pins used for the Easyspin step clock pin of shield 0 |
julientiron | 0:cba942f8172a | 49 | #define Easyspin_PWM_1_Pin PC_7 //(9) |
julientiron | 0:cba942f8172a | 50 | /// Digital Pins used for the Easyspin step clock pin of shield 1 |
julientiron | 0:cba942f8172a | 51 | #define Easyspin_PWM_2_Pin PB_3 //(3) |
julientiron | 0:cba942f8172a | 52 | /// Digital Pins used for the Easyspin step clock pin of shield 2 |
julientiron | 0:cba942f8172a | 53 | #define Easyspin_PWM_3_Pin PB_10 //(6) |
julientiron | 0:cba942f8172a | 54 | /// Digital Pins used for the Easyspin direction pin of shield 0 |
julientiron | 0:cba942f8172a | 55 | #define Easyspin_DIR_1_Pin PA_8 //(7) |
julientiron | 0:cba942f8172a | 56 | /// Digital Pins used for the Easyspin direction pin of shield 1 |
julientiron | 0:cba942f8172a | 57 | #define Easyspin_DIR_2_Pin PB_5 //(4) |
julientiron | 0:cba942f8172a | 58 | /// Digital Pins used for the Easyspin direction pin of shield 2 |
julientiron | 0:cba942f8172a | 59 | #define Easyspin_DIR_3_Pin PB_4 //(5) |
julientiron | 0:cba942f8172a | 60 | /// Digital Pins used for the Easyspin reset pin |
julientiron | 0:cba942f8172a | 61 | #define Easyspin_Reset_Pin PA_9 //(8) |
julientiron | 0:cba942f8172a | 62 | /// Maximum number of steps |
julientiron | 0:cba942f8172a | 63 | #define MAX_STEPS (0x7FFFFFFF) |
julientiron | 0:cba942f8172a | 64 | /// uint8_t max value |
julientiron | 0:cba942f8172a | 65 | #define UINT8_MAX (uint8_t)(0XFF) |
julientiron | 0:cba942f8172a | 66 | /// uint16_t max value |
julientiron | 0:cba942f8172a | 67 | #define UINT16_MAX (uint16_t)(0XFFFF) |
julientiron | 0:cba942f8172a | 68 | |
julientiron | 0:cba942f8172a | 69 | /// Pwm prescaler array size for timer 0 & 1 |
julientiron | 0:cba942f8172a | 70 | #define PRESCALER_ARRAY_TIMER0_1_SIZE (6) |
julientiron | 0:cba942f8172a | 71 | /// Pwm prescaler array size for timer 2 |
julientiron | 0:cba942f8172a | 72 | #define PRESCALER_ARRAY_TIMER2_SIZE (8) |
julientiron | 0:cba942f8172a | 73 | |
julientiron | 0:cba942f8172a | 74 | /// Maximum frequency of the PWMs |
julientiron | 0:cba942f8172a | 75 | #define Easyspin_MAX_PWM_FREQ (10000) |
julientiron | 0:cba942f8172a | 76 | /// Minimum frequency of the PWMs |
julientiron | 0:cba942f8172a | 77 | #define Easyspin_MIN_PWM_FREQ (30) |
julientiron | 0:cba942f8172a | 78 | |
julientiron | 0:cba942f8172a | 79 | /// Easyspin max number of bytes of command & arguments to set a parameter |
julientiron | 0:cba942f8172a | 80 | #define Easyspin_CMD_ARG_MAX_NB_BYTES (4) |
julientiron | 0:cba942f8172a | 81 | |
julientiron | 0:cba942f8172a | 82 | /// Easyspin command + argument bytes number for NOP command |
julientiron | 0:cba942f8172a | 83 | #define Easyspin_CMD_ARG_NB_BYTES_NOP (1) |
julientiron | 0:cba942f8172a | 84 | /// Easyspin command + argument bytes number for ENABLE command |
julientiron | 0:cba942f8172a | 85 | #define Easyspin_CMD_ARG_NB_BYTES_ENABLE (1) |
julientiron | 0:cba942f8172a | 86 | /// Easyspin command + argument bytes number for DISABLE command |
julientiron | 0:cba942f8172a | 87 | #define Easyspin_CMD_ARG_NB_BYTES_DISABLE (1) |
julientiron | 0:cba942f8172a | 88 | /// Easyspin command + argument bytes number for GET_STATUS command |
julientiron | 0:cba942f8172a | 89 | #define Easyspin_CMD_ARG_NB_BYTES_GET_STATUS (1) |
julientiron | 0:cba942f8172a | 90 | |
julientiron | 0:cba942f8172a | 91 | /// Easyspin response bytes number |
julientiron | 0:cba942f8172a | 92 | #define Easyspin_RSP_NB_BYTES_GET_STATUS (2) |
julientiron | 0:cba942f8172a | 93 | |
julientiron | 0:cba942f8172a | 94 | /// Daisy chain command mask |
julientiron | 0:cba942f8172a | 95 | #define DAISY_CHAIN_COMMAND_MASK (0xFA) |
julientiron | 0:cba942f8172a | 96 | |
julientiron | 0:cba942f8172a | 97 | /// Easyspin value mask for ABS_POS register |
julientiron | 0:cba942f8172a | 98 | #define Easyspin_ABS_POS_VALUE_MASK ((uint32_t) 0x003FFFFF) |
julientiron | 0:cba942f8172a | 99 | /// Easyspin sign bit mask for ABS_POS register |
julientiron | 0:cba942f8172a | 100 | #define Easyspin_ABS_POS_SIGN_BIT_MASK ((uint32_t) 0x00200000) |
julientiron | 0:cba942f8172a | 101 | |
julientiron | 0:cba942f8172a | 102 | /// Easyspin step mask for electrical position (EL_POS) register |
julientiron | 0:cba942f8172a | 103 | #define Easyspin_ELPOS_STEP_MASK ((uint8_t)0xC0) |
julientiron | 0:cba942f8172a | 104 | /// Easyspin microstep mask for electrical position (EL_POS) register |
julientiron | 0:cba942f8172a | 105 | #define Easyspin_ELPOS_MICROSTEP_MASK ((uint8_t)0x3F) |
julientiron | 0:cba942f8172a | 106 | |
julientiron | 0:cba942f8172a | 107 | /// Easyspin fast decay time option (TOFF_FAST values for T_FAST register ) |
julientiron | 0:cba942f8172a | 108 | typedef enum { |
julientiron | 0:cba942f8172a | 109 | Easyspin_TOFF_FAST_2us = ((uint8_t) 0x00 << 4), |
julientiron | 0:cba942f8172a | 110 | Easyspin_TOFF_FAST_4us = ((uint8_t) 0x01 << 4), |
julientiron | 0:cba942f8172a | 111 | Easyspin_TOFF_FAST_6us = ((uint8_t) 0x02 << 4), |
julientiron | 0:cba942f8172a | 112 | Easyspin_TOFF_FAST_8us = ((uint8_t) 0x03 << 4), |
julientiron | 0:cba942f8172a | 113 | Easyspin_TOFF_FAST_10us = ((uint8_t) 0x04 << 4), |
julientiron | 0:cba942f8172a | 114 | Easyspin_TOFF_FAST_12us = ((uint8_t) 0x05 << 4), |
julientiron | 0:cba942f8172a | 115 | Easyspin_TOFF_FAST_14us = ((uint8_t) 0x06 << 4), |
julientiron | 0:cba942f8172a | 116 | Easyspin_TOFF_FAST_16us = ((uint8_t) 0x07 << 4), |
julientiron | 0:cba942f8172a | 117 | Easyspin_TOFF_FAST_18us = ((uint8_t) 0x08 << 4), |
julientiron | 0:cba942f8172a | 118 | Easyspin_TOFF_FAST_20us = ((uint8_t) 0x09 << 4), |
julientiron | 0:cba942f8172a | 119 | Easyspin_TOFF_FAST_22us = ((uint8_t) 0x0A << 4), |
julientiron | 0:cba942f8172a | 120 | Easyspin_TOFF_FAST_24us = ((uint8_t) 0x0B << 4), |
julientiron | 0:cba942f8172a | 121 | Easyspin_TOFF_FAST_26us = ((uint8_t) 0x0C << 4), |
julientiron | 0:cba942f8172a | 122 | Easyspin_TOFF_FAST_28us = ((uint8_t) 0x0D << 4), |
julientiron | 0:cba942f8172a | 123 | Easyspin_TOFF_FAST_30us = ((uint8_t) 0x0E << 4), |
julientiron | 0:cba942f8172a | 124 | Easyspin_TOFF_FAST_32us = ((uint8_t) 0x0F << 4) |
julientiron | 0:cba942f8172a | 125 | } Easyspin_TOFF_FAST_t; |
julientiron | 0:cba942f8172a | 126 | |
julientiron | 0:cba942f8172a | 127 | /// Easyspin fall step time options (FAST_STEP values for T_FAST register ) |
julientiron | 0:cba942f8172a | 128 | typedef enum { |
julientiron | 0:cba942f8172a | 129 | Easyspin_FAST_STEP_2us = ((uint8_t) 0x00), |
julientiron | 0:cba942f8172a | 130 | Easyspin_FAST_STEP_4us = ((uint8_t) 0x01), |
julientiron | 0:cba942f8172a | 131 | Easyspin_FAST_STEP_6us = ((uint8_t) 0x02), |
julientiron | 0:cba942f8172a | 132 | Easyspin_FAST_STEP_8us = ((uint8_t) 0x03), |
julientiron | 0:cba942f8172a | 133 | Easyspin_FAST_STEP_10us = ((uint8_t) 0x04), |
julientiron | 0:cba942f8172a | 134 | Easyspin_FAST_STEP_12us = ((uint8_t) 0x05), |
julientiron | 0:cba942f8172a | 135 | Easyspin_FAST_STEP_14us = ((uint8_t) 0x06), |
julientiron | 0:cba942f8172a | 136 | Easyspin_FAST_STEP_16us = ((uint8_t) 0x07), |
julientiron | 0:cba942f8172a | 137 | Easyspin_FAST_STEP_18us = ((uint8_t) 0x08), |
julientiron | 0:cba942f8172a | 138 | Easyspin_FAST_STEP_20us = ((uint8_t) 0x09), |
julientiron | 0:cba942f8172a | 139 | Easyspin_FAST_STEP_22us = ((uint8_t) 0x0A), |
julientiron | 0:cba942f8172a | 140 | Easyspin_FAST_STEP_24us = ((uint8_t) 0x0B), |
julientiron | 0:cba942f8172a | 141 | Easyspin_FAST_STEP_26us = ((uint8_t) 0x0C), |
julientiron | 0:cba942f8172a | 142 | Easyspin_FAST_STEP_28us = ((uint8_t) 0x0D), |
julientiron | 0:cba942f8172a | 143 | Easyspin_FAST_STEP_30us = ((uint8_t) 0x0E), |
julientiron | 0:cba942f8172a | 144 | Easyspin_FAST_STEP_32us = ((uint8_t) 0x0F) |
julientiron | 0:cba942f8172a | 145 | } Easyspin_FAST_STEP_t; |
julientiron | 0:cba942f8172a | 146 | |
julientiron | 0:cba942f8172a | 147 | /// Easyspin overcurrent threshold options (OCD_TH register) |
julientiron | 0:cba942f8172a | 148 | typedef enum { |
julientiron | 0:cba942f8172a | 149 | Easyspin_OCD_TH_375mA = ((uint8_t) 0x00), |
julientiron | 0:cba942f8172a | 150 | Easyspin_OCD_TH_750mA = ((uint8_t) 0x01), |
julientiron | 0:cba942f8172a | 151 | Easyspin_OCD_TH_1125mA = ((uint8_t) 0x02), |
julientiron | 0:cba942f8172a | 152 | Easyspin_OCD_TH_1500mA = ((uint8_t) 0x03), |
julientiron | 0:cba942f8172a | 153 | Easyspin_OCD_TH_1875mA = ((uint8_t) 0x04), |
julientiron | 0:cba942f8172a | 154 | Easyspin_OCD_TH_2250mA = ((uint8_t) 0x05), |
julientiron | 0:cba942f8172a | 155 | Easyspin_OCD_TH_2625mA = ((uint8_t) 0x06), |
julientiron | 0:cba942f8172a | 156 | Easyspin_OCD_TH_3000mA = ((uint8_t) 0x07), |
julientiron | 0:cba942f8172a | 157 | Easyspin_OCD_TH_3375mA = ((uint8_t) 0x08), |
julientiron | 0:cba942f8172a | 158 | Easyspin_OCD_TH_3750mA = ((uint8_t) 0x09), |
julientiron | 0:cba942f8172a | 159 | Easyspin_OCD_TH_4125mA = ((uint8_t) 0x0A), |
julientiron | 0:cba942f8172a | 160 | Easyspin_OCD_TH_4500mA = ((uint8_t) 0x0B), |
julientiron | 0:cba942f8172a | 161 | Easyspin_OCD_TH_4875mA = ((uint8_t) 0x0C), |
julientiron | 0:cba942f8172a | 162 | Easyspin_OCD_TH_5250mA = ((uint8_t) 0x0D), |
julientiron | 0:cba942f8172a | 163 | Easyspin_OCD_TH_5625mA = ((uint8_t) 0x0E), |
julientiron | 0:cba942f8172a | 164 | Easyspin_OCD_TH_6000mA = ((uint8_t) 0x0F) |
julientiron | 0:cba942f8172a | 165 | } Easyspin_OCD_TH_t; |
julientiron | 0:cba942f8172a | 166 | |
julientiron | 0:cba942f8172a | 167 | /// Easyspin STEP_MODE register masks |
julientiron | 0:cba942f8172a | 168 | typedef enum { |
julientiron | 0:cba942f8172a | 169 | Easyspin_STEP_MODE_STEP_SEL = ((uint8_t) 0x07), |
julientiron | 0:cba942f8172a | 170 | Easyspin_STEP_MODE_SYNC_SEL = ((uint8_t) 0x70) |
julientiron | 0:cba942f8172a | 171 | } Easyspin_STEP_MODE_Masks_t; |
julientiron | 0:cba942f8172a | 172 | |
julientiron | 0:cba942f8172a | 173 | /// Easyspin STEP_SEL options for STEP_MODE register |
julientiron | 0:cba942f8172a | 174 | typedef enum { |
julientiron | 0:cba942f8172a | 175 | Easyspin_STEP_SEL_1 = ((uint8_t) 0x08), //full step |
julientiron | 0:cba942f8172a | 176 | Easyspin_STEP_SEL_1_2 = ((uint8_t) 0x09), //half step |
julientiron | 0:cba942f8172a | 177 | Easyspin_STEP_SEL_1_4 = ((uint8_t) 0x0A), //1/4 microstep |
julientiron | 0:cba942f8172a | 178 | Easyspin_STEP_SEL_1_8 = ((uint8_t) 0x0B), //1/8 microstep |
julientiron | 0:cba942f8172a | 179 | Easyspin_STEP_SEL_1_16 = ((uint8_t) 0x0C) //1/16 microstep |
julientiron | 0:cba942f8172a | 180 | } Easyspin_STEP_SEL_t; |
julientiron | 0:cba942f8172a | 181 | |
julientiron | 0:cba942f8172a | 182 | /// Easyspin SYNC_SEL options for STEP_MODE register |
julientiron | 0:cba942f8172a | 183 | typedef enum { |
julientiron | 0:cba942f8172a | 184 | Easyspin_SYNC_SEL_1_2 = ((uint8_t) 0x80), |
julientiron | 0:cba942f8172a | 185 | Easyspin_SYNC_SEL_1 = ((uint8_t) 0x90), |
julientiron | 0:cba942f8172a | 186 | Easyspin_SYNC_SEL_2 = ((uint8_t) 0xA0), |
julientiron | 0:cba942f8172a | 187 | Easyspin_SYNC_SEL_4 = ((uint8_t) 0xB0), |
julientiron | 0:cba942f8172a | 188 | Easyspin_SYNC_SEL_8 = ((uint8_t) 0xC0), |
julientiron | 0:cba942f8172a | 189 | Easyspin_SYNC_SEL_UNUSED = ((uint8_t) 0xD0) |
julientiron | 0:cba942f8172a | 190 | } Easyspin_SYNC_SEL_t; |
julientiron | 0:cba942f8172a | 191 | |
julientiron | 0:cba942f8172a | 192 | /// Easyspin ALARM_EN register options |
julientiron | 0:cba942f8172a | 193 | typedef enum { |
julientiron | 0:cba942f8172a | 194 | Easyspin_ALARM_EN_OVERCURRENT = ((uint8_t) 0x01), |
julientiron | 0:cba942f8172a | 195 | Easyspin_ALARM_EN_THERMAL_SHUTDOWN = ((uint8_t) 0x02), |
julientiron | 0:cba942f8172a | 196 | Easyspin_ALARM_EN_THERMAL_WARNING = ((uint8_t) 0x04), |
julientiron | 0:cba942f8172a | 197 | Easyspin_ALARM_EN_UNDERVOLTAGE = ((uint8_t) 0x08), |
julientiron | 0:cba942f8172a | 198 | Easyspin_ALARM_EN_SW_TURN_ON = ((uint8_t) 0x40), |
julientiron | 0:cba942f8172a | 199 | Easyspin_ALARM_EN_WRONG_NPERF_CMD = ((uint8_t) 0x80) |
julientiron | 0:cba942f8172a | 200 | } Easyspin_ALARM_EN_t; |
julientiron | 0:cba942f8172a | 201 | |
julientiron | 0:cba942f8172a | 202 | /// Easyspin CONFIG register masks |
julientiron | 0:cba942f8172a | 203 | typedef enum { |
julientiron | 0:cba942f8172a | 204 | Easyspin_CONFIG_OSC_SEL = ((uint16_t) 0x0007), |
julientiron | 0:cba942f8172a | 205 | Easyspin_CONFIG_EXT_CLK = ((uint16_t) 0x0008), |
julientiron | 0:cba942f8172a | 206 | Easyspin_CONFIG_EN_TQREG = ((uint16_t) 0x0020), |
julientiron | 0:cba942f8172a | 207 | Easyspin_CONFIG_OC_SD = ((uint16_t) 0x0080), |
julientiron | 0:cba942f8172a | 208 | Easyspin_CONFIG_POW_SR = ((uint16_t) 0x0300), |
julientiron | 0:cba942f8172a | 209 | Easyspin_CONFIG_TOFF = ((uint16_t) 0x7C00) |
julientiron | 0:cba942f8172a | 210 | } Easyspin_CONFIG_Masks_t; |
julientiron | 0:cba942f8172a | 211 | |
julientiron | 0:cba942f8172a | 212 | /// Easyspin clock source options for CONFIG register |
julientiron | 0:cba942f8172a | 213 | typedef enum { |
julientiron | 0:cba942f8172a | 214 | Easyspin_CONFIG_INT_16MHZ = ((uint16_t) 0x0000), |
julientiron | 0:cba942f8172a | 215 | Easyspin_CONFIG_INT_16MHZ_OSCOUT_2MHZ = ((uint16_t) 0x0008), |
julientiron | 0:cba942f8172a | 216 | Easyspin_CONFIG_INT_16MHZ_OSCOUT_4MHZ = ((uint16_t) 0x0009), |
julientiron | 0:cba942f8172a | 217 | Easyspin_CONFIG_INT_16MHZ_OSCOUT_8MHZ = ((uint16_t) 0x000A), |
julientiron | 0:cba942f8172a | 218 | Easyspin_CONFIG_INT_16MHZ_OSCOUT_16MHZ = ((uint16_t) 0x000B), |
julientiron | 0:cba942f8172a | 219 | Easyspin_CONFIG_EXT_8MHZ_XTAL_DRIVE = ((uint16_t) 0x0004), |
julientiron | 0:cba942f8172a | 220 | Easyspin_CONFIG_EXT_16MHZ_XTAL_DRIVE = ((uint16_t) 0x0005), |
julientiron | 0:cba942f8172a | 221 | Easyspin_CONFIG_EXT_24MHZ_XTAL_DRIVE = ((uint16_t) 0x0006), |
julientiron | 0:cba942f8172a | 222 | Easyspin_CONFIG_EXT_32MHZ_XTAL_DRIVE = ((uint16_t) 0x0007), |
julientiron | 0:cba942f8172a | 223 | Easyspin_CONFIG_EXT_8MHZ_OSCOUT_INVERT = ((uint16_t) 0x000C), |
julientiron | 0:cba942f8172a | 224 | Easyspin_CONFIG_EXT_16MHZ_OSCOUT_INVERT = ((uint16_t) 0x000D), |
julientiron | 0:cba942f8172a | 225 | Easyspin_CONFIG_EXT_24MHZ_OSCOUT_INVERT = ((uint16_t) 0x000E), |
julientiron | 0:cba942f8172a | 226 | Easyspin_CONFIG_EXT_32MHZ_OSCOUT_INVERT = ((uint16_t) 0x000F) |
julientiron | 0:cba942f8172a | 227 | } Easyspin_CONFIG_OSC_MGMT_t; |
julientiron | 0:cba942f8172a | 228 | |
julientiron | 0:cba942f8172a | 229 | /// Easyspin external torque regulation options for CONFIG register |
julientiron | 0:cba942f8172a | 230 | typedef enum { |
julientiron | 0:cba942f8172a | 231 | Easyspin_CONFIG_EN_TQREG_TVAL_USED = ((uint16_t) 0x0000), |
julientiron | 0:cba942f8172a | 232 | Easyspin_CONFIG_EN_TQREG_ADC_OUT = ((uint16_t) 0x0020) |
julientiron | 0:cba942f8172a | 233 | } Easyspin_CONFIG_EN_TQREG_t; |
julientiron | 0:cba942f8172a | 234 | |
julientiron | 0:cba942f8172a | 235 | /// Easyspin over current shutdown options for CONFIG register |
julientiron | 0:cba942f8172a | 236 | typedef enum { |
julientiron | 0:cba942f8172a | 237 | Easyspin_CONFIG_OC_SD_DISABLE = ((uint16_t) 0x0000), |
julientiron | 0:cba942f8172a | 238 | Easyspin_CONFIG_OC_SD_ENABLE = ((uint16_t) 0x0080) |
julientiron | 0:cba942f8172a | 239 | } Easyspin_CONFIG_OC_SD_t; |
julientiron | 0:cba942f8172a | 240 | |
julientiron | 0:cba942f8172a | 241 | /// Easyspin power bridge output slew_rates options (POW_SR values for CONFIG register) |
julientiron | 0:cba942f8172a | 242 | typedef enum { |
julientiron | 0:cba942f8172a | 243 | Easyspin_CONFIG_SR_320V_us =((uint16_t)0x0000), |
julientiron | 0:cba942f8172a | 244 | Easyspin_CONFIG_SR_075V_us =((uint16_t)0x0100), |
julientiron | 0:cba942f8172a | 245 | Easyspin_CONFIG_SR_110V_us =((uint16_t)0x0200), |
julientiron | 0:cba942f8172a | 246 | Easyspin_CONFIG_SR_260V_us =((uint16_t)0x0300) |
julientiron | 0:cba942f8172a | 247 | } Easyspin_CONFIG_POW_SR_t; |
julientiron | 0:cba942f8172a | 248 | |
julientiron | 0:cba942f8172a | 249 | /// Easyspin Off time options (TOFF values for CONFIG register) |
julientiron | 0:cba942f8172a | 250 | typedef enum { |
julientiron | 0:cba942f8172a | 251 | Easyspin_CONFIG_TOFF_004us = (((uint16_t) 0x01) << 10), |
julientiron | 0:cba942f8172a | 252 | Easyspin_CONFIG_TOFF_008us = (((uint16_t) 0x02) << 10), |
julientiron | 0:cba942f8172a | 253 | Easyspin_CONFIG_TOFF_012us = (((uint16_t) 0x03) << 10), |
julientiron | 0:cba942f8172a | 254 | Easyspin_CONFIG_TOFF_016us = (((uint16_t) 0x04) << 10), |
julientiron | 0:cba942f8172a | 255 | Easyspin_CONFIG_TOFF_020us = (((uint16_t) 0x05) << 10), |
julientiron | 0:cba942f8172a | 256 | Easyspin_CONFIG_TOFF_024us = (((uint16_t) 0x06) << 10), |
julientiron | 0:cba942f8172a | 257 | Easyspin_CONFIG_TOFF_028us = (((uint16_t) 0x07) << 10), |
julientiron | 0:cba942f8172a | 258 | Easyspin_CONFIG_TOFF_032us = (((uint16_t) 0x08) << 10), |
julientiron | 0:cba942f8172a | 259 | Easyspin_CONFIG_TOFF_036us = (((uint16_t) 0x09) << 10), |
julientiron | 0:cba942f8172a | 260 | Easyspin_CONFIG_TOFF_040us = (((uint16_t) 0x0A) << 10), |
julientiron | 0:cba942f8172a | 261 | Easyspin_CONFIG_TOFF_044us = (((uint16_t) 0x0B) << 10), |
julientiron | 0:cba942f8172a | 262 | Easyspin_CONFIG_TOFF_048us = (((uint16_t) 0x0C) << 10), |
julientiron | 0:cba942f8172a | 263 | Easyspin_CONFIG_TOFF_052us = (((uint16_t) 0x0D) << 10), |
julientiron | 0:cba942f8172a | 264 | Easyspin_CONFIG_TOFF_056us = (((uint16_t) 0x0E) << 10), |
julientiron | 0:cba942f8172a | 265 | Easyspin_CONFIG_TOFF_060us = (((uint16_t) 0x0F) << 10), |
julientiron | 0:cba942f8172a | 266 | Easyspin_CONFIG_TOFF_064us = (((uint16_t) 0x10) << 10), |
julientiron | 0:cba942f8172a | 267 | Easyspin_CONFIG_TOFF_068us = (((uint16_t) 0x11) << 10), |
julientiron | 0:cba942f8172a | 268 | Easyspin_CONFIG_TOFF_072us = (((uint16_t) 0x12) << 10), |
julientiron | 0:cba942f8172a | 269 | Easyspin_CONFIG_TOFF_076us = (((uint16_t) 0x13) << 10), |
julientiron | 0:cba942f8172a | 270 | Easyspin_CONFIG_TOFF_080us = (((uint16_t) 0x14) << 10), |
julientiron | 0:cba942f8172a | 271 | Easyspin_CONFIG_TOFF_084us = (((uint16_t) 0x15) << 10), |
julientiron | 0:cba942f8172a | 272 | Easyspin_CONFIG_TOFF_088us = (((uint16_t) 0x16) << 10), |
julientiron | 0:cba942f8172a | 273 | Easyspin_CONFIG_TOFF_092us = (((uint16_t) 0x17) << 10), |
julientiron | 0:cba942f8172a | 274 | Easyspin_CONFIG_TOFF_096us = (((uint16_t) 0x18) << 10), |
julientiron | 0:cba942f8172a | 275 | Easyspin_CONFIG_TOFF_100us = (((uint16_t) 0x19) << 10), |
julientiron | 0:cba942f8172a | 276 | Easyspin_CONFIG_TOFF_104us = (((uint16_t) 0x1A) << 10), |
julientiron | 0:cba942f8172a | 277 | Easyspin_CONFIG_TOFF_108us = (((uint16_t) 0x1B) << 10), |
julientiron | 0:cba942f8172a | 278 | Easyspin_CONFIG_TOFF_112us = (((uint16_t) 0x1C) << 10), |
julientiron | 0:cba942f8172a | 279 | Easyspin_CONFIG_TOFF_116us = (((uint16_t) 0x1D) << 10), |
julientiron | 0:cba942f8172a | 280 | Easyspin_CONFIG_TOFF_120us = (((uint16_t) 0x1E) << 10), |
julientiron | 0:cba942f8172a | 281 | Easyspin_CONFIG_TOFF_124us = (((uint16_t) 0x1F) << 10) |
julientiron | 0:cba942f8172a | 282 | } Easyspin_CONFIG_TOFF_t; |
julientiron | 0:cba942f8172a | 283 | |
julientiron | 0:cba942f8172a | 284 | /// Easyspin STATUS register bit masks |
julientiron | 0:cba942f8172a | 285 | typedef enum { |
julientiron | 0:cba942f8172a | 286 | Easyspin_STATUS_HIZ = (((uint16_t) 0x0001)), |
julientiron | 0:cba942f8172a | 287 | Easyspin_STATUS_DIR = (((uint16_t) 0x0010)), |
julientiron | 0:cba942f8172a | 288 | Easyspin_STATUS_NOTPERF_CMD = (((uint16_t) 0x0080)), |
julientiron | 0:cba942f8172a | 289 | Easyspin_STATUS_WRONG_CMD = (((uint16_t) 0x0100)), |
julientiron | 0:cba942f8172a | 290 | Easyspin_STATUS_UVLO = (((uint16_t) 0x0200)), |
julientiron | 0:cba942f8172a | 291 | Easyspin_STATUS_TH_WRN = (((uint16_t) 0x0400)), |
julientiron | 0:cba942f8172a | 292 | Easyspin_STATUS_TH_SD = (((uint16_t) 0x0800)), |
julientiron | 0:cba942f8172a | 293 | Easyspin_STATUS_OCD = (((uint16_t) 0x1000)) |
julientiron | 0:cba942f8172a | 294 | } Easyspin_STATUS_Masks_t; |
julientiron | 0:cba942f8172a | 295 | |
julientiron | 0:cba942f8172a | 296 | /// Easyspin STATUS register options |
julientiron | 0:cba942f8172a | 297 | typedef enum { |
julientiron | 0:cba942f8172a | 298 | Easyspin_STATUS_DIR_FORWARD = (((uint16_t) 0x0001) << 4), |
julientiron | 0:cba942f8172a | 299 | Easyspin_STATUS_DIR_REVERSE = (((uint16_t) 0x0000) << 4) |
julientiron | 0:cba942f8172a | 300 | } Easyspin_STATUS_DIR_t; |
julientiron | 0:cba942f8172a | 301 | |
julientiron | 0:cba942f8172a | 302 | /// Easyspin internal register addresses |
julientiron | 0:cba942f8172a | 303 | typedef enum { |
julientiron | 0:cba942f8172a | 304 | Easyspin_ABS_POS = ((uint8_t) 0x01), |
julientiron | 0:cba942f8172a | 305 | Easyspin_EL_POS = ((uint8_t) 0x02), |
julientiron | 0:cba942f8172a | 306 | Easyspin_MARK = ((uint8_t) 0x03), |
julientiron | 0:cba942f8172a | 307 | Easyspin_RESERVED_REG01 = ((uint8_t) 0x04), |
julientiron | 0:cba942f8172a | 308 | Easyspin_RESERVED_REG02 = ((uint8_t) 0x05), |
julientiron | 0:cba942f8172a | 309 | Easyspin_RESERVED_REG03 = ((uint8_t) 0x06), |
julientiron | 0:cba942f8172a | 310 | Easyspin_RESERVED_REG04 = ((uint8_t) 0x07), |
julientiron | 0:cba942f8172a | 311 | Easyspin_RESERVED_REG05 = ((uint8_t) 0x08), |
julientiron | 0:cba942f8172a | 312 | Easyspin_RESERVED_REG06 = ((uint8_t) 0x15), |
julientiron | 0:cba942f8172a | 313 | Easyspin_TVAL = ((uint8_t) 0x09), |
julientiron | 0:cba942f8172a | 314 | Easyspin_RESERVED_REG07 = ((uint8_t) 0x0A), |
julientiron | 0:cba942f8172a | 315 | Easyspin_RESERVED_REG08 = ((uint8_t) 0x0B), |
julientiron | 0:cba942f8172a | 316 | Easyspin_RESERVED_REG09 = ((uint8_t) 0x0C), |
julientiron | 0:cba942f8172a | 317 | Easyspin_RESERVED_REG10 = ((uint8_t) 0x0D), |
julientiron | 0:cba942f8172a | 318 | Easyspin_T_FAST = ((uint8_t) 0x0E), |
julientiron | 0:cba942f8172a | 319 | Easyspin_TON_MIN = ((uint8_t) 0x0F), |
julientiron | 0:cba942f8172a | 320 | Easyspin_TOFF_MIN = ((uint8_t) 0x10), |
julientiron | 0:cba942f8172a | 321 | Easyspin_RESERVED_REG11 = ((uint8_t) 0x11), |
julientiron | 0:cba942f8172a | 322 | Easyspin_ADC_OUT = ((uint8_t) 0x12), |
julientiron | 0:cba942f8172a | 323 | Easyspin_OCD_TH = ((uint8_t) 0x13), |
julientiron | 0:cba942f8172a | 324 | Easyspin_RESERVED_REG12 = ((uint8_t) 0x14), |
julientiron | 0:cba942f8172a | 325 | Easyspin_STEP_MODE = ((uint8_t) 0x16), |
julientiron | 0:cba942f8172a | 326 | Easyspin_ALARM_EN = ((uint8_t) 0x17), |
julientiron | 0:cba942f8172a | 327 | Easyspin_CONFIG = ((uint8_t) 0x18), |
julientiron | 0:cba942f8172a | 328 | Easyspin_STATUS = ((uint8_t) 0x19), |
julientiron | 0:cba942f8172a | 329 | Easyspin_RESERVED_REG13 = ((uint8_t) 0x1A), |
julientiron | 0:cba942f8172a | 330 | Easyspin_RESERVED_REG14 = ((uint8_t) 0x1B), |
julientiron | 0:cba942f8172a | 331 | Easyspin_INEXISTENT_REG = ((uint8_t) 0x1F) |
julientiron | 0:cba942f8172a | 332 | } Easyspin_Registers_t; |
julientiron | 0:cba942f8172a | 333 | |
julientiron | 0:cba942f8172a | 334 | /// Easyspin command set |
julientiron | 0:cba942f8172a | 335 | typedef enum { |
julientiron | 0:cba942f8172a | 336 | Easyspin_NOP = ((uint8_t) 0x00), |
julientiron | 0:cba942f8172a | 337 | Easyspin_SET_PARAM = ((uint8_t) 0x00), |
julientiron | 0:cba942f8172a | 338 | Easyspin_GET_PARAM = ((uint8_t) 0x20), |
julientiron | 0:cba942f8172a | 339 | Easyspin_ENABLE = ((uint8_t) 0xB8), |
julientiron | 0:cba942f8172a | 340 | Easyspin_DISABLE = ((uint8_t) 0xA8), |
julientiron | 0:cba942f8172a | 341 | Easyspin_GET_STATUS = ((uint8_t) 0xD0), |
julientiron | 0:cba942f8172a | 342 | Easyspin_RESERVED_CMD1 = ((uint8_t) 0xEB), |
julientiron | 0:cba942f8172a | 343 | Easyspin_RESERVED_CMD2 = ((uint8_t) 0xF8) |
julientiron | 0:cba942f8172a | 344 | } Easyspin_Commands_t; |
julientiron | 0:cba942f8172a | 345 | |
julientiron | 0:cba942f8172a | 346 | /// Direction options |
julientiron | 0:cba942f8172a | 347 | typedef enum { |
julientiron | 0:cba942f8172a | 348 | FORWARD = 1, |
julientiron | 0:cba942f8172a | 349 | BACKWARD = 0 |
julientiron | 0:cba942f8172a | 350 | } dir_t; |
julientiron | 0:cba942f8172a | 351 | |
julientiron | 1:9efe863db15e | 352 | /// Rotation options |
julientiron | 1:9efe863db15e | 353 | typedef enum { |
julientiron | 1:9efe863db15e | 354 | RIGHT = 1, |
julientiron | 1:9efe863db15e | 355 | LEFT = 0 |
julientiron | 1:9efe863db15e | 356 | } rot_t; |
julientiron | 1:9efe863db15e | 357 | |
julientiron | 0:cba942f8172a | 358 | /// Shield state |
julientiron | 0:cba942f8172a | 359 | typedef enum { |
julientiron | 0:cba942f8172a | 360 | ACCELERATING = 0, |
julientiron | 0:cba942f8172a | 361 | DECELERATING = 1, |
julientiron | 0:cba942f8172a | 362 | STEADY = 2, |
julientiron | 0:cba942f8172a | 363 | INACTIVE= 3 |
julientiron | 0:cba942f8172a | 364 | } shieldState_t; |
julientiron | 0:cba942f8172a | 365 | |
julientiron | 0:cba942f8172a | 366 | /// Shield Commands |
julientiron | 0:cba942f8172a | 367 | typedef enum { |
julientiron | 0:cba942f8172a | 368 | RUN_CMD, |
julientiron | 0:cba942f8172a | 369 | MOVE_CMD, |
julientiron | 0:cba942f8172a | 370 | SOFT_STOP_CMD, |
julientiron | 0:cba942f8172a | 371 | NO_CMD |
julientiron | 0:cba942f8172a | 372 | } shieldCommand_t; |
julientiron | 0:cba942f8172a | 373 | |
julientiron | 0:cba942f8172a | 374 | /// Easyspin shield parameters |
julientiron | 0:cba942f8172a | 375 | typedef struct { |
julientiron | 0:cba942f8172a | 376 | /// accumulator used to store speed increase smaller than 1 pps |
julientiron | 0:cba942f8172a | 377 | volatile uint32_t accu; |
julientiron | 0:cba942f8172a | 378 | /// Position in steps at the start of the goto or move commands |
julientiron | 0:cba942f8172a | 379 | volatile int32_t currentPosition; |
julientiron | 0:cba942f8172a | 380 | /// position in step at the end of the accelerating phase |
julientiron | 0:cba942f8172a | 381 | volatile uint32_t endAccPos; |
julientiron | 0:cba942f8172a | 382 | /// nb steps performed from the beggining of the goto or the move command |
julientiron | 0:cba942f8172a | 383 | volatile uint32_t relativePos; |
julientiron | 0:cba942f8172a | 384 | /// position in step at the start of the decelerating phase |
julientiron | 0:cba942f8172a | 385 | volatile uint32_t startDecPos; |
julientiron | 0:cba942f8172a | 386 | /// nb steps to perform for the goto or move commands |
julientiron | 0:cba942f8172a | 387 | volatile uint32_t stepsToTake; |
julientiron | 0:cba942f8172a | 388 | |
julientiron | 0:cba942f8172a | 389 | /// acceleration in pps^2 |
julientiron | 0:cba942f8172a | 390 | volatile uint16_t acceleration; |
julientiron | 0:cba942f8172a | 391 | /// deceleration in pps^2 |
julientiron | 0:cba942f8172a | 392 | volatile uint16_t deceleration; |
julientiron | 0:cba942f8172a | 393 | /// max speed in pps (speed use for goto or move command) |
julientiron | 0:cba942f8172a | 394 | volatile uint16_t maxSpeed; |
julientiron | 0:cba942f8172a | 395 | /// min speed in pps |
julientiron | 0:cba942f8172a | 396 | volatile uint16_t minSpeed; |
julientiron | 0:cba942f8172a | 397 | /// current speed in pps |
julientiron | 0:cba942f8172a | 398 | volatile uint16_t speed; |
julientiron | 0:cba942f8172a | 399 | |
julientiron | 0:cba942f8172a | 400 | /// command under execution |
julientiron | 0:cba942f8172a | 401 | volatile shieldCommand_t commandExecuted; |
julientiron | 0:cba942f8172a | 402 | /// FORWARD or BACKWARD direction |
julientiron | 0:cba942f8172a | 403 | volatile dir_t direction; |
julientiron | 0:cba942f8172a | 404 | /// Current State of the shield |
julientiron | 0:cba942f8172a | 405 | volatile shieldState_t motionState; |
julientiron | 0:cba942f8172a | 406 | }shieldParams_t; |
julientiron | 0:cba942f8172a | 407 | |
julientiron | 0:cba942f8172a | 408 | /// Easyspin library class |
julientiron | 0:cba942f8172a | 409 | class Easyspin { |
julientiron | 0:cba942f8172a | 410 | public: |
julientiron | 0:cba942f8172a | 411 | // constructor: |
julientiron | 0:cba942f8172a | 412 | Easyspin(); |
julientiron | 0:cba942f8172a | 413 | |
julientiron | 0:cba942f8172a | 414 | /// @defgroup group1 Shield control functions |
julientiron | 0:cba942f8172a | 415 | ///@{ |
julientiron | 0:cba942f8172a | 416 | void AttachFlagInterrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt |
julientiron | 0:cba942f8172a | 417 | void Begin(uint8_t nbShields); //Start the Easyspin library |
julientiron | 0:cba942f8172a | 418 | uint16_t GetAcceleration(uint8_t shieldId); //Return the acceleration in pps^2 |
julientiron | 0:cba942f8172a | 419 | uint16_t GetCurrentSpeed(uint8_t shieldId); //Return the current speed in pps |
julientiron | 0:cba942f8172a | 420 | uint16_t GetDeceleration(uint8_t shieldId); //Return the deceleration in pps^2 |
julientiron | 0:cba942f8172a | 421 | shieldState_t GetShieldState(uint8_t shieldId); //Return the shield state |
julientiron | 0:cba942f8172a | 422 | uint8_t GetFwVersion(void); //Return the FW version |
julientiron | 0:cba942f8172a | 423 | int32_t GetMark(uint8_t shieldId); //Return the mark position |
julientiron | 0:cba942f8172a | 424 | uint16_t GetMaxSpeed(uint8_t shieldId); //Return the max speed in pps |
julientiron | 0:cba942f8172a | 425 | uint16_t GetMinSpeed(uint8_t shieldId); //Return the min speed in pps |
julientiron | 0:cba942f8172a | 426 | int32_t GetPosition(uint8_t shieldId); //Return the ABS_POSITION (32b signed) |
julientiron | 0:cba942f8172a | 427 | void GoHome(uint8_t shieldId); //Move to the home position |
julientiron | 0:cba942f8172a | 428 | void GoMark(uint8_t shieldId); //Move to the Mark position |
julientiron | 0:cba942f8172a | 429 | void GoTo(uint8_t shieldId, int32_t targetPosition); //Go to the specified position |
julientiron | 0:cba942f8172a | 430 | void HardStop(uint8_t shieldId); //Stop the motor and disable the power bridge |
julientiron | 0:cba942f8172a | 431 | void Move(uint8_t shieldId, //Move the motor of the specified number of steps |
julientiron | 0:cba942f8172a | 432 | dir_t direction, |
julientiron | 0:cba942f8172a | 433 | uint32_t stepCount); |
julientiron | 0:cba942f8172a | 434 | void ResetAllShields(void); //Reset all Easyspin shields |
julientiron | 0:cba942f8172a | 435 | void Run(uint8_t shieldId, dir_t direction); //Run the motor |
julientiron | 0:cba942f8172a | 436 | bool SetAcceleration(uint8_t shieldId,uint16_t newAcc); //Set the acceleration in pps^2 |
julientiron | 0:cba942f8172a | 437 | bool SetDeceleration(uint8_t shieldId,uint16_t newDec); //Set the deceleration in pps^2 |
julientiron | 0:cba942f8172a | 438 | void SetHome(uint8_t shieldId); //Set current position to be the home position |
julientiron | 0:cba942f8172a | 439 | void SetMark(uint8_t shieldId); //Set current position to be the Markposition |
julientiron | 0:cba942f8172a | 440 | bool SetMaxSpeed(uint8_t shieldId,uint16_t newMaxSpeed); //Set the max speed in pps |
julientiron | 0:cba942f8172a | 441 | bool SetMinSpeed(uint8_t shieldId,uint16_t newMinSpeed); //Set the min speed in pps |
julientiron | 0:cba942f8172a | 442 | bool SoftStop(uint8_t shieldId); //Progressively stops the motor |
julientiron | 0:cba942f8172a | 443 | void WaitWhileActive(uint8_t shieldId); //Wait for the shield state becomes Inactive |
julientiron | 1:9efe863db15e | 444 | void Turn(rot_t rotation, uint16_t angle); //Turn left or right with the specified angle |
julientiron | 1:9efe863db15e | 445 | void Move_cm(dir_t direction, uint16_t distance); //Go forward or backward with the specified distance |
julientiron | 0:cba942f8172a | 446 | ///@} |
julientiron | 0:cba942f8172a | 447 | |
julientiron | 0:cba942f8172a | 448 | /// @defgroup group2 Easyspin control functions |
julientiron | 0:cba942f8172a | 449 | ///@{ |
julientiron | 0:cba942f8172a | 450 | void CmdDisable(uint8_t shieldId); //Send the Easyspin_DISABLE command |
julientiron | 0:cba942f8172a | 451 | void CmdEnable(uint8_t shieldId); //Send the Easyspin_ENABLE command |
julientiron | 0:cba942f8172a | 452 | uint32_t CmdGetParam(uint8_t shieldId, //Send the Easyspin_GET_PARAM command |
julientiron | 0:cba942f8172a | 453 | Easyspin_Registers_t param); |
julientiron | 0:cba942f8172a | 454 | uint16_t CmdGetStatus(uint8_t shieldId); // Send the Easyspin_GET_STATUS command |
julientiron | 0:cba942f8172a | 455 | void CmdNop(uint8_t shieldId); //Send the Easyspin_NOP command |
julientiron | 0:cba942f8172a | 456 | void CmdSetParam(uint8_t shieldId, //Send the Easyspin_SET_PARAM command |
julientiron | 0:cba942f8172a | 457 | Easyspin_Registers_t param, |
julientiron | 0:cba942f8172a | 458 | uint32_t value); |
julientiron | 0:cba942f8172a | 459 | uint16_t ReadStatusRegister(uint8_t shieldId); // Read the Easyspin_STATUS register without |
julientiron | 0:cba942f8172a | 460 | // clearing the flags |
julientiron | 0:cba942f8172a | 461 | void Reset(void); //Set the Easyspin reset pin |
julientiron | 0:cba942f8172a | 462 | void ReleaseReset(void); //Release the Easyspin reset pin |
julientiron | 0:cba942f8172a | 463 | void SelectStepMode(uint8_t shieldId, // Step mode selection |
julientiron | 0:cba942f8172a | 464 | Easyspin_STEP_SEL_t stepMod); |
julientiron | 0:cba942f8172a | 465 | void SetDirection(uint8_t shieldId, //Set the Easyspin direction pin |
julientiron | 0:cba942f8172a | 466 | dir_t direction); |
julientiron | 0:cba942f8172a | 467 | ///@} |
julientiron | 0:cba942f8172a | 468 | |
julientiron | 0:cba942f8172a | 469 | /// @defgroup group4 Functions for timer ISRs only |
julientiron | 0:cba942f8172a | 470 | /// @brief To be used inside the library by the timer ISRs only |
julientiron | 0:cba942f8172a | 471 | /// Must not be used elsewhere. |
julientiron | 0:cba942f8172a | 472 | ///@{ |
julientiron | 0:cba942f8172a | 473 | static class Easyspin *GetInstancePtr(void); |
julientiron | 0:cba942f8172a | 474 | void StepClockHandler(uint8_t shieldId); |
julientiron | 0:cba942f8172a | 475 | ///@} |
julientiron | 0:cba942f8172a | 476 | |
julientiron | 0:cba942f8172a | 477 | private: |
julientiron | 0:cba942f8172a | 478 | void ApplySpeed(uint8_t pwmId, uint16_t newSpeed); |
julientiron | 0:cba942f8172a | 479 | void ComputeSpeedProfile(uint8_t shieldId, uint32_t nbSteps); |
julientiron | 0:cba942f8172a | 480 | int32_t ConvertPosition(uint32_t abs_position_reg); |
julientiron | 0:cba942f8172a | 481 | static void FlagInterruptHandler(void); |
julientiron | 0:cba942f8172a | 482 | void SendCommand(uint8_t shieldId, uint8_t param); |
julientiron | 0:cba942f8172a | 483 | void SetRegisterToPredefinedValues(uint8_t shieldId); |
julientiron | 0:cba942f8172a | 484 | void WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte); |
julientiron | 0:cba942f8172a | 485 | void PwmInit(uint8_t pwmId); |
julientiron | 0:cba942f8172a | 486 | void Pwm1SetFreq(uint16_t newFreq); |
julientiron | 0:cba942f8172a | 487 | void Pwm2SetFreq(uint16_t newFreq); |
julientiron | 0:cba942f8172a | 488 | void Pwm3SetFreq(uint16_t newFreq); |
julientiron | 0:cba942f8172a | 489 | void PwmStop(uint8_t pwmId); |
julientiron | 0:cba942f8172a | 490 | void SetShieldParamsToPredefinedValues(void); |
julientiron | 0:cba942f8172a | 491 | void StartMovement(uint8_t shieldId); |
julientiron | 0:cba942f8172a | 492 | uint8_t Tval_Current_to_Par(double Tval); |
julientiron | 0:cba942f8172a | 493 | uint8_t Tmin_Time_to_Par(double Tmin); |
julientiron | 1:9efe863db15e | 494 | void tick1(); |
julientiron | 1:9efe863db15e | 495 | void tick2(); |
julientiron | 0:cba942f8172a | 496 | |
julientiron | 0:cba942f8172a | 497 | // variable members |
julientiron | 0:cba942f8172a | 498 | DigitalOut dir1; |
julientiron | 0:cba942f8172a | 499 | DigitalOut dir2; |
julientiron | 0:cba942f8172a | 500 | DigitalOut dir3; |
julientiron | 1:9efe863db15e | 501 | DigitalOut pwm1; |
julientiron | 1:9efe863db15e | 502 | DigitalOut pwm2; |
julientiron | 1:9efe863db15e | 503 | DigitalOut pwm3; |
julientiron | 0:cba942f8172a | 504 | DigitalOut reset; |
julientiron | 0:cba942f8172a | 505 | DigitalOut CS; |
julientiron | 1:9efe863db15e | 506 | Ticker ticker1; |
julientiron | 1:9efe863db15e | 507 | Ticker ticker2; |
julientiron | 1:9efe863db15e | 508 | Ticker ticker3; |
julientiron | 0:cba942f8172a | 509 | InterruptIn flag; |
julientiron | 0:cba942f8172a | 510 | SPI spi; |
julientiron | 0:cba942f8172a | 511 | shieldParams_t shieldPrm[MAX_NUMBER_OF_SHIELDS]; |
julientiron | 0:cba942f8172a | 512 | static volatile class Easyspin *instancePtr; |
julientiron | 0:cba942f8172a | 513 | static volatile void(*flagInterruptCallback)(void); |
julientiron | 0:cba942f8172a | 514 | static volatile bool isrFlag; |
julientiron | 0:cba942f8172a | 515 | static volatile bool spiPreemtionByIsr; |
julientiron | 0:cba942f8172a | 516 | static volatile uint8_t numberOfShields; |
julientiron | 0:cba942f8172a | 517 | static const uint16_t prescalerArrayTimer0_1[PRESCALER_ARRAY_TIMER0_1_SIZE]; |
julientiron | 0:cba942f8172a | 518 | static const uint16_t prescalerArrayTimer2[PRESCALER_ARRAY_TIMER2_SIZE]; |
julientiron | 0:cba942f8172a | 519 | static uint8_t spiTxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS]; |
julientiron | 0:cba942f8172a | 520 | static uint8_t spiRxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS]; |
julientiron | 0:cba942f8172a | 521 | }; |
julientiron | 0:cba942f8172a | 522 | |
julientiron | 0:cba942f8172a | 523 | #ifdef _DEBUG_Easyspin |
julientiron | 0:cba942f8172a | 524 | uint16_t GetFreeRam (void); |
julientiron | 0:cba942f8172a | 525 | #endif |
julientiron | 0:cba942f8172a | 526 | |
julientiron | 0:cba942f8172a | 527 | #endif /* #ifndef __Easyspin_H_INCLUDED */ |