Personal fork of the library for direct control instead of library control

Dependencies:   X_NUCLEO_COMMON

Dependents:   Thesis_Rotating_Platform

Fork of X_NUCLEO_IHM01A1 by Arkadi Rafalovich

Committer:
Davidroid
Date:
Tue Dec 01 13:54:37 2015 +0000
Revision:
13:ba2728afe4c2
Parent:
12:9f4b9540ff3e
Child:
15:40470df81d9a
+ Modified SoftStop() and HardStop() to not to disable the power bridge;; + Added SoftHiz() and HardHiz() to disable the power bridge.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:2887415a46cd 1 /**
Davidroid 10:c3824af0caf4 2 ******************************************************************************
Davidroid 10:c3824af0caf4 3 * @file l6474_class.h
Davidroid 10:c3824af0caf4 4 * @author Davide Aliprandi, STMicrolectronics
Davidroid 10:c3824af0caf4 5 * @version V1.0.0
Davidroid 10:c3824af0caf4 6 * @date October 14th, 2015
Davidroid 10:c3824af0caf4 7 * @brief This file contains the class of an L6474 Motor Control component.
Davidroid 10:c3824af0caf4 8 ******************************************************************************
Davidroid 10:c3824af0caf4 9 * @attention
Davidroid 10:c3824af0caf4 10 *
Davidroid 10:c3824af0caf4 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
Davidroid 10:c3824af0caf4 12 *
Davidroid 10:c3824af0caf4 13 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 10:c3824af0caf4 14 * are permitted provided that the following conditions are met:
Davidroid 10:c3824af0caf4 15 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 10:c3824af0caf4 16 * this list of conditions and the following disclaimer.
Davidroid 10:c3824af0caf4 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 10:c3824af0caf4 18 * this list of conditions and the following disclaimer in the documentation
Davidroid 10:c3824af0caf4 19 * and/or other materials provided with the distribution.
Davidroid 10:c3824af0caf4 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 10:c3824af0caf4 21 * may be used to endorse or promote products derived from this software
Davidroid 10:c3824af0caf4 22 * without specific prior written permission.
Davidroid 10:c3824af0caf4 23 *
Davidroid 10:c3824af0caf4 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 10:c3824af0caf4 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 10:c3824af0caf4 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 10:c3824af0caf4 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 10:c3824af0caf4 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 10:c3824af0caf4 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 10:c3824af0caf4 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 10:c3824af0caf4 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 10:c3824af0caf4 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 10:c3824af0caf4 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 10:c3824af0caf4 34 *
Davidroid 10:c3824af0caf4 35 ******************************************************************************
Davidroid 10:c3824af0caf4 36 */
Davidroid 0:2887415a46cd 37
Davidroid 0:2887415a46cd 38
Davidroid 0:2887415a46cd 39 /* Generated with Stm32CubeTOO -----------------------------------------------*/
Davidroid 0:2887415a46cd 40
Davidroid 0:2887415a46cd 41
Davidroid 0:2887415a46cd 42 /* Revision ------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 43 /*
Davidroid 0:2887415a46cd 44 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
Davidroid 0:2887415a46cd 45 Branch/Trunk/Tag: trunk
Davidroid 0:2887415a46cd 46 Based on: X-CUBE-SPN1/trunk/Drivers/BSP/Components/l6474/l6474.h
Davidroid 0:2887415a46cd 47 Revision: 0
Davidroid 0:2887415a46cd 48 */
Davidroid 0:2887415a46cd 49
Davidroid 0:2887415a46cd 50
Davidroid 0:2887415a46cd 51 /* Define to prevent recursive inclusion -------------------------------------*/
Davidroid 0:2887415a46cd 52
Davidroid 0:2887415a46cd 53 #ifndef __L6474_CLASS_H
Davidroid 0:2887415a46cd 54 #define __L6474_CLASS_H
Davidroid 0:2887415a46cd 55
Davidroid 0:2887415a46cd 56
Davidroid 0:2887415a46cd 57 /* Includes ------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 58
Davidroid 0:2887415a46cd 59 /* ACTION 1 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 60 * Include here platform specific header files. *
Davidroid 0:2887415a46cd 61 *----------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 62 #include "mbed.h"
Davidroid 0:2887415a46cd 63 #include "DevSPI.h"
Davidroid 0:2887415a46cd 64 /* ACTION 2 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 65 * Include here component specific header files. *
Davidroid 0:2887415a46cd 66 *----------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 67 #include "l6474.h"
Davidroid 0:2887415a46cd 68 /* ACTION 3 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 69 * Include here interface specific header files. *
Davidroid 0:2887415a46cd 70 * *
Davidroid 0:2887415a46cd 71 * Example: *
Davidroid 0:2887415a46cd 72 * #include "../Interfaces/Humidity_class.h" *
Davidroid 0:2887415a46cd 73 * #include "../Interfaces/Temperature_class.h" *
Davidroid 0:2887415a46cd 74 *----------------------------------------------------------------------------*/
Davidroid 4:83a1eb397a65 75 #include "../Interfaces/StepperMotor_class.h"
Davidroid 0:2887415a46cd 76
Davidroid 0:2887415a46cd 77
Davidroid 0:2887415a46cd 78 /* Classes -------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 79
Davidroid 10:c3824af0caf4 80 /**
Davidroid 10:c3824af0caf4 81 * @brief Class representing an L6474 component.
Davidroid 0:2887415a46cd 82 */
Davidroid 4:83a1eb397a65 83 class L6474 : public StepperMotor
Davidroid 0:2887415a46cd 84 {
Davidroid 0:2887415a46cd 85 public:
Davidroid 0:2887415a46cd 86
Davidroid 0:2887415a46cd 87 /*** Constructor and Destructor Methods ***/
Davidroid 0:2887415a46cd 88
Davidroid 0:2887415a46cd 89 /**
Davidroid 0:2887415a46cd 90 * @brief Constructor.
Davidroid 7:f7e0c3621f77 91 * @param flag_irq pin name of the FLAG pin of the component.
Davidroid 4:83a1eb397a65 92 * @param standby_reset pin name of the STBY\RST pin of the component.
Davidroid 4:83a1eb397a65 93 * @param direction pin name of the DIR pin of the component.
Davidroid 4:83a1eb397a65 94 * @param pwm pin name of the PWM pin of the component.
Davidroid 4:83a1eb397a65 95 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
Davidroid 4:83a1eb397a65 96 * @param spi SPI device to be used for communication.
Davidroid 0:2887415a46cd 97 */
Davidroid 7:f7e0c3621f77 98 L6474(PinName flag_irq, PinName standby_reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), standby_reset(standby_reset), direction(direction), pwm(pwm), ssel(ssel), dev_spi(spi)
Davidroid 0:2887415a46cd 99 {
Davidroid 0:2887415a46cd 100 /* ACTION 4 ----------------------------------------------------------*
Davidroid 0:2887415a46cd 101 * Initialize here the component's member variables, one variable per *
Davidroid 0:2887415a46cd 102 * line. *
Davidroid 0:2887415a46cd 103 * *
Davidroid 0:2887415a46cd 104 * Example: *
Davidroid 0:2887415a46cd 105 * T0_out = 0; *
Davidroid 0:2887415a46cd 106 * T1_out = 0; *
Davidroid 0:2887415a46cd 107 * T0_degC = 0; *
Davidroid 0:2887415a46cd 108 * T1_degC = 0; *
Davidroid 0:2887415a46cd 109 *--------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 110 errorHandlerCallback = 0;
Davidroid 0:2887415a46cd 111 deviceInstance = numberOfDevices;
Davidroid 0:2887415a46cd 112 numberOfDevices++;
Davidroid 5:d3c78f12a78d 113 memset(spiTxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 5:d3c78f12a78d 114 memset(spiRxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 0:2887415a46cd 115 }
Davidroid 0:2887415a46cd 116
Davidroid 0:2887415a46cd 117 /**
Davidroid 0:2887415a46cd 118 * @brief Destructor.
Davidroid 0:2887415a46cd 119 */
Davidroid 0:2887415a46cd 120 virtual ~L6474(void) {}
Davidroid 0:2887415a46cd 121
Davidroid 0:2887415a46cd 122
Davidroid 0:2887415a46cd 123 /*** Public Component Related Methods ***/
Davidroid 0:2887415a46cd 124
Davidroid 0:2887415a46cd 125 /* ACTION 5 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 126 * Implement here the component's public methods, as wrappers of the C *
Davidroid 0:2887415a46cd 127 * component's functions. *
Davidroid 0:2887415a46cd 128 * They should be: *
Davidroid 0:2887415a46cd 129 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 130 * functions (1); *
Davidroid 0:2887415a46cd 131 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 132 * table's functions, if any (2). *
Davidroid 0:2887415a46cd 133 * *
Davidroid 0:2887415a46cd 134 * Example: *
Davidroid 0:2887415a46cd 135 * virtual int GetValue(float *pData) //(1) *
Davidroid 0:2887415a46cd 136 * { *
Davidroid 0:2887415a46cd 137 * return COMPONENT_GetValue(float *pfData); *
Davidroid 0:2887415a46cd 138 * } *
Davidroid 0:2887415a46cd 139 * *
Davidroid 0:2887415a46cd 140 * virtual int EnableFeature(void) //(2) *
Davidroid 0:2887415a46cd 141 * { *
Davidroid 0:2887415a46cd 142 * return COMPONENT_EnableFeature(); *
Davidroid 0:2887415a46cd 143 * } *
Davidroid 0:2887415a46cd 144 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 145 /**
Davidroid 12:9f4b9540ff3e 146 * @brief Initializing the component in 1/16 Microstepping mode.
Davidroid 8:42e0b00b1e4d 147 * @param init Pointer to device specific initalization structure.
Davidroid 7:f7e0c3621f77 148 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 149 */
Davidroid 0:2887415a46cd 150 virtual int Init(void *init)
Davidroid 0:2887415a46cd 151 {
Davidroid 12:9f4b9540ff3e 152 return (int) L6474_Init((MOTOR_InitTypeDef *) init);
Davidroid 0:2887415a46cd 153 }
Davidroid 0:2887415a46cd 154
Davidroid 7:f7e0c3621f77 155 /**
Davidroid 7:f7e0c3621f77 156 * @brief Getting the ID of the component.
Davidroid 8:42e0b00b1e4d 157 * @param id Pointer to an allocated variable to store the ID into.
Davidroid 7:f7e0c3621f77 158 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 159 */
Davidroid 0:2887415a46cd 160 virtual int ReadID(uint8_t *id)
Davidroid 0:2887415a46cd 161 {
Davidroid 0:2887415a46cd 162 return (int) L6474_ReadID((uint8_t *) id);
Davidroid 0:2887415a46cd 163 }
Davidroid 0:2887415a46cd 164
Davidroid 7:f7e0c3621f77 165 /**
Davidroid 7:f7e0c3621f77 166 * @brief Getting the value of the Status Register.
Davidroid 7:f7e0c3621f77 167 * @param None.
Davidroid 7:f7e0c3621f77 168 * @retval None.
Davidroid 7:f7e0c3621f77 169 * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
Davidroid 7:f7e0c3621f77 170 */
Davidroid 4:83a1eb397a65 171 virtual unsigned int GetStatus(void)
Davidroid 0:2887415a46cd 172 {
Davidroid 4:83a1eb397a65 173 return (unsigned int) L6474_CmdGetStatus();
Davidroid 0:2887415a46cd 174 }
Davidroid 0:2887415a46cd 175
Davidroid 7:f7e0c3621f77 176 /**
Davidroid 7:f7e0c3621f77 177 * @brief Getting a parameter.
Davidroid 8:42e0b00b1e4d 178 * @param parameter A parameter's register adress.
Davidroid 8:42e0b00b1e4d 179 * @retval The parameter's value.
Davidroid 7:f7e0c3621f77 180 * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
Davidroid 7:f7e0c3621f77 181 * parameter can be one of the following:
Davidroid 7:f7e0c3621f77 182 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 183 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 184 * + L6474_MARK
Davidroid 7:f7e0c3621f77 185 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 186 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 187 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 188 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 189 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 190 * + L6474_RESERVED_REG06
Davidroid 7:f7e0c3621f77 191 * + L6474_TVAL
Davidroid 7:f7e0c3621f77 192 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 193 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 194 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 195 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 196 * + L6474_T_FAST
Davidroid 7:f7e0c3621f77 197 * + L6474_TON_MIN
Davidroid 7:f7e0c3621f77 198 * + L6474_TOFF_MIN
Davidroid 7:f7e0c3621f77 199 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 200 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 201 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 202 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 203 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 204 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 205 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 206 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 207 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 208 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 209 * + L6474_INEXISTENT_REG
Davidroid 7:f7e0c3621f77 210 */
Davidroid 4:83a1eb397a65 211 virtual unsigned int GetParameter(unsigned int parameter)
Davidroid 0:2887415a46cd 212 {
Davidroid 7:f7e0c3621f77 213 return (unsigned int) L6474_CmdGetParam((L6474_Registers_t) parameter);
Davidroid 4:83a1eb397a65 214 }
Davidroid 4:83a1eb397a65 215
Davidroid 8:42e0b00b1e4d 216 /**
Davidroid 8:42e0b00b1e4d 217 * @brief Getting the position.
Davidroid 8:42e0b00b1e4d 218 * @param None.
Davidroid 8:42e0b00b1e4d 219 * @retval The position.
Davidroid 8:42e0b00b1e4d 220 */
Davidroid 4:83a1eb397a65 221 virtual signed int GetPosition(void)
Davidroid 4:83a1eb397a65 222 {
Davidroid 4:83a1eb397a65 223 return (signed int) L6474_GetPosition();
Davidroid 0:2887415a46cd 224 }
Davidroid 0:2887415a46cd 225
Davidroid 8:42e0b00b1e4d 226 /**
Davidroid 8:42e0b00b1e4d 227 * @brief Getting the marked position.
Davidroid 8:42e0b00b1e4d 228 * @param None.
Davidroid 8:42e0b00b1e4d 229 * @retval The marked position.
Davidroid 8:42e0b00b1e4d 230 */
Davidroid 4:83a1eb397a65 231 virtual signed int GetMark(void)
Davidroid 0:2887415a46cd 232 {
Davidroid 4:83a1eb397a65 233 return (signed int) L6474_GetMark();
Davidroid 4:83a1eb397a65 234 }
Davidroid 8:42e0b00b1e4d 235
Davidroid 8:42e0b00b1e4d 236 /**
Davidroid 8:42e0b00b1e4d 237 * @brief Getting the current speed in pps.
Davidroid 8:42e0b00b1e4d 238 * @param None.
Davidroid 8:42e0b00b1e4d 239 * @retval The current speed in pps.
Davidroid 8:42e0b00b1e4d 240 */
Davidroid 4:83a1eb397a65 241 virtual unsigned int GetSpeed(void)
Davidroid 0:2887415a46cd 242 {
Davidroid 4:83a1eb397a65 243 return (unsigned int) L6474_GetCurrentSpeed();
Davidroid 0:2887415a46cd 244 }
Davidroid 0:2887415a46cd 245
Davidroid 8:42e0b00b1e4d 246 /**
Davidroid 8:42e0b00b1e4d 247 * @brief Getting the maximum speed in pps.
Davidroid 8:42e0b00b1e4d 248 * @param None.
Davidroid 8:42e0b00b1e4d 249 * @retval The maximum speed in pps.
Davidroid 8:42e0b00b1e4d 250 */
Davidroid 4:83a1eb397a65 251 virtual unsigned int GetMaxSpeed(void)
Davidroid 4:83a1eb397a65 252 {
Davidroid 4:83a1eb397a65 253 return (unsigned int) L6474_GetMaxSpeed();
Davidroid 4:83a1eb397a65 254 }
Davidroid 4:83a1eb397a65 255
Davidroid 8:42e0b00b1e4d 256 /**
Davidroid 8:42e0b00b1e4d 257 * @brief Getting the minimum speed in pps.
Davidroid 8:42e0b00b1e4d 258 * @param None.
Davidroid 8:42e0b00b1e4d 259 * @retval The minimum speed in pps.
Davidroid 8:42e0b00b1e4d 260 */
Davidroid 4:83a1eb397a65 261 virtual unsigned int GetMinSpeed(void)
Davidroid 0:2887415a46cd 262 {
Davidroid 4:83a1eb397a65 263 return (unsigned int) L6474_GetMinSpeed();
Davidroid 4:83a1eb397a65 264 }
Davidroid 4:83a1eb397a65 265
Davidroid 8:42e0b00b1e4d 266 /**
Davidroid 8:42e0b00b1e4d 267 * @brief Getting the acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 268 * @param None.
Davidroid 8:42e0b00b1e4d 269 * @retval The acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 270 */
Davidroid 4:83a1eb397a65 271 virtual unsigned int GetAcceleration(void)
Davidroid 4:83a1eb397a65 272 {
Davidroid 4:83a1eb397a65 273 return (unsigned int) L6474_GetAcceleration();
Davidroid 0:2887415a46cd 274 }
Davidroid 0:2887415a46cd 275
Davidroid 8:42e0b00b1e4d 276 /**
Davidroid 8:42e0b00b1e4d 277 * @brief Getting the deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 278 * @param None.
Davidroid 8:42e0b00b1e4d 279 * @retval The deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 280 */
Davidroid 4:83a1eb397a65 281 virtual unsigned int GetDeceleration(void)
Davidroid 0:2887415a46cd 282 {
Davidroid 4:83a1eb397a65 283 return (unsigned int) L6474_GetDeceleration();
Davidroid 0:2887415a46cd 284 }
Davidroid 0:2887415a46cd 285
Davidroid 8:42e0b00b1e4d 286 /**
Davidroid 8:42e0b00b1e4d 287 * @brief Getting the direction of rotation.
Davidroid 8:42e0b00b1e4d 288 * @param None.
Davidroid 8:42e0b00b1e4d 289 * @retval The direction of rotation.
Davidroid 8:42e0b00b1e4d 290 */
Davidroid 5:d3c78f12a78d 291 virtual direction_t GetDirection(void)
Davidroid 5:d3c78f12a78d 292 {
Davidroid 5:d3c78f12a78d 293 return (direction_t) (L6474_GetDirection() == FORWARD ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 5:d3c78f12a78d 294 }
Davidroid 5:d3c78f12a78d 295
Davidroid 7:f7e0c3621f77 296 /**
Davidroid 7:f7e0c3621f77 297 * @brief Setting a parameter.
Davidroid 8:42e0b00b1e4d 298 * @param parameter A parameter's register adress.
Davidroid 8:42e0b00b1e4d 299 * @param value The parameter's value.
Davidroid 7:f7e0c3621f77 300 * @retval None.
Davidroid 7:f7e0c3621f77 301 * @note parameter can be one of the following:
Davidroid 7:f7e0c3621f77 302 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 303 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 304 * + L6474_MARK
Davidroid 7:f7e0c3621f77 305 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 306 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 307 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 308 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 309 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 310 * + L6474_RESERVED_REG06
Davidroid 7:f7e0c3621f77 311 * + L6474_TVAL
Davidroid 7:f7e0c3621f77 312 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 313 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 314 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 315 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 316 * + L6474_T_FAST
Davidroid 7:f7e0c3621f77 317 * + L6474_TON_MIN
Davidroid 7:f7e0c3621f77 318 * + L6474_TOFF_MIN
Davidroid 7:f7e0c3621f77 319 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 320 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 321 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 322 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 323 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 324 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 325 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 326 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 327 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 328 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 329 * + L6474_INEXISTENT_REG
Davidroid 7:f7e0c3621f77 330 */
Davidroid 4:83a1eb397a65 331 virtual void SetParameter(unsigned int parameter, unsigned int value)
Davidroid 0:2887415a46cd 332 {
Davidroid 7:f7e0c3621f77 333 L6474_CmdSetParam((L6474_Registers_t) parameter, (unsigned int) value);
Davidroid 0:2887415a46cd 334 }
Davidroid 0:2887415a46cd 335
Davidroid 8:42e0b00b1e4d 336 /**
Davidroid 8:42e0b00b1e4d 337 * @brief Setting the current position to be the home position.
Davidroid 8:42e0b00b1e4d 338 * @param None.
Davidroid 8:42e0b00b1e4d 339 * @retval None.
Davidroid 8:42e0b00b1e4d 340 */
Davidroid 4:83a1eb397a65 341 virtual void SetHome(void)
Davidroid 0:2887415a46cd 342 {
Davidroid 4:83a1eb397a65 343 L6474_SetHome();
Davidroid 4:83a1eb397a65 344 }
Davidroid 4:83a1eb397a65 345
Davidroid 8:42e0b00b1e4d 346 /**
Davidroid 8:42e0b00b1e4d 347 * @brief Setting the current position to be the marked position.
Davidroid 8:42e0b00b1e4d 348 * @param None.
Davidroid 8:42e0b00b1e4d 349 * @retval None.
Davidroid 8:42e0b00b1e4d 350 */
Davidroid 4:83a1eb397a65 351 virtual void SetMark(void)
Davidroid 4:83a1eb397a65 352 {
Davidroid 4:83a1eb397a65 353 L6474_SetMark();
Davidroid 0:2887415a46cd 354 }
Davidroid 0:2887415a46cd 355
Davidroid 8:42e0b00b1e4d 356 /**
Davidroid 8:42e0b00b1e4d 357 * @brief Setting the maximum speed in pps.
Davidroid 8:42e0b00b1e4d 358 * @param speed The maximum speed in pps.
Davidroid 8:42e0b00b1e4d 359 * @retval None.
Davidroid 8:42e0b00b1e4d 360 */
Davidroid 4:83a1eb397a65 361 virtual void SetMaxSpeed(unsigned int speed)
Davidroid 4:83a1eb397a65 362 {
Davidroid 4:83a1eb397a65 363 L6474_SetMaxSpeed((unsigned int) speed);
Davidroid 0:2887415a46cd 364 }
Davidroid 0:2887415a46cd 365
Davidroid 8:42e0b00b1e4d 366 /**
Davidroid 8:42e0b00b1e4d 367 * @brief Setting the minimum speed in pps.
Davidroid 8:42e0b00b1e4d 368 * @param speed The minimum speed in pps.
Davidroid 8:42e0b00b1e4d 369 * @retval None.
Davidroid 8:42e0b00b1e4d 370 */
Davidroid 4:83a1eb397a65 371 virtual void SetMinSpeed(unsigned int speed)
Davidroid 0:2887415a46cd 372 {
Davidroid 4:83a1eb397a65 373 L6474_SetMinSpeed((unsigned int) speed);
Davidroid 0:2887415a46cd 374 }
Davidroid 0:2887415a46cd 375
Davidroid 8:42e0b00b1e4d 376 /**
Davidroid 8:42e0b00b1e4d 377 * @brief Setting the acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 378 * @param acceleration The acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 379 * @retval None.
Davidroid 8:42e0b00b1e4d 380 */
Davidroid 4:83a1eb397a65 381 virtual void SetAcceleration(unsigned int acceleration)
Davidroid 0:2887415a46cd 382 {
Davidroid 4:83a1eb397a65 383 L6474_SetAcceleration((unsigned int) acceleration);
Davidroid 0:2887415a46cd 384 }
Davidroid 0:2887415a46cd 385
Davidroid 8:42e0b00b1e4d 386 /**
Davidroid 8:42e0b00b1e4d 387 * @brief Setting the deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 388 * @param deceleration The deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 389 * @retval None.
Davidroid 8:42e0b00b1e4d 390 */
Davidroid 4:83a1eb397a65 391 virtual void SetDeceleration(unsigned int deceleration)
Davidroid 0:2887415a46cd 392 {
Davidroid 4:83a1eb397a65 393 L6474_SetDeceleration((unsigned int) deceleration);
Davidroid 4:83a1eb397a65 394 }
Davidroid 4:83a1eb397a65 395
Davidroid 8:42e0b00b1e4d 396 /**
Davidroid 8:42e0b00b1e4d 397 * @brief Going to a specified position.
Davidroid 8:42e0b00b1e4d 398 * @param position The desired position.
Davidroid 8:42e0b00b1e4d 399 * @retval None.
Davidroid 8:42e0b00b1e4d 400 */
Davidroid 4:83a1eb397a65 401 virtual void GoTo(signed int position)
Davidroid 4:83a1eb397a65 402 {
Davidroid 4:83a1eb397a65 403 L6474_GoTo((signed int) position);
Davidroid 0:2887415a46cd 404 }
Davidroid 0:2887415a46cd 405
Davidroid 8:42e0b00b1e4d 406 /**
Davidroid 8:42e0b00b1e4d 407 * @brief Going to the home position.
Davidroid 8:42e0b00b1e4d 408 * @param None.
Davidroid 8:42e0b00b1e4d 409 * @retval None.
Davidroid 8:42e0b00b1e4d 410 */
Davidroid 0:2887415a46cd 411 virtual void GoHome(void)
Davidroid 0:2887415a46cd 412 {
Davidroid 0:2887415a46cd 413 L6474_GoHome();
Davidroid 0:2887415a46cd 414 }
Davidroid 0:2887415a46cd 415
Davidroid 8:42e0b00b1e4d 416 /**
Davidroid 8:42e0b00b1e4d 417 * @brief Going to the marked position.
Davidroid 8:42e0b00b1e4d 418 * @param None.
Davidroid 8:42e0b00b1e4d 419 * @retval None.
Davidroid 8:42e0b00b1e4d 420 */
Davidroid 0:2887415a46cd 421 virtual void GoMark(void)
Davidroid 0:2887415a46cd 422 {
Davidroid 0:2887415a46cd 423 L6474_GoMark();
Davidroid 0:2887415a46cd 424 }
Davidroid 0:2887415a46cd 425
Davidroid 8:42e0b00b1e4d 426 /**
Davidroid 8:42e0b00b1e4d 427 * @brief Running the motor towards a specified direction.
Davidroid 8:42e0b00b1e4d 428 * @param direction The direction of rotation.
Davidroid 8:42e0b00b1e4d 429 * @retval None.
Davidroid 8:42e0b00b1e4d 430 */
Davidroid 4:83a1eb397a65 431 virtual void Run(direction_t direction)
Davidroid 4:83a1eb397a65 432 {
Davidroid 5:d3c78f12a78d 433 L6474_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
Davidroid 4:83a1eb397a65 434 }
Davidroid 4:83a1eb397a65 435
Davidroid 8:42e0b00b1e4d 436 /**
Davidroid 8:42e0b00b1e4d 437 * @brief Moving the motor towards a specified direction for a certain number of steps.
Davidroid 8:42e0b00b1e4d 438 * @param direction The direction of rotation.
Davidroid 8:42e0b00b1e4d 439 * @param steps The desired number of steps.
Davidroid 8:42e0b00b1e4d 440 * @retval None.
Davidroid 8:42e0b00b1e4d 441 */
Davidroid 4:83a1eb397a65 442 virtual void Move(direction_t direction, unsigned int steps)
Davidroid 0:2887415a46cd 443 {
Davidroid 5:d3c78f12a78d 444 L6474_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (unsigned int) steps);
Davidroid 4:83a1eb397a65 445 }
Davidroid 4:83a1eb397a65 446
Davidroid 8:42e0b00b1e4d 447 /**
Davidroid 13:ba2728afe4c2 448 * @brief Stopping the motor through an immediate deceleration up to zero speed.
Davidroid 8:42e0b00b1e4d 449 * @param None.
Davidroid 8:42e0b00b1e4d 450 * @retval None.
Davidroid 8:42e0b00b1e4d 451 */
Davidroid 4:83a1eb397a65 452 virtual void SoftStop(void)
Davidroid 4:83a1eb397a65 453 {
Davidroid 4:83a1eb397a65 454 L6474_SoftStop();
Davidroid 0:2887415a46cd 455 }
Davidroid 0:2887415a46cd 456
Davidroid 8:42e0b00b1e4d 457 /**
Davidroid 13:ba2728afe4c2 458 * @brief Stopping the motor through an immediate infinite deceleration.
Davidroid 8:42e0b00b1e4d 459 * @param None.
Davidroid 8:42e0b00b1e4d 460 * @retval None.
Davidroid 8:42e0b00b1e4d 461 */
Davidroid 0:2887415a46cd 462 virtual void HardStop(void)
Davidroid 0:2887415a46cd 463 {
Davidroid 0:2887415a46cd 464 L6474_HardStop();
Davidroid 0:2887415a46cd 465 }
Davidroid 0:2887415a46cd 466
Davidroid 8:42e0b00b1e4d 467 /**
Davidroid 13:ba2728afe4c2 468 * @brief Disabling the power bridge after performing a deceleration to zero.
Davidroid 13:ba2728afe4c2 469 * @param None.
Davidroid 13:ba2728afe4c2 470 * @retval None.
Davidroid 13:ba2728afe4c2 471 */
Davidroid 13:ba2728afe4c2 472 virtual void SoftHiZ(void)
Davidroid 13:ba2728afe4c2 473 {
Davidroid 13:ba2728afe4c2 474 L6474_SoftStop();
Davidroid 13:ba2728afe4c2 475 L6474_CmdDisable();
Davidroid 13:ba2728afe4c2 476 }
Davidroid 13:ba2728afe4c2 477
Davidroid 13:ba2728afe4c2 478 /**
Davidroid 13:ba2728afe4c2 479 * @brief Disabling the power bridge immediately.
Davidroid 13:ba2728afe4c2 480 * @param None.
Davidroid 13:ba2728afe4c2 481 * @retval None.
Davidroid 13:ba2728afe4c2 482 */
Davidroid 13:ba2728afe4c2 483 virtual void HardHiZ(void)
Davidroid 13:ba2728afe4c2 484 {
Davidroid 13:ba2728afe4c2 485 L6474_HardStop();
Davidroid 13:ba2728afe4c2 486 L6474_CmdDisable();
Davidroid 13:ba2728afe4c2 487 }
Davidroid 13:ba2728afe4c2 488
Davidroid 13:ba2728afe4c2 489 /**
Davidroid 8:42e0b00b1e4d 490 * @brief Waiting while the motor is active.
Davidroid 8:42e0b00b1e4d 491 * @param None.
Davidroid 8:42e0b00b1e4d 492 * @retval None.
Davidroid 8:42e0b00b1e4d 493 */
Davidroid 7:f7e0c3621f77 494 virtual void WaitWhileActive(void)
Davidroid 7:f7e0c3621f77 495 {
Davidroid 7:f7e0c3621f77 496 L6474_WaitWhileActive();
Davidroid 7:f7e0c3621f77 497 }
Davidroid 7:f7e0c3621f77 498
Davidroid 7:f7e0c3621f77 499 /**
Davidroid 7:f7e0c3621f77 500 * @brief Getting the device state.
Davidroid 7:f7e0c3621f77 501 * @param None.
Davidroid 7:f7e0c3621f77 502 * @retval The device state.
Davidroid 7:f7e0c3621f77 503 * @note The device state can be one of the following:
Davidroid 7:f7e0c3621f77 504 * + ACCELERATING
Davidroid 7:f7e0c3621f77 505 * + DECELERATING
Davidroid 7:f7e0c3621f77 506 * + STEADY
Davidroid 7:f7e0c3621f77 507 * + INACTIVE
Davidroid 7:f7e0c3621f77 508 */
Davidroid 4:83a1eb397a65 509 virtual motorState_t GetDeviceState(void)
Davidroid 0:2887415a46cd 510 {
Davidroid 4:83a1eb397a65 511 return (motorState_t) L6474_GetDeviceState();
Davidroid 0:2887415a46cd 512 }
Davidroid 0:2887415a46cd 513
Davidroid 7:f7e0c3621f77 514 /**
Davidroid 7:f7e0c3621f77 515 * @brief Reading the Status Register.
Davidroid 7:f7e0c3621f77 516 * @param None.
Davidroid 7:f7e0c3621f77 517 * @retval None.
Davidroid 7:f7e0c3621f77 518 * @note The Status Register's flags are not cleared, contrary to GetStatus().
Davidroid 7:f7e0c3621f77 519 */
Davidroid 0:2887415a46cd 520 virtual uint16_t ReadStatusRegister(void)
Davidroid 0:2887415a46cd 521 {
Davidroid 0:2887415a46cd 522 return (uint16_t) L6474_ReadStatusRegister();
Davidroid 0:2887415a46cd 523 }
Davidroid 0:2887415a46cd 524
Davidroid 7:f7e0c3621f77 525 /**
Davidroid 8:42e0b00b1e4d 526 * @brief Setting the Step Mode.
Davidroid 8:42e0b00b1e4d 527 * @param step_mode The Step Mode.
Davidroid 7:f7e0c3621f77 528 * @retval None.
Davidroid 7:f7e0c3621f77 529 * @note step_mode can be one of the following:
Davidroid 7:f7e0c3621f77 530 * + STEP_MODE_FULL
Davidroid 7:f7e0c3621f77 531 * + STEP_MODE_HALF
Davidroid 7:f7e0c3621f77 532 * + STEP_MODE_1_4
Davidroid 7:f7e0c3621f77 533 * + STEP_MODE_1_8
Davidroid 7:f7e0c3621f77 534 * + STEP_MODE_1_16
Davidroid 7:f7e0c3621f77 535 * + STEP_MODE_1_32
Davidroid 7:f7e0c3621f77 536 * + STEP_MODE_1_64
Davidroid 7:f7e0c3621f77 537 * + STEP_MODE_1_128
Davidroid 7:f7e0c3621f77 538 */
Davidroid 8:42e0b00b1e4d 539 virtual void SetStepMode(motorStepMode_t step_mode)
Davidroid 0:2887415a46cd 540 {
Davidroid 7:f7e0c3621f77 541 L6474_SelectStepMode((motorStepMode_t) step_mode);
Davidroid 0:2887415a46cd 542 }
Davidroid 0:2887415a46cd 543
Davidroid 7:f7e0c3621f77 544 /**
Davidroid 7:f7e0c3621f77 545 * @brief Attaching an error handler.
Davidroid 8:42e0b00b1e4d 546 * @param fptr An error handler.
Davidroid 7:f7e0c3621f77 547 * @retval None.
Davidroid 7:f7e0c3621f77 548 */
Davidroid 7:f7e0c3621f77 549 virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
Davidroid 4:83a1eb397a65 550 {
Davidroid 7:f7e0c3621f77 551 L6474_AttachErrorHandler((void (*)(uint16_t error)) fptr);
Davidroid 4:83a1eb397a65 552 }
Davidroid 4:83a1eb397a65 553
Davidroid 9:6f116ce8e314 554 /**
Davidroid 8:42e0b00b1e4d 555 * @brief Enabling the device.
Davidroid 8:42e0b00b1e4d 556 * @param None.
Davidroid 8:42e0b00b1e4d 557 * @retval None.
Davidroid 8:42e0b00b1e4d 558 */
Davidroid 8:42e0b00b1e4d 559 virtual void Enable(void)
Davidroid 8:42e0b00b1e4d 560 {
Davidroid 8:42e0b00b1e4d 561 L6474_CmdEnable();
Davidroid 8:42e0b00b1e4d 562 }
Davidroid 8:42e0b00b1e4d 563
Davidroid 9:6f116ce8e314 564 /**
Davidroid 8:42e0b00b1e4d 565 * @brief Disabling the device.
Davidroid 8:42e0b00b1e4d 566 * @param None.
Davidroid 8:42e0b00b1e4d 567 * @retval None.
Davidroid 8:42e0b00b1e4d 568 */
Davidroid 8:42e0b00b1e4d 569 virtual void Disable(void)
Davidroid 8:42e0b00b1e4d 570 {
Davidroid 8:42e0b00b1e4d 571 L6474_CmdDisable();
Davidroid 8:42e0b00b1e4d 572 }
Davidroid 8:42e0b00b1e4d 573
Davidroid 9:6f116ce8e314 574 /**
Davidroid 9:6f116ce8e314 575 * @brief Getting the version of the firmware.
Davidroid 9:6f116ce8e314 576 * @param None.
Davidroid 9:6f116ce8e314 577 * @retval The version of the firmware.
Davidroid 9:6f116ce8e314 578 */
Davidroid 9:6f116ce8e314 579 virtual uint8_t GetFwVersion(void)
Davidroid 9:6f116ce8e314 580 {
Davidroid 9:6f116ce8e314 581 return (uint8_t) L6474_GetFwVersion();
Davidroid 9:6f116ce8e314 582 }
Davidroid 9:6f116ce8e314 583
Davidroid 0:2887415a46cd 584
Davidroid 0:2887415a46cd 585 /*** Public Interrupt Related Methods ***/
Davidroid 0:2887415a46cd 586
Davidroid 0:2887415a46cd 587 /* ACTION 6 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 588 * Implement here interrupt related methods, if any. *
Davidroid 0:2887415a46cd 589 * Note that interrupt handling is platform dependent, e.g.: *
Davidroid 0:2887415a46cd 590 * + mbed: *
Davidroid 7:f7e0c3621f77 591 * InterruptIn feature_irq(pin); //Interrupt object. *
Davidroid 7:f7e0c3621f77 592 * feature_irq.rise(callback); //Attach a callback. *
Davidroid 7:f7e0c3621f77 593 * feature_irq.mode(PullNone); //Set interrupt mode. *
Davidroid 7:f7e0c3621f77 594 * feature_irq.enable_irq(); //Enable interrupt. *
Davidroid 7:f7e0c3621f77 595 * feature_irq.disable_irq(); //Disable interrupt. *
Davidroid 0:2887415a46cd 596 * + Arduino: *
Davidroid 0:2887415a46cd 597 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
Davidroid 0:2887415a46cd 598 * detachInterrupt(pin); //Detach a callback. *
Davidroid 0:2887415a46cd 599 * *
Davidroid 0:2887415a46cd 600 * Example (mbed): *
Davidroid 7:f7e0c3621f77 601 * void AttachFeatureIRQ(void (*fptr) (void)) *
Davidroid 0:2887415a46cd 602 * { *
Davidroid 7:f7e0c3621f77 603 * feature_irq.rise(fptr); *
Davidroid 7:f7e0c3621f77 604 * } *
Davidroid 7:f7e0c3621f77 605 * *
Davidroid 7:f7e0c3621f77 606 * void EnableFeatureIRQ(void) *
Davidroid 7:f7e0c3621f77 607 * { *
Davidroid 7:f7e0c3621f77 608 * feature_irq.enable_irq(); *
Davidroid 0:2887415a46cd 609 * } *
Davidroid 0:2887415a46cd 610 * *
Davidroid 7:f7e0c3621f77 611 * void DisableFeatureIRQ(void) *
Davidroid 0:2887415a46cd 612 * { *
Davidroid 7:f7e0c3621f77 613 * feature_irq.disable_irq(); *
Davidroid 0:2887415a46cd 614 * } *
Davidroid 0:2887415a46cd 615 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 616 /**
Davidroid 8:42e0b00b1e4d 617 * @brief Attaching an interrupt handler to the FLAG interrupt.
Davidroid 8:42e0b00b1e4d 618 * @param fptr An interrupt handler.
Davidroid 7:f7e0c3621f77 619 * @retval None.
Davidroid 7:f7e0c3621f77 620 */
Davidroid 7:f7e0c3621f77 621 void AttachFlagIRQ(void (*fptr)(void))
Davidroid 7:f7e0c3621f77 622 {
Davidroid 7:f7e0c3621f77 623 flag_irq.rise(fptr);
Davidroid 7:f7e0c3621f77 624 }
Davidroid 7:f7e0c3621f77 625
Davidroid 7:f7e0c3621f77 626 /**
Davidroid 8:42e0b00b1e4d 627 * @brief Enabling the FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 628 * @param None.
Davidroid 7:f7e0c3621f77 629 * @retval None.
Davidroid 7:f7e0c3621f77 630 */
Davidroid 7:f7e0c3621f77 631 void EnableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 632 {
Davidroid 7:f7e0c3621f77 633 flag_irq.enable_irq();
Davidroid 7:f7e0c3621f77 634 }
Davidroid 7:f7e0c3621f77 635
Davidroid 7:f7e0c3621f77 636 /**
Davidroid 8:42e0b00b1e4d 637 * @brief Disabling the FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 638 * @param None.
Davidroid 7:f7e0c3621f77 639 * @retval None.
Davidroid 7:f7e0c3621f77 640 */
Davidroid 7:f7e0c3621f77 641 void DisableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 642 {
Davidroid 7:f7e0c3621f77 643 flag_irq.disable_irq();
Davidroid 7:f7e0c3621f77 644 }
Davidroid 0:2887415a46cd 645
Davidroid 0:2887415a46cd 646
Davidroid 0:2887415a46cd 647 protected:
Davidroid 0:2887415a46cd 648
Davidroid 0:2887415a46cd 649 /*** Protected Component Related Methods ***/
Davidroid 0:2887415a46cd 650
Davidroid 0:2887415a46cd 651 /* ACTION 7 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 652 * Declare here the component's specific methods. *
Davidroid 0:2887415a46cd 653 * They should be: *
Davidroid 0:2887415a46cd 654 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 655 * functions (1); *
Davidroid 0:2887415a46cd 656 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 657 * table's functions, if any (2); *
Davidroid 0:2887415a46cd 658 * + Helper methods, if any, like functions declared in the component's *
Davidroid 0:2887415a46cd 659 * source files but not pointed by the component's virtual table (3). *
Davidroid 0:2887415a46cd 660 * *
Davidroid 0:2887415a46cd 661 * Example: *
Davidroid 0:2887415a46cd 662 * DrvStatusTypeDef COMPONENT_GetValue(float* pfData); //(1) *
Davidroid 0:2887415a46cd 663 * DrvStatusTypeDef COMPONENT_EnableFeature(void); //(2) *
Davidroid 0:2887415a46cd 664 * DrvStatusTypeDef COMPONENT_ComputeAverage(void); //(3) *
Davidroid 0:2887415a46cd 665 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 666 void L6474_AttachErrorHandler(void (*callback)(uint16_t error));
Davidroid 7:f7e0c3621f77 667 DrvStatusTypeDef L6474_Init(MOTOR_InitTypeDef *init);
Davidroid 7:f7e0c3621f77 668 DrvStatusTypeDef L6474_ReadID(uint8_t *id);
Davidroid 7:f7e0c3621f77 669 uint16_t L6474_GetAcceleration(void);
Davidroid 7:f7e0c3621f77 670 uint16_t L6474_GetCurrentSpeed(void);
Davidroid 7:f7e0c3621f77 671 uint16_t L6474_GetDeceleration(void);
Davidroid 7:f7e0c3621f77 672 motorState_t L6474_GetDeviceState(void);
Davidroid 7:f7e0c3621f77 673 uint8_t L6474_GetFwVersion(void);
Davidroid 7:f7e0c3621f77 674 int32_t L6474_GetMark(void);
Davidroid 7:f7e0c3621f77 675 uint16_t L6474_GetMaxSpeed(void);
Davidroid 7:f7e0c3621f77 676 uint16_t L6474_GetMinSpeed(void);
Davidroid 7:f7e0c3621f77 677 int32_t L6474_GetPosition(void);
Davidroid 7:f7e0c3621f77 678 void L6474_GoHome(void);
Davidroid 7:f7e0c3621f77 679 void L6474_GoMark(void);
Davidroid 7:f7e0c3621f77 680 void L6474_GoTo(int32_t targetPosition);
Davidroid 7:f7e0c3621f77 681 void L6474_HardStop(void);
Davidroid 7:f7e0c3621f77 682 void L6474_Move(motorDir_t direction, uint32_t stepCount);
Davidroid 7:f7e0c3621f77 683 void L6474_Run(motorDir_t direction);
Davidroid 7:f7e0c3621f77 684 bool L6474_SetAcceleration(uint16_t newAcc);
Davidroid 7:f7e0c3621f77 685 bool L6474_SetDeceleration(uint16_t newDec);
Davidroid 7:f7e0c3621f77 686 void L6474_SetHome(void);
Davidroid 7:f7e0c3621f77 687 void L6474_SetMark(void);
Davidroid 7:f7e0c3621f77 688 bool L6474_SetMaxSpeed(uint16_t newMaxSpeed);
Davidroid 7:f7e0c3621f77 689 bool L6474_SetMinSpeed(uint16_t newMinSpeed);
Davidroid 7:f7e0c3621f77 690 bool L6474_SoftStop(void);
Davidroid 7:f7e0c3621f77 691 void L6474_WaitWhileActive(void);
Davidroid 7:f7e0c3621f77 692 void L6474_CmdDisable(void);
Davidroid 7:f7e0c3621f77 693 void L6474_CmdEnable(void);
Davidroid 7:f7e0c3621f77 694 uint32_t L6474_CmdGetParam(L6474_Registers_t parameter);
Davidroid 7:f7e0c3621f77 695 uint16_t L6474_CmdGetStatus(void);
Davidroid 7:f7e0c3621f77 696 void L6474_CmdNop(void);
Davidroid 7:f7e0c3621f77 697 void L6474_CmdSetParam(L6474_Registers_t parameter, uint32_t value);
Davidroid 7:f7e0c3621f77 698 uint16_t L6474_ReadStatusRegister(void);
Davidroid 7:f7e0c3621f77 699 void L6474_SelectStepMode(motorStepMode_t stepMod);
Davidroid 7:f7e0c3621f77 700 motorDir_t L6474_GetDirection(void);
Davidroid 7:f7e0c3621f77 701 void L6474_SetDirection(motorDir_t direction);
Davidroid 0:2887415a46cd 702 void L6474_ApplySpeed(uint16_t newSpeed);
Davidroid 0:2887415a46cd 703 void L6474_ComputeSpeedProfile(uint32_t nbSteps);
Davidroid 7:f7e0c3621f77 704 int32_t L6474_ConvertPosition(uint32_t abs_position_reg);
Davidroid 0:2887415a46cd 705 void L6474_ErrorHandler(uint16_t error);
Davidroid 0:2887415a46cd 706 void L6474_SendCommand(uint8_t param);
Davidroid 0:2887415a46cd 707 void L6474_SetRegisterToPredefinedValues(void);
Davidroid 7:f7e0c3621f77 708 void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
Davidroid 0:2887415a46cd 709 void L6474_SetDeviceParamsToPredefinedValues(void);
Davidroid 0:2887415a46cd 710 void L6474_StartMovement(void);
Davidroid 7:f7e0c3621f77 711 void L6474_StepClockHandler(void);
Davidroid 0:2887415a46cd 712 uint8_t L6474_Tval_Current_to_Par(double Tval);
Davidroid 0:2887415a46cd 713 uint8_t L6474_Tmin_Time_to_Par(double Tmin);
Davidroid 0:2887415a46cd 714
Davidroid 0:2887415a46cd 715
Davidroid 0:2887415a46cd 716 /*** Component's I/O Methods ***/
Davidroid 0:2887415a46cd 717
Davidroid 0:2887415a46cd 718 /**
Davidroid 0:2887415a46cd 719 * @brief Utility function to read data from L6474.
Davidroid 0:2887415a46cd 720 * @param[out] pBuffer pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 721 * @param[in] NumBytesToRead number of bytes to read.
Davidroid 0:2887415a46cd 722 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 723 */
Davidroid 0:2887415a46cd 724 DrvStatusTypeDef Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
Davidroid 0:2887415a46cd 725 {
Davidroid 0:2887415a46cd 726 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0)
Davidroid 0:2887415a46cd 727 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 728 return COMPONENT_OK;
Davidroid 0:2887415a46cd 729 }
Davidroid 0:2887415a46cd 730
Davidroid 0:2887415a46cd 731 /**
Davidroid 0:2887415a46cd 732 * @brief Utility function to write data to L6474.
Davidroid 0:2887415a46cd 733 * @param[in] pBuffer pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 734 * @param[in] NumBytesToWrite number of bytes to write.
Davidroid 0:2887415a46cd 735 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 736 */
Davidroid 0:2887415a46cd 737 DrvStatusTypeDef Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
Davidroid 0:2887415a46cd 738 {
Davidroid 0:2887415a46cd 739 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0)
Davidroid 0:2887415a46cd 740 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 741 return COMPONENT_OK;
Davidroid 0:2887415a46cd 742 }
Davidroid 0:2887415a46cd 743
Davidroid 0:2887415a46cd 744 /**
Davidroid 0:2887415a46cd 745 * @brief Utility function to read and write data from/to L6474 at the same time.
Davidroid 0:2887415a46cd 746 * @param[out] pBufferToRead pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 747 * @param[in] pBufferToWrite pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 748 * @param[in] NumBytes number of bytes to read and write.
Davidroid 0:2887415a46cd 749 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 750 */
Davidroid 0:2887415a46cd 751 DrvStatusTypeDef ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
Davidroid 0:2887415a46cd 752 {
Davidroid 0:2887415a46cd 753 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0)
Davidroid 0:2887415a46cd 754 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 755 return COMPONENT_OK;
Davidroid 0:2887415a46cd 756 }
Davidroid 0:2887415a46cd 757
Davidroid 0:2887415a46cd 758 /* ACTION 8 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 759 * Implement here other I/O methods beyond those already implemented *
Davidroid 0:2887415a46cd 760 * above, which are declared extern within the component's header file. *
Davidroid 0:2887415a46cd 761 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 762 /**
Davidroid 7:f7e0c3621f77 763 * @brief Making the CPU wait.
Davidroid 7:f7e0c3621f77 764 * @param None.
Davidroid 7:f7e0c3621f77 765 * @retval None.
Davidroid 0:2887415a46cd 766 */
Davidroid 0:2887415a46cd 767 void L6474_Delay(uint32_t delay)
Davidroid 0:2887415a46cd 768 {
Davidroid 0:2887415a46cd 769 wait_ms(delay);
Davidroid 0:2887415a46cd 770 }
Davidroid 0:2887415a46cd 771
Davidroid 7:f7e0c3621f77 772 /**
Davidroid 7:f7e0c3621f77 773 * @brief Enabling interrupts.
Davidroid 7:f7e0c3621f77 774 * @param None.
Davidroid 7:f7e0c3621f77 775 * @retval None.
Davidroid 0:2887415a46cd 776 */
Davidroid 0:2887415a46cd 777 void L6474_EnableIrq(void)
Davidroid 0:2887415a46cd 778 {
Davidroid 0:2887415a46cd 779 __enable_irq();
Davidroid 0:2887415a46cd 780 }
Davidroid 0:2887415a46cd 781
Davidroid 7:f7e0c3621f77 782 /**
Davidroid 7:f7e0c3621f77 783 * @brief Disabling interrupts.
Davidroid 7:f7e0c3621f77 784 * @param None.
Davidroid 7:f7e0c3621f77 785 * @retval None.
Davidroid 0:2887415a46cd 786 */
Davidroid 0:2887415a46cd 787 void L6474_DisableIrq(void)
Davidroid 0:2887415a46cd 788 {
Davidroid 0:2887415a46cd 789 __disable_irq();
Davidroid 0:2887415a46cd 790 }
Davidroid 0:2887415a46cd 791
Davidroid 7:f7e0c3621f77 792 /**
Davidroid 7:f7e0c3621f77 793 * @brief Setting the frequency of PWM.
Davidroid 7:f7e0c3621f77 794 * The frequency controls directly the speed of the device.
Davidroid 7:f7e0c3621f77 795 * @param newFreq the frequency of PWM.
Davidroid 7:f7e0c3621f77 796 * @retval None.
Davidroid 0:2887415a46cd 797 */
Davidroid 0:2887415a46cd 798 void L6474_PwmSetFreq(uint16_t newFreq)
Davidroid 0:2887415a46cd 799 {
Davidroid 0:2887415a46cd 800 double period = 1.0f / newFreq;
Davidroid 0:2887415a46cd 801 pwm.period(period);
Davidroid 0:2887415a46cd 802 pwm.write(0.5f);
Davidroid 1:b38ebb8ea286 803 ticker.attach(this, &L6474::L6474_StepClockHandler, period);
Davidroid 0:2887415a46cd 804 }
Davidroid 0:2887415a46cd 805
Davidroid 7:f7e0c3621f77 806 /**
Davidroid 7:f7e0c3621f77 807 * @brief Initialising the PWM.
Davidroid 7:f7e0c3621f77 808 * @param None.
Davidroid 7:f7e0c3621f77 809 * @retval None.
Davidroid 0:2887415a46cd 810 */
Davidroid 7:f7e0c3621f77 811 void L6474_PwmInit(void) {}
Davidroid 0:2887415a46cd 812
Davidroid 7:f7e0c3621f77 813 /**
Davidroid 7:f7e0c3621f77 814 * @brief Stopping the PWM.
Davidroid 7:f7e0c3621f77 815 * @param None.
Davidroid 7:f7e0c3621f77 816 * @retval None.
Davidroid 0:2887415a46cd 817 */
Davidroid 0:2887415a46cd 818 void L6474_PwmStop(void)
Davidroid 0:2887415a46cd 819 {
Davidroid 0:2887415a46cd 820 pwm.write(0.0f);
Davidroid 0:2887415a46cd 821 ticker.detach();
Davidroid 0:2887415a46cd 822 }
Davidroid 0:2887415a46cd 823
Davidroid 7:f7e0c3621f77 824 /**
Davidroid 7:f7e0c3621f77 825 * @brief Putting the device in standby mode.
Davidroid 7:f7e0c3621f77 826 * @param None.
Davidroid 7:f7e0c3621f77 827 * @retval None.
Davidroid 0:2887415a46cd 828 */
Davidroid 0:2887415a46cd 829 void L6474_ReleaseReset(void)
Davidroid 0:2887415a46cd 830 {
Davidroid 4:83a1eb397a65 831 standby_reset = 1;
Davidroid 0:2887415a46cd 832 }
Davidroid 0:2887415a46cd 833
Davidroid 7:f7e0c3621f77 834 /**
Davidroid 7:f7e0c3621f77 835 * @brief Putting the device in reset mode.
Davidroid 7:f7e0c3621f77 836 * @param None.
Davidroid 7:f7e0c3621f77 837 * @retval None.
Davidroid 0:2887415a46cd 838 */
Davidroid 0:2887415a46cd 839 void L6474_Reset(void)
Davidroid 0:2887415a46cd 840 {
Davidroid 4:83a1eb397a65 841 standby_reset = 0;
Davidroid 0:2887415a46cd 842 }
Davidroid 0:2887415a46cd 843
Davidroid 7:f7e0c3621f77 844 /**
Davidroid 7:f7e0c3621f77 845 * @brief Setting the direction of rotation.
Davidroid 7:f7e0c3621f77 846 * @param gpioState direction of rotation: "1" for forward, "0" for backward.
Davidroid 7:f7e0c3621f77 847 * @retval None.
Davidroid 0:2887415a46cd 848 */
Davidroid 0:2887415a46cd 849 void L6474_SetDirectionGpio(uint8_t gpioState)
Davidroid 0:2887415a46cd 850 {
Davidroid 0:2887415a46cd 851 direction = gpioState;
Davidroid 0:2887415a46cd 852 }
Davidroid 0:2887415a46cd 853
Davidroid 7:f7e0c3621f77 854 /**
Davidroid 7:f7e0c3621f77 855 * @brief Writing and reading bytes to/from the component through the SPI at the same time.
Davidroid 7:f7e0c3621f77 856 * @param[in] pByteToTransmit pointer to the buffer of data to send.
Davidroid 7:f7e0c3621f77 857 * @param[out] pReceivedByte pointer to the buffer to read data into.
Davidroid 7:f7e0c3621f77 858 * @retval "0" in case of success, "1" otherwise.
Davidroid 0:2887415a46cd 859 */
Davidroid 0:2887415a46cd 860 uint8_t L6474_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte)
Davidroid 0:2887415a46cd 861 {
Davidroid 7:f7e0c3621f77 862 return (uint8_t) (ReadWrite(pReceivedByte, pByteToTransmit, numberOfDevices) == COMPONENT_OK ? 0 : 1);
Davidroid 0:2887415a46cd 863 }
Davidroid 0:2887415a46cd 864
Davidroid 0:2887415a46cd 865
Davidroid 0:2887415a46cd 866 /*** Component's Instance Variables ***/
Davidroid 0:2887415a46cd 867
Davidroid 0:2887415a46cd 868 /* ACTION 9 --------------------------------------------------------------*
Davidroid 10:c3824af0caf4 869 * Declare here interrupt related variables, if needed. *
Davidroid 10:c3824af0caf4 870 * Note that interrupt handling is platform dependent, see *
Davidroid 10:c3824af0caf4 871 * "Interrupt Related Methods" above. *
Davidroid 10:c3824af0caf4 872 * *
Davidroid 10:c3824af0caf4 873 * Example: *
Davidroid 10:c3824af0caf4 874 * + mbed: *
Davidroid 10:c3824af0caf4 875 * InterruptIn feature_irq; *
Davidroid 0:2887415a46cd 876 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 877 /* Flag Interrupt. */
Davidroid 7:f7e0c3621f77 878 InterruptIn flag_irq;
Davidroid 10:c3824af0caf4 879
Davidroid 10:c3824af0caf4 880 /* ACTION 10 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 881 * Declare here other pin related variables, if needed. *
Davidroid 10:c3824af0caf4 882 * *
Davidroid 10:c3824af0caf4 883 * Example: *
Davidroid 10:c3824af0caf4 884 * + mbed: *
Davidroid 10:c3824af0caf4 885 * DigitalOut standby_reset; *
Davidroid 10:c3824af0caf4 886 *------------------------------------------------------------------------*/
Davidroid 4:83a1eb397a65 887 /* Standby/reset pin. */
Davidroid 4:83a1eb397a65 888 DigitalOut standby_reset;
Davidroid 0:2887415a46cd 889
Davidroid 0:2887415a46cd 890 /* Direction of rotation pin. */
Davidroid 0:2887415a46cd 891 DigitalOut direction;
Davidroid 0:2887415a46cd 892
Davidroid 0:2887415a46cd 893 /* Pulse Width Modulation pin. */
Davidroid 0:2887415a46cd 894 PwmOut pwm;
Davidroid 0:2887415a46cd 895
Davidroid 10:c3824af0caf4 896 /* Timer to trigger the PWM callback at each PWM pulse. */
Davidroid 10:c3824af0caf4 897 Ticker ticker;
Davidroid 10:c3824af0caf4 898
Davidroid 10:c3824af0caf4 899 /* ACTION 11 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 900 * Declare here communication related variables, if needed. *
Davidroid 10:c3824af0caf4 901 * *
Davidroid 10:c3824af0caf4 902 * Example: *
Davidroid 10:c3824af0caf4 903 * + mbed: *
Davidroid 10:c3824af0caf4 904 * DigitalOut ssel; *
Davidroid 10:c3824af0caf4 905 * DevSPI &dev_spi; *
Davidroid 10:c3824af0caf4 906 *------------------------------------------------------------------------*/
Davidroid 4:83a1eb397a65 907 /* Configuration. */
Davidroid 4:83a1eb397a65 908 DigitalOut ssel;
Davidroid 0:2887415a46cd 909
Davidroid 0:2887415a46cd 910 /* IO Device. */
Davidroid 0:2887415a46cd 911 DevSPI &dev_spi;
Davidroid 0:2887415a46cd 912
Davidroid 10:c3824af0caf4 913 /* ACTION 12 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 914 * Declare here identity related variables, if needed. *
Davidroid 10:c3824af0caf4 915 * Note that there should be only a unique identifier for each component, *
Davidroid 10:c3824af0caf4 916 * which should be the "who_am_i" parameter. *
Davidroid 10:c3824af0caf4 917 *------------------------------------------------------------------------*/
Davidroid 10:c3824af0caf4 918 /* Identity */
Davidroid 10:c3824af0caf4 919 uint8_t who_am_i;
Davidroid 4:83a1eb397a65 920
Davidroid 10:c3824af0caf4 921 /* ACTION 13 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 922 * Declare here the component's static and non-static data, one variable *
Davidroid 10:c3824af0caf4 923 * per line. *
Davidroid 0:2887415a46cd 924 * *
Davidroid 0:2887415a46cd 925 * Example: *
Davidroid 10:c3824af0caf4 926 * float measure; *
Davidroid 10:c3824af0caf4 927 * int instance_id; *
Davidroid 10:c3824af0caf4 928 * static int number_of_instances; *
Davidroid 0:2887415a46cd 929 *------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 930 /* Data. */
Davidroid 0:2887415a46cd 931 void (*errorHandlerCallback)(uint16_t error);
Davidroid 0:2887415a46cd 932 deviceParams_t devicePrm;
Davidroid 5:d3c78f12a78d 933 uint8_t deviceInstance;
Davidroid 7:f7e0c3621f77 934
Davidroid 7:f7e0c3621f77 935 /* Static data. */
Davidroid 0:2887415a46cd 936 static uint8_t numberOfDevices;
Davidroid 7:f7e0c3621f77 937 static uint8_t spiTxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 7:f7e0c3621f77 938 static uint8_t spiRxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 7:f7e0c3621f77 939
Davidroid 7:f7e0c3621f77 940
Davidroid 7:f7e0c3621f77 941 public:
Davidroid 7:f7e0c3621f77 942
Davidroid 7:f7e0c3621f77 943 /* Static data. */
Davidroid 6:a47569fc7534 944 static bool spiPreemtionByIsr;
Davidroid 6:a47569fc7534 945 static bool isrFlag;
Davidroid 0:2887415a46cd 946 };
Davidroid 0:2887415a46cd 947
Davidroid 0:2887415a46cd 948 #endif // __L6474_CLASS_H
Davidroid 0:2887415a46cd 949
Davidroid 0:2887415a46cd 950 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/