Use BDCMotor_class.h instead of motor_class.h

Dependents:   HelloWorld_IHM04A1

Fork of X_NUCLEO_IHM04A1 by ST

Committer:
Manu_L
Date:
Tue Jun 14 12:14:28 2016 +0000
Revision:
3:b06e38d365d7
Parent:
2:65057305b86e
Use BDCMotor_class.h instead of Motor_class.h

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