Library to handle the X_NUCLEO_IHM02A1 Motor Control Expansion Board based on the L6470 component.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_IHM02A1 ConcorsoFinal HelloWorld_IHM02A1_mbedOS HelloWorld_IHM02A1-Serialinterpreter ... more

Fork of X_NUCLEO_IHM02A1 by ST Expansion SW Team

Motor Control Library

Introduction

Library to handle the X-NUCLEO-IHM02A1 Motor Control Expansion Board based on the the L6470 component.

Daisy-Chain Configuration

The two L6470 components mounted on this board are connected in daisy-chain configuration. This board can be stacked up to four times so that the eight L6470 components will be connected two-by-two in daisy-chain configuration.

Concerning the SSEL pin of the SPI communication, each expansion board must be in one of the following configuration:

  • SB_23 resistor connected only: SSEL on pin A2;
  • SB_7 resistor connected only: SSEL on pin D2;
  • SB_8 resistor connected only: SSEL on pin D10;
  • SB_9 resistor connected only: SSEL on pin D5.

Arduino Connector Compatibility Warning

X-NUCLEO-IHM02A1 is Arduino compatible with one exception: instead of using D13 pin to drive the SPI clock, it uses D3 pin, hence the default configuration for this library is with the SPI clock on D3 pin.

To be fully Arduino compatible the following patch is required:

  • to remove the SB34 resistor;
  • to solder the SB12 resistor.

Alternatively, you can route the Nucleo board’s D13 pin directly to the expansion board’s D3 pin with a wire. In case you patch your expansion board or route the pin, the SPI clock will be driven on D13 pin rather than on D3 pin, and you have also to initialize the sclk PinName variable with D13 rather than D3. This patch is known to be required, for example, on the following boards: NUCLEO-F103RB, NUCLEO-F302RB, NUCLEO-F411RE, and NUCLEO-F429ZI.

If you use D13 pin for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to the D13 pin.

Example Applications

Committer:
Davidroid
Date:
Mon Mar 13 17:52:38 2017 +0000
Revision:
24:ff67801d7cd7
Parent:
23:cf489f2ab072
Typo corrected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:92706998571a 1 /**
Davidroid 14:e614697ebf34 2 ******************************************************************************
Davidroid 23:cf489f2ab072 3 * @file L6470.h
davide.aliprandi@st.com 22:ba7f4131a5e0 4 * @author Davide Aliprandi, STMicroelectronics
davide.aliprandi@st.com 22:ba7f4131a5e0 5 * @version V1.0.0
davide.aliprandi@st.com 22:ba7f4131a5e0 6 * @date November 12th, 2015
davide.aliprandi@st.com 22:ba7f4131a5e0 7 * @brief This file contains the class of an L6470 Motor Control component.
Davidroid 14:e614697ebf34 8 ******************************************************************************
Davidroid 14:e614697ebf34 9 *
Davidroid 14:e614697ebf34 10 * COPYRIGHT(c) 2014 STMicroelectronics
Davidroid 14:e614697ebf34 11 *
Davidroid 14:e614697ebf34 12 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 14:e614697ebf34 13 * are permitted provided that the following conditions are met:
Davidroid 14:e614697ebf34 14 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 14:e614697ebf34 15 * this list of conditions and the following disclaimer.
Davidroid 14:e614697ebf34 16 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 14:e614697ebf34 17 * this list of conditions and the following disclaimer in the documentation
Davidroid 14:e614697ebf34 18 * and/or other materials provided with the distribution.
Davidroid 14:e614697ebf34 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 14:e614697ebf34 20 * may be used to endorse or promote products derived from this software
Davidroid 14:e614697ebf34 21 * without specific prior written permission.
Davidroid 14:e614697ebf34 22 *
Davidroid 14:e614697ebf34 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 14:e614697ebf34 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 14:e614697ebf34 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 14:e614697ebf34 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 14:e614697ebf34 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 14:e614697ebf34 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 14:e614697ebf34 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 14:e614697ebf34 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 14:e614697ebf34 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 14:e614697ebf34 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 14:e614697ebf34 33 *
Davidroid 14:e614697ebf34 34 ******************************************************************************
Davidroid 14:e614697ebf34 35 */
Davidroid 14:e614697ebf34 36
Davidroid 0:92706998571a 37
davide.aliprandi@st.com 22:ba7f4131a5e0 38 /* Generated with STM32CubeTOO -----------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 39
davide.aliprandi@st.com 22:ba7f4131a5e0 40
davide.aliprandi@st.com 22:ba7f4131a5e0 41 /* Revision ------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 42 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 43 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
davide.aliprandi@st.com 22:ba7f4131a5e0 44 Branch/Trunk/Tag: trunk
davide.aliprandi@st.com 22:ba7f4131a5e0 45 Based on: X-CUBE-SPN2/trunk/Drivers/BSP/Components/L6470/L6470.h
davide.aliprandi@st.com 22:ba7f4131a5e0 46 Revision: 0
davide.aliprandi@st.com 22:ba7f4131a5e0 47 */
davide.aliprandi@st.com 22:ba7f4131a5e0 48
davide.aliprandi@st.com 22:ba7f4131a5e0 49
Davidroid 0:92706998571a 50 /* Define to prevent recursive inclusion -------------------------------------*/
Davidroid 14:e614697ebf34 51
davide.aliprandi@st.com 22:ba7f4131a5e0 52 #ifndef __L6470_CLASS_H
davide.aliprandi@st.com 22:ba7f4131a5e0 53 #define __L6470_CLASS_H
Davidroid 0:92706998571a 54
Davidroid 14:e614697ebf34 55
Davidroid 0:92706998571a 56 /* Includes ------------------------------------------------------------------*/
Davidroid 14:e614697ebf34 57
davide.aliprandi@st.com 22:ba7f4131a5e0 58 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 59 * Include here platform specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 60 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 61 #include "mbed.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 62 #include "DevSPI.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 63 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 64 * Include here component specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 65 *----------------------------------------------------------------------------*/
Davidroid 23:cf489f2ab072 66 #include "L6470_def.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 67 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 68 * Include here interface specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 69 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 70 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 71 * #include "HumiditySensor.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 72 * #include "TemperatureSensor.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 73 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 74 #include "StepperMotor.h"
Davidroid 0:92706998571a 75
Davidroid 14:e614697ebf34 76
davide.aliprandi@st.com 22:ba7f4131a5e0 77 /* Classes -------------------------------------------------------------------*/
Davidroid 0:92706998571a 78
Davidroid 0:92706998571a 79 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 80 * @brief Class representing a L6470 component.
Davidroid 14:e614697ebf34 81 */
davide.aliprandi@st.com 22:ba7f4131a5e0 82 class L6470 : public StepperMotor
Davidroid 11:1aca63b2f034 83 {
davide.aliprandi@st.com 22:ba7f4131a5e0 84 public:
davide.aliprandi@st.com 22:ba7f4131a5e0 85
davide.aliprandi@st.com 22:ba7f4131a5e0 86 /*** Public Component Related Types ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 87
davide.aliprandi@st.com 22:ba7f4131a5e0 88 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 89 * @brief Prepared Actions.
davide.aliprandi@st.com 22:ba7f4131a5e0 90 */
davide.aliprandi@st.com 22:ba7f4131a5e0 91 typedef enum
davide.aliprandi@st.com 22:ba7f4131a5e0 92 {
davide.aliprandi@st.com 22:ba7f4131a5e0 93 PREPARED_NO_ACTION = 0,
davide.aliprandi@st.com 22:ba7f4131a5e0 94 PREPARED_GET_POSITION,
davide.aliprandi@st.com 22:ba7f4131a5e0 95 PREPARED_GET_MARK,
davide.aliprandi@st.com 22:ba7f4131a5e0 96 PREPARED_GET_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 97 PREPARED_GET_MAX_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 98 PREPARED_GET_MIN_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 99 PREPARED_GET_ACCELERATION,
davide.aliprandi@st.com 22:ba7f4131a5e0 100 PREPARED_GET_DECELERATION,
davide.aliprandi@st.com 22:ba7f4131a5e0 101 PREPARED_GET_DIRECTION,
davide.aliprandi@st.com 22:ba7f4131a5e0 102 PREPARED_SET_MARK
davide.aliprandi@st.com 22:ba7f4131a5e0 103 } prepared_action_t;
davide.aliprandi@st.com 22:ba7f4131a5e0 104
davide.aliprandi@st.com 22:ba7f4131a5e0 105
davide.aliprandi@st.com 22:ba7f4131a5e0 106 /*** Constructor and Destructor Methods ***/
Davidroid 11:1aca63b2f034 107
davide.aliprandi@st.com 22:ba7f4131a5e0 108 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 109 * @brief Constructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 110 * @param flag_irq pin name of the FLAG pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 111 * @param busy_irq pin name of the BUSY pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 112 * @param standby_reset pin name of the STBY\RST pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 113 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 114 * @param spi SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 115 */
davide.aliprandi@st.com 22:ba7f4131a5e0 116 L6470(PinName flag_irq, PinName busy_irq, PinName standby_reset, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), busy_irq(busy_irq), standby_reset(standby_reset), ssel(ssel), dev_spi(spi)
davide.aliprandi@st.com 22:ba7f4131a5e0 117 {
davide.aliprandi@st.com 22:ba7f4131a5e0 118 /* ACTION 4 ----------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 119 * Initialize here the component's member variables, one variable per *
davide.aliprandi@st.com 22:ba7f4131a5e0 120 * line. *
davide.aliprandi@st.com 22:ba7f4131a5e0 121 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 122 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 123 * measure = 0; *
davide.aliprandi@st.com 22:ba7f4131a5e0 124 * instance_id = number_of_instances++; *
davide.aliprandi@st.com 22:ba7f4131a5e0 125 *--------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 126 L6470_Register = &_L6470_Register[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 127 L6470_ApplicationCommand = &_L6470_ApplicationCommand[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 128 L6470_Direction = &_L6470_Direction[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 129 L6470_ACT = &_L6470_ACT[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 130 pL6470_StatusRegister = &L6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 131 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 132 L6470_Id = number_of_devices++;
davide.aliprandi@st.com 22:ba7f4131a5e0 133 L6470_DaisyChain_HalfPrepared = ZERO_F;
davide.aliprandi@st.com 22:ba7f4131a5e0 134 memset(L6470_AppCmdPkg, 0, L6470DAISYCHAINSIZE * sizeof(sL6470_AppCmdPkg_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 135 memset(L6470_DaisyChainSpiTxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 136 memset(L6470_DaisyChainSpiRxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 137 }
davide.aliprandi@st.com 22:ba7f4131a5e0 138
davide.aliprandi@st.com 22:ba7f4131a5e0 139 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 140 * @brief Destructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 141 */
davide.aliprandi@st.com 22:ba7f4131a5e0 142 virtual ~L6470(void) {}
Davidroid 0:92706998571a 143
Davidroid 0:92706998571a 144
davide.aliprandi@st.com 22:ba7f4131a5e0 145 /*** Public Component Related Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 146
davide.aliprandi@st.com 22:ba7f4131a5e0 147 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 148 * Implement here the component's public methods, as wrappers of the C *
davide.aliprandi@st.com 22:ba7f4131a5e0 149 * component's functions. *
davide.aliprandi@st.com 22:ba7f4131a5e0 150 * They should be: *
davide.aliprandi@st.com 22:ba7f4131a5e0 151 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 22:ba7f4131a5e0 152 * functions (1); *
davide.aliprandi@st.com 22:ba7f4131a5e0 153 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 22:ba7f4131a5e0 154 * table's functions, if any (2). *
davide.aliprandi@st.com 22:ba7f4131a5e0 155 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 156 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 157 * virtual int get_value(float *p_data) //(1) *
davide.aliprandi@st.com 22:ba7f4131a5e0 158 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 159 * return COMPONENT_get_value(float *pf_data); *
davide.aliprandi@st.com 22:ba7f4131a5e0 160 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 161 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 162 * virtual int enable_feature(void) //(2) *
davide.aliprandi@st.com 22:ba7f4131a5e0 163 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 164 * return COMPONENT_enable_feature(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 165 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 166 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 167 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 168 * @brief Initializing the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 169 * @param init Pointer to device specific initalization structure.
davide.aliprandi@st.com 22:ba7f4131a5e0 170 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 171 */
davide.aliprandi@st.com 22:ba7f4131a5e0 172 virtual int init(void *init)
davide.aliprandi@st.com 22:ba7f4131a5e0 173 {
davide.aliprandi@st.com 22:ba7f4131a5e0 174 return (int) L6470_Config((void *) init);
davide.aliprandi@st.com 22:ba7f4131a5e0 175 }
davide.aliprandi@st.com 22:ba7f4131a5e0 176
davide.aliprandi@st.com 22:ba7f4131a5e0 177 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 178 * @brief Getting the ID of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 179 * @param id Pointer to an allocated variable to store the ID into.
davide.aliprandi@st.com 22:ba7f4131a5e0 180 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 181 */
davide.aliprandi@st.com 22:ba7f4131a5e0 182 virtual int read_id(uint8_t *id)
davide.aliprandi@st.com 22:ba7f4131a5e0 183 {
davide.aliprandi@st.com 22:ba7f4131a5e0 184 return (int) 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 185 }
davide.aliprandi@st.com 22:ba7f4131a5e0 186
davide.aliprandi@st.com 22:ba7f4131a5e0 187 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 188 * @brief Getting the status.
davide.aliprandi@st.com 22:ba7f4131a5e0 189 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 190 * @retval The status.
davide.aliprandi@st.com 22:ba7f4131a5e0 191 */
davide.aliprandi@st.com 22:ba7f4131a5e0 192 virtual unsigned int get_status(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 193 {
davide.aliprandi@st.com 22:ba7f4131a5e0 194 return (unsigned int) L6470_GetStatus();
davide.aliprandi@st.com 22:ba7f4131a5e0 195 }
davide.aliprandi@st.com 22:ba7f4131a5e0 196
davide.aliprandi@st.com 22:ba7f4131a5e0 197 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 198 * @brief Getting a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 199 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 200 * @retval The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 201 * @note The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 202 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 203 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 204 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 205 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 206 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 207 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 208 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 209 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 210 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 211 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 212 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 213 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 214 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 215 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 216 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 217 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 218 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 219 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 220 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 221 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 222 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 223 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 224 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 225 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 226 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 227 */
davide.aliprandi@st.com 22:ba7f4131a5e0 228 virtual unsigned int get_parameter(unsigned int parameter)
davide.aliprandi@st.com 22:ba7f4131a5e0 229 {
davide.aliprandi@st.com 22:ba7f4131a5e0 230 return (unsigned int) L6470_GetParam((eL6470_RegId_t) parameter);
davide.aliprandi@st.com 22:ba7f4131a5e0 231 }
davide.aliprandi@st.com 22:ba7f4131a5e0 232
davide.aliprandi@st.com 22:ba7f4131a5e0 233 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 234 * @brief Getting the position.
davide.aliprandi@st.com 22:ba7f4131a5e0 235 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 236 * @retval The position.
davide.aliprandi@st.com 22:ba7f4131a5e0 237 */
davide.aliprandi@st.com 22:ba7f4131a5e0 238 virtual signed int get_position(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 239 {
davide.aliprandi@st.com 22:ba7f4131a5e0 240 return (signed int) L6470_AbsPos_2_Position((uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 241 }
davide.aliprandi@st.com 22:ba7f4131a5e0 242
davide.aliprandi@st.com 22:ba7f4131a5e0 243 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 244 * @brief Getting the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 245 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 246 * @retval The marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 247 */
davide.aliprandi@st.com 22:ba7f4131a5e0 248 virtual signed int get_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 249 {
davide.aliprandi@st.com 22:ba7f4131a5e0 250 return (signed int) L6470_AbsPos_2_Position((uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_MARK_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 251 }
davide.aliprandi@st.com 22:ba7f4131a5e0 252
davide.aliprandi@st.com 22:ba7f4131a5e0 253 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 254 * @brief Getting the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 255 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 256 * @retval The current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 257 */
davide.aliprandi@st.com 22:ba7f4131a5e0 258 virtual unsigned int get_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 259 {
davide.aliprandi@st.com 22:ba7f4131a5e0 260 return round(L6470_Speed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 261 }
davide.aliprandi@st.com 22:ba7f4131a5e0 262
davide.aliprandi@st.com 22:ba7f4131a5e0 263 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 264 * @brief Getting the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 265 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 266 * @retval The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 267 */
davide.aliprandi@st.com 22:ba7f4131a5e0 268 virtual unsigned int get_max_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 269 {
davide.aliprandi@st.com 22:ba7f4131a5e0 270 return round(L6470_MaxSpeed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 271 }
davide.aliprandi@st.com 22:ba7f4131a5e0 272
davide.aliprandi@st.com 22:ba7f4131a5e0 273 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 274 * @brief Getting the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 275 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 276 * @retval The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 277 */
davide.aliprandi@st.com 22:ba7f4131a5e0 278 virtual unsigned int get_min_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 279 {
davide.aliprandi@st.com 22:ba7f4131a5e0 280 return round(L6470_MinSpeed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 281 }
davide.aliprandi@st.com 22:ba7f4131a5e0 282
davide.aliprandi@st.com 22:ba7f4131a5e0 283 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 284 * @brief Getting the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 285 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 286 * @retval The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 287 */
davide.aliprandi@st.com 22:ba7f4131a5e0 288 virtual unsigned int get_acceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 289 {
davide.aliprandi@st.com 22:ba7f4131a5e0 290 return round(L6470_Acc_2_Step_s2((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_ACC_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 291 }
davide.aliprandi@st.com 22:ba7f4131a5e0 292
davide.aliprandi@st.com 22:ba7f4131a5e0 293 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 294 * @brief Getting the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 295 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 296 * @retval The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 297 */
davide.aliprandi@st.com 22:ba7f4131a5e0 298 virtual unsigned int get_deceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 299 {
davide.aliprandi@st.com 22:ba7f4131a5e0 300 return round(L6470_Dec_2_Step_s2((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_DEC_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 301 }
davide.aliprandi@st.com 22:ba7f4131a5e0 302
davide.aliprandi@st.com 22:ba7f4131a5e0 303 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 304 * @brief Getting the direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 305 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 306 * @retval The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 307 */
davide.aliprandi@st.com 22:ba7f4131a5e0 308 virtual direction_t get_direction(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 309 {
davide.aliprandi@st.com 22:ba7f4131a5e0 310 return (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
davide.aliprandi@st.com 22:ba7f4131a5e0 311 }
Davidroid 0:92706998571a 312
davide.aliprandi@st.com 22:ba7f4131a5e0 313 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 314 * @brief Setting a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 315 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 316 * @param value The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 317 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 318 * @note The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 319 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 320 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 321 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 322 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 323 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 324 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 325 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 326 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 327 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 328 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 329 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 330 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 331 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 332 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 333 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 334 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 335 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 336 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 337 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 338 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 339 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 340 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 341 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 342 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 343 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 344 * @warning Some registers can only be written in particular conditions (see L6470's datasheet).
davide.aliprandi@st.com 22:ba7f4131a5e0 345 * Any attempt to write one of those registers when the conditions are not satisfied
davide.aliprandi@st.com 22:ba7f4131a5e0 346 * causes the command to be ignored and the NOTPERF_CMD flag to rise at the end of the
davide.aliprandi@st.com 22:ba7f4131a5e0 347 * last argument byte. Any attempt to set an inexistent register (wrong address value)
davide.aliprandi@st.com 22:ba7f4131a5e0 348 * causes the command to be ignored and the WRONG_CMD flag to rise.
davide.aliprandi@st.com 22:ba7f4131a5e0 349 * For example, setting some parameters requires first to disable the power bridge;
davide.aliprandi@st.com 22:ba7f4131a5e0 350 * this can be done through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 351 * They are the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 352 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 353 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 354 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 355 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 356 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 357 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 358 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 359 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 360 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 361 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 362 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 363 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 364 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 365 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 366 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 367 */
davide.aliprandi@st.com 22:ba7f4131a5e0 368 virtual void set_parameter(unsigned int parameter, unsigned int value)
davide.aliprandi@st.com 22:ba7f4131a5e0 369 {
davide.aliprandi@st.com 22:ba7f4131a5e0 370 L6470_SetParam((eL6470_RegId_t) parameter, (uint32_t) value);
davide.aliprandi@st.com 22:ba7f4131a5e0 371 }
davide.aliprandi@st.com 22:ba7f4131a5e0 372
davide.aliprandi@st.com 22:ba7f4131a5e0 373 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 374 * @brief Setting the current position to be the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 375 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 376 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 377 */
davide.aliprandi@st.com 22:ba7f4131a5e0 378 virtual void set_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 379 {
davide.aliprandi@st.com 22:ba7f4131a5e0 380 L6470_ResetPos();
davide.aliprandi@st.com 22:ba7f4131a5e0 381 }
davide.aliprandi@st.com 22:ba7f4131a5e0 382
davide.aliprandi@st.com 22:ba7f4131a5e0 383 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 384 * @brief Setting the current position to be the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 385 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 386 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 387 */
davide.aliprandi@st.com 22:ba7f4131a5e0 388 virtual void set_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 389 {
davide.aliprandi@st.com 22:ba7f4131a5e0 390 L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 391 }
davide.aliprandi@st.com 22:ba7f4131a5e0 392
davide.aliprandi@st.com 22:ba7f4131a5e0 393 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 394 * @brief Setting the current position to be the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 395 * @param position The given position.
davide.aliprandi@st.com 22:ba7f4131a5e0 396 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 397 */
davide.aliprandi@st.com 22:ba7f4131a5e0 398 virtual void set_mark(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 399 {
davide.aliprandi@st.com 22:ba7f4131a5e0 400 L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 401 }
davide.aliprandi@st.com 22:ba7f4131a5e0 402
davide.aliprandi@st.com 22:ba7f4131a5e0 403 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 404 * @brief Setting the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 405 * @param speed The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 406 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 407 */
davide.aliprandi@st.com 22:ba7f4131a5e0 408 virtual bool set_max_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 409 {
davide.aliprandi@st.com 22:ba7f4131a5e0 410 L6470_SetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) L6470_Step_s_2_MaxSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 411 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 412 }
davide.aliprandi@st.com 22:ba7f4131a5e0 413
davide.aliprandi@st.com 22:ba7f4131a5e0 414 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 415 * @brief Setting the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 416 * @param speed The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 417 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 418 */
davide.aliprandi@st.com 22:ba7f4131a5e0 419 virtual bool set_min_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 420 {
davide.aliprandi@st.com 22:ba7f4131a5e0 421 L6470_SetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) L6470_Step_s_2_MinSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 422 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 423 }
davide.aliprandi@st.com 22:ba7f4131a5e0 424
davide.aliprandi@st.com 22:ba7f4131a5e0 425 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 426 * @brief Setting the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 427 * @param acceleration The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 428 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 429 */
davide.aliprandi@st.com 22:ba7f4131a5e0 430 virtual bool set_acceleration(unsigned int acceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 431 {
davide.aliprandi@st.com 22:ba7f4131a5e0 432 L6470_SetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) L6470_Step_s2_2_Acc((float) acceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 433 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 434 }
davide.aliprandi@st.com 22:ba7f4131a5e0 435
davide.aliprandi@st.com 22:ba7f4131a5e0 436 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 437 * @brief Setting the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 438 * @param deceleration The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 439 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 440 */
davide.aliprandi@st.com 22:ba7f4131a5e0 441 virtual bool set_deceleration(unsigned int deceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 442 {
davide.aliprandi@st.com 22:ba7f4131a5e0 443 L6470_SetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) L6470_Step_s2_2_Dec((float) deceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 444 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 445 }
davide.aliprandi@st.com 22:ba7f4131a5e0 446
davide.aliprandi@st.com 22:ba7f4131a5e0 447 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 448 * @brief Setting the Step Mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 449 * @param step_mode The Step Mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 450 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 451 * @warning Setting the step mode implies first disabling the power bridge through
davide.aliprandi@st.com 22:ba7f4131a5e0 452 * the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 453 * @warning Every time step mode is changed, the values of the home
davide.aliprandi@st.com 22:ba7f4131a5e0 454 * and mark positions lose meaning and are reset.
davide.aliprandi@st.com 22:ba7f4131a5e0 455 */
davide.aliprandi@st.com 22:ba7f4131a5e0 456 virtual bool set_step_mode(step_mode_t step_mode)
davide.aliprandi@st.com 22:ba7f4131a5e0 457 {
davide.aliprandi@st.com 22:ba7f4131a5e0 458 if ((eMotorStepMode_t) step_mode > MICROSTEP_1_128) {
davide.aliprandi@st.com 22:ba7f4131a5e0 459 return false;
davide.aliprandi@st.com 22:ba7f4131a5e0 460 }
davide.aliprandi@st.com 22:ba7f4131a5e0 461 soft_hiz();
davide.aliprandi@st.com 22:ba7f4131a5e0 462 L6470_SetParam((eL6470_RegId_t) L6470_STEP_MODE_ID, (eMotorStepMode_t) step_mode);
davide.aliprandi@st.com 22:ba7f4131a5e0 463 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 464 }
davide.aliprandi@st.com 22:ba7f4131a5e0 465
davide.aliprandi@st.com 22:ba7f4131a5e0 466 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 467 * @brief Going to a specified position through the shortest path.
davide.aliprandi@st.com 22:ba7f4131a5e0 468 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 469 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 470 */
davide.aliprandi@st.com 22:ba7f4131a5e0 471 virtual void go_to(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 472 {
davide.aliprandi@st.com 22:ba7f4131a5e0 473 L6470_GoTo((uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 474 }
davide.aliprandi@st.com 22:ba7f4131a5e0 475
davide.aliprandi@st.com 22:ba7f4131a5e0 476 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 477 * @brief Going to a specified position imposing the desired direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 478 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 479 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 480 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 481 */
davide.aliprandi@st.com 22:ba7f4131a5e0 482 virtual void go_to(signed int position, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 483 {
davide.aliprandi@st.com 22:ba7f4131a5e0 484 L6470_GoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 485 }
davide.aliprandi@st.com 22:ba7f4131a5e0 486
davide.aliprandi@st.com 22:ba7f4131a5e0 487 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 488 * @brief Going to the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 489 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 490 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 491 */
davide.aliprandi@st.com 22:ba7f4131a5e0 492 virtual void go_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 493 {
davide.aliprandi@st.com 22:ba7f4131a5e0 494 L6470_GoHome();
davide.aliprandi@st.com 22:ba7f4131a5e0 495 }
Davidroid 0:92706998571a 496
davide.aliprandi@st.com 22:ba7f4131a5e0 497 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 498 * @brief Going to the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 499 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 500 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 501 */
davide.aliprandi@st.com 22:ba7f4131a5e0 502 virtual void go_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 503 {
davide.aliprandi@st.com 22:ba7f4131a5e0 504 L6470_GoMark();
davide.aliprandi@st.com 22:ba7f4131a5e0 505 }
davide.aliprandi@st.com 22:ba7f4131a5e0 506
davide.aliprandi@st.com 22:ba7f4131a5e0 507 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 508 * @brief Running at the given speed imposing the desired direction until
davide.aliprandi@st.com 22:ba7f4131a5e0 509 * an external switch turn-on event occurs.
davide.aliprandi@st.com 22:ba7f4131a5e0 510 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 511 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 512 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 513 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 514 * @note The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 515 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 516 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 517 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 518 */
davide.aliprandi@st.com 22:ba7f4131a5e0 519 virtual void go_until(eL6470_ActId_t action, direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 520 {
davide.aliprandi@st.com 22:ba7f4131a5e0 521 L6470_GoUntil((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 522 }
davide.aliprandi@st.com 22:ba7f4131a5e0 523
davide.aliprandi@st.com 22:ba7f4131a5e0 524 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 525 * @brief Running towards a specified direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 526 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 527 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 528 */
davide.aliprandi@st.com 22:ba7f4131a5e0 529 virtual void run(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 530 {
davide.aliprandi@st.com 22:ba7f4131a5e0 531 L6470_Run((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 532 }
davide.aliprandi@st.com 22:ba7f4131a5e0 533
davide.aliprandi@st.com 22:ba7f4131a5e0 534 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 535 * @brief Running towards a specified direction at the given speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 536 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 537 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 538 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 539 */
davide.aliprandi@st.com 22:ba7f4131a5e0 540 virtual void run(direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 541 {
davide.aliprandi@st.com 22:ba7f4131a5e0 542 L6470_Run((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 543 }
davide.aliprandi@st.com 22:ba7f4131a5e0 544
davide.aliprandi@st.com 22:ba7f4131a5e0 545 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 546 * @brief Moving towards a specified direction for a certain number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 547 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 548 * @param steps The desired number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 549 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 550 */
davide.aliprandi@st.com 22:ba7f4131a5e0 551 virtual void move(direction_t direction, unsigned int steps)
davide.aliprandi@st.com 22:ba7f4131a5e0 552 {
davide.aliprandi@st.com 22:ba7f4131a5e0 553 L6470_Move((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
davide.aliprandi@st.com 22:ba7f4131a5e0 554 }
davide.aliprandi@st.com 22:ba7f4131a5e0 555
davide.aliprandi@st.com 22:ba7f4131a5e0 556 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 557 * @brief Stopping the motor through an immediate deceleration up to zero speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 558 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 559 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 560 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 561 */
davide.aliprandi@st.com 22:ba7f4131a5e0 562 virtual void soft_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 563 {
davide.aliprandi@st.com 22:ba7f4131a5e0 564 L6470_SoftStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 565 }
davide.aliprandi@st.com 22:ba7f4131a5e0 566
davide.aliprandi@st.com 22:ba7f4131a5e0 567 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 568 * @brief Stopping the motor through an immediate infinite deceleration.
davide.aliprandi@st.com 22:ba7f4131a5e0 569 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 570 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 571 */
davide.aliprandi@st.com 22:ba7f4131a5e0 572 virtual void hard_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 573 {
davide.aliprandi@st.com 22:ba7f4131a5e0 574 L6470_HardStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 575 }
davide.aliprandi@st.com 22:ba7f4131a5e0 576
davide.aliprandi@st.com 22:ba7f4131a5e0 577 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 578 * @brief Disabling the power bridge after performing a deceleration to zero.
davide.aliprandi@st.com 22:ba7f4131a5e0 579 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 580 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 581 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 582 */
davide.aliprandi@st.com 22:ba7f4131a5e0 583 virtual void soft_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 584 {
Davidroid 23:cf489f2ab072 585 L6470_SoftHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 586 }
davide.aliprandi@st.com 22:ba7f4131a5e0 587
davide.aliprandi@st.com 22:ba7f4131a5e0 588 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 589 * @brief Disabling the power bridge immediately.
davide.aliprandi@st.com 22:ba7f4131a5e0 590 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 591 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 592 */
davide.aliprandi@st.com 22:ba7f4131a5e0 593 virtual void hard_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 594 {
davide.aliprandi@st.com 22:ba7f4131a5e0 595 L6470_HardHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 596 }
davide.aliprandi@st.com 22:ba7f4131a5e0 597
davide.aliprandi@st.com 22:ba7f4131a5e0 598 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 599 * @brief Waiting while the motor is active.
davide.aliprandi@st.com 22:ba7f4131a5e0 600 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 601 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 602 */
davide.aliprandi@st.com 22:ba7f4131a5e0 603 virtual void wait_while_active(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 604 {
davide.aliprandi@st.com 22:ba7f4131a5e0 605 while (L6470_CheckStatusRegisterFlag(BUSY_ID) == 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 606 }
davide.aliprandi@st.com 22:ba7f4131a5e0 607
davide.aliprandi@st.com 22:ba7f4131a5e0 608 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 609 * @brief Switching to step-clock mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 610 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 611 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 612 * @warning Setting the step-clock mode implies first disabling the power bridge through
davide.aliprandi@st.com 22:ba7f4131a5e0 613 * the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 614 */
davide.aliprandi@st.com 22:ba7f4131a5e0 615 virtual void step_clock(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 616 {
davide.aliprandi@st.com 22:ba7f4131a5e0 617 soft_hiz();
davide.aliprandi@st.com 22:ba7f4131a5e0 618 L6470_StepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 619 }
davide.aliprandi@st.com 22:ba7f4131a5e0 620
davide.aliprandi@st.com 22:ba7f4131a5e0 621 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 622 * @brief Doing a motion at minimum speed imposing a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 623 * until the SW is released.
davide.aliprandi@st.com 22:ba7f4131a5e0 624 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 625 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 626 * @note The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 627 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 628 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 629 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 630 */
davide.aliprandi@st.com 22:ba7f4131a5e0 631 virtual void release_sw(eL6470_ActId_t action, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 632 {
davide.aliprandi@st.com 22:ba7f4131a5e0 633 L6470_ReleaseSW((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 634 }
davide.aliprandi@st.com 22:ba7f4131a5e0 635
davide.aliprandi@st.com 22:ba7f4131a5e0 636 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 637 * @brief Resetting the device to power-up conditions.
davide.aliprandi@st.com 22:ba7f4131a5e0 638 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 639 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 640 */
davide.aliprandi@st.com 22:ba7f4131a5e0 641 virtual void reset_device(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 642 {
davide.aliprandi@st.com 22:ba7f4131a5e0 643 L6470_ResetDevice();
davide.aliprandi@st.com 22:ba7f4131a5e0 644 }
davide.aliprandi@st.com 22:ba7f4131a5e0 645
davide.aliprandi@st.com 22:ba7f4131a5e0 646 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 647 * @brief Preparing the command to get the status.
davide.aliprandi@st.com 22:ba7f4131a5e0 648 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 649 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 650 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 651 */
davide.aliprandi@st.com 22:ba7f4131a5e0 652 virtual void prepare_get_status(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 653 {
davide.aliprandi@st.com 22:ba7f4131a5e0 654 L6470_PrepareGetStatus();
davide.aliprandi@st.com 22:ba7f4131a5e0 655 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 656 }
Davidroid 0:92706998571a 657
davide.aliprandi@st.com 22:ba7f4131a5e0 658 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 659 * @brief Preparing the command to get a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 660 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 661 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 662 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 663 * The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 664 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 665 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 666 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 667 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 668 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 669 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 670 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 671 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 672 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 673 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 674 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 675 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 676 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 677 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 678 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 679 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 680 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 681 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 682 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 683 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 684 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 685 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 686 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 687 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 688 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 689 */
davide.aliprandi@st.com 22:ba7f4131a5e0 690 virtual void prepare_get_parameter(unsigned int parameter)
davide.aliprandi@st.com 22:ba7f4131a5e0 691 {
davide.aliprandi@st.com 22:ba7f4131a5e0 692 L6470_PrepareGetParam((eL6470_RegId_t) parameter);
davide.aliprandi@st.com 22:ba7f4131a5e0 693 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 694 }
davide.aliprandi@st.com 22:ba7f4131a5e0 695
davide.aliprandi@st.com 22:ba7f4131a5e0 696 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 697 * @brief Preparing the command to get the position.
davide.aliprandi@st.com 22:ba7f4131a5e0 698 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 699 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 700 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 701 */
davide.aliprandi@st.com 22:ba7f4131a5e0 702 virtual void prepare_get_position(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 703 {
davide.aliprandi@st.com 22:ba7f4131a5e0 704 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ABS_POS_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 705 prepared_action = PREPARED_GET_POSITION;
davide.aliprandi@st.com 22:ba7f4131a5e0 706 }
davide.aliprandi@st.com 22:ba7f4131a5e0 707
davide.aliprandi@st.com 22:ba7f4131a5e0 708 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 709 * @brief Preparing the command to get the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 710 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 711 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 712 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 713 */
davide.aliprandi@st.com 22:ba7f4131a5e0 714 virtual void prepare_get_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 715 {
davide.aliprandi@st.com 22:ba7f4131a5e0 716 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MARK_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 717 prepared_action = PREPARED_GET_MARK;
davide.aliprandi@st.com 22:ba7f4131a5e0 718 }
davide.aliprandi@st.com 22:ba7f4131a5e0 719
davide.aliprandi@st.com 22:ba7f4131a5e0 720 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 721 * @brief Preparing the command to get the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 722 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 723 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 724 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 725 */
davide.aliprandi@st.com 22:ba7f4131a5e0 726 virtual void prepare_get_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 727 {
davide.aliprandi@st.com 22:ba7f4131a5e0 728 L6470_PrepareGetParam((eL6470_RegId_t) L6470_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 729 prepared_action = PREPARED_GET_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 730 }
davide.aliprandi@st.com 22:ba7f4131a5e0 731
davide.aliprandi@st.com 22:ba7f4131a5e0 732 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 733 * @brief Preparing the command to get the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 734 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 735 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 736 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 737 */
davide.aliprandi@st.com 22:ba7f4131a5e0 738 virtual void prepare_get_max_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 739 {
davide.aliprandi@st.com 22:ba7f4131a5e0 740 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 741 prepared_action = PREPARED_GET_MAX_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 742 }
davide.aliprandi@st.com 22:ba7f4131a5e0 743
davide.aliprandi@st.com 22:ba7f4131a5e0 744 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 745 * @brief Preparing the command to get the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 746 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 747 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 748 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 749 */
davide.aliprandi@st.com 22:ba7f4131a5e0 750 virtual void prepare_get_min_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 751 {
davide.aliprandi@st.com 22:ba7f4131a5e0 752 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 753 prepared_action = PREPARED_GET_MIN_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 754 }
Davidroid 0:92706998571a 755
davide.aliprandi@st.com 22:ba7f4131a5e0 756 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 757 * @brief Preparing the command to get the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 758 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 759 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 760 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 761 */
davide.aliprandi@st.com 22:ba7f4131a5e0 762 virtual void prepare_get_acceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 763 {
davide.aliprandi@st.com 22:ba7f4131a5e0 764 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ACC_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 765 prepared_action = PREPARED_GET_ACCELERATION;
davide.aliprandi@st.com 22:ba7f4131a5e0 766 }
davide.aliprandi@st.com 22:ba7f4131a5e0 767
davide.aliprandi@st.com 22:ba7f4131a5e0 768 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 769 * @brief Preparing the command to get the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 770 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 771 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 772 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 773 */
davide.aliprandi@st.com 22:ba7f4131a5e0 774 virtual void prepare_get_deceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 775 {
davide.aliprandi@st.com 22:ba7f4131a5e0 776 L6470_PrepareGetParam((eL6470_RegId_t) L6470_DEC_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 777 prepared_action = PREPARED_GET_DECELERATION;
davide.aliprandi@st.com 22:ba7f4131a5e0 778 }
davide.aliprandi@st.com 22:ba7f4131a5e0 779
davide.aliprandi@st.com 22:ba7f4131a5e0 780 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 781 * @brief Preparing the command to get the direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 782 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 783 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 784 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 785 */
davide.aliprandi@st.com 22:ba7f4131a5e0 786 virtual void prepare_get_direction(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 787 {
davide.aliprandi@st.com 22:ba7f4131a5e0 788 if (!L6470_DaisyChain_HalfPrepared) {
davide.aliprandi@st.com 22:ba7f4131a5e0 789 /* To avoid deleting the previous entered command. */
davide.aliprandi@st.com 22:ba7f4131a5e0 790 L6470_DaisyChain_HalfPrepared = ONE_F;
davide.aliprandi@st.com 22:ba7f4131a5e0 791 /* Resetting commands. */
davide.aliprandi@st.com 22:ba7f4131a5e0 792 L6470_ResetAppCmdPkg(L6470_AppCmdPkg);
davide.aliprandi@st.com 22:ba7f4131a5e0 793 }
davide.aliprandi@st.com 22:ba7f4131a5e0 794 prepared_action = PREPARED_GET_DIRECTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 795 }
davide.aliprandi@st.com 22:ba7f4131a5e0 796
davide.aliprandi@st.com 22:ba7f4131a5e0 797 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 798 * @brief Preparing the command to set a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 799 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 800 * @param value The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 801 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 802 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 803 * The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 804 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 805 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 806 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 807 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 808 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 809 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 810 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 811 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 812 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 813 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 814 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 815 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 816 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 817 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 818 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 819 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 820 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 821 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 822 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 823 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 824 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 825 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 826 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 827 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 828 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 829 * @warning Some registers can only be written in particular conditions (see L6470's datasheet).
davide.aliprandi@st.com 22:ba7f4131a5e0 830 * Any attempt to write one of those registers when the conditions are not satisfied
davide.aliprandi@st.com 22:ba7f4131a5e0 831 * causes the command to be ignored and the NOTPERF_CMD flag to rise at the end of the
davide.aliprandi@st.com 22:ba7f4131a5e0 832 * last argument byte. Any attempt to set an inexistent register (wrong address value)
davide.aliprandi@st.com 22:ba7f4131a5e0 833 * causes the command to be ignored and the WRONG_CMD flag to rise.
davide.aliprandi@st.com 22:ba7f4131a5e0 834 * For example, setting some parameters requires first to disable the power bridge;
davide.aliprandi@st.com 22:ba7f4131a5e0 835 * this can be done through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 836 * They are the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 837 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 838 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 839 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 840 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 841 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 842 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 843 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 844 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 845 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 846 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 847 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 848 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 849 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 850 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 851 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 852 */
davide.aliprandi@st.com 22:ba7f4131a5e0 853 virtual void prepare_set_parameter(unsigned int parameter, unsigned int value)
davide.aliprandi@st.com 22:ba7f4131a5e0 854 {
davide.aliprandi@st.com 22:ba7f4131a5e0 855 L6470_PrepareSetParam((eL6470_RegId_t) parameter, (uint32_t) value);
davide.aliprandi@st.com 22:ba7f4131a5e0 856 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 857 }
Davidroid 14:e614697ebf34 858
davide.aliprandi@st.com 22:ba7f4131a5e0 859 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 860 * @brief Preparing the command to set the current position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 861 * the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 862 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 863 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 864 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 865 */
davide.aliprandi@st.com 22:ba7f4131a5e0 866 virtual void prepare_set_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 867 {
davide.aliprandi@st.com 22:ba7f4131a5e0 868 L6470_PrepareResetPos();
davide.aliprandi@st.com 22:ba7f4131a5e0 869 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 870 }
davide.aliprandi@st.com 22:ba7f4131a5e0 871
davide.aliprandi@st.com 22:ba7f4131a5e0 872 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 873 * @brief Preparing the command to set the current position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 874 * the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 875 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 876 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 877 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 878 */
davide.aliprandi@st.com 22:ba7f4131a5e0 879 virtual void prepare_set_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 880 {
davide.aliprandi@st.com 22:ba7f4131a5e0 881 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 882 Set "0" now as marked position. This value will be replaced by the
davide.aliprandi@st.com 22:ba7f4131a5e0 883 actual position read at the time when the prepared actions will be
davide.aliprandi@st.com 22:ba7f4131a5e0 884 performed.
davide.aliprandi@st.com 22:ba7f4131a5e0 885 */
davide.aliprandi@st.com 22:ba7f4131a5e0 886 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MARK_ID, 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 887 prepared_action = PREPARED_SET_MARK;
davide.aliprandi@st.com 22:ba7f4131a5e0 888 }
davide.aliprandi@st.com 22:ba7f4131a5e0 889
davide.aliprandi@st.com 22:ba7f4131a5e0 890 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 891 * @brief Preparing the command to set the given position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 892 * the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 893 * @param position The given position.
davide.aliprandi@st.com 22:ba7f4131a5e0 894 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 895 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 896 */
davide.aliprandi@st.com 22:ba7f4131a5e0 897 virtual void prepare_set_mark(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 898 {
davide.aliprandi@st.com 22:ba7f4131a5e0 899 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 900 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 901 }
davide.aliprandi@st.com 22:ba7f4131a5e0 902
davide.aliprandi@st.com 22:ba7f4131a5e0 903 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 904 * @brief Preparing the command to set the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 905 * @param speed The current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 906 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 907 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 908 */
davide.aliprandi@st.com 22:ba7f4131a5e0 909 virtual void prepare_set_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 910 {
davide.aliprandi@st.com 22:ba7f4131a5e0 911 L6470_PrepareSetParam((eL6470_RegId_t) L6470_SPEED_ID, (uint32_t) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 912 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 913 }
davide.aliprandi@st.com 22:ba7f4131a5e0 914
davide.aliprandi@st.com 22:ba7f4131a5e0 915 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 916 * @brief Preparing the command to set the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 917 * @param speed The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 918 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 919 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 920 */
davide.aliprandi@st.com 22:ba7f4131a5e0 921 virtual void prepare_set_max_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 922 {
davide.aliprandi@st.com 22:ba7f4131a5e0 923 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) L6470_Step_s_2_MaxSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 924 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 925 }
davide.aliprandi@st.com 22:ba7f4131a5e0 926
davide.aliprandi@st.com 22:ba7f4131a5e0 927 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 928 * @brief Preparing the command to set the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 929 * @param speed The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 930 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 931 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 932 */
davide.aliprandi@st.com 22:ba7f4131a5e0 933 virtual void prepare_set_min_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 934 {
davide.aliprandi@st.com 22:ba7f4131a5e0 935 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) L6470_Step_s_2_MinSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 936 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 937 }
davide.aliprandi@st.com 22:ba7f4131a5e0 938
davide.aliprandi@st.com 22:ba7f4131a5e0 939 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 940 * @brief Preparing the command to set the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 941 * @param acceleration The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 942 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 943 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 944 */
davide.aliprandi@st.com 22:ba7f4131a5e0 945 virtual void prepare_set_acceleration(unsigned int acceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 946 {
davide.aliprandi@st.com 22:ba7f4131a5e0 947 L6470_PrepareSetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) L6470_Step_s2_2_Acc((float) acceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 948 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 949 }
davide.aliprandi@st.com 22:ba7f4131a5e0 950
davide.aliprandi@st.com 22:ba7f4131a5e0 951 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 952 * @brief Preparing the command to set the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 953 * @param deceleration The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 954 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 955 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 956 */
davide.aliprandi@st.com 22:ba7f4131a5e0 957 virtual void prepare_set_deceleration(unsigned int deceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 958 {
davide.aliprandi@st.com 22:ba7f4131a5e0 959 L6470_PrepareSetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) L6470_Step_s2_2_Dec((float) deceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 960 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 961 }
davide.aliprandi@st.com 22:ba7f4131a5e0 962
davide.aliprandi@st.com 22:ba7f4131a5e0 963 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 964 * @brief Preparing the command to go to a specified position.
davide.aliprandi@st.com 22:ba7f4131a5e0 965 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 966 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 967 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 968 */
davide.aliprandi@st.com 22:ba7f4131a5e0 969 virtual void prepare_go_to(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 970 {
davide.aliprandi@st.com 22:ba7f4131a5e0 971 L6470_PrepareGoTo((uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 972 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 973 }
davide.aliprandi@st.com 22:ba7f4131a5e0 974
davide.aliprandi@st.com 22:ba7f4131a5e0 975 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 976 * @brief Preparing the command to go to a specified position
davide.aliprandi@st.com 22:ba7f4131a5e0 977 * imposing the desired direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 978 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 979 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 980 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 981 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 982 */
davide.aliprandi@st.com 22:ba7f4131a5e0 983 virtual void prepare_go_to(signed int position, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 984 {
davide.aliprandi@st.com 22:ba7f4131a5e0 985 L6470_PrepareGoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 986 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 987 }
davide.aliprandi@st.com 22:ba7f4131a5e0 988
davide.aliprandi@st.com 22:ba7f4131a5e0 989 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 990 * @brief Preparing the command to go to the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 991 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 992 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 993 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 994 */
davide.aliprandi@st.com 22:ba7f4131a5e0 995 virtual void prepare_go_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 996 {
davide.aliprandi@st.com 22:ba7f4131a5e0 997 L6470_PrepareGoHome();
davide.aliprandi@st.com 22:ba7f4131a5e0 998 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 999 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1000
davide.aliprandi@st.com 22:ba7f4131a5e0 1001 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1002 * @brief Preparing the command to go to the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1003 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1004 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1005 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1006 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1007 virtual void prepare_go_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1008 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1009 L6470_PrepareGoMark();
davide.aliprandi@st.com 22:ba7f4131a5e0 1010 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1011 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1012
davide.aliprandi@st.com 22:ba7f4131a5e0 1013 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1014 * @brief Preparing the command to run at the given speed imposing the desired
davide.aliprandi@st.com 22:ba7f4131a5e0 1015 * direction until an external switch turn-on event occurs.
davide.aliprandi@st.com 22:ba7f4131a5e0 1016 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1017 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1018 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1019 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1020 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1021 * The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 1022 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 1023 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1024 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1025 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1026 virtual void prepare_go_until(eL6470_ActId_t L6470_ActId, direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 1027 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1028 L6470_PrepareGoUntil((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 1029 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1030 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1031
davide.aliprandi@st.com 22:ba7f4131a5e0 1032 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1033 * @brief Preparing the command to run towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1034 * at the maximum speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1035 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1036 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1037 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1038 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1039 virtual void prepare_run(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1040 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1041 L6470_PrepareRun((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 1042 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1043 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1044
davide.aliprandi@st.com 22:ba7f4131a5e0 1045 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1046 * @brief Preparing the command to run towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1047 * at the given speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1048 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1049 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1050 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1051 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1052 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1053 virtual void prepare_run(direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 1054 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1055 L6470_PrepareRun((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 1056 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1057 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1058
davide.aliprandi@st.com 22:ba7f4131a5e0 1059 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1060 * @brief Preparing the command to move towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1061 * for a certain number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1062 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1063 * @param steps The desired number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1064 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1065 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1066 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1067 virtual void prepare_move(direction_t direction, unsigned int steps)
davide.aliprandi@st.com 22:ba7f4131a5e0 1068 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1069 L6470_PrepareMove((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
davide.aliprandi@st.com 22:ba7f4131a5e0 1070 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1071 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1072
davide.aliprandi@st.com 22:ba7f4131a5e0 1073 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1074 * @brief Preparing the command to stop the motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 1075 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1076 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1077 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1078 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1079 virtual void prepare_soft_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1080 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1081 L6470_PrepareSoftStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 1082 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1083 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1084
davide.aliprandi@st.com 22:ba7f4131a5e0 1085 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1086 * @brief Preparing the command to stop the motor and disabling the power bridge.
davide.aliprandi@st.com 22:ba7f4131a5e0 1087 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1088 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1089 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1090 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1091 virtual void prepare_hard_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1092 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1093 L6470_PrepareHardStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 1094 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1095 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1096
davide.aliprandi@st.com 22:ba7f4131a5e0 1097 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1098 * @brief Preparing the command to disable the power bridge after performing
davide.aliprandi@st.com 22:ba7f4131a5e0 1099 * a deceleration to zero.
davide.aliprandi@st.com 22:ba7f4131a5e0 1100 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 1101 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1102 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1103 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1104 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1105 virtual void prepare_soft_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1106 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1107 L6470_PrepareSoftHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 1108 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1109 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1110
davide.aliprandi@st.com 22:ba7f4131a5e0 1111 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1112 * @brief Preparing the command to disable the power bridge immediately.
davide.aliprandi@st.com 22:ba7f4131a5e0 1113 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1114 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1115 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1116 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1117 virtual void prepare_hard_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1118 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1119 L6470_PrepareHardHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 1120 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1121 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1122
davide.aliprandi@st.com 22:ba7f4131a5e0 1123 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1124 * @brief Preparing the command to switch to step-clock mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1125 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1126 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1127 * @warning Setting the step-clock mode requires an explicit action by the user to first
davide.aliprandi@st.com 22:ba7f4131a5e0 1128 * disable the power bridge through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 1129 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1130 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1131 virtual void prepare_step_clock(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1132 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1133 L6470_PrepareStepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 1134 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1135 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1136
davide.aliprandi@st.com 22:ba7f4131a5e0 1137 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1138 * @brief Preparing the command to do a motion at minimum speed
davide.aliprandi@st.com 22:ba7f4131a5e0 1139 * imposing a specified direction until the SW is released.
davide.aliprandi@st.com 22:ba7f4131a5e0 1140 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1141 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1142 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1143 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1144 * The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 1145 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 1146 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1147 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1148 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1149 virtual void prepare_release_sw(eL6470_ActId_t action, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1150 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1151 L6470_PrepareReleaseSW((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 1152 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1153 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1154
davide.aliprandi@st.com 22:ba7f4131a5e0 1155 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1156 * @brief Preparing the command to reset the device to power-up conditions.
davide.aliprandi@st.com 22:ba7f4131a5e0 1157 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1158 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1159 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1160 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1161 virtual void prepare_reset_device(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1162 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1163 L6470_PrepareResetDevice();
davide.aliprandi@st.com 22:ba7f4131a5e0 1164 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1165 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1166
davide.aliprandi@st.com 22:ba7f4131a5e0 1167 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1168 * @brief Performing all the actions prepared on the components
davide.aliprandi@st.com 22:ba7f4131a5e0 1169 * of the daisy-chain.
davide.aliprandi@st.com 22:ba7f4131a5e0 1170 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1171 * @retval The raw data returned by the components.
davide.aliprandi@st.com 22:ba7f4131a5e0 1172 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1173 uint8_t* perform_prepared_actions(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1174 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1175 return L6470_PerformPreparedApplicationCommand();
davide.aliprandi@st.com 22:ba7f4131a5e0 1176 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1177
davide.aliprandi@st.com 22:ba7f4131a5e0 1178 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1179 * @brief Getting the prepared action.
davide.aliprandi@st.com 22:ba7f4131a5e0 1180 * @param None
davide.aliprandi@st.com 22:ba7f4131a5e0 1181 * @retval The prepared action.
davide.aliprandi@st.com 22:ba7f4131a5e0 1182 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1183 prepared_action_t get_prepared_action(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1184 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1185 return prepared_action;
davide.aliprandi@st.com 22:ba7f4131a5e0 1186 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1187
davide.aliprandi@st.com 22:ba7f4131a5e0 1188 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1189 * @brief Converting the raw data received by the component according to
davide.aliprandi@st.com 22:ba7f4131a5e0 1190 * the action performed on it.
davide.aliprandi@st.com 22:ba7f4131a5e0 1191 * @param raw_data The received raw data.
davide.aliprandi@st.com 22:ba7f4131a5e0 1192 * @retval The result of the action performed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1193 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1194 int32_t get_result(uint8_t *raw_data)
davide.aliprandi@st.com 22:ba7f4131a5e0 1195 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1196 switch (prepared_action) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1197 case PREPARED_GET_POSITION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1198 return L6470_AbsPos_2_Position(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_ABS_POS_ID].LengthByte));
davide.aliprandi@st.com 22:ba7f4131a5e0 1199
davide.aliprandi@st.com 22:ba7f4131a5e0 1200 case PREPARED_GET_MARK:
davide.aliprandi@st.com 22:ba7f4131a5e0 1201 return L6470_AbsPos_2_Position(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MARK_ID].LengthByte));
davide.aliprandi@st.com 22:ba7f4131a5e0 1202
davide.aliprandi@st.com 22:ba7f4131a5e0 1203 case PREPARED_GET_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1204 return round(L6470_Speed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1205
davide.aliprandi@st.com 22:ba7f4131a5e0 1206 case PREPARED_GET_MAX_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1207 return round(L6470_MaxSpeed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MAX_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1208
davide.aliprandi@st.com 22:ba7f4131a5e0 1209 case PREPARED_GET_MIN_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1210 return round(L6470_MinSpeed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MIN_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1211
davide.aliprandi@st.com 22:ba7f4131a5e0 1212 case PREPARED_GET_ACCELERATION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1213 return round(L6470_Acc_2_Step_s2(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_ACC_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1214
davide.aliprandi@st.com 22:ba7f4131a5e0 1215 case PREPARED_GET_DECELERATION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1216 return round(L6470_Dec_2_Step_s2(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_DEC_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1217
davide.aliprandi@st.com 22:ba7f4131a5e0 1218 case PREPARED_GET_DIRECTION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1219 return (int32_t) (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 0:92706998571a 1220
davide.aliprandi@st.com 22:ba7f4131a5e0 1221 default:
davide.aliprandi@st.com 22:ba7f4131a5e0 1222 case PREPARED_NO_ACTION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1223 return 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 1224 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1225 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1226
davide.aliprandi@st.com 22:ba7f4131a5e0 1227
davide.aliprandi@st.com 22:ba7f4131a5e0 1228 /*** Public Interrupt Related Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1229
davide.aliprandi@st.com 22:ba7f4131a5e0 1230 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1231 * Implement here interrupt related methods, if any. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1232 * Note that interrupt handling is platform dependent, e.g.: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1233 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1234 * InterruptIn feature_irq(pin); //Interrupt object. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1235 * feature_irq.rise(callback); //Attach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1236 * feature_irq.mode(PullNone); //Set interrupt mode. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1237 * feature_irq.enable_irq(); //Enable interrupt. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1238 * feature_irq.disable_irq(); //Disable interrupt. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1239 * + Arduino: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1240 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1241 * detachInterrupt(pin); //Detach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1242 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1243 * Example (mbed): *
davide.aliprandi@st.com 22:ba7f4131a5e0 1244 * void attach_feature_irq(void (*fptr) (void)) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1245 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1246 * feature_irq.rise(fptr); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1247 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1248 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1249 * void enable_feature_irq(void) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1250 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1251 * feature_irq.enable_irq(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1252 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1253 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1254 * void disable_feature_irq(void) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1255 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1256 * feature_irq.disable_irq(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1257 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1258 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1259 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1260 * @brief Attaching an interrupt handler to the FLAG interrupt.
davide.aliprandi@st.com 22:ba7f4131a5e0 1261 * @param fptr An interrupt handler.
davide.aliprandi@st.com 22:ba7f4131a5e0 1262 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1263 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1264 void attach_flag_irq(void (*fptr)(void))
davide.aliprandi@st.com 22:ba7f4131a5e0 1265 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1266 flag_irq.fall(fptr);
davide.aliprandi@st.com 22:ba7f4131a5e0 1267 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1268
davide.aliprandi@st.com 22:ba7f4131a5e0 1269 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1270 * @brief Enabling the FLAG interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1271 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1272 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1273 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1274 void enable_flag_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1275 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1276 flag_irq.enable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1277 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1278
davide.aliprandi@st.com 22:ba7f4131a5e0 1279 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1280 * @brief Disabling the FLAG interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1281 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1282 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1283 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1284 void disable_flag_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1285 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1286 flag_irq.disable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1287 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1288
davide.aliprandi@st.com 22:ba7f4131a5e0 1289 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1290 * @brief Attaching an interrupt handler to the BUSY interrupt.
davide.aliprandi@st.com 22:ba7f4131a5e0 1291 * @param fptr An interrupt handler.
davide.aliprandi@st.com 22:ba7f4131a5e0 1292 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1293 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1294 void attach_busy_irq(void (*fptr)(void))
davide.aliprandi@st.com 22:ba7f4131a5e0 1295 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1296 busy_irq.fall(fptr);
davide.aliprandi@st.com 22:ba7f4131a5e0 1297 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1298
davide.aliprandi@st.com 22:ba7f4131a5e0 1299 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1300 * @brief Enabling the BUSY interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1301 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1302 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1303 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1304 void enable_busy_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1305 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1306 busy_irq.enable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1307 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1308
davide.aliprandi@st.com 22:ba7f4131a5e0 1309 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1310 * @brief Disabling the BUSY interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1311 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1312 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1313 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1314 void disable_busy_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1315 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1316 busy_irq.disable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1317 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1318
davide.aliprandi@st.com 22:ba7f4131a5e0 1319
davide.aliprandi@st.com 22:ba7f4131a5e0 1320 protected:
davide.aliprandi@st.com 22:ba7f4131a5e0 1321
davide.aliprandi@st.com 22:ba7f4131a5e0 1322 /*** Protected Component Related Methods ***/
Davidroid 0:92706998571a 1323
davide.aliprandi@st.com 22:ba7f4131a5e0 1324 /* ACTION 7 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1325 * Declare here the component's specific methods. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1326 * They should be: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1327 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 22:ba7f4131a5e0 1328 * functions (1); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1329 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 22:ba7f4131a5e0 1330 * table's functions, if any (2); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1331 * + Helper methods, if any, like functions declared in the component's *
davide.aliprandi@st.com 22:ba7f4131a5e0 1332 * source files but not pointed by the component's virtual table (3). *
davide.aliprandi@st.com 22:ba7f4131a5e0 1333 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1334 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1335 * status_t COMPONENT_get_value(float *f); //(1) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1336 * status_t COMPONENT_enable_feature(void); //(2) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1337 * status_t COMPONENT_compute_average(void); //(3) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1338 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1339 int32_t L6470_AbsPos_2_Position(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1340 uint32_t L6470_Position_2_AbsPos(int32_t Position);
davide.aliprandi@st.com 22:ba7f4131a5e0 1341 float L6470_Speed_2_Step_s(uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1342 uint32_t L6470_Step_s_2_Speed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1343 float L6470_Acc_2_Step_s2(uint16_t Acc);
davide.aliprandi@st.com 22:ba7f4131a5e0 1344 uint16_t L6470_Step_s2_2_Acc(float Step_s2);
davide.aliprandi@st.com 22:ba7f4131a5e0 1345 float L6470_Dec_2_Step_s2(uint16_t Dec);
davide.aliprandi@st.com 22:ba7f4131a5e0 1346 uint16_t L6470_Step_s2_2_Dec(float Step_s2);
davide.aliprandi@st.com 22:ba7f4131a5e0 1347 float L6470_MaxSpeed_2_Step_s(uint16_t MaxSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1348 uint16_t L6470_Step_s_2_MaxSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1349 float L6470_MinSpeed_2_Step_s(uint16_t MinSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1350 uint16_t L6470_Step_s_2_MinSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1351 float L6470_FsSpd_2_Step_s(uint16_t FsSpd);
davide.aliprandi@st.com 22:ba7f4131a5e0 1352 uint16_t L6470_Step_s_2_FsSpd(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1353 float L6470_IntSpeed_2_Step_s(uint16_t IntSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1354 uint16_t L6470_Step_s_2_IntSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1355 float L6470_StSlp_2_s_Step(uint8_t StSlp);
davide.aliprandi@st.com 22:ba7f4131a5e0 1356 uint8_t L6470_s_Step_2_StSlp(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1357 float L6470_FnSlpAcc_2_s_Step(uint8_t FnSlpAcc);
davide.aliprandi@st.com 22:ba7f4131a5e0 1358 uint8_t L6470_s_Step_2_FnSlpAcc(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1359 float L6470_FnSlpDec_2_s_Step(uint8_t FnSlpDec);
davide.aliprandi@st.com 22:ba7f4131a5e0 1360 uint8_t L6470_s_Step_2_FnSlpDec(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1361 float L6470_OcdTh_2_mA(uint8_t OcdTh);
davide.aliprandi@st.com 22:ba7f4131a5e0 1362 uint8_t L6470_mA_2_OcdTh(float mA);
davide.aliprandi@st.com 22:ba7f4131a5e0 1363 float L6470_StallTh_2_mA(uint8_t StallTh);
davide.aliprandi@st.com 22:ba7f4131a5e0 1364 uint8_t L6470_mA_2_StallTh(float mA);
davide.aliprandi@st.com 22:ba7f4131a5e0 1365 status_t L6470_Config(void *init);
davide.aliprandi@st.com 22:ba7f4131a5e0 1366 void L6470_SetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
davide.aliprandi@st.com 22:ba7f4131a5e0 1367 uint32_t L6470_GetParam(eL6470_RegId_t L6470_RegId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1368 void L6470_Run(eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1369 void L6470_StepClock(eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1370 void L6470_Move(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1371 void L6470_GoTo(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1372 void L6470_GoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1373 void L6470_GoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1374 void L6470_ReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1375 void L6470_GoHome(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1376 void L6470_GoMark(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1377 void L6470_ResetPos(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1378 void L6470_ResetDevice(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1379 void L6470_SoftStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1380 void L6470_HardStop(void);
Davidroid 23:cf489f2ab072 1381 void L6470_SoftHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1382 void L6470_HardHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1383 uint16_t L6470_GetStatus(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1384 void L6470_PrepareSetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
davide.aliprandi@st.com 22:ba7f4131a5e0 1385 void L6470_PrepareGetParam(eL6470_RegId_t L6470_RegId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1386 void L6470_PrepareRun(eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1387 void L6470_PrepareStepClock(eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1388 void L6470_PrepareMove(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1389 void L6470_PrepareGoTo(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1390 void L6470_PrepareGoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1391 void L6470_PrepareGoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1392 void L6470_PrepareReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1393 void L6470_PrepareGoHome(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1394 void L6470_PrepareGoMark(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1395 void L6470_PrepareResetPos(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1396 void L6470_PrepareResetDevice(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1397 void L6470_PrepareSoftStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1398 void L6470_PrepareHardStop(void);
Davidroid 23:cf489f2ab072 1399 void L6470_PrepareSoftHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1400 void L6470_PrepareHardHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1401 void L6470_PrepareGetStatus(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1402 uint8_t* L6470_PerformPreparedApplicationCommand(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1403 void L6470_DaisyChainCommand(uint8_t* pL6470_DaisyChainSpiTxStruct, uint8_t* pL6470_DaisyChainSpiRxStruct);
davide.aliprandi@st.com 22:ba7f4131a5e0 1404 uint32_t L6470_ExtractReturnedData(uint8_t* pL6470_DaisyChainSpiRxStruct, uint8_t LengthByte);
davide.aliprandi@st.com 22:ba7f4131a5e0 1405 uint8_t L6470_CheckStatusRegisterFlag(uint8_t L6470_StatusRegisterFlagId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1406 uint8_t* L6470_GetRegisterName(uint8_t id);
davide.aliprandi@st.com 22:ba7f4131a5e0 1407 void L6470_ResetAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg);
davide.aliprandi@st.com 22:ba7f4131a5e0 1408 void L6470_FillAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
davide.aliprandi@st.com 22:ba7f4131a5e0 1409 void L6470_PrepareAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
davide.aliprandi@st.com 22:ba7f4131a5e0 1410 void L6470_PrepareDaisyChainCommand(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, uint8_t* pL6470_DaisyChainSpiTxStruct);
davide.aliprandi@st.com 22:ba7f4131a5e0 1411
davide.aliprandi@st.com 22:ba7f4131a5e0 1412 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1413 * @brief Rounding a floating point number to the nearest unsigned integer number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1414 * @param f The floating point number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1415 * @retval The nearest unsigned integer number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1416 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1417 int round(float f)
davide.aliprandi@st.com 22:ba7f4131a5e0 1418 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1419 if (f >= 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1420 return (int) f + (f - (int) f < 0.5f ? 0 : 1);
davide.aliprandi@st.com 22:ba7f4131a5e0 1421 } else {
davide.aliprandi@st.com 22:ba7f4131a5e0 1422 return (int) f - (f - (int) f < -0.5f ? 1 : 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 1423 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1424 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1425
davide.aliprandi@st.com 22:ba7f4131a5e0 1426
davide.aliprandi@st.com 22:ba7f4131a5e0 1427 /*** Component's I/O Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1428
davide.aliprandi@st.com 22:ba7f4131a5e0 1429 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1430 * @brief Utility function to read data from L6470.
davide.aliprandi@st.com 22:ba7f4131a5e0 1431 * @param[out] pBuffer pointer to the buffer to read data into.
davide.aliprandi@st.com 22:ba7f4131a5e0 1432 * @param[in] NumBytesToRead number of bytes to read.
davide.aliprandi@st.com 22:ba7f4131a5e0 1433 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1434 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1435 status_t Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
davide.aliprandi@st.com 22:ba7f4131a5e0 1436 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1437 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1438 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1439 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1440 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1441 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1442
davide.aliprandi@st.com 22:ba7f4131a5e0 1443 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1444 * @brief Utility function to write data to L6470.
davide.aliprandi@st.com 22:ba7f4131a5e0 1445 * @param[in] pBuffer pointer to the buffer of data to send.
davide.aliprandi@st.com 22:ba7f4131a5e0 1446 * @param[in] NumBytesToWrite number of bytes to write.
davide.aliprandi@st.com 22:ba7f4131a5e0 1447 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1448 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1449 status_t Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
davide.aliprandi@st.com 22:ba7f4131a5e0 1450 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1451 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1452 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1453 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1454 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1455 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1456
davide.aliprandi@st.com 22:ba7f4131a5e0 1457 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1458 * @brief Utility function to read and write data from/to L6470 at the same time.
davide.aliprandi@st.com 22:ba7f4131a5e0 1459 * @param[out] pBufferToRead pointer to the buffer to read data into.
davide.aliprandi@st.com 22:ba7f4131a5e0 1460 * @param[in] pBufferToWrite pointer to the buffer of data to send.
davide.aliprandi@st.com 22:ba7f4131a5e0 1461 * @param[in] NumBytes number of bytes to read and write.
davide.aliprandi@st.com 22:ba7f4131a5e0 1462 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1463 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1464 status_t ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
davide.aliprandi@st.com 22:ba7f4131a5e0 1465 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1466 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1467 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1468 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1469 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1470 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1471
davide.aliprandi@st.com 22:ba7f4131a5e0 1472 /* ACTION 8 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1473 * Implement here other I/O methods beyond those already implemented *
davide.aliprandi@st.com 22:ba7f4131a5e0 1474 * above, which are declared extern within the component's header file. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1475 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1476 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1477 * Puts the device in standby mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1478 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1479 void L6470_ENABLE(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1480 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1481 standby_reset = 1;
davide.aliprandi@st.com 22:ba7f4131a5e0 1482 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1483
davide.aliprandi@st.com 22:ba7f4131a5e0 1484 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1485 * Puts the device in reset mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1486 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1487 void L6470_DISABLE(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1488 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1489 standby_reset = 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 1490 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1491
davide.aliprandi@st.com 22:ba7f4131a5e0 1492 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1493 * Write and read bytes to/from the component through the SPI at the same time.
davide.aliprandi@st.com 22:ba7f4131a5e0 1494 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1495 void L6470_SPI_Communication(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
davide.aliprandi@st.com 22:ba7f4131a5e0 1496 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1497 ReadWrite(pRxData, pTxData, Size);
davide.aliprandi@st.com 22:ba7f4131a5e0 1498 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1499
davide.aliprandi@st.com 22:ba7f4131a5e0 1500
davide.aliprandi@st.com 22:ba7f4131a5e0 1501 /*** Component's Instance Variables ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1502
davide.aliprandi@st.com 22:ba7f4131a5e0 1503 /* ACTION 9 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1504 * Declare here interrupt related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1505 * Note that interrupt handling is platform dependent, see *
davide.aliprandi@st.com 22:ba7f4131a5e0 1506 * "Interrupt Related Methods" above. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1507 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1508 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1509 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1510 * InterruptIn feature_irq; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1511 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1512 /* Flag Interrupt. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1513 InterruptIn flag_irq;
davide.aliprandi@st.com 22:ba7f4131a5e0 1514
davide.aliprandi@st.com 22:ba7f4131a5e0 1515 /* Busy Interrupt. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1516 InterruptIn busy_irq;
davide.aliprandi@st.com 22:ba7f4131a5e0 1517
davide.aliprandi@st.com 22:ba7f4131a5e0 1518 /* ACTION 10 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1519 * Declare here other pin related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1520 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1521 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1522 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1523 * DigitalOut standby_reset; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1524 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1525 /* Standby/reset pin. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1526 DigitalOut standby_reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1527
davide.aliprandi@st.com 22:ba7f4131a5e0 1528 /* ACTION 11 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1529 * Declare here communication related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1530 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1531 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1532 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1533 * DigitalOut ssel; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1534 * DevSPI &dev_spi; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1535 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1536 /* Configuration. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1537 DigitalOut ssel;
davide.aliprandi@st.com 22:ba7f4131a5e0 1538
davide.aliprandi@st.com 22:ba7f4131a5e0 1539 /* IO Device. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1540 DevSPI &dev_spi;
davide.aliprandi@st.com 22:ba7f4131a5e0 1541
davide.aliprandi@st.com 22:ba7f4131a5e0 1542 /* ACTION 12 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1543 * Declare here identity related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1544 * Note that there should be only a unique identifier for each component, *
davide.aliprandi@st.com 22:ba7f4131a5e0 1545 * which should be the "who_am_i" parameter. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1546 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1547 /* Identity */
davide.aliprandi@st.com 22:ba7f4131a5e0 1548 uint8_t who_am_i;
davide.aliprandi@st.com 22:ba7f4131a5e0 1549
davide.aliprandi@st.com 22:ba7f4131a5e0 1550 /* ACTION 13 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1551 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 22:ba7f4131a5e0 1552 * per line. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1553 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1554 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1555 * float measure; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1556 * int instance_id; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1557 * static int number_of_instances; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1558 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1559 /* Data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1560 uint8_t L6470_Id;
davide.aliprandi@st.com 22:ba7f4131a5e0 1561 const sL6470_Register_t *L6470_Register;
davide.aliprandi@st.com 22:ba7f4131a5e0 1562 const sL6470_ApplicationCommand_t *L6470_ApplicationCommand;
davide.aliprandi@st.com 22:ba7f4131a5e0 1563 const sL6470_Direction_t *L6470_Direction;
davide.aliprandi@st.com 22:ba7f4131a5e0 1564 const sL6470_ACT_t *L6470_ACT;
davide.aliprandi@st.com 22:ba7f4131a5e0 1565 sL6470_StatusRegister_t L6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1566 sL6470_StatusRegister_t *pL6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1567 StepperMotorRegister_t StepperMotorRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1568 prepared_action_t prepared_action;
davide.aliprandi@st.com 22:ba7f4131a5e0 1569
davide.aliprandi@st.com 22:ba7f4131a5e0 1570 /* Static data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1571 static uint8_t number_of_devices;
davide.aliprandi@st.com 22:ba7f4131a5e0 1572 static const sL6470_Register_t _L6470_Register[L6470REGIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1573 static const sL6470_ApplicationCommand_t _L6470_ApplicationCommand[L6470APPCMDIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1574 static const sL6470_Direction_t _L6470_Direction[L6470DIRIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1575 static const sL6470_ACT_t _L6470_ACT[L6470ACTIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1576 static eFlagStatus_t L6470_DaisyChain_HalfPrepared;
davide.aliprandi@st.com 22:ba7f4131a5e0 1577 static sL6470_AppCmdPkg_t L6470_AppCmdPkg[L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1578 static uint8_t L6470_DaisyChainSpiTxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1579 static uint8_t L6470_DaisyChainSpiRxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1580 };
davide.aliprandi@st.com 22:ba7f4131a5e0 1581
davide.aliprandi@st.com 22:ba7f4131a5e0 1582 #endif /* __L6470_CLASS_H */
Davidroid 0:92706998571a 1583
Davidroid 0:92706998571a 1584 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/