Library used to control ST Nucleo Evaluation board IHM04A1, based on L6206 motor control driver.

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM04A1 RoboCane_Motore arm_dcmotor_can arm_linear_can_2 ... more

Fork of X_NUCLEO_IHM04A1 by ST Expansion SW Team

Motor Control Library

Library to handle the X-NUCLEO-IHM04A1 Motor Control Expansion Board based on the L6206 component.

It allows a complete management of the L6206 by providing a complete APIs.

The key features of the library are :

  • Configuration of the L6206 (bridges inputs and enabling signals, bridges paralleling)
  • FLAG interrupts handling (overcurrent and thermal alarms reporting)
  • Handling of up to two bidirectional Brush DC motors or up to 4 unidirectional Brush DC motors depending of the bridges paralleling configuration
  • Nucleo and expansion board configuration (GPIOs, PWMs, IRQs…)

To use the L6206 driver library, the user first has to call its initialization method which:

  • Setups the required GPIOs to handle the bridges enable pins, the FLAG interrupt which reports overcurrent detection or thermal protection.
  • Loads the driver parameters with initial values configured by the user or with their predefined values from “l6206_target_config.h”, in order to program the PWMs frequency of the bridges inputs, the bridges paralleling configuration, the number and the type (bidirectional or unidirectional) of brush DC motors.

Once the initialization is done, the user can modify the driver parameters by calling specific functions to change the bridges paralleling configuration, types and numbers of motors or the PWMs frequency.

The user can also write callback functions and attach them to:

  • The flag interrupt handler depending on the actions he wants to perform when an overcurrent or a thermal alarm is reported.
  • The Error handler which is called by the library when it reports an error.

Then, the user can drive the different brush DC motors by requesting to run in a specified direction and by changing the maximal speed. When a motor is requested to run, the corresponding bridge is automatically enabled.

A motion command can be stopped at any moment:

  • Either by a hard stop which immediately stops the motor.
  • Or by a hardHiz command which immediately stops the motor and disables the bridge which is used by the motor.

The library also provides functions to disable or enable the bridges independently from the run or stop commands.

Arduino Connector Compatibility Warning

Using the X-NUCLEO-IHM04A1 expansion board with the NUCLEO-F429ZI requires adopting the following patch:

  • to connect with a wire the PB_4 Nucleo pin to the IN1A expansion board pin;
  • to connect with a wire the PC_7 Nucleo pin to the IN2A expansion board pin;
  • to connect with a wire the PA_15 Nucleo pin to the IN1B expansion board pin;
  • to connect with a wire the PB_3 Nucleo pin to the IN2B expansion board pin.


Board configuration for HelloWorld_IHM04A1 example

/media/uploads/brdirais/drive4brushdcmotor_ihm04a1.png

Committer:
Davidroid
Date:
Fri Mar 24 13:08:23 2017 +0000
Revision:
5:51ad3c4b904c
Parent:
Components/l6206/l6206.h@4:24158c44f02e
Child:
6:d16ad1d58ea1
Typos corrected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brdirais 0:2cb6ce8e07bd 1 /**
brdirais 0:2cb6ce8e07bd 2 ******************************************************************************
davide.aliprandi@st.com 4:24158c44f02e 3 * @file L6206.h
brdirais 0:2cb6ce8e07bd 4 * @author IPC Rennes
davide.aliprandi@st.com 4:24158c44f02e 5 * @version V1.1.0
davide.aliprandi@st.com 4:24158c44f02e 6 * @date March 02, 2016
davide.aliprandi@st.com 4:24158c44f02e 7 * @brief L6206 driver (dual full bridge driver)
davide.aliprandi@st.com 4:24158c44f02e 8 * @note (C) COPYRIGHT 2015 STMicroelectronics
brdirais 0:2cb6ce8e07bd 9 ******************************************************************************
brdirais 0:2cb6ce8e07bd 10 * @attention
brdirais 0:2cb6ce8e07bd 11 *
davide.aliprandi@st.com 4:24158c44f02e 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
brdirais 0:2cb6ce8e07bd 13 *
brdirais 0:2cb6ce8e07bd 14 * Redistribution and use in source and binary forms, with or without modification,
brdirais 0:2cb6ce8e07bd 15 * are permitted provided that the following conditions are met:
brdirais 0:2cb6ce8e07bd 16 * 1. Redistributions of source code must retain the above copyright notice,
brdirais 0:2cb6ce8e07bd 17 * this list of conditions and the following disclaimer.
brdirais 0:2cb6ce8e07bd 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
brdirais 0:2cb6ce8e07bd 19 * this list of conditions and the following disclaimer in the documentation
brdirais 0:2cb6ce8e07bd 20 * and/or other materials provided with the distribution.
brdirais 0:2cb6ce8e07bd 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
brdirais 0:2cb6ce8e07bd 22 * may be used to endorse or promote products derived from this software
brdirais 0:2cb6ce8e07bd 23 * without specific prior written permission.
brdirais 0:2cb6ce8e07bd 24 *
brdirais 0:2cb6ce8e07bd 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
brdirais 0:2cb6ce8e07bd 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
brdirais 0:2cb6ce8e07bd 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
brdirais 0:2cb6ce8e07bd 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
brdirais 0:2cb6ce8e07bd 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
brdirais 0:2cb6ce8e07bd 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
brdirais 0:2cb6ce8e07bd 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
brdirais 0:2cb6ce8e07bd 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
brdirais 0:2cb6ce8e07bd 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
brdirais 0:2cb6ce8e07bd 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
brdirais 0:2cb6ce8e07bd 35 *
brdirais 0:2cb6ce8e07bd 36 ******************************************************************************
brdirais 0:2cb6ce8e07bd 37 */
brdirais 0:2cb6ce8e07bd 38
davide.aliprandi@st.com 4:24158c44f02e 39
davide.aliprandi@st.com 4:24158c44f02e 40 /* Generated with STM32CubeTOO -----------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 41
brdirais 0:2cb6ce8e07bd 42
davide.aliprandi@st.com 4:24158c44f02e 43 /* Revision ------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 44 /*
davide.aliprandi@st.com 4:24158c44f02e 45 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
davide.aliprandi@st.com 4:24158c44f02e 46 Branch/Trunk/Tag: trunk
davide.aliprandi@st.com 4:24158c44f02e 47 Based on: X-CUBE-SPN4/trunk/Drivers/BSP/Components/L6206/L6206.h
davide.aliprandi@st.com 4:24158c44f02e 48 Revision: 0
davide.aliprandi@st.com 4:24158c44f02e 49 */
davide.aliprandi@st.com 4:24158c44f02e 50
davide.aliprandi@st.com 4:24158c44f02e 51
davide.aliprandi@st.com 4:24158c44f02e 52 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 53
davide.aliprandi@st.com 4:24158c44f02e 54 #ifndef __L6206_CLASS_H
davide.aliprandi@st.com 4:24158c44f02e 55 #define __L6206_CLASS_H
davide.aliprandi@st.com 4:24158c44f02e 56
brdirais 0:2cb6ce8e07bd 57
brdirais 0:2cb6ce8e07bd 58 /* Includes ------------------------------------------------------------------*/
brdirais 0:2cb6ce8e07bd 59
davide.aliprandi@st.com 4:24158c44f02e 60 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 61 * Include here platform specific header files. *
davide.aliprandi@st.com 4:24158c44f02e 62 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 63 #include "mbed.h"
davide.aliprandi@st.com 4:24158c44f02e 64 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 65 * Include here component specific header files. *
davide.aliprandi@st.com 4:24158c44f02e 66 *----------------------------------------------------------------------------*/
Davidroid 5:51ad3c4b904c 67 #include "L6206_def.h"
davide.aliprandi@st.com 4:24158c44f02e 68 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 69 * Include here interface specific header files. *
davide.aliprandi@st.com 4:24158c44f02e 70 * *
davide.aliprandi@st.com 4:24158c44f02e 71 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 72 * #include "HumiditySensor.h" *
davide.aliprandi@st.com 4:24158c44f02e 73 * #include "TemperatureSensor.h" *
davide.aliprandi@st.com 4:24158c44f02e 74 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 75 #include "BDCMotor.h"
brdirais 0:2cb6ce8e07bd 76
brdirais 0:2cb6ce8e07bd 77
brdirais 0:2cb6ce8e07bd 78
davide.aliprandi@st.com 4:24158c44f02e 79 /* Private constants ---------------------------------------------------------*/
brdirais 0:2cb6ce8e07bd 80
davide.aliprandi@st.com 4:24158c44f02e 81 /** @defgroup L6206_Private_Constants L6206 Private Constants
brdirais 0:2cb6ce8e07bd 82 * @{
brdirais 0:2cb6ce8e07bd 83 */
brdirais 0:2cb6ce8e07bd 84
davide.aliprandi@st.com 4:24158c44f02e 85 /// The Number of L6206 devices required for initialisation is not supported
davide.aliprandi@st.com 4:24158c44f02e 86 #define L6206_ERROR_0 (0x8000)
davide.aliprandi@st.com 4:24158c44f02e 87 /// Error: Access a motor index greater than the one of the current brigde configuration
davide.aliprandi@st.com 4:24158c44f02e 88 #define L6206_ERROR_1 (0x8001)
davide.aliprandi@st.com 4:24158c44f02e 89 /// Error: Access a motor index which is not bidirectionnal
davide.aliprandi@st.com 4:24158c44f02e 90 #define L6206_ERROR_2 (0x8002)
brdirais 0:2cb6ce8e07bd 91
davide.aliprandi@st.com 4:24158c44f02e 92 /// Maximum frequency of the PWMs in Hz
davide.aliprandi@st.com 4:24158c44f02e 93 #define L6206_MAX_PWM_FREQ (100000)
davide.aliprandi@st.com 4:24158c44f02e 94
davide.aliprandi@st.com 4:24158c44f02e 95 /// Minimum frequency of the PWMs in Hz
davide.aliprandi@st.com 4:24158c44f02e 96 #define L6206_MIN_PWM_FREQ (2)
brdirais 0:2cb6ce8e07bd 97
davide.aliprandi@st.com 4:24158c44f02e 98 /// Bridge Input 1A
davide.aliprandi@st.com 4:24158c44f02e 99 #define INPUT_1A (0)
davide.aliprandi@st.com 4:24158c44f02e 100 /// Bridge Input 2A
davide.aliprandi@st.com 4:24158c44f02e 101 #define INPUT_2A (1)
davide.aliprandi@st.com 4:24158c44f02e 102 /// Bridge Input 1B
davide.aliprandi@st.com 4:24158c44f02e 103 #define INPUT_1B (2)
davide.aliprandi@st.com 4:24158c44f02e 104 /// Bridge Input 2B
davide.aliprandi@st.com 4:24158c44f02e 105 #define INPUT_2B (3)
brdirais 0:2cb6ce8e07bd 106
davide.aliprandi@st.com 4:24158c44f02e 107 /// Bridge A
davide.aliprandi@st.com 4:24158c44f02e 108 #define BRIDGE_A (0)
davide.aliprandi@st.com 4:24158c44f02e 109 /// Bridge B
davide.aliprandi@st.com 4:24158c44f02e 110 #define BRIDGE_B (1)
brdirais 0:2cb6ce8e07bd 111
brdirais 0:2cb6ce8e07bd 112
brdirais 0:2cb6ce8e07bd 113
brdirais 0:2cb6ce8e07bd 114
brdirais 0:2cb6ce8e07bd 115
davide.aliprandi@st.com 4:24158c44f02e 116 /* Classes -------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 117
davide.aliprandi@st.com 4:24158c44f02e 118 /**
davide.aliprandi@st.com 4:24158c44f02e 119 * @brief Class representing a L6206 component.
davide.aliprandi@st.com 4:24158c44f02e 120 */
davide.aliprandi@st.com 4:24158c44f02e 121 class L6206 : public BDCMotor
davide.aliprandi@st.com 4:24158c44f02e 122 {
davide.aliprandi@st.com 4:24158c44f02e 123 public:
davide.aliprandi@st.com 4:24158c44f02e 124
davide.aliprandi@st.com 4:24158c44f02e 125 /*** Constructor and Destructor Methods ***/
davide.aliprandi@st.com 4:24158c44f02e 126
davide.aliprandi@st.com 4:24158c44f02e 127 /**
davide.aliprandi@st.com 4:24158c44f02e 128 * @brief Constructor.
davide.aliprandi@st.com 4:24158c44f02e 129 */
davide.aliprandi@st.com 4:24158c44f02e 130 L6206(PinName EN_flag_A, PinName EN_flag_B, PinName pwm_1A, PinName pwm_2A, PinName pwm_1B, PinName pwm_2B) : BDCMotor(), flag_A_irq(EN_flag_A), flag_B_irq(EN_flag_B), EN_flag_A(EN_flag_A), EN_flag_B(EN_flag_B), pwm_1A(pwm_1A), pwm_2A(pwm_2A), pwm_1B(pwm_1B), pwm_2B(pwm_2B)
davide.aliprandi@st.com 4:24158c44f02e 131 {
davide.aliprandi@st.com 4:24158c44f02e 132 /* ACTION 4 ----------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 133 * Initialize here the component's member variables, one variable per *
davide.aliprandi@st.com 4:24158c44f02e 134 * line. *
davide.aliprandi@st.com 4:24158c44f02e 135 * *
davide.aliprandi@st.com 4:24158c44f02e 136 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 137 * measure = 0; *
davide.aliprandi@st.com 4:24158c44f02e 138 * instance_id = number_of_instances++; *
davide.aliprandi@st.com 4:24158c44f02e 139 *--------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 140
davide.aliprandi@st.com 4:24158c44f02e 141 flagInterruptCallback = 0;
davide.aliprandi@st.com 4:24158c44f02e 142 errorHandlerCallback = 0;
davide.aliprandi@st.com 4:24158c44f02e 143 numberOfDevices = 0;
davide.aliprandi@st.com 4:24158c44f02e 144 deviceInstance = 0;
davide.aliprandi@st.com 4:24158c44f02e 145 }
davide.aliprandi@st.com 4:24158c44f02e 146
davide.aliprandi@st.com 4:24158c44f02e 147 /**
davide.aliprandi@st.com 4:24158c44f02e 148 * @brief Destructor.
davide.aliprandi@st.com 4:24158c44f02e 149 */
davide.aliprandi@st.com 4:24158c44f02e 150 virtual ~L6206(void) {}
davide.aliprandi@st.com 4:24158c44f02e 151
davide.aliprandi@st.com 4:24158c44f02e 152
davide.aliprandi@st.com 4:24158c44f02e 153 /*** Public Component Related Methods ***/
brdirais 0:2cb6ce8e07bd 154
davide.aliprandi@st.com 4:24158c44f02e 155 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 156 * Implement here the component's public methods, as wrappers of the C *
davide.aliprandi@st.com 4:24158c44f02e 157 * component's functions. *
davide.aliprandi@st.com 4:24158c44f02e 158 * They should be: *
davide.aliprandi@st.com 4:24158c44f02e 159 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 4:24158c44f02e 160 * functions (1); *
davide.aliprandi@st.com 4:24158c44f02e 161 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 4:24158c44f02e 162 * table's functions, if any (2). *
davide.aliprandi@st.com 4:24158c44f02e 163 * *
davide.aliprandi@st.com 4:24158c44f02e 164 * Example: *
Davidroid 5:51ad3c4b904c 165 * virtual int get_value(float *f) //(1) *
davide.aliprandi@st.com 4:24158c44f02e 166 * { *
Davidroid 5:51ad3c4b904c 167 * return COMPONENT_get_value(float *f); *
davide.aliprandi@st.com 4:24158c44f02e 168 * } *
davide.aliprandi@st.com 4:24158c44f02e 169 * *
Davidroid 5:51ad3c4b904c 170 * virtual int enable_feature(void) //(2) *
davide.aliprandi@st.com 4:24158c44f02e 171 * { *
Davidroid 5:51ad3c4b904c 172 * return COMPONENT_enable_feature(); *
davide.aliprandi@st.com 4:24158c44f02e 173 * } *
davide.aliprandi@st.com 4:24158c44f02e 174 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 175
davide.aliprandi@st.com 4:24158c44f02e 176 /**
davide.aliprandi@st.com 4:24158c44f02e 177 * @brief Initializing the component.
davide.aliprandi@st.com 4:24158c44f02e 178 * @param init Pointer to device specific initalization structure.
davide.aliprandi@st.com 4:24158c44f02e 179 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 4:24158c44f02e 180 */
davide.aliprandi@st.com 4:24158c44f02e 181 virtual int init(void *init = NULL)
davide.aliprandi@st.com 4:24158c44f02e 182 {
davide.aliprandi@st.com 4:24158c44f02e 183 return (int) L6206_Init((void *) init);
davide.aliprandi@st.com 4:24158c44f02e 184 }
davide.aliprandi@st.com 4:24158c44f02e 185
davide.aliprandi@st.com 4:24158c44f02e 186 /**
davide.aliprandi@st.com 4:24158c44f02e 187 * @brief Getting the ID of the component.
davide.aliprandi@st.com 4:24158c44f02e 188 * @param id Pointer to an allocated variable to store the ID into.
davide.aliprandi@st.com 4:24158c44f02e 189 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 4:24158c44f02e 190 */
davide.aliprandi@st.com 4:24158c44f02e 191 virtual int read_id(uint8_t *id = NULL)
davide.aliprandi@st.com 4:24158c44f02e 192 {
davide.aliprandi@st.com 4:24158c44f02e 193 return (int) L6206_ReadId((uint8_t *) id);
davide.aliprandi@st.com 4:24158c44f02e 194 }
brdirais 0:2cb6ce8e07bd 195
brdirais 0:2cb6ce8e07bd 196
davide.aliprandi@st.com 4:24158c44f02e 197 /**
davide.aliprandi@st.com 4:24158c44f02e 198 * @brief Attaches a user callback to the error Handler.
davide.aliprandi@st.com 4:24158c44f02e 199 * The call back will be then called each time the library detects an error
davide.aliprandi@st.com 4:24158c44f02e 200 * @param[in] callback Name of the callback to attach to the error Hanlder
davide.aliprandi@st.com 4:24158c44f02e 201 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 202 */
davide.aliprandi@st.com 4:24158c44f02e 203 virtual void attach_error_handler(void (*callback)(uint16_t error))
davide.aliprandi@st.com 4:24158c44f02e 204 {
davide.aliprandi@st.com 4:24158c44f02e 205 L6206_AttachErrorHandler((void (*)(uint16_t error)) callback);
davide.aliprandi@st.com 4:24158c44f02e 206 }
brdirais 0:2cb6ce8e07bd 207
brdirais 0:2cb6ce8e07bd 208
davide.aliprandi@st.com 4:24158c44f02e 209 /**
davide.aliprandi@st.com 4:24158c44f02e 210 * @brief Attaches a user callback to the flag Interrupt
davide.aliprandi@st.com 4:24158c44f02e 211 * The call back will be then called each time the status
davide.aliprandi@st.com 4:24158c44f02e 212 * flag pin will be pulled down due to the occurrence of
davide.aliprandi@st.com 4:24158c44f02e 213 * a programmed alarms ( OCD, thermal alert)
davide.aliprandi@st.com 4:24158c44f02e 214 * @param[in] callback Name of the callback to attach
davide.aliprandi@st.com 4:24158c44f02e 215 * to the Flag Interrupt
davide.aliprandi@st.com 4:24158c44f02e 216 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 217 */
davide.aliprandi@st.com 4:24158c44f02e 218 virtual void attach_flag_interrupt(void (*callback)(void))
davide.aliprandi@st.com 4:24158c44f02e 219 {
davide.aliprandi@st.com 4:24158c44f02e 220 L6206_attach_flag_interrupt((void (*)(void)) callback);
davide.aliprandi@st.com 4:24158c44f02e 221 }
davide.aliprandi@st.com 4:24158c44f02e 222
davide.aliprandi@st.com 4:24158c44f02e 223 /**
davide.aliprandi@st.com 4:24158c44f02e 224 * @brief Returns the current speed of the specified motor
davide.aliprandi@st.com 4:24158c44f02e 225 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 226 * @retval current speed in % from 0 to 100
davide.aliprandi@st.com 4:24158c44f02e 227 */
davide.aliprandi@st.com 4:24158c44f02e 228 virtual unsigned int get_speed(unsigned int motorId)
davide.aliprandi@st.com 4:24158c44f02e 229 {
davide.aliprandi@st.com 4:24158c44f02e 230 return (unsigned int) L6206_GetCurrentSpeed((uint8_t) motorId);
davide.aliprandi@st.com 4:24158c44f02e 231 }
davide.aliprandi@st.com 4:24158c44f02e 232
davide.aliprandi@st.com 4:24158c44f02e 233 /**
davide.aliprandi@st.com 4:24158c44f02e 234 * @brief Returns the device state
davide.aliprandi@st.com 4:24158c44f02e 235 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 236 * @retval State (STEADY or INACTIVE)
davide.aliprandi@st.com 4:24158c44f02e 237 */
Davidroid 5:51ad3c4b904c 238 virtual unsigned int get_device_state(unsigned int motorId)
davide.aliprandi@st.com 4:24158c44f02e 239 {
davide.aliprandi@st.com 4:24158c44f02e 240 return (motorState_t) L6206_get_device_state((uint8_t) motorId);
davide.aliprandi@st.com 4:24158c44f02e 241 }
davide.aliprandi@st.com 4:24158c44f02e 242
davide.aliprandi@st.com 4:24158c44f02e 243 /**
davide.aliprandi@st.com 4:24158c44f02e 244 * @brief Returns the FW version of the library
davide.aliprandi@st.com 4:24158c44f02e 245 * @retval L6206_FW_VERSION
davide.aliprandi@st.com 4:24158c44f02e 246 */
davide.aliprandi@st.com 4:24158c44f02e 247 virtual uint8_t get_fw_version(void)
davide.aliprandi@st.com 4:24158c44f02e 248 {
davide.aliprandi@st.com 4:24158c44f02e 249 return (uint8_t) L6206_GetFwVersion();
davide.aliprandi@st.com 4:24158c44f02e 250 }
davide.aliprandi@st.com 4:24158c44f02e 251
davide.aliprandi@st.com 4:24158c44f02e 252 /**
davide.aliprandi@st.com 4:24158c44f02e 253 * @brief Returns the max speed of the specified motor
davide.aliprandi@st.com 4:24158c44f02e 254 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 255 * @retval maxSpeed in % from 0 to 100
davide.aliprandi@st.com 4:24158c44f02e 256 */
davide.aliprandi@st.com 4:24158c44f02e 257 virtual uint16_t get_max_speed(unsigned int motorId)
davide.aliprandi@st.com 4:24158c44f02e 258 {
davide.aliprandi@st.com 4:24158c44f02e 259 return (uint16_t) L6206_GetMaxSpeed((uint8_t) motorId);
davide.aliprandi@st.com 4:24158c44f02e 260 }
davide.aliprandi@st.com 4:24158c44f02e 261
davide.aliprandi@st.com 4:24158c44f02e 262 /**
davide.aliprandi@st.com 4:24158c44f02e 263 * @brief Stops the motor without disabling the bridge
davide.aliprandi@st.com 4:24158c44f02e 264 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 265 * @retval none
davide.aliprandi@st.com 4:24158c44f02e 266 */
davide.aliprandi@st.com 4:24158c44f02e 267 virtual void hard_stop(unsigned int motorId)
davide.aliprandi@st.com 4:24158c44f02e 268 {
davide.aliprandi@st.com 4:24158c44f02e 269 L6206_HardStop((uint8_t) motorId);
davide.aliprandi@st.com 4:24158c44f02e 270 }
davide.aliprandi@st.com 4:24158c44f02e 271
davide.aliprandi@st.com 4:24158c44f02e 272 /**
davide.aliprandi@st.com 4:24158c44f02e 273 * @brief Runs the motor
davide.aliprandi@st.com 4:24158c44f02e 274 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 275 * @param[in] direction FORWARD or BACKWARD
davide.aliprandi@st.com 4:24158c44f02e 276 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 277 * @note For unidirectionnal motor, direction parameter has no effect
davide.aliprandi@st.com 4:24158c44f02e 278 */
davide.aliprandi@st.com 4:24158c44f02e 279 virtual void run(unsigned int motorId, direction_t direction)
davide.aliprandi@st.com 4:24158c44f02e 280 {
davide.aliprandi@st.com 4:24158c44f02e 281 L6206_Run((uint8_t) motorId, (motorDir_t) direction);
davide.aliprandi@st.com 4:24158c44f02e 282 }
davide.aliprandi@st.com 4:24158c44f02e 283
davide.aliprandi@st.com 4:24158c44f02e 284 /**
davide.aliprandi@st.com 4:24158c44f02e 285 * @brief Changes the max speed of the specified device
davide.aliprandi@st.com 4:24158c44f02e 286 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 287 * @param[in] newMaxSpeed in % from 0 to 100
davide.aliprandi@st.com 4:24158c44f02e 288 * @retval true if the command is successfully executed, else false
davide.aliprandi@st.com 4:24158c44f02e 289 */
davide.aliprandi@st.com 4:24158c44f02e 290 virtual bool set_speed(unsigned int motorId, unsigned int newMaxSpeed)
davide.aliprandi@st.com 4:24158c44f02e 291 {
davide.aliprandi@st.com 4:24158c44f02e 292 return (bool) L6206_SetMaxSpeed((uint8_t) motorId, (uint16_t) newMaxSpeed);
davide.aliprandi@st.com 4:24158c44f02e 293 }
davide.aliprandi@st.com 4:24158c44f02e 294
davide.aliprandi@st.com 4:24158c44f02e 295 /**
davide.aliprandi@st.com 4:24158c44f02e 296 * @brief Disable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 297 * @param[in] bridgeId (from 0 for bridge A to 1 for bridge B)
davide.aliprandi@st.com 4:24158c44f02e 298 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 299 * @note When input of different brigdes are parallelized
davide.aliprandi@st.com 4:24158c44f02e 300 * together, the disabling of one bridge leads to the disabling
davide.aliprandi@st.com 4:24158c44f02e 301 * of the second one
davide.aliprandi@st.com 4:24158c44f02e 302 */
davide.aliprandi@st.com 4:24158c44f02e 303 virtual void disable_bridge(unsigned int bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 304 {
davide.aliprandi@st.com 4:24158c44f02e 305 L6206_DisableBridge((uint8_t) bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 306 }
davide.aliprandi@st.com 4:24158c44f02e 307
davide.aliprandi@st.com 4:24158c44f02e 308 /**
davide.aliprandi@st.com 4:24158c44f02e 309 * @brief Enable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 310 * @param[in] bridgeId (from 0 for bridge A to 1 for bridge B)
davide.aliprandi@st.com 4:24158c44f02e 311 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 312 * @note When input of different brigdes are parallelized
davide.aliprandi@st.com 4:24158c44f02e 313 * together, the enabling of one bridge leads to the enabling
davide.aliprandi@st.com 4:24158c44f02e 314 * of the second one
davide.aliprandi@st.com 4:24158c44f02e 315 */
davide.aliprandi@st.com 4:24158c44f02e 316 virtual void enable_bridge(unsigned int bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 317 {
davide.aliprandi@st.com 4:24158c44f02e 318 L6206_EnableBridge((uint8_t) bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 319 }
davide.aliprandi@st.com 4:24158c44f02e 320
davide.aliprandi@st.com 4:24158c44f02e 321 /**
davide.aliprandi@st.com 4:24158c44f02e 322 * @brief Get the status of the bridge enabling of the corresponding bridge
davide.aliprandi@st.com 4:24158c44f02e 323 * @param[in] bridgeId from 0 for bridge A to 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 324 * @retval State of the Enable&Flag pin of the corresponding bridge (1 set, 0 for reset)
davide.aliprandi@st.com 4:24158c44f02e 325 */
davide.aliprandi@st.com 4:24158c44f02e 326 virtual unsigned int get_bridge_status(unsigned int bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 327 {
davide.aliprandi@st.com 4:24158c44f02e 328 return (unsigned int) L6206_GetBridgeStatus((uint8_t) bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 329 }
brdirais 0:2cb6ce8e07bd 330
davide.aliprandi@st.com 4:24158c44f02e 331 /**
davide.aliprandi@st.com 4:24158c44f02e 332 * @brief Immediatly stops the motor and disable the power bridge
davide.aliprandi@st.com 4:24158c44f02e 333 * @param[in] motorId from 0 to MAX_NUMBER_OF_BRUSH_DC_MOTORS
davide.aliprandi@st.com 4:24158c44f02e 334 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 335 * @note if two motors uses the same power bridge, the
davide.aliprandi@st.com 4:24158c44f02e 336 * power bridge will be disable only if the two motors are stopped
davide.aliprandi@st.com 4:24158c44f02e 337 */
davide.aliprandi@st.com 4:24158c44f02e 338 virtual void hard_hiz(unsigned int motorId)
davide.aliprandi@st.com 4:24158c44f02e 339 {
davide.aliprandi@st.com 4:24158c44f02e 340 L6206_HardHiz((uint8_t) motorId);
davide.aliprandi@st.com 4:24158c44f02e 341 }
davide.aliprandi@st.com 4:24158c44f02e 342
davide.aliprandi@st.com 4:24158c44f02e 343 /**
davide.aliprandi@st.com 4:24158c44f02e 344 * @brief Error handler which calls the user callback (if defined)
davide.aliprandi@st.com 4:24158c44f02e 345 * @param[in] error Number of the error
davide.aliprandi@st.com 4:24158c44f02e 346 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 347 */
davide.aliprandi@st.com 4:24158c44f02e 348 virtual void error_handler(uint16_t error)
davide.aliprandi@st.com 4:24158c44f02e 349 {
davide.aliprandi@st.com 4:24158c44f02e 350 L6206_ErrorHandler((uint16_t) error);
davide.aliprandi@st.com 4:24158c44f02e 351 }
davide.aliprandi@st.com 4:24158c44f02e 352
davide.aliprandi@st.com 4:24158c44f02e 353 /**
davide.aliprandi@st.com 4:24158c44f02e 354 * @brief Set dual full bridge parallelling configuration
davide.aliprandi@st.com 4:24158c44f02e 355 * @param[in] newConfig bridge configuration to apply from
davide.aliprandi@st.com 4:24158c44f02e 356 * dualFullBridgeConfig_t enum
davide.aliprandi@st.com 4:24158c44f02e 357 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 358 */
davide.aliprandi@st.com 4:24158c44f02e 359 virtual void set_dual_full_bridge_config(unsigned int newConfig)
davide.aliprandi@st.com 4:24158c44f02e 360 {
davide.aliprandi@st.com 4:24158c44f02e 361 L6206_SetDualFullBridgeConfig((uint8_t) newConfig);
davide.aliprandi@st.com 4:24158c44f02e 362 }
davide.aliprandi@st.com 4:24158c44f02e 363
davide.aliprandi@st.com 4:24158c44f02e 364 /**
davide.aliprandi@st.com 4:24158c44f02e 365 * @brief Get the PWM frequency of the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 366 * @param[in] bridgeId 0 for bridge A, 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 367 * @retval Freq in Hz
davide.aliprandi@st.com 4:24158c44f02e 368 */
davide.aliprandi@st.com 4:24158c44f02e 369 virtual unsigned int get_bridge_input_pwm_freq(unsigned int bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 370 {
davide.aliprandi@st.com 4:24158c44f02e 371 return (unsigned int) L6206_GetBridgeInputPwmFreq((uint8_t) bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 372 }
davide.aliprandi@st.com 4:24158c44f02e 373
davide.aliprandi@st.com 4:24158c44f02e 374 /**
davide.aliprandi@st.com 4:24158c44f02e 375 * @brief Changes the PWM frequency of the bridge input
davide.aliprandi@st.com 4:24158c44f02e 376 * @param[in] bridgeId 0 for bridge A, 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 377 * @param[in] newFreq in Hz
davide.aliprandi@st.com 4:24158c44f02e 378 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 379 */
davide.aliprandi@st.com 4:24158c44f02e 380 virtual void set_bridge_input_pwm_freq(unsigned int bridgeId, unsigned int newFreq)
davide.aliprandi@st.com 4:24158c44f02e 381 {
davide.aliprandi@st.com 4:24158c44f02e 382 L6206_SetBridgeInputPwmFreq((uint8_t) bridgeId, (uint32_t) newFreq);
davide.aliprandi@st.com 4:24158c44f02e 383 }
davide.aliprandi@st.com 4:24158c44f02e 384
davide.aliprandi@st.com 4:24158c44f02e 385 /**
davide.aliprandi@st.com 4:24158c44f02e 386 * @brief Sets the number of devices to be used
davide.aliprandi@st.com 4:24158c44f02e 387 * @param[in] nbDevices (from 1 to MAX_NUMBER_OF_DEVICES)
davide.aliprandi@st.com 4:24158c44f02e 388 * @retval TRUE if successfull, FALSE if failure, attempt to set a number of
davide.aliprandi@st.com 4:24158c44f02e 389 * devices greater than MAX_NUMBER_OF_DEVICES
davide.aliprandi@st.com 4:24158c44f02e 390 */
davide.aliprandi@st.com 4:24158c44f02e 391 virtual bool set_nb_devices(uint8_t nbDevices)
davide.aliprandi@st.com 4:24158c44f02e 392 {
davide.aliprandi@st.com 4:24158c44f02e 393 return (bool) L6206_SetNbDevices((uint8_t) nbDevices);
davide.aliprandi@st.com 4:24158c44f02e 394 }
davide.aliprandi@st.com 4:24158c44f02e 395
brdirais 0:2cb6ce8e07bd 396
davide.aliprandi@st.com 4:24158c44f02e 397 /*** Public Interrupt Related Methods ***/
brdirais 0:2cb6ce8e07bd 398
davide.aliprandi@st.com 4:24158c44f02e 399 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 400 * Implement here interrupt related methods, if any. *
davide.aliprandi@st.com 4:24158c44f02e 401 * Note that interrupt handling is platform dependent, e.g.: *
davide.aliprandi@st.com 4:24158c44f02e 402 * + mbed: *
davide.aliprandi@st.com 4:24158c44f02e 403 * InterruptIn feature_irq(pin); //Interrupt object. *
davide.aliprandi@st.com 4:24158c44f02e 404 * feature_irq.fall(callback); //Attach a callback. *
davide.aliprandi@st.com 4:24158c44f02e 405 * feature_irq.mode(PullNone); //Set interrupt mode. *
davide.aliprandi@st.com 4:24158c44f02e 406 * feature_irq.enable_irq(); //Enable interrupt. *
davide.aliprandi@st.com 4:24158c44f02e 407 * feature_irq.disable_irq(); //Disable interrupt. *
davide.aliprandi@st.com 4:24158c44f02e 408 * + Arduino: *
davide.aliprandi@st.com 4:24158c44f02e 409 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
davide.aliprandi@st.com 4:24158c44f02e 410 * detachInterrupt(pin); //Detach a callback. *
davide.aliprandi@st.com 4:24158c44f02e 411 * *
davide.aliprandi@st.com 4:24158c44f02e 412 * Example (mbed): *
davide.aliprandi@st.com 4:24158c44f02e 413 * void attach_feature_irq(void (*fptr) (void)) *
davide.aliprandi@st.com 4:24158c44f02e 414 * { *
davide.aliprandi@st.com 4:24158c44f02e 415 * feature_irq.fall(fptr); *
davide.aliprandi@st.com 4:24158c44f02e 416 * } *
davide.aliprandi@st.com 4:24158c44f02e 417 * *
davide.aliprandi@st.com 4:24158c44f02e 418 * void enable_feature_irq(void) *
davide.aliprandi@st.com 4:24158c44f02e 419 * { *
davide.aliprandi@st.com 4:24158c44f02e 420 * feature_irq.enable_irq(); *
davide.aliprandi@st.com 4:24158c44f02e 421 * } *
davide.aliprandi@st.com 4:24158c44f02e 422 * *
davide.aliprandi@st.com 4:24158c44f02e 423 * void disable_feature_irq(void) *
davide.aliprandi@st.com 4:24158c44f02e 424 * { *
davide.aliprandi@st.com 4:24158c44f02e 425 * feature_irq.disable_irq(); *
davide.aliprandi@st.com 4:24158c44f02e 426 * } *
davide.aliprandi@st.com 4:24158c44f02e 427 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 428
brdirais 0:2cb6ce8e07bd 429
davide.aliprandi@st.com 4:24158c44f02e 430 /**
davide.aliprandi@st.com 4:24158c44f02e 431 * @brief Enabling the FLAG interrupt handling.
davide.aliprandi@st.com 4:24158c44f02e 432 * @param[in] bridgeId 0 for bridge A, 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 433 * @retval None.
davide.aliprandi@st.com 4:24158c44f02e 434 */
davide.aliprandi@st.com 4:24158c44f02e 435 virtual void enable_flag_irq(uint8_t bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 436 {
davide.aliprandi@st.com 4:24158c44f02e 437 if (bridgeId == BRIDGE_A)
davide.aliprandi@st.com 4:24158c44f02e 438 {
davide.aliprandi@st.com 4:24158c44f02e 439 flag_A_irq.mode(PullUp);
davide.aliprandi@st.com 4:24158c44f02e 440 flag_A_irq.fall(this, &L6206::L6206_FlagInterruptHandler);
davide.aliprandi@st.com 4:24158c44f02e 441 }
davide.aliprandi@st.com 4:24158c44f02e 442 else
davide.aliprandi@st.com 4:24158c44f02e 443 {
davide.aliprandi@st.com 4:24158c44f02e 444 flag_B_irq.mode(PullUp);
davide.aliprandi@st.com 4:24158c44f02e 445 flag_B_irq.fall(this, &L6206::L6206_FlagInterruptHandler);
davide.aliprandi@st.com 4:24158c44f02e 446 }
davide.aliprandi@st.com 4:24158c44f02e 447 }
brdirais 0:2cb6ce8e07bd 448
davide.aliprandi@st.com 4:24158c44f02e 449 /**
davide.aliprandi@st.com 4:24158c44f02e 450 * @brief Disabling the FLAG interrupt handling.
davide.aliprandi@st.com 4:24158c44f02e 451 * @param[in] bridgeId 0 for bridge A, 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 452 * @retval None.
davide.aliprandi@st.com 4:24158c44f02e 453 */
davide.aliprandi@st.com 4:24158c44f02e 454 virtual void disable_flag_irq(uint8_t bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 455 {
davide.aliprandi@st.com 4:24158c44f02e 456 if (bridgeId == BRIDGE_A)
davide.aliprandi@st.com 4:24158c44f02e 457 flag_A_irq.fall(NULL);
davide.aliprandi@st.com 4:24158c44f02e 458 else
davide.aliprandi@st.com 4:24158c44f02e 459 flag_B_irq.fall(NULL);
davide.aliprandi@st.com 4:24158c44f02e 460 }
brdirais 0:2cb6ce8e07bd 461
davide.aliprandi@st.com 4:24158c44f02e 462
davide.aliprandi@st.com 4:24158c44f02e 463 /*** Public In/Out Related Methods ***/
brdirais 0:2cb6ce8e07bd 464
brdirais 0:2cb6ce8e07bd 465
brdirais 0:2cb6ce8e07bd 466
davide.aliprandi@st.com 4:24158c44f02e 467 protected:
davide.aliprandi@st.com 4:24158c44f02e 468
davide.aliprandi@st.com 4:24158c44f02e 469 /*** Protected Component Related Methods ***/
davide.aliprandi@st.com 4:24158c44f02e 470
davide.aliprandi@st.com 4:24158c44f02e 471 /* ACTION 7 --------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 472 * Declare here the component's specific methods. *
davide.aliprandi@st.com 4:24158c44f02e 473 * They should be: *
davide.aliprandi@st.com 4:24158c44f02e 474 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 4:24158c44f02e 475 * functions (1); *
davide.aliprandi@st.com 4:24158c44f02e 476 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 4:24158c44f02e 477 * table's functions, if any (2); *
davide.aliprandi@st.com 4:24158c44f02e 478 * + Helper methods, if any, like functions declared in the component's *
davide.aliprandi@st.com 4:24158c44f02e 479 * source files but not pointed by the component's virtual table (3). *
davide.aliprandi@st.com 4:24158c44f02e 480 * *
davide.aliprandi@st.com 4:24158c44f02e 481 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 482 * status_t COMPONENT_get_value(float *f); //(1) *
davide.aliprandi@st.com 4:24158c44f02e 483 * status_t COMPONENT_enable_feature(void); //(2) *
davide.aliprandi@st.com 4:24158c44f02e 484 * status_t COMPONENT_compute_average(void); //(3) *
davide.aliprandi@st.com 4:24158c44f02e 485 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 486 status_t L6206_Init(void *init);
davide.aliprandi@st.com 4:24158c44f02e 487 status_t L6206_ReadId(uint8_t *id);
davide.aliprandi@st.com 4:24158c44f02e 488 void L6206_TickHandler(uint8_t deviceId); //Handle the device state machine at each tick timer pulse end
davide.aliprandi@st.com 4:24158c44f02e 489 void L6206_AttachErrorHandler(void (*callback)(uint16_t error)); //Attach a user callback to the error handler
davide.aliprandi@st.com 4:24158c44f02e 490 void L6206_attach_flag_interrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt
davide.aliprandi@st.com 4:24158c44f02e 491 void L6206_DisableBridge(uint8_t bridgeId); //Disable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 492 void L6206_EnableBridge(uint8_t bridgeId); //Enable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 493 uint16_t L6206_GetBridgeStatus(uint8_t deviceId); //Get bridge status
davide.aliprandi@st.com 4:24158c44f02e 494 uint16_t L6206_GetCurrentSpeed(uint8_t motorId); //Return the current speed in pps
davide.aliprandi@st.com 4:24158c44f02e 495 motorState_t L6206_get_device_state(uint8_t motorId); //Return the device state
davide.aliprandi@st.com 4:24158c44f02e 496 uint8_t L6206_GetFwVersion(void); //Return the FW version
davide.aliprandi@st.com 4:24158c44f02e 497 uint16_t L6206_GetMaxSpeed(uint8_t motorId); //Return the max speed in pps
davide.aliprandi@st.com 4:24158c44f02e 498 void L6206_HardHiz(uint8_t motorId); //Stop the motor and disable the power bridge
davide.aliprandi@st.com 4:24158c44f02e 499 void L6206_HardStop(uint8_t motorId); //Stop the motor without disabling the power bridge
davide.aliprandi@st.com 4:24158c44f02e 500 void L6206_Run(uint8_t motorId, motorDir_t direction); //run the motor
davide.aliprandi@st.com 4:24158c44f02e 501 uint32_t L6206_GetBridgeInputPwmFreq(uint8_t bridgeId); // Get the PWM frequency of the bridge input
davide.aliprandi@st.com 4:24158c44f02e 502 void L6206_SetBridgeInputPwmFreq(uint8_t bridgeId, uint32_t newFreq); // Set the PWM frequency of the bridge input
davide.aliprandi@st.com 4:24158c44f02e 503 void L6206_SetDualFullBridgeConfig(uint8_t newConfig); // Set dual full bridge configuration
davide.aliprandi@st.com 4:24158c44f02e 504 bool L6206_SetMaxSpeed(uint8_t motorId,uint16_t newMaxSpeed); //Set the max speed in pps
davide.aliprandi@st.com 4:24158c44f02e 505 bool L6206_SetNbDevices(uint8_t nbDevices); //Set the number of driver devices
davide.aliprandi@st.com 4:24158c44f02e 506 void L6206_ErrorHandler(uint16_t error);
davide.aliprandi@st.com 4:24158c44f02e 507 void L6206_FlagInterruptHandler(void);
davide.aliprandi@st.com 4:24158c44f02e 508 uint8_t L6206_GetBridgeIdUsedByMotorId(uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 509 uint8_t L6206_GetBridgeInputUsedByMotorId(uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 510 uint8_t L6206_GetMotorIdUsingbridgeInput(uint8_t bridgeInput);
davide.aliprandi@st.com 4:24158c44f02e 511 uint8_t L6206_GetSecondBridgeInputUsedByMotorId(uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 512 bool L6206_IsBidirectionnalMotor(uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 513 void L6206_SetDeviceParamsToPredefinedValues(void);
davide.aliprandi@st.com 4:24158c44f02e 514 void L6206_SetDeviceParamsToGivenValues(L6206_init_t* initDevicePrm);
davide.aliprandi@st.com 4:24158c44f02e 515
davide.aliprandi@st.com 4:24158c44f02e 516 /*** Component's I/O Methods ***/
davide.aliprandi@st.com 4:24158c44f02e 517
davide.aliprandi@st.com 4:24158c44f02e 518 /* ACTION 8 --------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 519 * Implement here other I/O methods beyond those already implemented *
davide.aliprandi@st.com 4:24158c44f02e 520 * above, which are declared extern within the component's header file. *
davide.aliprandi@st.com 4:24158c44f02e 521 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 522
davide.aliprandi@st.com 4:24158c44f02e 523 /**
davide.aliprandi@st.com 4:24158c44f02e 524 * @brief Utility function to set or unset EN pin for Bridge A or Bridge B.
davide.aliprandi@st.com 4:24158c44f02e 525 * @param[out] none
davide.aliprandi@st.com 4:24158c44f02e 526 * @param[in] bridgeId 0 for bridge A, 1 for bridge B
davide.aliprandi@st.com 4:24158c44f02e 527 * @retval none
davide.aliprandi@st.com 4:24158c44f02e 528 */
davide.aliprandi@st.com 4:24158c44f02e 529 void L6206_OutVal( uint8_t bridgeId, uint8_t val)
davide.aliprandi@st.com 4:24158c44f02e 530 {
davide.aliprandi@st.com 4:24158c44f02e 531 if( bridgeId == BRIDGE_A)
davide.aliprandi@st.com 4:24158c44f02e 532 {
davide.aliprandi@st.com 4:24158c44f02e 533 EN_flag_A.output();
davide.aliprandi@st.com 4:24158c44f02e 534 EN_flag_A.mode(PullNone);
davide.aliprandi@st.com 4:24158c44f02e 535 EN_flag_A.write(val);
davide.aliprandi@st.com 4:24158c44f02e 536 }
davide.aliprandi@st.com 4:24158c44f02e 537 else
davide.aliprandi@st.com 4:24158c44f02e 538 {
davide.aliprandi@st.com 4:24158c44f02e 539 EN_flag_B.output();
davide.aliprandi@st.com 4:24158c44f02e 540 EN_flag_B.mode(PullNone);
davide.aliprandi@st.com 4:24158c44f02e 541 EN_flag_B.write(val);
davide.aliprandi@st.com 4:24158c44f02e 542 }
davide.aliprandi@st.com 4:24158c44f02e 543 }
davide.aliprandi@st.com 4:24158c44f02e 544
davide.aliprandi@st.com 4:24158c44f02e 545 /**
davide.aliprandi@st.com 4:24158c44f02e 546 * @brief Making the CPU wait.
davide.aliprandi@st.com 4:24158c44f02e 547 * @param None.
davide.aliprandi@st.com 4:24158c44f02e 548 * @retval None.
davide.aliprandi@st.com 4:24158c44f02e 549 */
davide.aliprandi@st.com 4:24158c44f02e 550 void L6206_Board_Delay(uint32_t delay)
davide.aliprandi@st.com 4:24158c44f02e 551 {
davide.aliprandi@st.com 4:24158c44f02e 552 wait_ms(delay);
davide.aliprandi@st.com 4:24158c44f02e 553 }
davide.aliprandi@st.com 4:24158c44f02e 554
davide.aliprandi@st.com 4:24158c44f02e 555 /**
davide.aliprandi@st.com 4:24158c44f02e 556 * @brief Disable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 557 * @param[in] bridgeId (from 0 for bridge A to 1 for bridge B)
davide.aliprandi@st.com 4:24158c44f02e 558 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 559 * @note When input of different brigdes are parallelized
davide.aliprandi@st.com 4:24158c44f02e 560 * together, the disabling of one bridge leads to the disabling
davide.aliprandi@st.com 4:24158c44f02e 561 * of the second one
davide.aliprandi@st.com 4:24158c44f02e 562 */
davide.aliprandi@st.com 4:24158c44f02e 563 void L6206_Board_DisableBridge(uint8_t bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 564 {
davide.aliprandi@st.com 4:24158c44f02e 565 disable_flag_irq(BRIDGE_A);
davide.aliprandi@st.com 4:24158c44f02e 566 disable_flag_irq(BRIDGE_B);
davide.aliprandi@st.com 4:24158c44f02e 567
davide.aliprandi@st.com 4:24158c44f02e 568 __disable_irq();
davide.aliprandi@st.com 4:24158c44f02e 569 L6206_OutVal( bridgeId, 0);
davide.aliprandi@st.com 4:24158c44f02e 570 __enable_irq();
davide.aliprandi@st.com 4:24158c44f02e 571 }
davide.aliprandi@st.com 4:24158c44f02e 572
davide.aliprandi@st.com 4:24158c44f02e 573 /**
davide.aliprandi@st.com 4:24158c44f02e 574 * @brief Enable the specified bridge
davide.aliprandi@st.com 4:24158c44f02e 575 * @param[in] bridgeId (from 0 for bridge A to 1 for bridge B)
davide.aliprandi@st.com 4:24158c44f02e 576 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 577 * @note When input of different brigdes are parallelized
davide.aliprandi@st.com 4:24158c44f02e 578 * together, the enabling of one bridge leads to the enabling
davide.aliprandi@st.com 4:24158c44f02e 579 * of the second one
davide.aliprandi@st.com 4:24158c44f02e 580 */
davide.aliprandi@st.com 4:24158c44f02e 581 void L6206_Board_EnableBridge(uint8_t bridgeId, uint8_t addDelay)
davide.aliprandi@st.com 4:24158c44f02e 582 {
davide.aliprandi@st.com 4:24158c44f02e 583 L6206_OutVal( bridgeId, 1);
davide.aliprandi@st.com 4:24158c44f02e 584
Davidroid 5:51ad3c4b904c 585 if (addDelay != 0) {
davide.aliprandi@st.com 4:24158c44f02e 586 wait_ms(BSP_MOTOR_CONTROL_BOARD_BRIDGE_TURN_ON_DELAY);
Davidroid 5:51ad3c4b904c 587 }
brdirais 0:2cb6ce8e07bd 588
davide.aliprandi@st.com 4:24158c44f02e 589 enable_flag_irq( bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 590 }
davide.aliprandi@st.com 4:24158c44f02e 591
davide.aliprandi@st.com 4:24158c44f02e 592 /**
davide.aliprandi@st.com 4:24158c44f02e 593 * @brief Returns the FLAG pin state.
davide.aliprandi@st.com 4:24158c44f02e 594 * @param[in] bridgeId (from 0 for bridge A to 1 for bridge B)
davide.aliprandi@st.com 4:24158c44f02e 595 * @retval The FLAG pin value.
davide.aliprandi@st.com 4:24158c44f02e 596 */
davide.aliprandi@st.com 4:24158c44f02e 597 uint32_t L6206_Board_GetFlagPinState(uint8_t bridgeId)
davide.aliprandi@st.com 4:24158c44f02e 598 {
davide.aliprandi@st.com 4:24158c44f02e 599 if (bridgeId == 0)
davide.aliprandi@st.com 4:24158c44f02e 600 {
davide.aliprandi@st.com 4:24158c44f02e 601 EN_flag_A.input();
davide.aliprandi@st.com 4:24158c44f02e 602 return EN_flag_A.read();
davide.aliprandi@st.com 4:24158c44f02e 603 }
davide.aliprandi@st.com 4:24158c44f02e 604 else
davide.aliprandi@st.com 4:24158c44f02e 605 {
davide.aliprandi@st.com 4:24158c44f02e 606 EN_flag_B.input();
davide.aliprandi@st.com 4:24158c44f02e 607 return EN_flag_B.read();
davide.aliprandi@st.com 4:24158c44f02e 608 }
davide.aliprandi@st.com 4:24158c44f02e 609 }
davide.aliprandi@st.com 4:24158c44f02e 610
davide.aliprandi@st.com 4:24158c44f02e 611 /**
davide.aliprandi@st.com 4:24158c44f02e 612 * @brief Initiliases the GPIOs used by the L6206s
davide.aliprandi@st.com 4:24158c44f02e 613 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 614 */
davide.aliprandi@st.com 4:24158c44f02e 615 void L6206_Board_GpioInit(void)
davide.aliprandi@st.com 4:24158c44f02e 616 {
davide.aliprandi@st.com 4:24158c44f02e 617 /* init bridge Enable */
davide.aliprandi@st.com 4:24158c44f02e 618 EN_flag_A.output();
davide.aliprandi@st.com 4:24158c44f02e 619 EN_flag_A.write(0);
davide.aliprandi@st.com 4:24158c44f02e 620 EN_flag_A.input();
davide.aliprandi@st.com 4:24158c44f02e 621
davide.aliprandi@st.com 4:24158c44f02e 622 EN_flag_B.output();
davide.aliprandi@st.com 4:24158c44f02e 623 EN_flag_B.write(0);
davide.aliprandi@st.com 4:24158c44f02e 624 EN_flag_B.input();
davide.aliprandi@st.com 4:24158c44f02e 625
davide.aliprandi@st.com 4:24158c44f02e 626
davide.aliprandi@st.com 4:24158c44f02e 627 /* init flag Irq */
davide.aliprandi@st.com 4:24158c44f02e 628 disable_flag_irq(BRIDGE_A);
davide.aliprandi@st.com 4:24158c44f02e 629 disable_flag_irq(BRIDGE_B);
davide.aliprandi@st.com 4:24158c44f02e 630
davide.aliprandi@st.com 4:24158c44f02e 631 }
davide.aliprandi@st.com 4:24158c44f02e 632
davide.aliprandi@st.com 4:24158c44f02e 633 /**
davide.aliprandi@st.com 4:24158c44f02e 634 * @brief Sets the frequency of PWM used for bridges inputs
davide.aliprandi@st.com 4:24158c44f02e 635 * @param[in] bridgeInput 0 for input 1A, 1 for input 2A,
davide.aliprandi@st.com 4:24158c44f02e 636 * 2 for input 1B, 3 for input 2B
davide.aliprandi@st.com 4:24158c44f02e 637 * @param[in] newFreq in Hz
davide.aliprandi@st.com 4:24158c44f02e 638 * @param[in] duty Duty cycle
davide.aliprandi@st.com 4:24158c44f02e 639 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 640 * @note The frequency is directly the current speed of the device
davide.aliprandi@st.com 4:24158c44f02e 641 */
davide.aliprandi@st.com 4:24158c44f02e 642 void L6206_Board_PwmSetFreq(uint8_t bridgeInput, uint32_t newFreq, uint8_t duty)
davide.aliprandi@st.com 4:24158c44f02e 643 {
davide.aliprandi@st.com 4:24158c44f02e 644 /* Computing the period of PWM. */
davide.aliprandi@st.com 4:24158c44f02e 645 float period = 1.0f / newFreq;
davide.aliprandi@st.com 4:24158c44f02e 646 float duty_cycle;
davide.aliprandi@st.com 4:24158c44f02e 647 int period_us = (int)(period * 1000000);
davide.aliprandi@st.com 4:24158c44f02e 648
davide.aliprandi@st.com 4:24158c44f02e 649 if (duty > 100) duty = 100;
davide.aliprandi@st.com 4:24158c44f02e 650 duty_cycle = (float)duty / 100.0f;
davide.aliprandi@st.com 4:24158c44f02e 651
davide.aliprandi@st.com 4:24158c44f02e 652 switch (bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 653 {
davide.aliprandi@st.com 4:24158c44f02e 654 case 0:
davide.aliprandi@st.com 4:24158c44f02e 655 default:
davide.aliprandi@st.com 4:24158c44f02e 656 /* Setting the period and the duty-cycle of PWM. */
davide.aliprandi@st.com 4:24158c44f02e 657 pwm_1A.period_us(period_us);
davide.aliprandi@st.com 4:24158c44f02e 658 pwm_1A.write(duty_cycle);
davide.aliprandi@st.com 4:24158c44f02e 659 break;
davide.aliprandi@st.com 4:24158c44f02e 660
davide.aliprandi@st.com 4:24158c44f02e 661 case 1:
davide.aliprandi@st.com 4:24158c44f02e 662 /* Setting the period and the duty-cycle of PWM. */
davide.aliprandi@st.com 4:24158c44f02e 663 pwm_2A.period_us(period_us);
davide.aliprandi@st.com 4:24158c44f02e 664 pwm_2A.write(duty_cycle);
davide.aliprandi@st.com 4:24158c44f02e 665 break;
davide.aliprandi@st.com 4:24158c44f02e 666
davide.aliprandi@st.com 4:24158c44f02e 667 case 2:
davide.aliprandi@st.com 4:24158c44f02e 668 /* Setting the period and the duty-cycle of PWM. */
davide.aliprandi@st.com 4:24158c44f02e 669 pwm_1B.period_us(period_us);
davide.aliprandi@st.com 4:24158c44f02e 670 pwm_1B.write(duty_cycle);
davide.aliprandi@st.com 4:24158c44f02e 671 break;
davide.aliprandi@st.com 4:24158c44f02e 672
davide.aliprandi@st.com 4:24158c44f02e 673 case 3:
davide.aliprandi@st.com 4:24158c44f02e 674 /* Setting the period and the duty-cycle of PWM. */
davide.aliprandi@st.com 4:24158c44f02e 675 pwm_2B.period_us(period_us);
davide.aliprandi@st.com 4:24158c44f02e 676 pwm_2B.write(duty_cycle);
davide.aliprandi@st.com 4:24158c44f02e 677 break;
davide.aliprandi@st.com 4:24158c44f02e 678 }
davide.aliprandi@st.com 4:24158c44f02e 679 }
davide.aliprandi@st.com 4:24158c44f02e 680
davide.aliprandi@st.com 4:24158c44f02e 681 /**
davide.aliprandi@st.com 4:24158c44f02e 682 * @brief Reset the PWM for the specified brigde input
davide.aliprandi@st.com 4:24158c44f02e 683 * @param[in] bridgeInput 0 for input 1A, 1 for input 2A,
davide.aliprandi@st.com 4:24158c44f02e 684 * 2 for input 1B, 3 for input 2B
davide.aliprandi@st.com 4:24158c44f02e 685 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 686 */
davide.aliprandi@st.com 4:24158c44f02e 687 void L6206_Board_PwmDeInit(uint8_t bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 688 {
davide.aliprandi@st.com 4:24158c44f02e 689 switch (bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 690 {
davide.aliprandi@st.com 4:24158c44f02e 691 case 0:
davide.aliprandi@st.com 4:24158c44f02e 692 default:
davide.aliprandi@st.com 4:24158c44f02e 693 //timer_pwm_1A.detach();
davide.aliprandi@st.com 4:24158c44f02e 694 break;
davide.aliprandi@st.com 4:24158c44f02e 695
davide.aliprandi@st.com 4:24158c44f02e 696 case 1:
davide.aliprandi@st.com 4:24158c44f02e 697 //timer_pwm_2A.detach();
davide.aliprandi@st.com 4:24158c44f02e 698 break;
davide.aliprandi@st.com 4:24158c44f02e 699
davide.aliprandi@st.com 4:24158c44f02e 700 case 2:
davide.aliprandi@st.com 4:24158c44f02e 701 //timer_pwm_1B.detach();
davide.aliprandi@st.com 4:24158c44f02e 702 break;
davide.aliprandi@st.com 4:24158c44f02e 703
davide.aliprandi@st.com 4:24158c44f02e 704 case 3:
davide.aliprandi@st.com 4:24158c44f02e 705 //timer_pwm_2B.detach();
davide.aliprandi@st.com 4:24158c44f02e 706 break;
davide.aliprandi@st.com 4:24158c44f02e 707 }
davide.aliprandi@st.com 4:24158c44f02e 708 }
davide.aliprandi@st.com 4:24158c44f02e 709
davide.aliprandi@st.com 4:24158c44f02e 710 /**
davide.aliprandi@st.com 4:24158c44f02e 711 * @brief Set the PWM frequency the for the specified bridge input
davide.aliprandi@st.com 4:24158c44f02e 712 * @param[in] bridgeInput 0 for input 1A, 1 for input 2A,
davide.aliprandi@st.com 4:24158c44f02e 713 * 2 for input 1B, 3 for input 2B
davide.aliprandi@st.com 4:24158c44f02e 714 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 715 */
davide.aliprandi@st.com 4:24158c44f02e 716 void L6206_Board_PwmInit(uint8_t bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 717 {
davide.aliprandi@st.com 4:24158c44f02e 718 }
davide.aliprandi@st.com 4:24158c44f02e 719
davide.aliprandi@st.com 4:24158c44f02e 720 /**
davide.aliprandi@st.com 4:24158c44f02e 721 * @brief Stops the PWM uses for the specified brige input
davide.aliprandi@st.com 4:24158c44f02e 722 * @param[in] bridgeInput 0 for input 1A, 1 for input 2A,
davide.aliprandi@st.com 4:24158c44f02e 723 * 2 for input 1B, 3 for input 2B
davide.aliprandi@st.com 4:24158c44f02e 724 * @retval None
davide.aliprandi@st.com 4:24158c44f02e 725 */
davide.aliprandi@st.com 4:24158c44f02e 726 void L6206_Board_PwmStop(uint8_t bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 727 {
davide.aliprandi@st.com 4:24158c44f02e 728 switch (bridgeInput)
davide.aliprandi@st.com 4:24158c44f02e 729 {
davide.aliprandi@st.com 4:24158c44f02e 730 case 0:
davide.aliprandi@st.com 4:24158c44f02e 731 default:
davide.aliprandi@st.com 4:24158c44f02e 732 pwm_1A.write(0.0);
davide.aliprandi@st.com 4:24158c44f02e 733 break;
davide.aliprandi@st.com 4:24158c44f02e 734
davide.aliprandi@st.com 4:24158c44f02e 735 case 1:
davide.aliprandi@st.com 4:24158c44f02e 736 pwm_2A.write(0.0);
davide.aliprandi@st.com 4:24158c44f02e 737 break;
davide.aliprandi@st.com 4:24158c44f02e 738
davide.aliprandi@st.com 4:24158c44f02e 739 case 2:
davide.aliprandi@st.com 4:24158c44f02e 740 pwm_1B.write(0.0);
davide.aliprandi@st.com 4:24158c44f02e 741 break;
davide.aliprandi@st.com 4:24158c44f02e 742
davide.aliprandi@st.com 4:24158c44f02e 743 case 3:
davide.aliprandi@st.com 4:24158c44f02e 744 pwm_2B.write(0.0);
davide.aliprandi@st.com 4:24158c44f02e 745 break;
davide.aliprandi@st.com 4:24158c44f02e 746 }
davide.aliprandi@st.com 4:24158c44f02e 747 }
brdirais 0:2cb6ce8e07bd 748
brdirais 0:2cb6ce8e07bd 749
davide.aliprandi@st.com 4:24158c44f02e 750 /*** Component's Instance Variables ***/
davide.aliprandi@st.com 4:24158c44f02e 751
davide.aliprandi@st.com 4:24158c44f02e 752 /* ACTION 9 --------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 753 * Declare here interrupt related variables, if needed. *
davide.aliprandi@st.com 4:24158c44f02e 754 * Note that interrupt handling is platform dependent, see *
davide.aliprandi@st.com 4:24158c44f02e 755 * "Interrupt Related Methods" above. *
davide.aliprandi@st.com 4:24158c44f02e 756 * *
davide.aliprandi@st.com 4:24158c44f02e 757 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 758 * + mbed: *
davide.aliprandi@st.com 4:24158c44f02e 759 * InterruptIn feature_irq; *
davide.aliprandi@st.com 4:24158c44f02e 760 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 761
davide.aliprandi@st.com 4:24158c44f02e 762 /* Flag Interrupt. */
davide.aliprandi@st.com 4:24158c44f02e 763 InterruptIn flag_A_irq;
davide.aliprandi@st.com 4:24158c44f02e 764 InterruptIn flag_B_irq;
davide.aliprandi@st.com 4:24158c44f02e 765
davide.aliprandi@st.com 4:24158c44f02e 766 /* ACTION 10 -------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 767 * Declare here other pin related variables, if needed. *
davide.aliprandi@st.com 4:24158c44f02e 768 * *
davide.aliprandi@st.com 4:24158c44f02e 769 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 770 * + mbed: *
davide.aliprandi@st.com 4:24158c44f02e 771 * DigitalOut standby_reset; *
davide.aliprandi@st.com 4:24158c44f02e 772 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 773
davide.aliprandi@st.com 4:24158c44f02e 774 /* Digital In/Out for Flag EN pin */
davide.aliprandi@st.com 4:24158c44f02e 775 DigitalInOut EN_flag_A;
davide.aliprandi@st.com 4:24158c44f02e 776 DigitalInOut EN_flag_B;
davide.aliprandi@st.com 4:24158c44f02e 777
davide.aliprandi@st.com 4:24158c44f02e 778 /* PWM Out pin */
davide.aliprandi@st.com 4:24158c44f02e 779 PwmOut pwm_1A;
davide.aliprandi@st.com 4:24158c44f02e 780 PwmOut pwm_2A;
davide.aliprandi@st.com 4:24158c44f02e 781 PwmOut pwm_1B;
davide.aliprandi@st.com 4:24158c44f02e 782 PwmOut pwm_2B;
davide.aliprandi@st.com 4:24158c44f02e 783
davide.aliprandi@st.com 4:24158c44f02e 784 /* ACTION 11 -------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 785 * Declare here communication related variables, if needed. *
davide.aliprandi@st.com 4:24158c44f02e 786 * *
davide.aliprandi@st.com 4:24158c44f02e 787 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 788 * + mbed: *
davide.aliprandi@st.com 4:24158c44f02e 789 * DigitalOut address; *
davide.aliprandi@st.com 4:24158c44f02e 790 * DevI2C &dev_i2c; *
davide.aliprandi@st.com 4:24158c44f02e 791 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 792
davide.aliprandi@st.com 4:24158c44f02e 793 /* ACTION 12 -------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 794 * Declare here identity related variables, if needed. *
davide.aliprandi@st.com 4:24158c44f02e 795 * Note that there should be only a unique identifier for each component, *
davide.aliprandi@st.com 4:24158c44f02e 796 * which should be the "who_am_i" parameter. *
davide.aliprandi@st.com 4:24158c44f02e 797 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 798 /* Identity */
davide.aliprandi@st.com 4:24158c44f02e 799 uint8_t who_am_i;
davide.aliprandi@st.com 4:24158c44f02e 800
davide.aliprandi@st.com 4:24158c44f02e 801 /* ACTION 13 -------------------------------------------------------------*
davide.aliprandi@st.com 4:24158c44f02e 802 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 4:24158c44f02e 803 * per line. *
davide.aliprandi@st.com 4:24158c44f02e 804 * *
davide.aliprandi@st.com 4:24158c44f02e 805 * Example: *
davide.aliprandi@st.com 4:24158c44f02e 806 * float measure; *
davide.aliprandi@st.com 4:24158c44f02e 807 * int instance_id; *
davide.aliprandi@st.com 4:24158c44f02e 808 * static int number_of_instances; *
davide.aliprandi@st.com 4:24158c44f02e 809 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 810 void (*flagInterruptCallback)(void);
davide.aliprandi@st.com 4:24158c44f02e 811
davide.aliprandi@st.com 4:24158c44f02e 812 void (*errorHandlerCallback)(uint16_t error);
davide.aliprandi@st.com 4:24158c44f02e 813
davide.aliprandi@st.com 4:24158c44f02e 814 uint8_t numberOfDevices;
davide.aliprandi@st.com 4:24158c44f02e 815
davide.aliprandi@st.com 4:24158c44f02e 816 uint8_t deviceInstance;
davide.aliprandi@st.com 4:24158c44f02e 817
davide.aliprandi@st.com 4:24158c44f02e 818 deviceParams_t devicePrm;
brdirais 0:2cb6ce8e07bd 819
brdirais 0:2cb6ce8e07bd 820
davide.aliprandi@st.com 4:24158c44f02e 821 /** PWM timer variables */
brdirais 0:2cb6ce8e07bd 822
davide.aliprandi@st.com 4:24158c44f02e 823 bool pwm_1A_activated;
davide.aliprandi@st.com 4:24158c44f02e 824 bool pwm_2A_activated;
davide.aliprandi@st.com 4:24158c44f02e 825 bool pwm_1B_activated;
davide.aliprandi@st.com 4:24158c44f02e 826 bool pwm_2B_activated;
davide.aliprandi@st.com 4:24158c44f02e 827 };
brdirais 0:2cb6ce8e07bd 828
davide.aliprandi@st.com 4:24158c44f02e 829 #endif /* __L6206_CLASS_H */
brdirais 0:2cb6ce8e07bd 830
brdirais 0:2cb6ce8e07bd 831 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
brdirais 0:2cb6ce8e07bd 832
brdirais 0:2cb6ce8e07bd 833
davide.aliprandi@st.com 4:24158c44f02e 834