Added ST_INTERFACES library.

Dependencies:   ST_INTERFACES

Fork of X_NUCLEO_IHM04A1 by ST

Committer:
Davidroid
Date:
Thu Sep 29 09:53:00 2016 +0000
Revision:
4:e1e5466ad5a7
Parent:
3:b06e38d365d7
Added ST_INTERFACES library.

Who changed what in which revision?

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