ST / X-NUCLEO-IHM05A1

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM05A1 TAU_ROTATING_PLATFORM_IHM05A1 Amaldi_13_Exercise_IHM05A1 Amaldi_13_Exercise_IHM05A1motore ... more

Fork of X-NUCLEO-IHM05A1 by ST Expansion SW Team

Motor Control Library

Library to handle the X-NUCLEO-IHM05A1 Motor Control Expansion Board based on the L6208 component.

It features the:

  • Read and write of device parameters
  • Configuration of GPIOs and IRQs (for enabling, direction, current decay and microstepping)
  • Control of position, speed, acceleration and deceleration
  • Command locking until the device completes movement
  • Handling of overcurrent and thermal alarms (flag interrupt handling)

The API allows to easily:

  • perform various positioning, moves and stops
  • get/set or monitor the motor positions
  • set home position and mark another position
  • get/set minimum and maximum speed
  • get current speed
  • get/set acceleration and deceleration
  • get/set the step mode (up to 1/16)

Board configuration

/media/uploads/nucleosam/mbed-x-nucleo-ihm05a1.png

Platform compatibility

Compatible platforms have been tested with the configurations provided by the HelloWorld_IHM05A1 example.

Committer:
davide.aliprandi@st.com
Date:
Fri Mar 24 10:59:42 2017 +0100
Revision:
3:63a8d672fe5e
Parent:
1:5cc2691ccfff
Aligning to ARM mbed coding style.

Who changed what in which revision?

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