Davide Aliprandi / X-NUCLEO-IHM05A1

Dependencies:   ST_INTERFACES

Fork of X-NUCLEO-IHM05A1 by ST

Committer:
nucleosam
Date:
Fri Apr 29 14:58:30 2016 +0000
Revision:
2:2af31245e67e
Parent:
1:5cc2691ccfff
Child:
3:d566edd8cd34
Removed X-NUCLEO-COMMON, since I2C and SPI are not used.; Private methods became protected, in order to be correctly inherited in case someone decides to make a subclass of this driver.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nucleosam 1:5cc2691ccfff 1 /**
nucleosam 1:5cc2691ccfff 2 ******************************************************************************
nucleosam 1:5cc2691ccfff 3 * @file l6208_class.h
nucleosam 1:5cc2691ccfff 4 * @author IPC Rennes
nucleosam 1:5cc2691ccfff 5 * @version V1.0.0
nucleosam 1:5cc2691ccfff 6 * @date March 18th, 2016
nucleosam 1:5cc2691ccfff 7 * @brief This file contains the class of a L6208 Motor Control component.
nucleosam 1:5cc2691ccfff 8 * @note (C) COPYRIGHT 2016 STMicroelectronics
nucleosam 1:5cc2691ccfff 9 ******************************************************************************
nucleosam 1:5cc2691ccfff 10 * @attention
nucleosam 1:5cc2691ccfff 11 *
nucleosam 1:5cc2691ccfff 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
nucleosam 1:5cc2691ccfff 13 *
nucleosam 1:5cc2691ccfff 14 * Redistribution and use in source and binary forms, with or without modification,
nucleosam 1:5cc2691ccfff 15 * are permitted provided that the following conditions are met:
nucleosam 1:5cc2691ccfff 16 * 1. Redistributions of source code must retain the above copyright notice,
nucleosam 1:5cc2691ccfff 17 * this list of conditions and the following disclaimer.
nucleosam 1:5cc2691ccfff 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
nucleosam 1:5cc2691ccfff 19 * this list of conditions and the following disclaimer in the documentation
nucleosam 1:5cc2691ccfff 20 * and/or other materials provided with the distribution.
nucleosam 1:5cc2691ccfff 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
nucleosam 1:5cc2691ccfff 22 * may be used to endorse or promote products derived from this software
nucleosam 1:5cc2691ccfff 23 * without specific prior written permission.
nucleosam 1:5cc2691ccfff 24 *
nucleosam 1:5cc2691ccfff 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
nucleosam 1:5cc2691ccfff 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
nucleosam 1:5cc2691ccfff 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
nucleosam 1:5cc2691ccfff 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
nucleosam 1:5cc2691ccfff 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
nucleosam 1:5cc2691ccfff 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
nucleosam 1:5cc2691ccfff 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
nucleosam 1:5cc2691ccfff 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
nucleosam 1:5cc2691ccfff 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nucleosam 1:5cc2691ccfff 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nucleosam 1:5cc2691ccfff 35 *
nucleosam 1:5cc2691ccfff 36 ******************************************************************************
nucleosam 1:5cc2691ccfff 37 */
nucleosam 1:5cc2691ccfff 38
nucleosam 1:5cc2691ccfff 39
nucleosam 1:5cc2691ccfff 40 /* Define to prevent recursive inclusion -------------------------------------*/
nucleosam 1:5cc2691ccfff 41
nucleosam 1:5cc2691ccfff 42 #ifndef __L6208_CLASS_H
nucleosam 1:5cc2691ccfff 43 #define __L6208_CLASS_H
nucleosam 1:5cc2691ccfff 44
nucleosam 1:5cc2691ccfff 45
nucleosam 1:5cc2691ccfff 46 /* Includes ------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 47
nucleosam 1:5cc2691ccfff 48 /* ACTION 1 ------------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 49 * Include here platform specific header files. *
nucleosam 1:5cc2691ccfff 50 *----------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 51 #include "mbed.h"
nucleosam 1:5cc2691ccfff 52
nucleosam 1:5cc2691ccfff 53 /* ACTION 2 ------------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 54 * Include here component specific header files. *
nucleosam 1:5cc2691ccfff 55 *----------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 56 #include "l6208.h"
nucleosam 1:5cc2691ccfff 57 /* ACTION 3 ------------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 58 * Include here interface specific header files. *
nucleosam 1:5cc2691ccfff 59 * *
nucleosam 1:5cc2691ccfff 60 * Example: *
nucleosam 1:5cc2691ccfff 61 * #include "../Interfaces/Humidity_class.h" *
nucleosam 1:5cc2691ccfff 62 * #include "../Interfaces/Temperature_class.h" *
nucleosam 1:5cc2691ccfff 63 *----------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 64 #include "../Interfaces/StepperMotor_class.h"
nucleosam 1:5cc2691ccfff 65
nucleosam 1:5cc2691ccfff 66
nucleosam 1:5cc2691ccfff 67 /* Classes -------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 68
nucleosam 1:5cc2691ccfff 69 /**
nucleosam 1:5cc2691ccfff 70 * @brief Class representing a L6208 component.
nucleosam 1:5cc2691ccfff 71 */
nucleosam 1:5cc2691ccfff 72 class L6208 : public StepperMotor
nucleosam 1:5cc2691ccfff 73 {
nucleosam 1:5cc2691ccfff 74 public:
nucleosam 1:5cc2691ccfff 75 /*** Constructor and Destructor Methods ***/
nucleosam 1:5cc2691ccfff 76
nucleosam 1:5cc2691ccfff 77 /**
nucleosam 1:5cc2691ccfff 78 * @brief Constructor.
nucleosam 1:5cc2691ccfff 79 * @param flag_and_enable_pin pin name of the EN pin of the component.
nucleosam 1:5cc2691ccfff 80 * @param reset_pin pin name of the RESET pin of the component.
nucleosam 1:5cc2691ccfff 81 * @param direction_pin pin name of the CW_CCW pin of the component.
nucleosam 1:5cc2691ccfff 82 * @param half_full_pin pin name of the HALF_FULL pin of the component.
nucleosam 1:5cc2691ccfff 83 * @param control_pin pin name of the CONTROL pin of the component.
nucleosam 1:5cc2691ccfff 84 * @param clock_pin pin name of the CLOCK pin of the component.
nucleosam 1:5cc2691ccfff 85 * @param vrefA_pwm_pin pin name of the PWM connected to the VREFA pin of the component.
nucleosam 1:5cc2691ccfff 86 * @param vrefB_pwm_pin pin name of the PWM connected to the VREFB pin of the component.
nucleosam 1:5cc2691ccfff 87 */
nucleosam 1:5cc2691ccfff 88 L6208(PinName flag_and_enable_pin, PinName reset_pin, PinName direction_pin, PinName half_full_pin, PinName control_pin, PinName clock_pin, PinName vrefA_pwm_pin, PinName vrefB_pwm_pin) : StepperMotor(),
nucleosam 1:5cc2691ccfff 89 flag_and_enable(flag_and_enable_pin),
nucleosam 1:5cc2691ccfff 90 reset(reset_pin),
nucleosam 1:5cc2691ccfff 91 direction(direction_pin),
nucleosam 1:5cc2691ccfff 92 half_full(half_full_pin),
nucleosam 1:5cc2691ccfff 93 control(control_pin),
nucleosam 1:5cc2691ccfff 94 clock(clock_pin),
nucleosam 1:5cc2691ccfff 95 vrefA_pwm(vrefA_pwm_pin),
nucleosam 1:5cc2691ccfff 96 vrefB_pwm(vrefB_pwm_pin)
nucleosam 1:5cc2691ccfff 97 {
nucleosam 1:5cc2691ccfff 98 /* Checking stackability. */
nucleosam 2:2af31245e67e 99 if (numberOfDevices!=0)
nucleosam 2:2af31245e67e 100 error("Instantiation of the L6208 component failed: it can't be stacked on itself.\r\n");
nucleosam 1:5cc2691ccfff 101
nucleosam 1:5cc2691ccfff 102 /* ACTION 4 ----------------------------------------------------------*
nucleosam 1:5cc2691ccfff 103 * Initialize here the component's member variables, one variable per *
nucleosam 1:5cc2691ccfff 104 * line. *
nucleosam 1:5cc2691ccfff 105 * *
nucleosam 1:5cc2691ccfff 106 * Example: *
nucleosam 1:5cc2691ccfff 107 * measure = 0; *
nucleosam 1:5cc2691ccfff 108 * instance_id = number_of_instances++; *
nucleosam 1:5cc2691ccfff 109 *--------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 110 errorHandlerCallback = 0;
nucleosam 1:5cc2691ccfff 111 deviceInstance = numberOfDevices++;
nucleosam 1:5cc2691ccfff 112 /* default tick frequency */
nucleosam 1:5cc2691ccfff 113 tickFreq = TIMER_TICK_FREQUENCY;
nucleosam 1:5cc2691ccfff 114 /* waveform microstepping PWM period sample array, 90 deg shifted */
nucleosam 1:5cc2691ccfff 115 pMicroTable2 = &(microTable1[16]);
nucleosam 1:5cc2691ccfff 116 }
nucleosam 1:5cc2691ccfff 117
nucleosam 1:5cc2691ccfff 118 /**
nucleosam 1:5cc2691ccfff 119 * @brief Destructor.
nucleosam 1:5cc2691ccfff 120 */
nucleosam 1:5cc2691ccfff 121 virtual ~L6208(void) {}
nucleosam 1:5cc2691ccfff 122
nucleosam 1:5cc2691ccfff 123
nucleosam 1:5cc2691ccfff 124 /*** Public Component Related Methods ***/
nucleosam 1:5cc2691ccfff 125
nucleosam 1:5cc2691ccfff 126 /* ACTION 5 --------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 127 * Implement here the component's public methods, as wrappers of the C *
nucleosam 1:5cc2691ccfff 128 * component's functions. *
nucleosam 1:5cc2691ccfff 129 * They should be: *
nucleosam 1:5cc2691ccfff 130 * + Methods with the same name of the C component's virtual table's *
nucleosam 1:5cc2691ccfff 131 * functions (1); *
nucleosam 1:5cc2691ccfff 132 * + Methods with the same name of the C component's extended virtual *
nucleosam 1:5cc2691ccfff 133 * table's functions, if any (2). *
nucleosam 1:5cc2691ccfff 134 * *
nucleosam 1:5cc2691ccfff 135 * Example: *
nucleosam 1:5cc2691ccfff 136 * virtual int GetValue(float *pData) //(1) *
nucleosam 1:5cc2691ccfff 137 * { *
nucleosam 1:5cc2691ccfff 138 * return COMPONENT_GetValue(float *pfData); *
nucleosam 1:5cc2691ccfff 139 * } *
nucleosam 1:5cc2691ccfff 140 * *
nucleosam 1:5cc2691ccfff 141 * virtual int EnableFeature(void) //(2) *
nucleosam 1:5cc2691ccfff 142 * { *
nucleosam 1:5cc2691ccfff 143 * return COMPONENT_EnableFeature(); *
nucleosam 1:5cc2691ccfff 144 * } *
nucleosam 1:5cc2691ccfff 145 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 146
nucleosam 1:5cc2691ccfff 147 /**
nucleosam 1:5cc2691ccfff 148 * @brief Public functions inherited from the Component Class
nucleosam 1:5cc2691ccfff 149 */
nucleosam 1:5cc2691ccfff 150
nucleosam 1:5cc2691ccfff 151 /**
nucleosam 1:5cc2691ccfff 152 * @brief Initialize the component.
nucleosam 1:5cc2691ccfff 153 * @param init Pointer to device specific initalization structure.
nucleosam 1:5cc2691ccfff 154 * @retval "0" in case of success, an error code otherwise.
nucleosam 1:5cc2691ccfff 155 */
nucleosam 1:5cc2691ccfff 156 virtual int Init(void *init = NULL)
nucleosam 1:5cc2691ccfff 157 {
nucleosam 1:5cc2691ccfff 158 return (int) L6208_Init((void *) init);
nucleosam 1:5cc2691ccfff 159 }
nucleosam 1:5cc2691ccfff 160
nucleosam 1:5cc2691ccfff 161 /**
nucleosam 1:5cc2691ccfff 162 * @brief Getting the ID of the component.
nucleosam 1:5cc2691ccfff 163 * @param id Pointer to an allocated variable to store the ID into.
nucleosam 1:5cc2691ccfff 164 * @retval "0" in case of success, an error code otherwise.
nucleosam 1:5cc2691ccfff 165 */
nucleosam 1:5cc2691ccfff 166 virtual int ReadID(uint8_t *id = NULL)
nucleosam 1:5cc2691ccfff 167 {
nucleosam 1:5cc2691ccfff 168 return (int) L6208_ReadID((uint8_t *) id);
nucleosam 1:5cc2691ccfff 169 }
nucleosam 1:5cc2691ccfff 170
nucleosam 1:5cc2691ccfff 171 /**
nucleosam 1:5cc2691ccfff 172 * @brief Public functions inherited from the StepperMotor Class
nucleosam 1:5cc2691ccfff 173 */
nucleosam 1:5cc2691ccfff 174
nucleosam 1:5cc2691ccfff 175 /**
nucleosam 1:5cc2691ccfff 176 * @brief Getting the value of the motor state .
nucleosam 1:5cc2691ccfff 177 * @param None.
nucleosam 1:5cc2691ccfff 178 * @retval The motor state accoring to motorState_t in motor.h
nucleosam 1:5cc2691ccfff 179 */
nucleosam 1:5cc2691ccfff 180 virtual unsigned int GetStatus(void)
nucleosam 1:5cc2691ccfff 181 {
nucleosam 1:5cc2691ccfff 182 return (unsigned int) L6208_GetMotionState();
nucleosam 1:5cc2691ccfff 183 }
nucleosam 1:5cc2691ccfff 184
nucleosam 1:5cc2691ccfff 185 /**
nucleosam 1:5cc2691ccfff 186 * @brief Getting the position.
nucleosam 1:5cc2691ccfff 187 * @param None.
nucleosam 1:5cc2691ccfff 188 * @retval The position.
nucleosam 1:5cc2691ccfff 189 */
nucleosam 1:5cc2691ccfff 190 virtual signed int GetPosition(void)
nucleosam 1:5cc2691ccfff 191 {
nucleosam 1:5cc2691ccfff 192 return (signed int)L6208_GetPosition();
nucleosam 1:5cc2691ccfff 193 }
nucleosam 1:5cc2691ccfff 194
nucleosam 1:5cc2691ccfff 195 /**
nucleosam 1:5cc2691ccfff 196 * @brief Getting the marked position.
nucleosam 1:5cc2691ccfff 197 * @param None.
nucleosam 1:5cc2691ccfff 198 * @retval The marked position.
nucleosam 1:5cc2691ccfff 199 */
nucleosam 1:5cc2691ccfff 200 virtual signed int GetMark(void)
nucleosam 1:5cc2691ccfff 201 {
nucleosam 1:5cc2691ccfff 202 return (signed int)L6208_GetMark();
nucleosam 1:5cc2691ccfff 203 }
nucleosam 1:5cc2691ccfff 204
nucleosam 1:5cc2691ccfff 205 /**
nucleosam 1:5cc2691ccfff 206 * @brief Getting the current speed in pps.
nucleosam 1:5cc2691ccfff 207 * @param None.
nucleosam 1:5cc2691ccfff 208 * @retval The current speed in pps.
nucleosam 1:5cc2691ccfff 209 */
nucleosam 1:5cc2691ccfff 210 virtual unsigned int GetSpeed(void)
nucleosam 1:5cc2691ccfff 211 {
nucleosam 1:5cc2691ccfff 212 return (unsigned int)L6208_GetCurrentSpeed();
nucleosam 1:5cc2691ccfff 213 }
nucleosam 1:5cc2691ccfff 214
nucleosam 1:5cc2691ccfff 215 /**
nucleosam 1:5cc2691ccfff 216 * @brief Getting the maximum speed in pps.
nucleosam 1:5cc2691ccfff 217 * @param None.
nucleosam 1:5cc2691ccfff 218 * @retval The maximum speed in pps.
nucleosam 1:5cc2691ccfff 219 */
nucleosam 1:5cc2691ccfff 220 virtual unsigned int GetMaxSpeed(void)
nucleosam 1:5cc2691ccfff 221 {
nucleosam 1:5cc2691ccfff 222 return (unsigned int)L6208_GetMaxSpeed();
nucleosam 1:5cc2691ccfff 223 }
nucleosam 1:5cc2691ccfff 224
nucleosam 1:5cc2691ccfff 225 /**
nucleosam 1:5cc2691ccfff 226 * @brief Getting the minimum speed in pps.
nucleosam 1:5cc2691ccfff 227 * @param None.
nucleosam 1:5cc2691ccfff 228 * @retval The minimum speed in pps.
nucleosam 1:5cc2691ccfff 229 */
nucleosam 1:5cc2691ccfff 230 virtual unsigned int GetMinSpeed(void)
nucleosam 1:5cc2691ccfff 231 {
nucleosam 1:5cc2691ccfff 232 return (unsigned int)L6208_GetMinSpeed();
nucleosam 1:5cc2691ccfff 233 }
nucleosam 1:5cc2691ccfff 234
nucleosam 1:5cc2691ccfff 235 /**
nucleosam 1:5cc2691ccfff 236 * @brief Getting the acceleration in pps^2.
nucleosam 1:5cc2691ccfff 237 * @param None.
nucleosam 1:5cc2691ccfff 238 * @retval The acceleration in pps^2.
nucleosam 1:5cc2691ccfff 239 */
nucleosam 1:5cc2691ccfff 240 virtual unsigned int GetAcceleration(void)
nucleosam 1:5cc2691ccfff 241 {
nucleosam 1:5cc2691ccfff 242 return (unsigned int)L6208_GetAcceleration();
nucleosam 1:5cc2691ccfff 243 }
nucleosam 1:5cc2691ccfff 244
nucleosam 1:5cc2691ccfff 245 /**
nucleosam 1:5cc2691ccfff 246 * @brief Getting the deceleration in pps^2.
nucleosam 1:5cc2691ccfff 247 * @param None.
nucleosam 1:5cc2691ccfff 248 * @retval The deceleration in pps^2.
nucleosam 1:5cc2691ccfff 249 */
nucleosam 1:5cc2691ccfff 250 virtual unsigned int GetDeceleration(void)
nucleosam 1:5cc2691ccfff 251 {
nucleosam 1:5cc2691ccfff 252 return (unsigned int)L6208_GetDeceleration();
nucleosam 1:5cc2691ccfff 253 }
nucleosam 1:5cc2691ccfff 254
nucleosam 1:5cc2691ccfff 255 /**
nucleosam 1:5cc2691ccfff 256 * @brief Getting the direction of rotation.
nucleosam 1:5cc2691ccfff 257 * @param None.
nucleosam 1:5cc2691ccfff 258 * @retval The direction of rotation.
nucleosam 1:5cc2691ccfff 259 */
nucleosam 1:5cc2691ccfff 260 virtual direction_t GetDirection(void)
nucleosam 1:5cc2691ccfff 261 {
nucleosam 1:5cc2691ccfff 262 if (L6208_GetDirection()!=BACKWARD)
nucleosam 1:5cc2691ccfff 263 {
nucleosam 1:5cc2691ccfff 264 return FWD;
nucleosam 1:5cc2691ccfff 265 }
nucleosam 1:5cc2691ccfff 266 else
nucleosam 1:5cc2691ccfff 267 {
nucleosam 1:5cc2691ccfff 268 return BWD;
nucleosam 1:5cc2691ccfff 269 }
nucleosam 1:5cc2691ccfff 270 }
nucleosam 1:5cc2691ccfff 271
nucleosam 1:5cc2691ccfff 272 /**
nucleosam 1:5cc2691ccfff 273 * @brief Setting the current position to be the home position.
nucleosam 1:5cc2691ccfff 274 * @param None.
nucleosam 1:5cc2691ccfff 275 * @retval None.
nucleosam 1:5cc2691ccfff 276 */
nucleosam 1:5cc2691ccfff 277 virtual void SetHome(void)
nucleosam 1:5cc2691ccfff 278 {
nucleosam 1:5cc2691ccfff 279 L6208_SetHome();
nucleosam 1:5cc2691ccfff 280 }
nucleosam 1:5cc2691ccfff 281
nucleosam 1:5cc2691ccfff 282 /**
nucleosam 1:5cc2691ccfff 283 * @brief Setting the current position to be the marked position.
nucleosam 1:5cc2691ccfff 284 * @param None.
nucleosam 1:5cc2691ccfff 285 * @retval None.
nucleosam 1:5cc2691ccfff 286 */
nucleosam 1:5cc2691ccfff 287 virtual void SetMark(void)
nucleosam 1:5cc2691ccfff 288 {
nucleosam 1:5cc2691ccfff 289 L6208_SetMark();
nucleosam 1:5cc2691ccfff 290 }
nucleosam 1:5cc2691ccfff 291
nucleosam 1:5cc2691ccfff 292 /**
nucleosam 1:5cc2691ccfff 293 * @brief Setting the maximum speed in pps.
nucleosam 1:5cc2691ccfff 294 * @param speed The maximum speed in pps.
nucleosam 1:5cc2691ccfff 295 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 296 */
nucleosam 1:5cc2691ccfff 297 virtual bool SetMaxSpeed(unsigned int speed)
nucleosam 1:5cc2691ccfff 298 {
nucleosam 1:5cc2691ccfff 299 if (speed <= 0xFFFF)
nucleosam 1:5cc2691ccfff 300 {
nucleosam 1:5cc2691ccfff 301 return L6208_SetMaxSpeed((uint16_t) speed);
nucleosam 1:5cc2691ccfff 302 }
nucleosam 1:5cc2691ccfff 303 else
nucleosam 1:5cc2691ccfff 304 {
nucleosam 1:5cc2691ccfff 305 return false;
nucleosam 1:5cc2691ccfff 306 }
nucleosam 1:5cc2691ccfff 307 }
nucleosam 1:5cc2691ccfff 308
nucleosam 1:5cc2691ccfff 309 /**
nucleosam 1:5cc2691ccfff 310 * @brief Setting the minimum speed in pps.
nucleosam 1:5cc2691ccfff 311 * @param speed The minimum speed in pps.
nucleosam 1:5cc2691ccfff 312 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 313 */
nucleosam 1:5cc2691ccfff 314 virtual bool SetMinSpeed(unsigned int speed)
nucleosam 1:5cc2691ccfff 315 {
nucleosam 1:5cc2691ccfff 316 if (speed <= 0xFFFF)
nucleosam 1:5cc2691ccfff 317 {
nucleosam 1:5cc2691ccfff 318 return L6208_SetMinSpeed((uint16_t) speed);
nucleosam 1:5cc2691ccfff 319 }
nucleosam 1:5cc2691ccfff 320 else
nucleosam 1:5cc2691ccfff 321 {
nucleosam 1:5cc2691ccfff 322 return false;
nucleosam 1:5cc2691ccfff 323 }
nucleosam 1:5cc2691ccfff 324 }
nucleosam 1:5cc2691ccfff 325
nucleosam 1:5cc2691ccfff 326 /**
nucleosam 1:5cc2691ccfff 327 * @brief Setting the acceleration in pps^2.
nucleosam 1:5cc2691ccfff 328 * @param acceleration The acceleration in pps/s^2.
nucleosam 1:5cc2691ccfff 329 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 330 */
nucleosam 1:5cc2691ccfff 331 virtual bool SetAcceleration(unsigned int acceleration)
nucleosam 1:5cc2691ccfff 332 {
nucleosam 1:5cc2691ccfff 333 if (acceleration <= 0xFFFF)
nucleosam 1:5cc2691ccfff 334 {
nucleosam 1:5cc2691ccfff 335 return L6208_SetAcceleration((uint16_t) acceleration);
nucleosam 1:5cc2691ccfff 336 }
nucleosam 1:5cc2691ccfff 337 else
nucleosam 1:5cc2691ccfff 338 {
nucleosam 1:5cc2691ccfff 339 return false;
nucleosam 1:5cc2691ccfff 340 }
nucleosam 1:5cc2691ccfff 341 }
nucleosam 1:5cc2691ccfff 342
nucleosam 1:5cc2691ccfff 343 /**
nucleosam 1:5cc2691ccfff 344 * @brief Setting the deceleration in pps^2.
nucleosam 1:5cc2691ccfff 345 * @param deceleration The deceleration in pps^2.
nucleosam 1:5cc2691ccfff 346 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 347 */
nucleosam 1:5cc2691ccfff 348 virtual bool SetDeceleration(unsigned int deceleration)
nucleosam 1:5cc2691ccfff 349 {
nucleosam 1:5cc2691ccfff 350 if (deceleration <= 0xFFFF)
nucleosam 1:5cc2691ccfff 351 {
nucleosam 1:5cc2691ccfff 352 return L6208_SetDeceleration((uint16_t) deceleration);
nucleosam 1:5cc2691ccfff 353 }
nucleosam 1:5cc2691ccfff 354 else
nucleosam 1:5cc2691ccfff 355 {
nucleosam 1:5cc2691ccfff 356 return false;
nucleosam 1:5cc2691ccfff 357 }
nucleosam 1:5cc2691ccfff 358 }
nucleosam 1:5cc2691ccfff 359
nucleosam 1:5cc2691ccfff 360 /**
nucleosam 1:5cc2691ccfff 361 * @brief Setting the Step Mode.
nucleosam 1:5cc2691ccfff 362 * @param step_mode The Step Mode.
nucleosam 1:5cc2691ccfff 363 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 364 * @note step_mode can be one of the following:
nucleosam 1:5cc2691ccfff 365 * + STEP_MODE_FULL
nucleosam 1:5cc2691ccfff 366 * + STEP_MODE_WAVE
nucleosam 1:5cc2691ccfff 367 * + STEP_MODE_HALF
nucleosam 1:5cc2691ccfff 368 * + STEP_MODE_1_4
nucleosam 1:5cc2691ccfff 369 * + STEP_MODE_1_8
nucleosam 1:5cc2691ccfff 370 * + STEP_MODE_1_16
nucleosam 1:5cc2691ccfff 371 */
nucleosam 1:5cc2691ccfff 372 virtual bool SetStepMode(step_mode_t step_mode)
nucleosam 1:5cc2691ccfff 373 {
nucleosam 1:5cc2691ccfff 374 return L6208_SetStepMode((motorStepMode_t) step_mode);
nucleosam 1:5cc2691ccfff 375 }
nucleosam 1:5cc2691ccfff 376
nucleosam 1:5cc2691ccfff 377 /**
nucleosam 1:5cc2691ccfff 378 * @brief Going to a specified position.
nucleosam 1:5cc2691ccfff 379 * @param position The desired position.
nucleosam 1:5cc2691ccfff 380 * @retval None.
nucleosam 1:5cc2691ccfff 381 */
nucleosam 1:5cc2691ccfff 382 virtual void GoTo(signed int position)
nucleosam 1:5cc2691ccfff 383 {
nucleosam 1:5cc2691ccfff 384 L6208_GoTo((int32_t)position);
nucleosam 1:5cc2691ccfff 385 }
nucleosam 1:5cc2691ccfff 386
nucleosam 1:5cc2691ccfff 387 /**
nucleosam 1:5cc2691ccfff 388 * @brief Going to the home position.
nucleosam 1:5cc2691ccfff 389 * @param None.
nucleosam 1:5cc2691ccfff 390 * @retval None.
nucleosam 1:5cc2691ccfff 391 */
nucleosam 1:5cc2691ccfff 392 virtual void GoHome(void)
nucleosam 1:5cc2691ccfff 393 {
nucleosam 1:5cc2691ccfff 394 L6208_GoHome();
nucleosam 1:5cc2691ccfff 395 }
nucleosam 1:5cc2691ccfff 396
nucleosam 1:5cc2691ccfff 397 /**
nucleosam 1:5cc2691ccfff 398 * @brief Going to the marked position.
nucleosam 1:5cc2691ccfff 399 * @param None.
nucleosam 1:5cc2691ccfff 400 * @retval None.
nucleosam 1:5cc2691ccfff 401 */
nucleosam 1:5cc2691ccfff 402 virtual void GoMark(void)
nucleosam 1:5cc2691ccfff 403 {
nucleosam 1:5cc2691ccfff 404 L6208_GoMark();
nucleosam 1:5cc2691ccfff 405 }
nucleosam 1:5cc2691ccfff 406
nucleosam 1:5cc2691ccfff 407 /**
nucleosam 1:5cc2691ccfff 408 * @brief Running the motor towards a specified direction.
nucleosam 1:5cc2691ccfff 409 * @param direction The direction of rotation.
nucleosam 1:5cc2691ccfff 410 * @retval None.
nucleosam 1:5cc2691ccfff 411 */
nucleosam 1:5cc2691ccfff 412 virtual void Run(direction_t direction)
nucleosam 1:5cc2691ccfff 413 {
nucleosam 1:5cc2691ccfff 414 L6208_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
nucleosam 1:5cc2691ccfff 415 }
nucleosam 1:5cc2691ccfff 416
nucleosam 1:5cc2691ccfff 417 /**
nucleosam 1:5cc2691ccfff 418 * @brief Moving the motor towards a specified direction for a certain number of steps.
nucleosam 1:5cc2691ccfff 419 * @param direction The direction of rotation.
nucleosam 1:5cc2691ccfff 420 * @param steps The desired number of steps.
nucleosam 1:5cc2691ccfff 421 * @retval None.
nucleosam 1:5cc2691ccfff 422 */
nucleosam 1:5cc2691ccfff 423 virtual void Move(direction_t direction, unsigned int steps)
nucleosam 1:5cc2691ccfff 424 {
nucleosam 1:5cc2691ccfff 425 L6208_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (uint32_t)steps);
nucleosam 1:5cc2691ccfff 426 }
nucleosam 1:5cc2691ccfff 427
nucleosam 1:5cc2691ccfff 428 /**
nucleosam 1:5cc2691ccfff 429 * @brief Stopping the motor through an immediate deceleration up to zero speed.
nucleosam 1:5cc2691ccfff 430 * @param None.
nucleosam 1:5cc2691ccfff 431 * @retval None.
nucleosam 1:5cc2691ccfff 432 */
nucleosam 1:5cc2691ccfff 433 virtual void SoftStop(void)
nucleosam 1:5cc2691ccfff 434 {
nucleosam 1:5cc2691ccfff 435 L6208_SoftStop();
nucleosam 1:5cc2691ccfff 436 }
nucleosam 1:5cc2691ccfff 437
nucleosam 1:5cc2691ccfff 438 /**
nucleosam 1:5cc2691ccfff 439 * @brief Stopping the motor through an immediate infinite deceleration.
nucleosam 1:5cc2691ccfff 440 * @param None.
nucleosam 1:5cc2691ccfff 441 * @retval None.
nucleosam 1:5cc2691ccfff 442 */
nucleosam 1:5cc2691ccfff 443 virtual void HardStop(void)
nucleosam 1:5cc2691ccfff 444 {
nucleosam 1:5cc2691ccfff 445 L6208_HardStop();
nucleosam 1:5cc2691ccfff 446 }
nucleosam 1:5cc2691ccfff 447
nucleosam 1:5cc2691ccfff 448 /**
nucleosam 1:5cc2691ccfff 449 * @brief Disabling the power bridge after performing a deceleration to zero.
nucleosam 1:5cc2691ccfff 450 * @param None.
nucleosam 1:5cc2691ccfff 451 * @retval None.
nucleosam 1:5cc2691ccfff 452 */
nucleosam 1:5cc2691ccfff 453 virtual void SoftHiZ(void)
nucleosam 1:5cc2691ccfff 454 {
nucleosam 1:5cc2691ccfff 455 motorStopMode_t stopMode = L6208_GetStopMode();
nucleosam 1:5cc2691ccfff 456 if (stopMode==HIZ_MODE)
nucleosam 1:5cc2691ccfff 457 {
nucleosam 1:5cc2691ccfff 458 L6208_SoftStop();
nucleosam 1:5cc2691ccfff 459 }
nucleosam 1:5cc2691ccfff 460 else
nucleosam 1:5cc2691ccfff 461 {
nucleosam 1:5cc2691ccfff 462 L6208_SetStopMode(HIZ_MODE);
nucleosam 1:5cc2691ccfff 463 L6208_SoftStop();
nucleosam 1:5cc2691ccfff 464 L6208_SetStopMode(stopMode);
nucleosam 1:5cc2691ccfff 465 }
nucleosam 1:5cc2691ccfff 466 }
nucleosam 1:5cc2691ccfff 467
nucleosam 1:5cc2691ccfff 468 /**
nucleosam 1:5cc2691ccfff 469 * @brief Disabling the power bridge immediately.
nucleosam 1:5cc2691ccfff 470 * @param None.
nucleosam 1:5cc2691ccfff 471 * @retval None.
nucleosam 1:5cc2691ccfff 472 */
nucleosam 1:5cc2691ccfff 473 virtual void HardHiZ(void)
nucleosam 1:5cc2691ccfff 474 {
nucleosam 1:5cc2691ccfff 475 L6208_HardHiZ();
nucleosam 1:5cc2691ccfff 476 }
nucleosam 1:5cc2691ccfff 477
nucleosam 1:5cc2691ccfff 478 /**
nucleosam 1:5cc2691ccfff 479 * @brief Waiting while the motor is active.
nucleosam 1:5cc2691ccfff 480 * @param None.
nucleosam 1:5cc2691ccfff 481 * @retval None.
nucleosam 1:5cc2691ccfff 482 */
nucleosam 1:5cc2691ccfff 483 virtual void WaitWhileActive(void)
nucleosam 1:5cc2691ccfff 484 {
nucleosam 1:5cc2691ccfff 485 L6208_WaitWhileActive();
nucleosam 1:5cc2691ccfff 486 }
nucleosam 1:5cc2691ccfff 487
nucleosam 1:5cc2691ccfff 488 /**
nucleosam 1:5cc2691ccfff 489 * @brief Public functions NOT inherited
nucleosam 1:5cc2691ccfff 490 */
nucleosam 1:5cc2691ccfff 491
nucleosam 1:5cc2691ccfff 492 /**
nucleosam 1:5cc2691ccfff 493 * @brief Attaching an error handler.
nucleosam 1:5cc2691ccfff 494 * @param fptr An error handler.
nucleosam 1:5cc2691ccfff 495 * @retval None.
nucleosam 1:5cc2691ccfff 496 */
nucleosam 1:5cc2691ccfff 497 virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
nucleosam 1:5cc2691ccfff 498 {
nucleosam 1:5cc2691ccfff 499 L6208_AttachErrorHandler((void (*)(uint16_t error)) fptr);
nucleosam 1:5cc2691ccfff 500 }
nucleosam 1:5cc2691ccfff 501
nucleosam 1:5cc2691ccfff 502 /**
nucleosam 1:5cc2691ccfff 503 * @brief Checks if the device is disabled or/and has an alarm flag set
nucleosam 1:5cc2691ccfff 504 * by reading the EN pin position.
nucleosam 1:5cc2691ccfff 505 * @param None.
nucleosam 1:5cc2691ccfff 506 * @retval One if the EN pin is low (the device is disabled or/and
nucleosam 1:5cc2691ccfff 507 * has an alarm flag set), otherwise zero.
nucleosam 1:5cc2691ccfff 508 */
nucleosam 1:5cc2691ccfff 509 virtual unsigned int CheckStatusHw(void)
nucleosam 1:5cc2691ccfff 510 {
nucleosam 1:5cc2691ccfff 511 if (!flag_and_enable.read()) return 0x01;
nucleosam 1:5cc2691ccfff 512 else return 0x00;
nucleosam 1:5cc2691ccfff 513 }
nucleosam 1:5cc2691ccfff 514
nucleosam 1:5cc2691ccfff 515 /**
nucleosam 1:5cc2691ccfff 516 * @brief Disabling the device.
nucleosam 1:5cc2691ccfff 517 * @param None.
nucleosam 1:5cc2691ccfff 518 * @retval None.
nucleosam 1:5cc2691ccfff 519 */
nucleosam 1:5cc2691ccfff 520 virtual void Disable(void)
nucleosam 1:5cc2691ccfff 521 {
nucleosam 1:5cc2691ccfff 522 L6208_Disable();
nucleosam 1:5cc2691ccfff 523 }
nucleosam 1:5cc2691ccfff 524
nucleosam 1:5cc2691ccfff 525 /**
nucleosam 1:5cc2691ccfff 526 * @brief Enabling the device.
nucleosam 1:5cc2691ccfff 527 * @param None.
nucleosam 1:5cc2691ccfff 528 * @retval None.
nucleosam 1:5cc2691ccfff 529 */
nucleosam 1:5cc2691ccfff 530 virtual void Enable(void)
nucleosam 1:5cc2691ccfff 531 {
nucleosam 1:5cc2691ccfff 532 L6208_Enable();
nucleosam 1:5cc2691ccfff 533 }
nucleosam 1:5cc2691ccfff 534
nucleosam 1:5cc2691ccfff 535 /**
nucleosam 1:5cc2691ccfff 536 * @brief Getting the motor decay mode.
nucleosam 1:5cc2691ccfff 537 * @param None.
nucleosam 1:5cc2691ccfff 538 * @retval The motor decay mode.
nucleosam 1:5cc2691ccfff 539 */
nucleosam 1:5cc2691ccfff 540 virtual motorDecayMode_t GetDecayMode()
nucleosam 1:5cc2691ccfff 541 {
nucleosam 1:5cc2691ccfff 542 return L6208_GetDecayMode();
nucleosam 1:5cc2691ccfff 543 }
nucleosam 1:5cc2691ccfff 544
nucleosam 1:5cc2691ccfff 545 /**
nucleosam 1:5cc2691ccfff 546 * @brief Set the frequency of the VREFA and VREFB PWM
nucleosam 1:5cc2691ccfff 547 * @param frequency in Hz
nucleosam 1:5cc2691ccfff 548 * @retval None.
nucleosam 1:5cc2691ccfff 549 */
nucleosam 1:5cc2691ccfff 550 virtual uint32_t GetFreqVrefPwm(void)
nucleosam 1:5cc2691ccfff 551 {
nucleosam 1:5cc2691ccfff 552 return L6208_VrefPwmGetFreq();
nucleosam 1:5cc2691ccfff 553 }
nucleosam 1:5cc2691ccfff 554
nucleosam 1:5cc2691ccfff 555 /**
nucleosam 1:5cc2691ccfff 556 * @brief Getting the version of the firmware.
nucleosam 1:5cc2691ccfff 557 * @param None.
nucleosam 1:5cc2691ccfff 558 * @retval The version of the firmware.
nucleosam 1:5cc2691ccfff 559 */
nucleosam 1:5cc2691ccfff 560 virtual unsigned int GetFwVersion(void)
nucleosam 1:5cc2691ccfff 561 {
nucleosam 1:5cc2691ccfff 562 return (unsigned int) L6208_GetFwVersion();
nucleosam 1:5cc2691ccfff 563 }
nucleosam 1:5cc2691ccfff 564
nucleosam 1:5cc2691ccfff 565 /**
nucleosam 1:5cc2691ccfff 566 * @brief Getting the motor step mode.
nucleosam 1:5cc2691ccfff 567 * @param None.
nucleosam 1:5cc2691ccfff 568 * @retval The motor step mode.
nucleosam 1:5cc2691ccfff 569 */
nucleosam 1:5cc2691ccfff 570 virtual step_mode_t GetStepMode(void)
nucleosam 1:5cc2691ccfff 571 {
nucleosam 1:5cc2691ccfff 572 return (step_mode_t) L6208_GetStepMode();
nucleosam 1:5cc2691ccfff 573 }
nucleosam 1:5cc2691ccfff 574
nucleosam 1:5cc2691ccfff 575 /**
nucleosam 1:5cc2691ccfff 576 * @brief Getting the motor stop mode.
nucleosam 1:5cc2691ccfff 577 * @param None.
nucleosam 1:5cc2691ccfff 578 * @retval The motor stop mode.
nucleosam 1:5cc2691ccfff 579 */
nucleosam 1:5cc2691ccfff 580 virtual motorStopMode_t GetStopMode(void)
nucleosam 1:5cc2691ccfff 581 {
nucleosam 1:5cc2691ccfff 582 return L6208_GetStopMode();
nucleosam 1:5cc2691ccfff 583 }
nucleosam 1:5cc2691ccfff 584
nucleosam 1:5cc2691ccfff 585 /**
nucleosam 1:5cc2691ccfff 586 * @brief Going to a specified position with a specificied direction.
nucleosam 1:5cc2691ccfff 587 * @param direction The desired direction.
nucleosam 1:5cc2691ccfff 588 * @param position The desired position.
nucleosam 1:5cc2691ccfff 589 * @retval None.
nucleosam 1:5cc2691ccfff 590 */
nucleosam 1:5cc2691ccfff 591 virtual void GoTo(direction_t direction, signed int position)
nucleosam 1:5cc2691ccfff 592 {
nucleosam 1:5cc2691ccfff 593 L6208_GoToDir((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD),(int32_t)position);
nucleosam 1:5cc2691ccfff 594 }
nucleosam 1:5cc2691ccfff 595
nucleosam 1:5cc2691ccfff 596 /**
nucleosam 1:5cc2691ccfff 597 * @brief Release the L6208 reset (Reset pin set to high level).
nucleosam 1:5cc2691ccfff 598 * @param None.
nucleosam 1:5cc2691ccfff 599 * @retval None.
nucleosam 1:5cc2691ccfff 600 */
nucleosam 1:5cc2691ccfff 601 virtual void ReleaseReset(void)
nucleosam 1:5cc2691ccfff 602 {
nucleosam 1:5cc2691ccfff 603 L6208_ReleaseReset();
nucleosam 1:5cc2691ccfff 604 }
nucleosam 1:5cc2691ccfff 605
nucleosam 1:5cc2691ccfff 606 /**
nucleosam 1:5cc2691ccfff 607 * @brief Reset the device with current step mode, resets current speed,
nucleosam 1:5cc2691ccfff 608 * positions and microstep variables.
nucleosam 1:5cc2691ccfff 609 * @param None.
nucleosam 1:5cc2691ccfff 610 * @retval None.
nucleosam 1:5cc2691ccfff 611 */
nucleosam 1:5cc2691ccfff 612 virtual void Reset(void)
nucleosam 1:5cc2691ccfff 613 {
nucleosam 1:5cc2691ccfff 614 L6208_Reset();
nucleosam 1:5cc2691ccfff 615 }
nucleosam 1:5cc2691ccfff 616
nucleosam 1:5cc2691ccfff 617 /**
nucleosam 1:5cc2691ccfff 618 * @brief Reset the L6208 (Reset pin set to low level).
nucleosam 1:5cc2691ccfff 619 * @param None.
nucleosam 1:5cc2691ccfff 620 * @retval None.
nucleosam 1:5cc2691ccfff 621 */
nucleosam 1:5cc2691ccfff 622 virtual void ResetDevice(void)
nucleosam 1:5cc2691ccfff 623 {
nucleosam 1:5cc2691ccfff 624 L6208_ResetDevice();
nucleosam 1:5cc2691ccfff 625 }
nucleosam 1:5cc2691ccfff 626
nucleosam 1:5cc2691ccfff 627 /**
nucleosam 1:5cc2691ccfff 628 * @brief Set the motor decay mode.
nucleosam 1:5cc2691ccfff 629 * @param decayMode The desired decay mode (SLOW_DECAY or FAST_DECAY).
nucleosam 1:5cc2691ccfff 630 * @retval None.
nucleosam 1:5cc2691ccfff 631 */
nucleosam 1:5cc2691ccfff 632 virtual void SetDecayMode(motorDecayMode_t decayMode)
nucleosam 1:5cc2691ccfff 633 {
nucleosam 1:5cc2691ccfff 634 L6208_SetDecayMode(decayMode);
nucleosam 1:5cc2691ccfff 635 }
nucleosam 1:5cc2691ccfff 636
nucleosam 1:5cc2691ccfff 637 /**
nucleosam 1:5cc2691ccfff 638 * @brief Set the motor direction.
nucleosam 1:5cc2691ccfff 639 * @param direction The desired direction.
nucleosam 1:5cc2691ccfff 640 * @retval None.
nucleosam 1:5cc2691ccfff 641 */
nucleosam 1:5cc2691ccfff 642 virtual void SetDirection(direction_t direction)
nucleosam 1:5cc2691ccfff 643 {
nucleosam 1:5cc2691ccfff 644 L6208_SetDirection((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
nucleosam 1:5cc2691ccfff 645 }
nucleosam 1:5cc2691ccfff 646
nucleosam 1:5cc2691ccfff 647 /**
nucleosam 1:5cc2691ccfff 648 * @brief Set the frequency of the VREFA and VREFB PWM
nucleosam 1:5cc2691ccfff 649 * @param frequency in Hz
nucleosam 1:5cc2691ccfff 650 * @retval None.
nucleosam 1:5cc2691ccfff 651 */
nucleosam 1:5cc2691ccfff 652 virtual void SetFreqVrefPwm(uint32_t frequency)
nucleosam 1:5cc2691ccfff 653 {
nucleosam 1:5cc2691ccfff 654 L6208_VrefPwmSetFreq(frequency);
nucleosam 1:5cc2691ccfff 655 }
nucleosam 1:5cc2691ccfff 656
nucleosam 1:5cc2691ccfff 657 /**
nucleosam 1:5cc2691ccfff 658 * @brief Set the motor stop mode.
nucleosam 1:5cc2691ccfff 659 * @param stopMode The desired stop mode (HOLD_MODE or HIZ_MODE).
nucleosam 1:5cc2691ccfff 660 * @retval None.
nucleosam 1:5cc2691ccfff 661 */
nucleosam 1:5cc2691ccfff 662 virtual void SetStopMode(motorStopMode_t stopMode)
nucleosam 1:5cc2691ccfff 663 {
nucleosam 1:5cc2691ccfff 664 L6208_SetStopMode(stopMode);
nucleosam 1:5cc2691ccfff 665 }
nucleosam 1:5cc2691ccfff 666
nucleosam 1:5cc2691ccfff 667 /*** Public Interrupt Related Methods ***/
nucleosam 1:5cc2691ccfff 668
nucleosam 1:5cc2691ccfff 669 /* ACTION 6 --------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 670 * Implement here interrupt related methods, if any. *
nucleosam 1:5cc2691ccfff 671 * Note that interrupt handling is platform dependent, e.g.: *
nucleosam 1:5cc2691ccfff 672 * + mbed: *
nucleosam 1:5cc2691ccfff 673 * InterruptIn feature_irq(pin); //Interrupt object. *
nucleosam 1:5cc2691ccfff 674 * feature_irq.rise(callback); //Attach a callback. *
nucleosam 1:5cc2691ccfff 675 * feature_irq.mode(PullNone); //Set interrupt mode. *
nucleosam 1:5cc2691ccfff 676 * feature_irq.enable_irq(); //Enable interrupt. *
nucleosam 1:5cc2691ccfff 677 * feature_irq.disable_irq(); //Disable interrupt. *
nucleosam 1:5cc2691ccfff 678 * + Arduino: *
nucleosam 1:5cc2691ccfff 679 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
nucleosam 1:5cc2691ccfff 680 * detachInterrupt(pin); //Detach a callback. *
nucleosam 1:5cc2691ccfff 681 * *
nucleosam 1:5cc2691ccfff 682 * Example (mbed): *
nucleosam 1:5cc2691ccfff 683 * void AttachFeatureIRQ(void (*fptr) (void)) *
nucleosam 1:5cc2691ccfff 684 * { *
nucleosam 1:5cc2691ccfff 685 * feature_irq.rise(fptr); *
nucleosam 1:5cc2691ccfff 686 * } *
nucleosam 1:5cc2691ccfff 687 * *
nucleosam 1:5cc2691ccfff 688 * void EnableFeatureIRQ(void) *
nucleosam 1:5cc2691ccfff 689 * { *
nucleosam 1:5cc2691ccfff 690 * feature_irq.enable_irq(); *
nucleosam 1:5cc2691ccfff 691 * } *
nucleosam 1:5cc2691ccfff 692 * *
nucleosam 1:5cc2691ccfff 693 * void DisableFeatureIRQ(void) *
nucleosam 1:5cc2691ccfff 694 * { *
nucleosam 1:5cc2691ccfff 695 * feature_irq.disable_irq(); *
nucleosam 1:5cc2691ccfff 696 * } *
nucleosam 1:5cc2691ccfff 697 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 698 /**
nucleosam 1:5cc2691ccfff 699 * @brief Attaching an interrupt handler to the FLAG interrupt.
nucleosam 1:5cc2691ccfff 700 * @param fptr An interrupt handler.
nucleosam 1:5cc2691ccfff 701 * @retval None.
nucleosam 1:5cc2691ccfff 702 */
nucleosam 1:5cc2691ccfff 703
nucleosam 1:5cc2691ccfff 704 void AttachFlagIRQ(void (*fptr)(void))
nucleosam 1:5cc2691ccfff 705 {
nucleosam 1:5cc2691ccfff 706 flag_and_enable.mode(PullDown);
nucleosam 1:5cc2691ccfff 707 flag_and_enable.fall(fptr);
nucleosam 1:5cc2691ccfff 708 }
nucleosam 1:5cc2691ccfff 709
nucleosam 1:5cc2691ccfff 710 /**
nucleosam 1:5cc2691ccfff 711 * @brief Enabling the FLAG interrupt handling.
nucleosam 1:5cc2691ccfff 712 * @param None.
nucleosam 1:5cc2691ccfff 713 * @retval None.
nucleosam 1:5cc2691ccfff 714 */
nucleosam 1:5cc2691ccfff 715 void EnableFlagIRQ(void)
nucleosam 1:5cc2691ccfff 716 {
nucleosam 1:5cc2691ccfff 717 flag_and_enable.enable_irq();
nucleosam 1:5cc2691ccfff 718 }
nucleosam 1:5cc2691ccfff 719
nucleosam 1:5cc2691ccfff 720 protected:
nucleosam 1:5cc2691ccfff 721
nucleosam 1:5cc2691ccfff 722 /*** Protected Component Related Methods ***/
nucleosam 1:5cc2691ccfff 723
nucleosam 1:5cc2691ccfff 724 /* ACTION 7 --------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 725 * Declare here the component's specific methods. *
nucleosam 1:5cc2691ccfff 726 * They should be: *
nucleosam 1:5cc2691ccfff 727 * + Methods with the same name of the C component's virtual table's *
nucleosam 1:5cc2691ccfff 728 * functions (1); *
nucleosam 1:5cc2691ccfff 729 * + Methods with the same name of the C component's extended virtual *
nucleosam 1:5cc2691ccfff 730 * table's functions, if any (2); *
nucleosam 1:5cc2691ccfff 731 * + Helper methods, if any, like functions declared in the component's *
nucleosam 1:5cc2691ccfff 732 * source files but not pointed by the component's virtual table (3). *
nucleosam 1:5cc2691ccfff 733 * *
nucleosam 1:5cc2691ccfff 734 * Example: *
nucleosam 1:5cc2691ccfff 735 * Status_t COMPONENT_GetValue(float *f); //(1) *
nucleosam 1:5cc2691ccfff 736 * Status_t COMPONENT_EnableFeature(void); //(2) *
nucleosam 1:5cc2691ccfff 737 * Status_t COMPONENT_ComputeAverage(void); //(3) *
nucleosam 1:5cc2691ccfff 738 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 739 Status_t L6208_Init(void *init);
nucleosam 1:5cc2691ccfff 740 Status_t L6208_ReadID(uint8_t *id);
nucleosam 1:5cc2691ccfff 741 void L6208_AttachErrorHandler(void (*callback)(uint16_t error));
nucleosam 1:5cc2691ccfff 742 void L6208_Disable(void);
nucleosam 1:5cc2691ccfff 743 void L6208_ErrorHandler(uint16_t error);
nucleosam 1:5cc2691ccfff 744 void L6208_Enable(void);
nucleosam 1:5cc2691ccfff 745 uint16_t L6208_GetAcceleration(void);
nucleosam 1:5cc2691ccfff 746 uint16_t L6208_GetCurrentSpeed(void);
nucleosam 1:5cc2691ccfff 747 uint16_t L6208_GetDeceleration(void);
nucleosam 1:5cc2691ccfff 748 motorDecayMode_t L6208_GetDecayMode(void);
nucleosam 1:5cc2691ccfff 749 motorDir_t L6208_GetDirection(void);
nucleosam 1:5cc2691ccfff 750 uint32_t L6208_GetFwVersion(void);
nucleosam 1:5cc2691ccfff 751 int32_t L6208_GetMark(void);
nucleosam 1:5cc2691ccfff 752 uint16_t L6208_GetMaxSpeed(void);
nucleosam 1:5cc2691ccfff 753 uint16_t L6208_GetMinSpeed(void);
nucleosam 1:5cc2691ccfff 754 motorState_t L6208_GetMotionState(void);
nucleosam 1:5cc2691ccfff 755 int32_t L6208_GetPosition(void);
nucleosam 1:5cc2691ccfff 756 motorStepMode_t L6208_GetStepMode(void);
nucleosam 1:5cc2691ccfff 757 motorStopMode_t L6208_GetStopMode(void);
nucleosam 1:5cc2691ccfff 758 void L6208_GoHome(void);
nucleosam 1:5cc2691ccfff 759 void L6208_GoMark(void);
nucleosam 1:5cc2691ccfff 760 void L6208_GoTo(int32_t targetPosition);
nucleosam 1:5cc2691ccfff 761 void L6208_GoToDir(motorDir_t direction, int32_t targetPosition);
nucleosam 1:5cc2691ccfff 762 void L6208_HardHiZ(void);
nucleosam 1:5cc2691ccfff 763 void L6208_HardStop(void);
nucleosam 1:5cc2691ccfff 764 void L6208_Move(motorDir_t direction, uint32_t stepCount);
nucleosam 1:5cc2691ccfff 765 void L6208_ReleaseReset(void);
nucleosam 1:5cc2691ccfff 766 void L6208_Reset(void);
nucleosam 1:5cc2691ccfff 767 void L6208_ResetDevice(void);
nucleosam 1:5cc2691ccfff 768 void L6208_Run(motorDir_t direction);
nucleosam 1:5cc2691ccfff 769 bool L6208_SetAcceleration(uint16_t newAcc);
nucleosam 1:5cc2691ccfff 770 void L6208_SetDecayMode(motorDecayMode_t decayMode);
nucleosam 1:5cc2691ccfff 771 bool L6208_SetDeceleration(uint16_t newDec);
nucleosam 1:5cc2691ccfff 772 void L6208_SetDirection(motorDir_t direction);
nucleosam 1:5cc2691ccfff 773 void L6208_SetHome(void);
nucleosam 1:5cc2691ccfff 774 void L6208_SetMark(void);
nucleosam 1:5cc2691ccfff 775 bool L6208_SetMaxSpeed(uint16_t volatile newSpeed);
nucleosam 1:5cc2691ccfff 776 bool L6208_SetMinSpeed(uint16_t volatile newSpeed);
nucleosam 1:5cc2691ccfff 777 bool L6208_SetStepMode(motorStepMode_t stepMode);
nucleosam 1:5cc2691ccfff 778 void L6208_SetStopMode(motorStopMode_t stopMode);
nucleosam 1:5cc2691ccfff 779 bool L6208_SoftStop(void);
nucleosam 1:5cc2691ccfff 780 void L6208_TickHandler(void);
nucleosam 1:5cc2691ccfff 781 uint32_t L6208_VrefPwmGetFreq(void);
nucleosam 1:5cc2691ccfff 782 void L6208_VrefPwmSetFreq(uint32_t newFreq);
nucleosam 1:5cc2691ccfff 783 void L6208_WaitWhileActive(void);
nucleosam 1:5cc2691ccfff 784
nucleosam 2:2af31245e67e 785 /*** Functions intended to be used only internally ***/
nucleosam 2:2af31245e67e 786
nucleosam 2:2af31245e67e 787 void L6208_ClearSysFlag(uint32_t mask);
nucleosam 2:2af31245e67e 788 uint32_t L6208_ComputeNbAccOrDecSteps(uint16_t accOrDecRate);
nucleosam 2:2af31245e67e 789 uint16_t L6208_ConvertAcceDecelRateValue(uint16_t newAccOrDecRate);
nucleosam 2:2af31245e67e 790 void L6208_DoAccel(void);
nucleosam 2:2af31245e67e 791 void L6208_DoDecel(void);
nucleosam 2:2af31245e67e 792 void L6208_DoRun(void);
nucleosam 2:2af31245e67e 793 uint8_t L6208_GetMicrostepSample2Scale(void);
nucleosam 2:2af31245e67e 794 void L6208_Indexmodeinit(void);
nucleosam 2:2af31245e67e 795 bool L6208_IsSysFlag(uint32_t mask);
nucleosam 2:2af31245e67e 796 void L6208_ResetSteps(void);
nucleosam 2:2af31245e67e 797 uint32_t L6208_ScaleWaveformSample(uint8_t sampleIndex);
nucleosam 2:2af31245e67e 798 void L6208_ScaleWaveformTable(void);
nucleosam 2:2af31245e67e 799 void L6208_SetDeviceParamsToGivenValues(l6208_Init_t* pInitDevicePrm);
nucleosam 2:2af31245e67e 800 void L6208_SetDeviceParamsToPredefinedValues(void);
nucleosam 2:2af31245e67e 801 void L6208_SetMicrostepSample2Scale(uint8_t value);
nucleosam 2:2af31245e67e 802 void L6208_SetMicrostepSample2Update(uint8_t value);
nucleosam 2:2af31245e67e 803 void L6208_SetMotionState(motorState_t newMotionState);
nucleosam 2:2af31245e67e 804 bool L6208_SetSpeed(uint16_t newSpeed, uint32_t volatile *pSpeed);
nucleosam 2:2af31245e67e 805 void L6208_SetSysFlag(uint32_t mask);
nucleosam 2:2af31245e67e 806 bool L6208_StartMovement(void);
nucleosam 2:2af31245e67e 807 void L6208_UpdateScanWaveformTable(void);
nucleosam 2:2af31245e67e 808 void L6208_UstepWaveformHandling(void);
nucleosam 2:2af31245e67e 809 bool L6208_VectorCalc(uint8_t newTorque);
nucleosam 2:2af31245e67e 810 bool L6208_VrefPwmComputePulseWidth(uint8_t bridgeId, uint16_t value, bool valueIsPwmDutyCycle);
nucleosam 2:2af31245e67e 811 void L6208_VrefPwmUpdatePulseWidth(void);
nucleosam 2:2af31245e67e 812
nucleosam 1:5cc2691ccfff 813 /*** Component's I/O Methods ***/
nucleosam 1:5cc2691ccfff 814
nucleosam 1:5cc2691ccfff 815 /* ACTION 8 --------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 816 * Implement here other I/O methods beyond those already implemented *
nucleosam 1:5cc2691ccfff 817 * above, which are declared extern within the component's header file. *
nucleosam 1:5cc2691ccfff 818 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 819 /**
nucleosam 1:5cc2691ccfff 820 * @brief Reset the clock pin.
nucleosam 1:5cc2691ccfff 821 * @param None.
nucleosam 1:5cc2691ccfff 822 * @retval None.
nucleosam 1:5cc2691ccfff 823 */
nucleosam 1:5cc2691ccfff 824 void L6208_Board_CLOCK_PIN_Reset(void)
nucleosam 1:5cc2691ccfff 825 {
nucleosam 1:5cc2691ccfff 826 clock = 0;
nucleosam 1:5cc2691ccfff 827 }
nucleosam 1:5cc2691ccfff 828 /**
nucleosam 1:5cc2691ccfff 829 * @brief Set the clock pin.
nucleosam 1:5cc2691ccfff 830 * @param None.
nucleosam 1:5cc2691ccfff 831 * @retval None.
nucleosam 1:5cc2691ccfff 832 */
nucleosam 1:5cc2691ccfff 833 void L6208_Board_CLOCK_PIN_Set(void)
nucleosam 1:5cc2691ccfff 834 {
nucleosam 1:5cc2691ccfff 835 clock = 1;
nucleosam 1:5cc2691ccfff 836 }
nucleosam 1:5cc2691ccfff 837
nucleosam 1:5cc2691ccfff 838 /**
nucleosam 1:5cc2691ccfff 839 * @brief Set the control pin.
nucleosam 1:5cc2691ccfff 840 * @param None.
nucleosam 1:5cc2691ccfff 841 * @retval None.
nucleosam 1:5cc2691ccfff 842 */
nucleosam 1:5cc2691ccfff 843 void L6208_Board_CONTROL_PIN_Set(void)
nucleosam 1:5cc2691ccfff 844 {
nucleosam 1:5cc2691ccfff 845 control = 1;
nucleosam 1:5cc2691ccfff 846 }
nucleosam 1:5cc2691ccfff 847
nucleosam 1:5cc2691ccfff 848 /**
nucleosam 1:5cc2691ccfff 849 * @brief Reset the control pin.
nucleosam 1:5cc2691ccfff 850 * @param None.
nucleosam 1:5cc2691ccfff 851 * @retval None.
nucleosam 1:5cc2691ccfff 852 */
nucleosam 1:5cc2691ccfff 853 void L6208_Board_CONTROL_PIN_Reset(void)
nucleosam 1:5cc2691ccfff 854 {
nucleosam 1:5cc2691ccfff 855 control = 0;
nucleosam 1:5cc2691ccfff 856 }
nucleosam 1:5cc2691ccfff 857
nucleosam 1:5cc2691ccfff 858 /**
nucleosam 1:5cc2691ccfff 859 * @brief Making the CPU wait.
nucleosam 1:5cc2691ccfff 860 * @param None.
nucleosam 1:5cc2691ccfff 861 * @retval None.
nucleosam 1:5cc2691ccfff 862 */
nucleosam 1:5cc2691ccfff 863 void L6208_Board_Delay(uint32_t delay)
nucleosam 1:5cc2691ccfff 864 {
nucleosam 1:5cc2691ccfff 865 wait_ms(delay);
nucleosam 1:5cc2691ccfff 866 }
nucleosam 1:5cc2691ccfff 867
nucleosam 1:5cc2691ccfff 868 /**
nucleosam 1:5cc2691ccfff 869 * @brief Reset the dir pin.
nucleosam 1:5cc2691ccfff 870 * @param None.
nucleosam 1:5cc2691ccfff 871 * @retval None.
nucleosam 1:5cc2691ccfff 872 */
nucleosam 1:5cc2691ccfff 873 void L6208_Board_DIR_PIN_Reset(void)
nucleosam 1:5cc2691ccfff 874 {
nucleosam 1:5cc2691ccfff 875 direction = 0;
nucleosam 1:5cc2691ccfff 876 }
nucleosam 1:5cc2691ccfff 877
nucleosam 1:5cc2691ccfff 878 /**
nucleosam 1:5cc2691ccfff 879 * @brief Set the dir pin.
nucleosam 1:5cc2691ccfff 880 * @param None.
nucleosam 1:5cc2691ccfff 881 * @retval None.
nucleosam 1:5cc2691ccfff 882 */
nucleosam 1:5cc2691ccfff 883 void L6208_Board_DIR_PIN_Set(void)
nucleosam 1:5cc2691ccfff 884 {
nucleosam 1:5cc2691ccfff 885 direction = 1;
nucleosam 1:5cc2691ccfff 886 }
nucleosam 1:5cc2691ccfff 887
nucleosam 1:5cc2691ccfff 888 /**
nucleosam 1:5cc2691ccfff 889 * @brief Disable the power bridges (leave the output bridges HiZ).
nucleosam 1:5cc2691ccfff 890 * @param None.
nucleosam 1:5cc2691ccfff 891 * @retval None.
nucleosam 1:5cc2691ccfff 892 */
nucleosam 1:5cc2691ccfff 893 void L6208_Board_Disable(void)
nucleosam 1:5cc2691ccfff 894 {
nucleosam 1:5cc2691ccfff 895 flag_and_enable.disable_irq();
nucleosam 1:5cc2691ccfff 896 flag_and_enable.mode(PullDown);
nucleosam 1:5cc2691ccfff 897 }
nucleosam 1:5cc2691ccfff 898
nucleosam 1:5cc2691ccfff 899 /**
nucleosam 1:5cc2691ccfff 900 * @brief Disabling interrupts.
nucleosam 1:5cc2691ccfff 901 * @param None.
nucleosam 1:5cc2691ccfff 902 * @retval None.
nucleosam 1:5cc2691ccfff 903 */
nucleosam 1:5cc2691ccfff 904 void L6208_Board_DisableIrq(void)
nucleosam 1:5cc2691ccfff 905 {
nucleosam 1:5cc2691ccfff 906 __disable_irq();
nucleosam 1:5cc2691ccfff 907 }
nucleosam 1:5cc2691ccfff 908
nucleosam 1:5cc2691ccfff 909 /**
nucleosam 1:5cc2691ccfff 910 * @brief Enable the power bridges (leave the output bridges HiZ).
nucleosam 1:5cc2691ccfff 911 * @param None.
nucleosam 1:5cc2691ccfff 912 * @retval None.
nucleosam 1:5cc2691ccfff 913 */
nucleosam 1:5cc2691ccfff 914 void L6208_Board_Enable(void)
nucleosam 1:5cc2691ccfff 915 {
nucleosam 1:5cc2691ccfff 916 flag_and_enable.mode(PullUp);
nucleosam 1:5cc2691ccfff 917 flag_and_enable.enable_irq();
nucleosam 1:5cc2691ccfff 918 }
nucleosam 1:5cc2691ccfff 919
nucleosam 1:5cc2691ccfff 920 /**
nucleosam 1:5cc2691ccfff 921 * @brief Enabling interrupts.
nucleosam 1:5cc2691ccfff 922 * @param None.
nucleosam 1:5cc2691ccfff 923 * @retval None.
nucleosam 1:5cc2691ccfff 924 */
nucleosam 1:5cc2691ccfff 925 void L6208_Board_EnableIrq(void)
nucleosam 1:5cc2691ccfff 926 {
nucleosam 1:5cc2691ccfff 927 __enable_irq();
nucleosam 1:5cc2691ccfff 928 }
nucleosam 1:5cc2691ccfff 929
nucleosam 1:5cc2691ccfff 930 /**
nucleosam 1:5cc2691ccfff 931 * @brief Reset the half full pin.
nucleosam 1:5cc2691ccfff 932 * @param None.
nucleosam 1:5cc2691ccfff 933 * @retval None.
nucleosam 1:5cc2691ccfff 934 */
nucleosam 1:5cc2691ccfff 935 void L6208_Board_HALF_FULL_PIN_Reset(void)
nucleosam 1:5cc2691ccfff 936 {
nucleosam 1:5cc2691ccfff 937 half_full = 0;
nucleosam 1:5cc2691ccfff 938 }
nucleosam 1:5cc2691ccfff 939
nucleosam 1:5cc2691ccfff 940 /**
nucleosam 1:5cc2691ccfff 941 * @brief Set the half full pin.
nucleosam 1:5cc2691ccfff 942 * @param None.
nucleosam 1:5cc2691ccfff 943 * @retval None.
nucleosam 1:5cc2691ccfff 944 */
nucleosam 1:5cc2691ccfff 945 void L6208_Board_HALF_FULL_PIN_Set(void)
nucleosam 1:5cc2691ccfff 946 {
nucleosam 1:5cc2691ccfff 947 half_full = 1;
nucleosam 1:5cc2691ccfff 948 }
nucleosam 1:5cc2691ccfff 949
nucleosam 1:5cc2691ccfff 950 /**
nucleosam 1:5cc2691ccfff 951 * @brief Initialising the the VREFA or VREFB PWM.
nucleosam 1:5cc2691ccfff 952 * @param None.
nucleosam 1:5cc2691ccfff 953 * @retval None.
nucleosam 1:5cc2691ccfff 954 */
nucleosam 1:5cc2691ccfff 955 void L6208_Board_VrefPwmInit(uint8_t bridgeId, uint32_t pwmFreq) {}
nucleosam 1:5cc2691ccfff 956
nucleosam 1:5cc2691ccfff 957 /**
nucleosam 1:5cc2691ccfff 958 * @brief Exit the device from reset mode.
nucleosam 1:5cc2691ccfff 959 * @param None.
nucleosam 1:5cc2691ccfff 960 * @retval None.
nucleosam 1:5cc2691ccfff 961 */
nucleosam 1:5cc2691ccfff 962 void L6208_Board_ReleaseReset(void)
nucleosam 1:5cc2691ccfff 963 {
nucleosam 1:5cc2691ccfff 964 reset = 1;
nucleosam 1:5cc2691ccfff 965 }
nucleosam 1:5cc2691ccfff 966
nucleosam 1:5cc2691ccfff 967 /**
nucleosam 1:5cc2691ccfff 968 * @brief Put the device in reset mode.
nucleosam 1:5cc2691ccfff 969 * @param None.
nucleosam 1:5cc2691ccfff 970 * @retval None.
nucleosam 1:5cc2691ccfff 971 */
nucleosam 1:5cc2691ccfff 972 void L6208_Board_Reset(void)
nucleosam 1:5cc2691ccfff 973 {
nucleosam 1:5cc2691ccfff 974 reset = 0;
nucleosam 1:5cc2691ccfff 975 }
nucleosam 1:5cc2691ccfff 976
nucleosam 1:5cc2691ccfff 977 /**
nucleosam 1:5cc2691ccfff 978 * @brief Get the tick timer frequency in Hz.
nucleosam 1:5cc2691ccfff 979 * @param None.
nucleosam 1:5cc2691ccfff 980 * @retval The tick timer frequency in Hz.
nucleosam 1:5cc2691ccfff 981 */
nucleosam 1:5cc2691ccfff 982 uint32_t L6208_Board_TickGetFreq(void)
nucleosam 1:5cc2691ccfff 983 {
nucleosam 1:5cc2691ccfff 984 return TIMER_TICK_FREQUENCY;
nucleosam 1:5cc2691ccfff 985 }
nucleosam 1:5cc2691ccfff 986
nucleosam 1:5cc2691ccfff 987 /**
nucleosam 1:5cc2691ccfff 988 * @brief Initialising the tick.
nucleosam 1:5cc2691ccfff 989 * @param None.
nucleosam 1:5cc2691ccfff 990 * @retval None.
nucleosam 1:5cc2691ccfff 991 */
nucleosam 1:5cc2691ccfff 992 void L6208_Board_TickInit(void) {}
nucleosam 1:5cc2691ccfff 993
nucleosam 1:5cc2691ccfff 994 /**
nucleosam 1:5cc2691ccfff 995 * @brief Starting the tick timer, setting its frequency
nucleosam 1:5cc2691ccfff 996 * and attaching a tick handler function to it.
nucleosam 1:5cc2691ccfff 997 * @param frequency the frequency of the tick.
nucleosam 1:5cc2691ccfff 998 * @retval None.
nucleosam 1:5cc2691ccfff 999 */
nucleosam 1:5cc2691ccfff 1000 void L6208_Board_TickStart(uint16_t frequency)
nucleosam 1:5cc2691ccfff 1001 {
nucleosam 1:5cc2691ccfff 1002 /* Computing the period of the tick. */
nucleosam 1:5cc2691ccfff 1003 double period = 1.0f / frequency;
nucleosam 1:5cc2691ccfff 1004
nucleosam 1:5cc2691ccfff 1005 /* Attaching a tick handler function which updates */
nucleosam 1:5cc2691ccfff 1006 /* the state machine every elapsed period time. */
nucleosam 1:5cc2691ccfff 1007 ticker.attach(this, &L6208::L6208_TickHandler, period);
nucleosam 1:5cc2691ccfff 1008 }
nucleosam 1:5cc2691ccfff 1009
nucleosam 1:5cc2691ccfff 1010 /**
nucleosam 1:5cc2691ccfff 1011 * @brief Stopping the tick.
nucleosam 1:5cc2691ccfff 1012 * @param None.
nucleosam 1:5cc2691ccfff 1013 * @retval None.
nucleosam 1:5cc2691ccfff 1014 */
nucleosam 1:5cc2691ccfff 1015 void L6208_Board_TickStop(void)
nucleosam 1:5cc2691ccfff 1016 {
nucleosam 1:5cc2691ccfff 1017 ticker.detach();
nucleosam 1:5cc2691ccfff 1018 }
nucleosam 1:5cc2691ccfff 1019
nucleosam 1:5cc2691ccfff 1020 /**
nucleosam 1:5cc2691ccfff 1021 * @brief Set the pulse width of the VREFA PWM.
nucleosam 1:5cc2691ccfff 1022 * @param[in] pulseWidthInUs pulse width of the PWM in microsecond.
nucleosam 1:5cc2691ccfff 1023 * @retval None.
nucleosam 1:5cc2691ccfff 1024 */
nucleosam 1:5cc2691ccfff 1025 void L6208_Board_VrefPwmSetPulseWidthA(uint8_t pulseWidthInUs)
nucleosam 1:5cc2691ccfff 1026 {
nucleosam 1:5cc2691ccfff 1027 vrefA_pwm.pulsewidth_us(pulseWidthInUs);
nucleosam 1:5cc2691ccfff 1028 }
nucleosam 1:5cc2691ccfff 1029
nucleosam 1:5cc2691ccfff 1030 /**
nucleosam 1:5cc2691ccfff 1031 * @brief Set the pulse width of the VREFB PWM.
nucleosam 1:5cc2691ccfff 1032 * @param[in] pulseWidthInUs pulse width of the PWM in microsecond.
nucleosam 1:5cc2691ccfff 1033 * @retval None.
nucleosam 1:5cc2691ccfff 1034 */
nucleosam 1:5cc2691ccfff 1035 void L6208_Board_VrefPwmSetPulseWidthB(uint8_t pulseWidthInUs)
nucleosam 1:5cc2691ccfff 1036 {
nucleosam 1:5cc2691ccfff 1037 vrefB_pwm.pulsewidth_us(pulseWidthInUs);
nucleosam 1:5cc2691ccfff 1038 }
nucleosam 1:5cc2691ccfff 1039
nucleosam 1:5cc2691ccfff 1040 /**
nucleosam 1:5cc2691ccfff 1041 * @brief Start the timer for the VREFA or VREFB PWM.
nucleosam 1:5cc2691ccfff 1042 * @param[in] bridgeId
nucleosam 1:5cc2691ccfff 1043 * 0 for BRIDGE_A
nucleosam 1:5cc2691ccfff 1044 * 1 for BRIDGE_B
nucleosam 1:5cc2691ccfff 1045 * @param[in] pwmPeriod period of the PWM used to generate the reference
nucleosam 1:5cc2691ccfff 1046 * voltage for the bridge.
nucleosam 1:5cc2691ccfff 1047 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 1048 * @note the unit is 1/256th of a microsecond. The VREFA PWM must be started
nucleosam 1:5cc2691ccfff 1049 * before the VREFB PWM.
nucleosam 1:5cc2691ccfff 1050 */
nucleosam 1:5cc2691ccfff 1051 bool L6208_Board_VrefPwmStart(uint8_t bridgeId, uint16_t pwmPeriod)
nucleosam 1:5cc2691ccfff 1052 {
nucleosam 1:5cc2691ccfff 1053 pwmPeriod>>=8;
nucleosam 1:5cc2691ccfff 1054 /* Setting the period and the duty-cycle of PWM. */
nucleosam 1:5cc2691ccfff 1055 if (bridgeId == 0)
nucleosam 1:5cc2691ccfff 1056 {
nucleosam 1:5cc2691ccfff 1057 vrefA_pwm.period_us(pwmPeriod);
nucleosam 1:5cc2691ccfff 1058 }
nucleosam 1:5cc2691ccfff 1059 else if (bridgeId == 1)
nucleosam 1:5cc2691ccfff 1060 {
nucleosam 1:5cc2691ccfff 1061 vrefB_pwm.period_us(pwmPeriod);
nucleosam 1:5cc2691ccfff 1062 }
nucleosam 1:5cc2691ccfff 1063 else return false;
nucleosam 1:5cc2691ccfff 1064 return true;
nucleosam 1:5cc2691ccfff 1065 }
nucleosam 1:5cc2691ccfff 1066
nucleosam 1:5cc2691ccfff 1067 /**
nucleosam 1:5cc2691ccfff 1068 * @brief Stop the timer for the VREFA or VREFB PWM.
nucleosam 1:5cc2691ccfff 1069 * @param[in] bridgeId
nucleosam 1:5cc2691ccfff 1070 * 0 for BRIDGE_A
nucleosam 1:5cc2691ccfff 1071 * 1 for BRIDGE_B
nucleosam 1:5cc2691ccfff 1072 * @retval "true" in case of success, "false" otherwise.
nucleosam 1:5cc2691ccfff 1073 */
nucleosam 1:5cc2691ccfff 1074 bool L6208_Board_VrefPwmStop(uint8_t bridgeId)
nucleosam 1:5cc2691ccfff 1075 {
nucleosam 1:5cc2691ccfff 1076 if (bridgeId == 0)
nucleosam 1:5cc2691ccfff 1077 {
nucleosam 1:5cc2691ccfff 1078 vrefA_pwm.period_us(0);
nucleosam 1:5cc2691ccfff 1079 }
nucleosam 1:5cc2691ccfff 1080 else if (bridgeId == 1)
nucleosam 1:5cc2691ccfff 1081 {
nucleosam 1:5cc2691ccfff 1082 vrefB_pwm.period_us(0);
nucleosam 1:5cc2691ccfff 1083 }
nucleosam 1:5cc2691ccfff 1084 else return false;
nucleosam 1:5cc2691ccfff 1085 return true;
nucleosam 1:5cc2691ccfff 1086 }
nucleosam 1:5cc2691ccfff 1087
nucleosam 1:5cc2691ccfff 1088 protected:
nucleosam 1:5cc2691ccfff 1089
nucleosam 1:5cc2691ccfff 1090 /*** Component's Instance Variables ***/
nucleosam 1:5cc2691ccfff 1091
nucleosam 1:5cc2691ccfff 1092 /* ACTION 9 --------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 1093 * Declare here interrupt related variables, if needed. *
nucleosam 1:5cc2691ccfff 1094 * Note that interrupt handling is platform dependent, see *
nucleosam 1:5cc2691ccfff 1095 * "Interrupt Related Methods" above. *
nucleosam 1:5cc2691ccfff 1096 * *
nucleosam 1:5cc2691ccfff 1097 * Example: *
nucleosam 1:5cc2691ccfff 1098 * + mbed: *
nucleosam 1:5cc2691ccfff 1099 * InterruptIn feature_irq; *
nucleosam 1:5cc2691ccfff 1100 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 1101 /* Flag Interrupt and chip enable. */
nucleosam 1:5cc2691ccfff 1102 InterruptIn flag_and_enable;
nucleosam 1:5cc2691ccfff 1103
nucleosam 1:5cc2691ccfff 1104 /* ACTION 10 -------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 1105 * Declare here other pin related variables, if needed. *
nucleosam 1:5cc2691ccfff 1106 * *
nucleosam 1:5cc2691ccfff 1107 * Example: *
nucleosam 1:5cc2691ccfff 1108 * + mbed: *
nucleosam 1:5cc2691ccfff 1109 * DigitalOut standby_reset; *
nucleosam 1:5cc2691ccfff 1110 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 1111 /* RESET pin. */
nucleosam 1:5cc2691ccfff 1112 DigitalOut reset;
nucleosam 1:5cc2691ccfff 1113 /* CW_CCW pin. */
nucleosam 1:5cc2691ccfff 1114 DigitalOut direction;
nucleosam 1:5cc2691ccfff 1115 /* HALF_FULL pin */
nucleosam 1:5cc2691ccfff 1116 DigitalOut half_full;
nucleosam 1:5cc2691ccfff 1117 /* CONTROL pin */
nucleosam 1:5cc2691ccfff 1118 DigitalOut control;
nucleosam 1:5cc2691ccfff 1119 /* CLOCK pin */
nucleosam 1:5cc2691ccfff 1120 DigitalOut clock;
nucleosam 1:5cc2691ccfff 1121
nucleosam 1:5cc2691ccfff 1122 /* Pulse Width Modulation pin for VREFA pin */
nucleosam 1:5cc2691ccfff 1123 PwmOut vrefA_pwm;
nucleosam 1:5cc2691ccfff 1124 /* Pulse Width Modulation pin for VREFA pin */
nucleosam 1:5cc2691ccfff 1125 PwmOut vrefB_pwm;
nucleosam 1:5cc2691ccfff 1126
nucleosam 1:5cc2691ccfff 1127 /* Timer for the tick */
nucleosam 1:5cc2691ccfff 1128 Ticker ticker;
nucleosam 1:5cc2691ccfff 1129
nucleosam 1:5cc2691ccfff 1130 /* ACTION 11 -------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 1131 * Declare here communication related variables, if needed. *
nucleosam 1:5cc2691ccfff 1132 * *
nucleosam 1:5cc2691ccfff 1133 * Example: *
nucleosam 1:5cc2691ccfff 1134 * + mbed: *
nucleosam 1:5cc2691ccfff 1135 * DigitalOut ssel; *
nucleosam 1:5cc2691ccfff 1136 * DevSPI &dev_spi; *
nucleosam 1:5cc2691ccfff 1137 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 1138 /* Configuration. */
nucleosam 1:5cc2691ccfff 1139
nucleosam 1:5cc2691ccfff 1140 /* IO Device. */
nucleosam 1:5cc2691ccfff 1141
nucleosam 1:5cc2691ccfff 1142 /* ACTION 12 -------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 1143 * Declare here identity related variables, if needed. *
nucleosam 1:5cc2691ccfff 1144 * Note that there should be only a unique identifier for each component, *
nucleosam 1:5cc2691ccfff 1145 * which should be the "who_am_i" parameter. *
nucleosam 1:5cc2691ccfff 1146 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 1147 /* Identity */
nucleosam 1:5cc2691ccfff 1148 uint8_t who_am_i;
nucleosam 1:5cc2691ccfff 1149
nucleosam 1:5cc2691ccfff 1150 /* ACTION 13 -------------------------------------------------------------*
nucleosam 1:5cc2691ccfff 1151 * Declare here the component's static and non-static data, one variable *
nucleosam 1:5cc2691ccfff 1152 * per line. *
nucleosam 1:5cc2691ccfff 1153 * *
nucleosam 1:5cc2691ccfff 1154 * Example: *
nucleosam 1:5cc2691ccfff 1155 * float measure; *
nucleosam 1:5cc2691ccfff 1156 * int instance_id; *
nucleosam 1:5cc2691ccfff 1157 * static int number_of_instances; *
nucleosam 1:5cc2691ccfff 1158 *------------------------------------------------------------------------*/
nucleosam 1:5cc2691ccfff 1159 /* Data. */
nucleosam 1:5cc2691ccfff 1160 void (*errorHandlerCallback)(uint16_t error);
nucleosam 1:5cc2691ccfff 1161 deviceParams_t devicePrm;
nucleosam 1:5cc2691ccfff 1162 uint8_t deviceInstance;
nucleosam 1:5cc2691ccfff 1163 uint32_t tickFreq;
nucleosam 1:5cc2691ccfff 1164 /// microstepping PWM period and torque scaled waveform samples array
nucleosam 1:5cc2691ccfff 1165 uint16_t updatedMicroTable[L6208_USTEPS_PER_QUARTER_PERIOD+1];
nucleosam 1:5cc2691ccfff 1166 /// waveform scanning microstepping PWM period sample arrays for VREFA wave
nucleosam 1:5cc2691ccfff 1167 uint16_t microTable1[L6208_USTEPS_PER_QUARTER_PERIOD*3+1];
nucleosam 1:5cc2691ccfff 1168 /// waveform scanning microstepping PWM period sample array for VREFB wave
nucleosam 1:5cc2691ccfff 1169 uint16_t *pMicroTable2;
nucleosam 1:5cc2691ccfff 1170
nucleosam 1:5cc2691ccfff 1171 /* Static data. */
nucleosam 1:5cc2691ccfff 1172 static uint8_t numberOfDevices;
nucleosam 1:5cc2691ccfff 1173 static const uint16_t RefMicroTable[L6208_USTEPS_PER_QUARTER_PERIOD*3];
nucleosam 1:5cc2691ccfff 1174
nucleosam 1:5cc2691ccfff 1175 public:
nucleosam 1:5cc2691ccfff 1176
nucleosam 1:5cc2691ccfff 1177 /* Static data. */
nucleosam 1:5cc2691ccfff 1178
nucleosam 1:5cc2691ccfff 1179 };
nucleosam 1:5cc2691ccfff 1180
nucleosam 1:5cc2691ccfff 1181 #endif // __L6208_CLASS_H
nucleosam 1:5cc2691ccfff 1182
nucleosam 1:5cc2691ccfff 1183 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/