Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ST_INTERFACES
Dependents: HelloWorld_IHM14A1
Fork of X_NUCLEO_IHM14A1 by
Components/STSPIN820/STSPIN820.h@2:4fd08b67958c, 2018-09-27 (annotated)
- Committer:
- Davidroid
- Date:
- Thu Sep 27 14:05:44 2018 +0000
- Revision:
- 2:4fd08b67958c
- Parent:
- 1:bc265521eb00
Library to handle the X-NUCLEO-IHM14A1 Motor Control Expansion Board based on the STSPIN820 component.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Davidroid | 1:bc265521eb00 | 1 | /** |
Davidroid | 2:4fd08b67958c | 2 | ******************************************************************************* |
Davidroid | 2:4fd08b67958c | 3 | * @file STSPIN820.h |
Davidroid | 2:4fd08b67958c | 4 | * @author Davide Aliprandi, STMicroelectronics |
Davidroid | 2:4fd08b67958c | 5 | * @version V1.0.0 |
Davidroid | 2:4fd08b67958c | 6 | * @date May 3rd, 2018 |
Davidroid | 2:4fd08b67958c | 7 | * @brief This file contains the class definition of an STSPIN820 Motor |
Davidroid | 2:4fd08b67958c | 8 | * Control component. |
Davidroid | 2:4fd08b67958c | 9 | * @note (C) COPYRIGHT 2018 STMicroelectronics |
Davidroid | 2:4fd08b67958c | 10 | ******************************************************************************* |
Davidroid | 2:4fd08b67958c | 11 | * @attention |
Davidroid | 2:4fd08b67958c | 12 | * |
Davidroid | 2:4fd08b67958c | 13 | * <h2><center>© COPYRIGHT(c) 2018 STMicroelectronics</center></h2> |
Davidroid | 2:4fd08b67958c | 14 | * |
Davidroid | 2:4fd08b67958c | 15 | * Redistribution and use in source and binary forms, with or without modification, |
Davidroid | 2:4fd08b67958c | 16 | * are permitted provided that the following conditions are met: |
Davidroid | 2:4fd08b67958c | 17 | * 1. Redistributions of source code must retain the above copyright notice, |
Davidroid | 2:4fd08b67958c | 18 | * this list of conditions and the following disclaimer. |
Davidroid | 2:4fd08b67958c | 19 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
Davidroid | 2:4fd08b67958c | 20 | * this list of conditions and the following disclaimer in the documentation |
Davidroid | 2:4fd08b67958c | 21 | * and/or other materials provided with the distribution. |
Davidroid | 2:4fd08b67958c | 22 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
Davidroid | 2:4fd08b67958c | 23 | * may be used to endorse or promote products derived from this software |
Davidroid | 2:4fd08b67958c | 24 | * without specific prior written permission. |
Davidroid | 2:4fd08b67958c | 25 | * |
Davidroid | 2:4fd08b67958c | 26 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
Davidroid | 2:4fd08b67958c | 27 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
Davidroid | 2:4fd08b67958c | 28 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Davidroid | 2:4fd08b67958c | 29 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
Davidroid | 2:4fd08b67958c | 30 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
Davidroid | 2:4fd08b67958c | 31 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
Davidroid | 2:4fd08b67958c | 32 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
Davidroid | 2:4fd08b67958c | 33 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
Davidroid | 2:4fd08b67958c | 34 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
Davidroid | 2:4fd08b67958c | 35 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Davidroid | 2:4fd08b67958c | 36 | * |
Davidroid | 2:4fd08b67958c | 37 | ******************************************************************************* |
Davidroid | 2:4fd08b67958c | 38 | */ |
Davidroid | 1:bc265521eb00 | 39 | |
Davidroid | 1:bc265521eb00 | 40 | |
Davidroid | 1:bc265521eb00 | 41 | /* Generated with STM32CubeTOO -----------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 42 | |
Davidroid | 1:bc265521eb00 | 43 | |
Davidroid | 1:bc265521eb00 | 44 | /* Revision ------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 45 | /* |
Davidroid | 1:bc265521eb00 | 46 | Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev |
Davidroid | 1:bc265521eb00 | 47 | Branch/Trunk/Tag: trunk |
Davidroid | 1:bc265521eb00 | 48 | Based on: X-CUBE-SPN14/trunk/Drivers/BSP/Components/STSPIN820/STSPIN820.h |
Davidroid | 1:bc265521eb00 | 49 | Revision: 0 |
Davidroid | 1:bc265521eb00 | 50 | */ |
Davidroid | 1:bc265521eb00 | 51 | |
Davidroid | 1:bc265521eb00 | 52 | |
Davidroid | 1:bc265521eb00 | 53 | /* Define to prevent recursive inclusion -------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 54 | |
Davidroid | 1:bc265521eb00 | 55 | #ifndef __STSPIN820_CLASS_H |
Davidroid | 1:bc265521eb00 | 56 | #define __STSPIN820_CLASS_H |
Davidroid | 1:bc265521eb00 | 57 | |
Davidroid | 1:bc265521eb00 | 58 | |
Davidroid | 1:bc265521eb00 | 59 | /* Includes ------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 60 | |
Davidroid | 1:bc265521eb00 | 61 | /* ACTION 1 ------------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 62 | * Include here platform specific header files. * |
Davidroid | 1:bc265521eb00 | 63 | *----------------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 64 | #include "mbed.h" |
Davidroid | 1:bc265521eb00 | 65 | /* ACTION 2 ------------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 66 | * Include here component specific header files. * |
Davidroid | 1:bc265521eb00 | 67 | *----------------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 68 | #include "STSPIN820_def.h" |
Davidroid | 1:bc265521eb00 | 69 | /* ACTION 3 ------------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 70 | * Include here interface specific header files. * |
Davidroid | 1:bc265521eb00 | 71 | * * |
Davidroid | 1:bc265521eb00 | 72 | * Example: * |
Davidroid | 2:4fd08b67958c | 73 | * #include "../Interfaces/Humidity.h" * |
Davidroid | 2:4fd08b67958c | 74 | * #include "../Interfaces/Temperature.h" * |
Davidroid | 1:bc265521eb00 | 75 | *----------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 76 | #include "StepperMotor.h" |
Davidroid | 1:bc265521eb00 | 77 | |
Davidroid | 1:bc265521eb00 | 78 | |
Davidroid | 1:bc265521eb00 | 79 | /* Classes -------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 80 | |
Davidroid | 1:bc265521eb00 | 81 | /** |
Davidroid | 2:4fd08b67958c | 82 | * @brief Class representing an STSPIN820 component. |
Davidroid | 1:bc265521eb00 | 83 | */ |
Davidroid | 2:4fd08b67958c | 84 | class STSPIN820 : public StepperMotor |
Davidroid | 1:bc265521eb00 | 85 | { |
Davidroid | 1:bc265521eb00 | 86 | public: |
Davidroid | 1:bc265521eb00 | 87 | |
Davidroid | 1:bc265521eb00 | 88 | /*** Constructor and Destructor Methods ***/ |
Davidroid | 1:bc265521eb00 | 89 | |
Davidroid | 1:bc265521eb00 | 90 | /** |
Davidroid | 1:bc265521eb00 | 91 | * @brief Constructor. |
Davidroid | 2:4fd08b67958c | 92 | * @param en_fault_irq pin name of the EN_FAULT pin of the component. |
Davidroid | 2:4fd08b67958c | 93 | * @param standby_reset pin name of the STBY\RST pin of the component. |
Davidroid | 2:4fd08b67958c | 94 | * @param direction pin name of the DIR pin of the component. |
Davidroid | 2:4fd08b67958c | 95 | * @param ref_pwm pin name of the REF_PWM pin of the component. |
Davidroid | 2:4fd08b67958c | 96 | * @param decay pin name of the DECAY pin of the component. |
Davidroid | 2:4fd08b67958c | 97 | * @param step_clock pin name of the STCK pin of the component. |
Davidroid | 2:4fd08b67958c | 98 | * @param mode1 pin name of the MODE1 pin of the component. |
Davidroid | 2:4fd08b67958c | 99 | * @param mode2 pin name of the MODE2 pin of the component. |
Davidroid | 2:4fd08b67958c | 100 | * @param mode3 pin name of the MODE3 pin of the component. |
Davidroid | 1:bc265521eb00 | 101 | */ |
Davidroid | 2:4fd08b67958c | 102 | STSPIN820(PinName en_fault_irq, PinName standby_reset, PinName direction, |
Davidroid | 2:4fd08b67958c | 103 | PinName ref_pwm, PinName decay, PinName step_clock, |
Davidroid | 2:4fd08b67958c | 104 | PinName mode1, PinName mode2, PinName mode3) : |
Davidroid | 2:4fd08b67958c | 105 | StepperMotor(), |
Davidroid | 2:4fd08b67958c | 106 | en_fault_irq(en_fault_irq), |
Davidroid | 2:4fd08b67958c | 107 | standby_reset(standby_reset), |
Davidroid | 2:4fd08b67958c | 108 | direction(direction), |
Davidroid | 2:4fd08b67958c | 109 | ref_pwm(ref_pwm), |
Davidroid | 2:4fd08b67958c | 110 | decay(decay), |
Davidroid | 2:4fd08b67958c | 111 | step_clock(step_clock), |
Davidroid | 2:4fd08b67958c | 112 | mode1(mode1), |
Davidroid | 2:4fd08b67958c | 113 | mode2(mode2), |
Davidroid | 2:4fd08b67958c | 114 | mode3(mode3) |
Davidroid | 1:bc265521eb00 | 115 | { |
Davidroid | 2:4fd08b67958c | 116 | /* Checking stackability. */ |
Davidroid | 2:4fd08b67958c | 117 | if (!(number_of_devices < MAX_NUMBER_OF_DEVICES)) { |
Davidroid | 2:4fd08b67958c | 118 | error("Instantiation of the STSPIN820 component failed: it can be stacked up to %d times.\r\n", MAX_NUMBER_OF_DEVICES); |
Davidroid | 2:4fd08b67958c | 119 | } |
Davidroid | 2:4fd08b67958c | 120 | |
Davidroid | 1:bc265521eb00 | 121 | /* ACTION 4 ----------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 122 | * Initialize here the component's member variables, one variable per * |
Davidroid | 1:bc265521eb00 | 123 | * line. * |
Davidroid | 1:bc265521eb00 | 124 | * * |
Davidroid | 1:bc265521eb00 | 125 | * Example: * |
Davidroid | 1:bc265521eb00 | 126 | * measure = 0; * |
Davidroid | 1:bc265521eb00 | 127 | * instance_id = number_of_instances++; * |
Davidroid | 1:bc265521eb00 | 128 | *--------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 129 | flag_interrupt_callback = 0; |
Davidroid | 1:bc265521eb00 | 130 | error_handler_callback = 0; |
Davidroid | 1:bc265521eb00 | 131 | toggle_odd = 0; |
Davidroid | 2:4fd08b67958c | 132 | pwm_period = 1; |
Davidroid | 2:4fd08b67958c | 133 | pwm_duty_cycle = 0; |
Davidroid | 2:4fd08b67958c | 134 | device_instance = number_of_devices++; |
Davidroid | 1:bc265521eb00 | 135 | } |
Davidroid | 1:bc265521eb00 | 136 | |
Davidroid | 1:bc265521eb00 | 137 | /** |
Davidroid | 1:bc265521eb00 | 138 | * @brief Destructor. |
Davidroid | 1:bc265521eb00 | 139 | */ |
Davidroid | 1:bc265521eb00 | 140 | virtual ~STSPIN820(void) {} |
Davidroid | 1:bc265521eb00 | 141 | |
Davidroid | 1:bc265521eb00 | 142 | |
Davidroid | 1:bc265521eb00 | 143 | /*** Public Component Related Methods ***/ |
Davidroid | 1:bc265521eb00 | 144 | |
Davidroid | 1:bc265521eb00 | 145 | /* ACTION 5 --------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 146 | * Implement here the component's public methods, as wrappers of the C * |
Davidroid | 1:bc265521eb00 | 147 | * component's functions. * |
Davidroid | 1:bc265521eb00 | 148 | * They should be: * |
Davidroid | 1:bc265521eb00 | 149 | * + Methods with the same name of the C component's virtual table's * |
Davidroid | 1:bc265521eb00 | 150 | * functions (1); * |
Davidroid | 1:bc265521eb00 | 151 | * + Methods with the same name of the C component's extended virtual * |
Davidroid | 1:bc265521eb00 | 152 | * table's functions, if any (2). * |
Davidroid | 1:bc265521eb00 | 153 | * * |
Davidroid | 1:bc265521eb00 | 154 | * Example: * |
Davidroid | 1:bc265521eb00 | 155 | * virtual int get_value(float *p_data) //(1) * |
Davidroid | 1:bc265521eb00 | 156 | * { * |
Davidroid | 1:bc265521eb00 | 157 | * return COMPONENT_get_value(float *pf_data); * |
Davidroid | 1:bc265521eb00 | 158 | * } * |
Davidroid | 1:bc265521eb00 | 159 | * * |
Davidroid | 1:bc265521eb00 | 160 | * virtual int enable_feature(void) //(2) * |
Davidroid | 1:bc265521eb00 | 161 | * { * |
Davidroid | 1:bc265521eb00 | 162 | * return COMPONENT_enable_feature(); * |
Davidroid | 1:bc265521eb00 | 163 | * } * |
Davidroid | 1:bc265521eb00 | 164 | *------------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 165 | virtual int init(void *init = NULL) |
Davidroid | 1:bc265521eb00 | 166 | { |
Davidroid | 1:bc265521eb00 | 167 | return (int) STSPIN820_Init((void *) init); |
Davidroid | 1:bc265521eb00 | 168 | } |
Davidroid | 1:bc265521eb00 | 169 | |
Davidroid | 1:bc265521eb00 | 170 | virtual int read_id(uint8_t *id = NULL) |
Davidroid | 1:bc265521eb00 | 171 | { |
Davidroid | 1:bc265521eb00 | 172 | return (int) STSPIN820_ReadId((uint8_t *) id); |
Davidroid | 1:bc265521eb00 | 173 | } |
Davidroid | 1:bc265521eb00 | 174 | |
Davidroid | 1:bc265521eb00 | 175 | virtual void attach_error_handler(void (*callback)(uint16_t error)) |
Davidroid | 1:bc265521eb00 | 176 | { |
Davidroid | 1:bc265521eb00 | 177 | STSPIN820_AttachErrorHandler((void (*)(uint16_t error)) callback); |
Davidroid | 1:bc265521eb00 | 178 | } |
Davidroid | 1:bc265521eb00 | 179 | |
Davidroid | 1:bc265521eb00 | 180 | virtual void attach_flag_interrupt(void (*callback)(void)) |
Davidroid | 1:bc265521eb00 | 181 | { |
Davidroid | 1:bc265521eb00 | 182 | STSPIN820_AttachFlagInterrupt((void (*)(void)) callback); |
Davidroid | 1:bc265521eb00 | 183 | } |
Davidroid | 1:bc265521eb00 | 184 | |
Davidroid | 1:bc265521eb00 | 185 | virtual void flag_interrupt_handler(void) |
Davidroid | 1:bc265521eb00 | 186 | { |
Davidroid | 1:bc265521eb00 | 187 | STSPIN820_FlagInterruptHandler(); |
Davidroid | 1:bc265521eb00 | 188 | } |
Davidroid | 1:bc265521eb00 | 189 | |
Davidroid | 2:4fd08b67958c | 190 | virtual unsigned int get_acceleration(void) |
Davidroid | 1:bc265521eb00 | 191 | { |
Davidroid | 2:4fd08b67958c | 192 | return (unsigned int) STSPIN820_GetAcceleration(); |
Davidroid | 1:bc265521eb00 | 193 | } |
Davidroid | 1:bc265521eb00 | 194 | |
Davidroid | 2:4fd08b67958c | 195 | virtual unsigned int get_speed(void) |
Davidroid | 1:bc265521eb00 | 196 | { |
Davidroid | 2:4fd08b67958c | 197 | return (unsigned int) STSPIN820_GetCurrentSpeed(); |
Davidroid | 1:bc265521eb00 | 198 | } |
Davidroid | 1:bc265521eb00 | 199 | |
Davidroid | 2:4fd08b67958c | 200 | virtual unsigned int get_deceleration(void) |
Davidroid | 1:bc265521eb00 | 201 | { |
Davidroid | 2:4fd08b67958c | 202 | return (unsigned int) STSPIN820_GetDeceleration(); |
Davidroid | 1:bc265521eb00 | 203 | } |
Davidroid | 1:bc265521eb00 | 204 | |
Davidroid | 2:4fd08b67958c | 205 | virtual motor_state_t get_device_state(void) |
Davidroid | 1:bc265521eb00 | 206 | { |
Davidroid | 2:4fd08b67958c | 207 | return (motor_state_t) STSPIN820_GetDeviceState(); |
Davidroid | 1:bc265521eb00 | 208 | } |
Davidroid | 1:bc265521eb00 | 209 | |
Davidroid | 1:bc265521eb00 | 210 | virtual uint32_t get_fw_version(void) |
Davidroid | 1:bc265521eb00 | 211 | { |
Davidroid | 1:bc265521eb00 | 212 | return (uint32_t) STSPIN820_GetFwVersion(); |
Davidroid | 1:bc265521eb00 | 213 | } |
Davidroid | 1:bc265521eb00 | 214 | |
Davidroid | 2:4fd08b67958c | 215 | virtual signed int get_mark(void) |
Davidroid | 1:bc265521eb00 | 216 | { |
Davidroid | 2:4fd08b67958c | 217 | return (signed int) STSPIN820_GetMark(); |
Davidroid | 1:bc265521eb00 | 218 | } |
Davidroid | 1:bc265521eb00 | 219 | |
Davidroid | 2:4fd08b67958c | 220 | virtual unsigned int get_max_speed(void) |
Davidroid | 1:bc265521eb00 | 221 | { |
Davidroid | 2:4fd08b67958c | 222 | return (unsigned int) STSPIN820_GetMaxSpeed(); |
Davidroid | 2:4fd08b67958c | 223 | } |
Davidroid | 2:4fd08b67958c | 224 | |
Davidroid | 2:4fd08b67958c | 225 | virtual unsigned int get_min_speed(void) |
Davidroid | 2:4fd08b67958c | 226 | { |
Davidroid | 2:4fd08b67958c | 227 | return (unsigned int) STSPIN820_GetMinSpeed(); |
Davidroid | 1:bc265521eb00 | 228 | } |
Davidroid | 1:bc265521eb00 | 229 | |
Davidroid | 2:4fd08b67958c | 230 | virtual signed int get_position(void) |
Davidroid | 1:bc265521eb00 | 231 | { |
Davidroid | 2:4fd08b67958c | 232 | return (signed int) STSPIN820_GetPosition(); |
Davidroid | 1:bc265521eb00 | 233 | } |
Davidroid | 1:bc265521eb00 | 234 | |
Davidroid | 2:4fd08b67958c | 235 | virtual void go_home(void) |
Davidroid | 1:bc265521eb00 | 236 | { |
Davidroid | 2:4fd08b67958c | 237 | STSPIN820_GoHome(); |
Davidroid | 1:bc265521eb00 | 238 | } |
Davidroid | 1:bc265521eb00 | 239 | |
Davidroid | 2:4fd08b67958c | 240 | virtual void go_mark(void) |
Davidroid | 1:bc265521eb00 | 241 | { |
Davidroid | 2:4fd08b67958c | 242 | STSPIN820_GoMark(); |
Davidroid | 2:4fd08b67958c | 243 | } |
Davidroid | 2:4fd08b67958c | 244 | |
Davidroid | 2:4fd08b67958c | 245 | virtual void go_to(signed int position) |
Davidroid | 2:4fd08b67958c | 246 | { |
Davidroid | 2:4fd08b67958c | 247 | STSPIN820_GoTo((signed int) position); |
Davidroid | 1:bc265521eb00 | 248 | } |
Davidroid | 1:bc265521eb00 | 249 | |
Davidroid | 2:4fd08b67958c | 250 | /** |
Davidroid | 2:4fd08b67958c | 251 | * @brief Stopping the motor through an immediate deceleration up to zero speed. |
Davidroid | 2:4fd08b67958c | 252 | * @param None. |
Davidroid | 2:4fd08b67958c | 253 | * @retval None. |
Davidroid | 2:4fd08b67958c | 254 | */ |
Davidroid | 2:4fd08b67958c | 255 | virtual void soft_stop(void) |
Davidroid | 1:bc265521eb00 | 256 | { |
Davidroid | 2:4fd08b67958c | 257 | STSPIN820_SoftStop(); |
Davidroid | 1:bc265521eb00 | 258 | } |
Davidroid | 1:bc265521eb00 | 259 | |
Davidroid | 2:4fd08b67958c | 260 | /** |
Davidroid | 2:4fd08b67958c | 261 | * @brief Stopping the motor through an immediate infinite deceleration. |
Davidroid | 2:4fd08b67958c | 262 | * @param None. |
Davidroid | 2:4fd08b67958c | 263 | * @retval None. |
Davidroid | 2:4fd08b67958c | 264 | */ |
Davidroid | 2:4fd08b67958c | 265 | virtual void hard_stop(void) |
Davidroid | 1:bc265521eb00 | 266 | { |
Davidroid | 2:4fd08b67958c | 267 | STSPIN820_HardStop(); |
Davidroid | 1:bc265521eb00 | 268 | } |
Davidroid | 1:bc265521eb00 | 269 | |
Davidroid | 2:4fd08b67958c | 270 | /** |
Davidroid | 2:4fd08b67958c | 271 | * @brief Disabling the power bridge after performing a deceleration to zero. |
Davidroid | 2:4fd08b67958c | 272 | * @param None. |
Davidroid | 2:4fd08b67958c | 273 | * @retval None. |
Davidroid | 2:4fd08b67958c | 274 | */ |
Davidroid | 2:4fd08b67958c | 275 | virtual void soft_hiz(void) {} |
Davidroid | 1:bc265521eb00 | 276 | |
Davidroid | 2:4fd08b67958c | 277 | /** |
Davidroid | 2:4fd08b67958c | 278 | * @brief Disabling the power bridge immediately. |
Davidroid | 2:4fd08b67958c | 279 | * @param None. |
Davidroid | 2:4fd08b67958c | 280 | * @retval None. |
Davidroid | 2:4fd08b67958c | 281 | */ |
Davidroid | 2:4fd08b67958c | 282 | virtual void hard_hiz(void) |
Davidroid | 1:bc265521eb00 | 283 | { |
Davidroid | 2:4fd08b67958c | 284 | STSPIN820_HardHiZ(); |
Davidroid | 1:bc265521eb00 | 285 | } |
Davidroid | 1:bc265521eb00 | 286 | |
Davidroid | 2:4fd08b67958c | 287 | virtual void move(direction_t direction, unsigned int steps) |
Davidroid | 1:bc265521eb00 | 288 | { |
Davidroid | 2:4fd08b67958c | 289 | STSPIN820_Move((motor_direction_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (unsigned int) steps); |
Davidroid | 1:bc265521eb00 | 290 | } |
Davidroid | 1:bc265521eb00 | 291 | |
Davidroid | 2:4fd08b67958c | 292 | virtual void run(direction_t direction) |
Davidroid | 1:bc265521eb00 | 293 | { |
Davidroid | 2:4fd08b67958c | 294 | STSPIN820_Run((motor_direction_t) direction); |
Davidroid | 2:4fd08b67958c | 295 | } |
Davidroid | 2:4fd08b67958c | 296 | |
Davidroid | 2:4fd08b67958c | 297 | virtual bool set_acceleration(unsigned int acceleration) |
Davidroid | 2:4fd08b67958c | 298 | { |
Davidroid | 2:4fd08b67958c | 299 | return (bool) STSPIN820_SetAcceleration((unsigned int) acceleration); |
Davidroid | 1:bc265521eb00 | 300 | } |
Davidroid | 1:bc265521eb00 | 301 | |
Davidroid | 2:4fd08b67958c | 302 | virtual bool set_deceleration(unsigned int deceleration) |
Davidroid | 1:bc265521eb00 | 303 | { |
Davidroid | 2:4fd08b67958c | 304 | return (bool) STSPIN820_SetDeceleration((unsigned int) deceleration); |
Davidroid | 1:bc265521eb00 | 305 | } |
Davidroid | 1:bc265521eb00 | 306 | |
Davidroid | 2:4fd08b67958c | 307 | virtual void set_home(void) |
Davidroid | 1:bc265521eb00 | 308 | { |
Davidroid | 2:4fd08b67958c | 309 | STSPIN820_SetHome(); |
Davidroid | 1:bc265521eb00 | 310 | } |
Davidroid | 1:bc265521eb00 | 311 | |
Davidroid | 2:4fd08b67958c | 312 | virtual void set_mark(void) |
Davidroid | 1:bc265521eb00 | 313 | { |
Davidroid | 2:4fd08b67958c | 314 | STSPIN820_SetMark(); |
Davidroid | 1:bc265521eb00 | 315 | } |
Davidroid | 1:bc265521eb00 | 316 | |
Davidroid | 2:4fd08b67958c | 317 | virtual bool set_max_speed(unsigned int speed) |
Davidroid | 1:bc265521eb00 | 318 | { |
Davidroid | 2:4fd08b67958c | 319 | return (bool) STSPIN820_SetMaxSpeed((unsigned int) speed); |
Davidroid | 1:bc265521eb00 | 320 | } |
Davidroid | 1:bc265521eb00 | 321 | |
Davidroid | 2:4fd08b67958c | 322 | virtual bool set_min_speed(unsigned int speed) |
Davidroid | 1:bc265521eb00 | 323 | { |
Davidroid | 2:4fd08b67958c | 324 | return (bool) STSPIN820_SetMinSpeed((unsigned int) speed); |
Davidroid | 1:bc265521eb00 | 325 | } |
Davidroid | 1:bc265521eb00 | 326 | |
Davidroid | 2:4fd08b67958c | 327 | virtual void wait_while_active(void) |
Davidroid | 1:bc265521eb00 | 328 | { |
Davidroid | 2:4fd08b67958c | 329 | STSPIN820_WaitWhileActive(); |
Davidroid | 1:bc265521eb00 | 330 | } |
Davidroid | 1:bc265521eb00 | 331 | |
Davidroid | 2:4fd08b67958c | 332 | virtual void cmd_disable(void) |
Davidroid | 1:bc265521eb00 | 333 | { |
Davidroid | 2:4fd08b67958c | 334 | STSPIN820_Disable(); |
Davidroid | 2:4fd08b67958c | 335 | } |
Davidroid | 2:4fd08b67958c | 336 | |
Davidroid | 2:4fd08b67958c | 337 | virtual void cmd_enable(void) |
Davidroid | 2:4fd08b67958c | 338 | { |
Davidroid | 2:4fd08b67958c | 339 | STSPIN820_Enable(); |
Davidroid | 1:bc265521eb00 | 340 | } |
Davidroid | 1:bc265521eb00 | 341 | |
Davidroid | 2:4fd08b67958c | 342 | virtual bool set_step_mode(step_mode_t step_mode) |
Davidroid | 1:bc265521eb00 | 343 | { |
Davidroid | 2:4fd08b67958c | 344 | return (bool) STSPIN820_SetStepMode((motor_step_mode_t) step_mode); |
Davidroid | 1:bc265521eb00 | 345 | } |
Davidroid | 1:bc265521eb00 | 346 | |
Davidroid | 2:4fd08b67958c | 347 | virtual void set_direction(direction_t direction) |
Davidroid | 1:bc265521eb00 | 348 | { |
Davidroid | 2:4fd08b67958c | 349 | STSPIN820_SetDirection((motor_direction_t) direction); |
Davidroid | 1:bc265521eb00 | 350 | } |
Davidroid | 1:bc265521eb00 | 351 | |
Davidroid | 2:4fd08b67958c | 352 | virtual void go_to_dir(direction_t direction, int32_t targetPosition) |
Davidroid | 1:bc265521eb00 | 353 | { |
Davidroid | 2:4fd08b67958c | 354 | STSPIN820_GoToDir((motor_direction_t) direction, (int32_t) targetPosition); |
Davidroid | 1:bc265521eb00 | 355 | } |
Davidroid | 1:bc265521eb00 | 356 | |
Davidroid | 2:4fd08b67958c | 357 | virtual unsigned int get_status(void) |
Davidroid | 1:bc265521eb00 | 358 | { |
Davidroid | 2:4fd08b67958c | 359 | return (unsigned int) STSPIN820_CheckStatusHw(); |
Davidroid | 1:bc265521eb00 | 360 | } |
Davidroid | 1:bc265521eb00 | 361 | |
Davidroid | 2:4fd08b67958c | 362 | virtual void cmd_reset_device(void) |
Davidroid | 1:bc265521eb00 | 363 | { |
Davidroid | 2:4fd08b67958c | 364 | STSPIN820_PutDeviceInStandby(); |
Davidroid | 1:bc265521eb00 | 365 | } |
Davidroid | 1:bc265521eb00 | 366 | |
Davidroid | 1:bc265521eb00 | 367 | virtual uint8_t get_nb_devices(void) |
Davidroid | 1:bc265521eb00 | 368 | { |
Davidroid | 1:bc265521eb00 | 369 | return (uint8_t) STSPIN820_GetNbDevices(); |
Davidroid | 1:bc265521eb00 | 370 | } |
Davidroid | 1:bc265521eb00 | 371 | |
Davidroid | 2:4fd08b67958c | 372 | virtual uint32_t get_bridge_input_pwm_freq(void) |
Davidroid | 1:bc265521eb00 | 373 | { |
Davidroid | 2:4fd08b67958c | 374 | return (uint32_t) STSPIN820_VrefPwmGetFreq(); |
Davidroid | 1:bc265521eb00 | 375 | } |
Davidroid | 1:bc265521eb00 | 376 | |
Davidroid | 2:4fd08b67958c | 377 | virtual void set_bridge_input_pwm_freq(uint32_t newFreq) |
Davidroid | 1:bc265521eb00 | 378 | { |
Davidroid | 2:4fd08b67958c | 379 | STSPIN820_VrefPwmSetFreq((uint32_t) newFreq); |
Davidroid | 1:bc265521eb00 | 380 | } |
Davidroid | 1:bc265521eb00 | 381 | |
Davidroid | 2:4fd08b67958c | 382 | virtual void set_stop_mode(motor_stop_mode_t stopMode) |
Davidroid | 1:bc265521eb00 | 383 | { |
Davidroid | 2:4fd08b67958c | 384 | STSPIN820_SetStopMode((motor_stop_mode_t) stopMode); |
Davidroid | 1:bc265521eb00 | 385 | } |
Davidroid | 1:bc265521eb00 | 386 | |
Davidroid | 2:4fd08b67958c | 387 | virtual motor_stop_mode_t get_stop_mode(void) |
Davidroid | 1:bc265521eb00 | 388 | { |
Davidroid | 2:4fd08b67958c | 389 | return (motor_stop_mode_t) STSPIN820_GetStopMode(); |
Davidroid | 1:bc265521eb00 | 390 | } |
Davidroid | 1:bc265521eb00 | 391 | |
Davidroid | 2:4fd08b67958c | 392 | virtual void set_decay_mode(motor_decay_mode_t decayMode) |
Davidroid | 1:bc265521eb00 | 393 | { |
Davidroid | 2:4fd08b67958c | 394 | STSPIN820_SetDecayMode((motor_decay_mode_t) decayMode); |
Davidroid | 1:bc265521eb00 | 395 | } |
Davidroid | 1:bc265521eb00 | 396 | |
Davidroid | 2:4fd08b67958c | 397 | virtual motor_decay_mode_t get_decay_mode(void) |
Davidroid | 1:bc265521eb00 | 398 | { |
Davidroid | 2:4fd08b67958c | 399 | return (motor_decay_mode_t) STSPIN820_GetDecayMode(); |
Davidroid | 1:bc265521eb00 | 400 | } |
Davidroid | 1:bc265521eb00 | 401 | |
Davidroid | 2:4fd08b67958c | 402 | virtual motor_step_mode_t get_step_mode(void) |
Davidroid | 1:bc265521eb00 | 403 | { |
Davidroid | 2:4fd08b67958c | 404 | return (motor_step_mode_t) STSPIN820_GetStepMode(); |
Davidroid | 1:bc265521eb00 | 405 | } |
Davidroid | 1:bc265521eb00 | 406 | |
Davidroid | 2:4fd08b67958c | 407 | virtual direction_t get_direction(void) |
Davidroid | 1:bc265521eb00 | 408 | { |
Davidroid | 2:4fd08b67958c | 409 | return (direction_t) (STSPIN820_GetDirection() == FORWARD ? StepperMotor::FWD : StepperMotor::BWD); |
Davidroid | 1:bc265521eb00 | 410 | } |
Davidroid | 1:bc265521eb00 | 411 | |
Davidroid | 2:4fd08b67958c | 412 | virtual void exit_device_from_reset(void) |
Davidroid | 1:bc265521eb00 | 413 | { |
Davidroid | 2:4fd08b67958c | 414 | STSPIN820_ExitDeviceFromStandby(); |
Davidroid | 1:bc265521eb00 | 415 | } |
Davidroid | 1:bc265521eb00 | 416 | |
Davidroid | 2:4fd08b67958c | 417 | virtual void set_torque(motor_torque_mode_t torqueMode, uint8_t torqueValue) |
Davidroid | 1:bc265521eb00 | 418 | { |
Davidroid | 2:4fd08b67958c | 419 | STSPIN820_SetTorque((motor_torque_mode_t) torqueMode, (uint8_t) torqueValue); |
Davidroid | 1:bc265521eb00 | 420 | } |
Davidroid | 1:bc265521eb00 | 421 | |
Davidroid | 2:4fd08b67958c | 422 | virtual uint8_t get_torque(motor_torque_mode_t torqueMode) |
Davidroid | 1:bc265521eb00 | 423 | { |
Davidroid | 2:4fd08b67958c | 424 | return (uint8_t) STSPIN820_GetTorque((motor_torque_mode_t) torqueMode); |
Davidroid | 1:bc265521eb00 | 425 | } |
Davidroid | 1:bc265521eb00 | 426 | |
Davidroid | 2:4fd08b67958c | 427 | virtual void set_torque_boost_enable(bool enable) |
Davidroid | 1:bc265521eb00 | 428 | { |
Davidroid | 2:4fd08b67958c | 429 | STSPIN820_SetTorqueBoostEnable((bool) enable); |
Davidroid | 1:bc265521eb00 | 430 | } |
Davidroid | 1:bc265521eb00 | 431 | |
Davidroid | 2:4fd08b67958c | 432 | virtual bool get_torque_boost_enable(void) |
Davidroid | 1:bc265521eb00 | 433 | { |
Davidroid | 2:4fd08b67958c | 434 | return (bool) STSPIN820_GetTorqueBoostEnable(); |
Davidroid | 1:bc265521eb00 | 435 | } |
Davidroid | 1:bc265521eb00 | 436 | |
Davidroid | 2:4fd08b67958c | 437 | virtual void set_torque_boost_threshold(uint16_t speedThreshold) |
Davidroid | 1:bc265521eb00 | 438 | { |
Davidroid | 2:4fd08b67958c | 439 | STSPIN820_SetTorqueBoostThreshold((uint16_t) speedThreshold); |
Davidroid | 1:bc265521eb00 | 440 | } |
Davidroid | 1:bc265521eb00 | 441 | |
Davidroid | 2:4fd08b67958c | 442 | virtual uint16_t get_torque_boost_threshold(void) |
Davidroid | 1:bc265521eb00 | 443 | { |
Davidroid | 2:4fd08b67958c | 444 | return (uint16_t) STSPIN820_GetTorqueBoostThreshold(); |
Davidroid | 1:bc265521eb00 | 445 | } |
Davidroid | 1:bc265521eb00 | 446 | |
Davidroid | 1:bc265521eb00 | 447 | |
Davidroid | 1:bc265521eb00 | 448 | /*** Public Interrupt Related Methods ***/ |
Davidroid | 1:bc265521eb00 | 449 | |
Davidroid | 1:bc265521eb00 | 450 | /* ACTION 6 --------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 451 | * Implement here interrupt related methods, if any. * |
Davidroid | 1:bc265521eb00 | 452 | * Note that interrupt handling is platform dependent, e.g.: * |
Davidroid | 1:bc265521eb00 | 453 | * + mbed: * |
Davidroid | 1:bc265521eb00 | 454 | * InterruptIn feature_irq(pin); //Interrupt object. * |
Davidroid | 1:bc265521eb00 | 455 | * feature_irq.rise(callback); //Attach a callback. * |
Davidroid | 1:bc265521eb00 | 456 | * feature_irq.mode(PullNone); //Set interrupt mode. * |
Davidroid | 1:bc265521eb00 | 457 | * feature_irq.enable_irq(); //Enable interrupt. * |
Davidroid | 1:bc265521eb00 | 458 | * feature_irq.disable_irq(); //Disable interrupt. * |
Davidroid | 1:bc265521eb00 | 459 | * + Arduino: * |
Davidroid | 1:bc265521eb00 | 460 | * attachInterrupt(pin, callback, RISING); //Attach a callback. * |
Davidroid | 1:bc265521eb00 | 461 | * detachInterrupt(pin); //Detach a callback. * |
Davidroid | 1:bc265521eb00 | 462 | * * |
Davidroid | 1:bc265521eb00 | 463 | * Example (mbed): * |
Davidroid | 1:bc265521eb00 | 464 | * void attach_feature_irq(void (*fptr) (void)) * |
Davidroid | 1:bc265521eb00 | 465 | * { * |
Davidroid | 1:bc265521eb00 | 466 | * feature_irq.rise(fptr); * |
Davidroid | 1:bc265521eb00 | 467 | * } * |
Davidroid | 1:bc265521eb00 | 468 | * * |
Davidroid | 1:bc265521eb00 | 469 | * void enable_feature_irq(void) * |
Davidroid | 1:bc265521eb00 | 470 | * { * |
Davidroid | 1:bc265521eb00 | 471 | * feature_irq.enable_irq(); * |
Davidroid | 1:bc265521eb00 | 472 | * } * |
Davidroid | 1:bc265521eb00 | 473 | * * |
Davidroid | 1:bc265521eb00 | 474 | * void disable_feature_irq(void) * |
Davidroid | 1:bc265521eb00 | 475 | * { * |
Davidroid | 1:bc265521eb00 | 476 | * feature_irq.disable_irq(); * |
Davidroid | 1:bc265521eb00 | 477 | * } * |
Davidroid | 1:bc265521eb00 | 478 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 479 | /** |
Davidroid | 2:4fd08b67958c | 480 | * @brief Attaching an interrupt handler to the FLAG interrupt. |
Davidroid | 2:4fd08b67958c | 481 | * @param fptr An interrupt handler. |
Davidroid | 2:4fd08b67958c | 482 | * @retval None. |
Davidroid | 2:4fd08b67958c | 483 | */ |
Davidroid | 2:4fd08b67958c | 484 | void attach_en_fault_irq(void (*fptr)(void)) |
Davidroid | 2:4fd08b67958c | 485 | { |
Davidroid | 2:4fd08b67958c | 486 | en_fault_irq.mode(PullUp); |
Davidroid | 2:4fd08b67958c | 487 | en_fault_irq.fall(fptr); |
Davidroid | 2:4fd08b67958c | 488 | } |
Davidroid | 2:4fd08b67958c | 489 | |
Davidroid | 2:4fd08b67958c | 490 | /** |
Davidroid | 2:4fd08b67958c | 491 | * @brief Enabling the FLAG interrupt handling. |
Davidroid | 2:4fd08b67958c | 492 | * @param None. |
Davidroid | 2:4fd08b67958c | 493 | * @retval None. |
Davidroid | 2:4fd08b67958c | 494 | */ |
Davidroid | 2:4fd08b67958c | 495 | void enable_en_fault_irq(void) |
Davidroid | 2:4fd08b67958c | 496 | { |
Davidroid | 2:4fd08b67958c | 497 | en_fault_irq.enable_irq(); |
Davidroid | 2:4fd08b67958c | 498 | } |
Davidroid | 2:4fd08b67958c | 499 | |
Davidroid | 2:4fd08b67958c | 500 | /** |
Davidroid | 2:4fd08b67958c | 501 | * @brief Disabling the FLAG interrupt handling. |
Davidroid | 2:4fd08b67958c | 502 | * @param None. |
Davidroid | 2:4fd08b67958c | 503 | * @retval None. |
Davidroid | 2:4fd08b67958c | 504 | */ |
Davidroid | 2:4fd08b67958c | 505 | void disable_en_fault_irq(void) |
Davidroid | 2:4fd08b67958c | 506 | { |
Davidroid | 2:4fd08b67958c | 507 | en_fault_irq.disable_irq(); |
Davidroid | 2:4fd08b67958c | 508 | } |
Davidroid | 1:bc265521eb00 | 509 | |
Davidroid | 1:bc265521eb00 | 510 | |
Davidroid | 1:bc265521eb00 | 511 | protected: |
Davidroid | 1:bc265521eb00 | 512 | |
Davidroid | 1:bc265521eb00 | 513 | /*** Protected Component Related Methods ***/ |
Davidroid | 1:bc265521eb00 | 514 | |
Davidroid | 1:bc265521eb00 | 515 | /* ACTION 7 --------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 516 | * Declare here the component's specific methods. * |
Davidroid | 1:bc265521eb00 | 517 | * They should be: * |
Davidroid | 1:bc265521eb00 | 518 | * + Methods with the same name of the C component's virtual table's * |
Davidroid | 1:bc265521eb00 | 519 | * functions (1); * |
Davidroid | 1:bc265521eb00 | 520 | * + Methods with the same name of the C component's extended virtual * |
Davidroid | 1:bc265521eb00 | 521 | * table's functions, if any (2); * |
Davidroid | 1:bc265521eb00 | 522 | * + Helper methods, if any, like functions declared in the component's * |
Davidroid | 1:bc265521eb00 | 523 | * source files but not pointed by the component's virtual table (3). * |
Davidroid | 1:bc265521eb00 | 524 | * * |
Davidroid | 1:bc265521eb00 | 525 | * Example: * |
Davidroid | 1:bc265521eb00 | 526 | * status_t COMPONENT_get_value(float *f); //(1) * |
Davidroid | 1:bc265521eb00 | 527 | * status_t COMPONENT_enable_feature(void); //(2) * |
Davidroid | 1:bc265521eb00 | 528 | * status_t COMPONENT_compute_average(void); //(3) * |
Davidroid | 1:bc265521eb00 | 529 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 530 | //Apply speed |
Davidroid | 2:4fd08b67958c | 531 | void STSPIN820_ApplySpeed(uint16_t newSpeed); |
Davidroid | 2:4fd08b67958c | 532 | //Apply torque |
Davidroid | 2:4fd08b67958c | 533 | void STSPIN820_ApplyTorque(motor_torque_mode_t torqueMode); |
Davidroid | 2:4fd08b67958c | 534 | //Compute speed profile |
Davidroid | 2:4fd08b67958c | 535 | void STSPIN820_ComputeSpeedProfile(uint32_t nbSteps); |
Davidroid | 2:4fd08b67958c | 536 | //Handler for the flag interrupt |
Davidroid | 1:bc265521eb00 | 537 | void STSPIN820_FlagInterruptHandler(void); |
Davidroid | 2:4fd08b67958c | 538 | //Set device paramenters to other values |
Davidroid | 1:bc265521eb00 | 539 | void STSPIN820_SetDeviceParamsOtherValues(void); |
Davidroid | 2:4fd08b67958c | 540 | //Set device paramenters to given values |
Davidroid | 1:bc265521eb00 | 541 | void STSPIN820_SetDeviceParamsToGivenValues(STSPIN820_init_t* initDevicePrm); |
Davidroid | 2:4fd08b67958c | 542 | //Set device paramenters to predefined values |
Davidroid | 1:bc265521eb00 | 543 | void STSPIN820_SetDeviceParamsToPredefinedValues(void); |
Davidroid | 2:4fd08b67958c | 544 | //Start moving |
Davidroid | 2:4fd08b67958c | 545 | void STSPIN820_StartMovement(void); |
Davidroid | 2:4fd08b67958c | 546 | //Handle the step clock |
Davidroid | 2:4fd08b67958c | 547 | void STSPIN820_StepClockHandler(void); |
Davidroid | 2:4fd08b67958c | 548 | //Start the STSPIN820 library |
Davidroid | 2:4fd08b67958c | 549 | status_t STSPIN820_Init(void *init); |
Davidroid | 2:4fd08b67958c | 550 | //Read Id to get driver instance |
Davidroid | 2:4fd08b67958c | 551 | status_t STSPIN820_ReadId(uint8_t *id); |
Davidroid | 2:4fd08b67958c | 552 | //Attach a user callback to the error handler |
Davidroid | 2:4fd08b67958c | 553 | void STSPIN820_AttachErrorHandler(void (*callback)(uint16_t)); |
Davidroid | 2:4fd08b67958c | 554 | //Attach a user callback to the flag Interrupt |
Davidroid | 2:4fd08b67958c | 555 | void STSPIN820_AttachFlagInterrupt(void (*callback)(void)); |
Davidroid | 2:4fd08b67958c | 556 | //Check if STSPIN820 has a fault by reading EN pin position |
Davidroid | 2:4fd08b67958c | 557 | uint8_t STSPIN820_CheckStatusHw(void); |
Davidroid | 2:4fd08b67958c | 558 | //Disable the power stage of the specified device |
Davidroid | 2:4fd08b67958c | 559 | void STSPIN820_Disable(void); |
Davidroid | 2:4fd08b67958c | 560 | //Enable the power stage of the specified device |
Davidroid | 2:4fd08b67958c | 561 | void STSPIN820_Enable(void); |
Davidroid | 2:4fd08b67958c | 562 | //Error handler which calls the user callback |
Davidroid | 2:4fd08b67958c | 563 | void STSPIN820_ErrorHandler(uint16_t error); |
Davidroid | 2:4fd08b67958c | 564 | //Exit STSPIN820 device from standby |
Davidroid | 2:4fd08b67958c | 565 | void STSPIN820_ExitDeviceFromStandby(void); |
Davidroid | 2:4fd08b67958c | 566 | //Return the acceleration in pps^2 |
Davidroid | 2:4fd08b67958c | 567 | uint16_t STSPIN820_GetAcceleration(void); |
Davidroid | 2:4fd08b67958c | 568 | //Return the current speed in pps |
Davidroid | 2:4fd08b67958c | 569 | uint16_t STSPIN820_GetCurrentSpeed(void); |
Davidroid | 2:4fd08b67958c | 570 | //Return the device decay mode |
Davidroid | 2:4fd08b67958c | 571 | motor_decay_mode_t STSPIN820_GetDecayMode(void); |
Davidroid | 2:4fd08b67958c | 572 | //Return the deceleration in pps^2 |
Davidroid | 2:4fd08b67958c | 573 | uint16_t STSPIN820_GetDeceleration(void); |
Davidroid | 2:4fd08b67958c | 574 | //Return the device state |
Davidroid | 2:4fd08b67958c | 575 | motor_state_t STSPIN820_GetDeviceState(void); |
Davidroid | 2:4fd08b67958c | 576 | //Get the motor current direction |
Davidroid | 2:4fd08b67958c | 577 | motor_direction_t STSPIN820_GetDirection(void); |
Davidroid | 2:4fd08b67958c | 578 | //Return the FW version |
Davidroid | 2:4fd08b67958c | 579 | uint32_t STSPIN820_GetFwVersion(void); |
Davidroid | 2:4fd08b67958c | 580 | //Return the mark position |
Davidroid | 2:4fd08b67958c | 581 | int32_t STSPIN820_GetMark(void); |
Davidroid | 2:4fd08b67958c | 582 | //Return the max speed in pps |
Davidroid | 2:4fd08b67958c | 583 | uint16_t STSPIN820_GetMaxSpeed(void); |
Davidroid | 2:4fd08b67958c | 584 | //Return the min speed in pps |
Davidroid | 2:4fd08b67958c | 585 | uint16_t STSPIN820_GetMinSpeed(void); |
Davidroid | 2:4fd08b67958c | 586 | //Return the nupber of devices |
Davidroid | 2:4fd08b67958c | 587 | uint8_t STSPIN820_GetNbDevices(void); |
Davidroid | 2:4fd08b67958c | 588 | //Return the ABS_POSITION (32b signed) |
Davidroid | 2:4fd08b67958c | 589 | int32_t STSPIN820_GetPosition(void); |
Davidroid | 2:4fd08b67958c | 590 | //Get the motor step mode |
Davidroid | 2:4fd08b67958c | 591 | motor_step_mode_t STSPIN820_GetStepMode(void); |
Davidroid | 2:4fd08b67958c | 592 | //Get the selected mode to stop the motor |
Davidroid | 2:4fd08b67958c | 593 | motor_stop_mode_t STSPIN820_GetStopMode(void); |
Davidroid | 2:4fd08b67958c | 594 | //Get the torque |
Davidroid | 2:4fd08b67958c | 595 | uint8_t STSPIN820_GetTorque(motor_torque_mode_t torqueMode); |
Davidroid | 2:4fd08b67958c | 596 | //Get the torque boost feature status |
Davidroid | 2:4fd08b67958c | 597 | bool STSPIN820_GetTorqueBoostEnable(void); |
Davidroid | 2:4fd08b67958c | 598 | //Get the torque boost threshold |
Davidroid | 2:4fd08b67958c | 599 | uint16_t STSPIN820_GetTorqueBoostThreshold(void); |
Davidroid | 2:4fd08b67958c | 600 | //Move to the home position |
Davidroid | 2:4fd08b67958c | 601 | void STSPIN820_GoHome(void); |
Davidroid | 2:4fd08b67958c | 602 | //Move to the Mark position |
Davidroid | 2:4fd08b67958c | 603 | void STSPIN820_GoMark(void); |
Davidroid | 2:4fd08b67958c | 604 | //Go to the specified position |
Davidroid | 2:4fd08b67958c | 605 | void STSPIN820_GoTo(int32_t targetPosition); |
Davidroid | 2:4fd08b67958c | 606 | //Go to the specified position using the specified direction |
Davidroid | 2:4fd08b67958c | 607 | void STSPIN820_GoToDir(motor_direction_t direction, int32_t targetPosition); |
Davidroid | 2:4fd08b67958c | 608 | //Stop the motor and keep holding torque |
Davidroid | 2:4fd08b67958c | 609 | void STSPIN820_HardStop(void); |
Davidroid | 2:4fd08b67958c | 610 | //Stop the motor and disable the power bridge |
Davidroid | 2:4fd08b67958c | 611 | void STSPIN820_HardHiZ(void); |
Davidroid | 2:4fd08b67958c | 612 | //Move the motor of the specified number of steps |
Davidroid | 2:4fd08b67958c | 613 | void STSPIN820_Move(motor_direction_t direction, uint32_t stepCount); |
Davidroid | 2:4fd08b67958c | 614 | //Put STSPIN820 device in standby (low power consumption) |
Davidroid | 2:4fd08b67958c | 615 | void STSPIN820_PutDeviceInStandby(void); |
Davidroid | 2:4fd08b67958c | 616 | //Run the motor |
Davidroid | 2:4fd08b67958c | 617 | void STSPIN820_Run(motor_direction_t direction); |
Davidroid | 2:4fd08b67958c | 618 | //Set the acceleration in pps^2 |
Davidroid | 2:4fd08b67958c | 619 | bool STSPIN820_SetAcceleration(uint16_t newAcc); |
Davidroid | 2:4fd08b67958c | 620 | //Set the deceleration in pps^2 |
Davidroid | 2:4fd08b67958c | 621 | bool STSPIN820_SetDeceleration(uint16_t newDec); |
Davidroid | 2:4fd08b67958c | 622 | //Set the STSPIN820 decay mode pin |
Davidroid | 2:4fd08b67958c | 623 | void STSPIN820_SetDecayMode(motor_decay_mode_t decay); |
Davidroid | 2:4fd08b67958c | 624 | //Set the STSPIN820 direction pin |
Davidroid | 2:4fd08b67958c | 625 | void STSPIN820_SetDirection(motor_direction_t direction); |
Davidroid | 2:4fd08b67958c | 626 | //Set current position to be the home position |
Davidroid | 2:4fd08b67958c | 627 | void STSPIN820_SetHome(void); |
Davidroid | 2:4fd08b67958c | 628 | //Set current position to be the mark position |
Davidroid | 2:4fd08b67958c | 629 | void STSPIN820_SetMark(void); |
Davidroid | 2:4fd08b67958c | 630 | //Set the max speed in pps |
Davidroid | 2:4fd08b67958c | 631 | bool STSPIN820_SetMaxSpeed(uint16_t newMaxSpeed); |
Davidroid | 2:4fd08b67958c | 632 | //Set the min speed in pps |
Davidroid | 2:4fd08b67958c | 633 | bool STSPIN820_SetMinSpeed(uint16_t newMinSpeed); |
Davidroid | 2:4fd08b67958c | 634 | //Set the number of devices |
Davidroid | 1:bc265521eb00 | 635 | bool STSPIN820_SetNbDevices(uint8_t nbDevices); |
Davidroid | 2:4fd08b67958c | 636 | //Step mode selection |
Davidroid | 2:4fd08b67958c | 637 | bool STSPIN820_SetStepMode(motor_step_mode_t stepMode); |
Davidroid | 2:4fd08b67958c | 638 | //Select the mode to stop the motor |
Davidroid | 2:4fd08b67958c | 639 | void STSPIN820_SetStopMode(motor_stop_mode_t stopMode); |
Davidroid | 2:4fd08b67958c | 640 | //Set the torque |
Davidroid | 2:4fd08b67958c | 641 | void STSPIN820_SetTorque(motor_torque_mode_t torqueMode, uint8_t torqueValue); |
Davidroid | 2:4fd08b67958c | 642 | //Enable or disable the torque boost feature |
Davidroid | 2:4fd08b67958c | 643 | void STSPIN820_SetTorqueBoostEnable(bool enable); |
Davidroid | 2:4fd08b67958c | 644 | //Set the torque boost threshold |
Davidroid | 2:4fd08b67958c | 645 | void STSPIN820_SetTorqueBoostThreshold(uint16_t speedThreshold); |
Davidroid | 2:4fd08b67958c | 646 | //Progressively stop the motor by using the device deceleration and set deceleration torque |
Davidroid | 2:4fd08b67958c | 647 | bool STSPIN820_SoftStop(void); |
Davidroid | 2:4fd08b67958c | 648 | //Get the frequency of REF PWM of the specified device |
Davidroid | 2:4fd08b67958c | 649 | uint32_t STSPIN820_VrefPwmGetFreq(void); |
Davidroid | 2:4fd08b67958c | 650 | //Set the frequency of REF PWM of the specified device |
Davidroid | 2:4fd08b67958c | 651 | void STSPIN820_VrefPwmSetFreq(uint32_t newFreq); |
Davidroid | 2:4fd08b67958c | 652 | //Wait for the device state becomes Inactive |
Davidroid | 2:4fd08b67958c | 653 | void STSPIN820_WaitWhileActive(void); |
Davidroid | 1:bc265521eb00 | 654 | |
Davidroid | 1:bc265521eb00 | 655 | |
Davidroid | 1:bc265521eb00 | 656 | /* ACTION 8 --------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 657 | * Implement here other I/O methods beyond those already implemented * |
Davidroid | 1:bc265521eb00 | 658 | * above, which are declared extern within the component's header file. * |
Davidroid | 1:bc265521eb00 | 659 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 660 | /** |
Davidroid | 2:4fd08b67958c | 661 | * @brief Making the CPU wait. |
Davidroid | 2:4fd08b67958c | 662 | * @param None. |
Davidroid | 2:4fd08b67958c | 663 | * @retval None. |
Davidroid | 2:4fd08b67958c | 664 | */ |
Davidroid | 2:4fd08b67958c | 665 | void STSPIN820_Delay(uint32_t delay) |
Davidroid | 1:bc265521eb00 | 666 | { |
Davidroid | 2:4fd08b67958c | 667 | wait_ms(delay); |
Davidroid | 1:bc265521eb00 | 668 | } |
Davidroid | 1:bc265521eb00 | 669 | |
Davidroid | 2:4fd08b67958c | 670 | /** |
Davidroid | 2:4fd08b67958c | 671 | * @brief Enabling the power bridges (leaving the output bridges at HiZ). |
Davidroid | 2:4fd08b67958c | 672 | * @param None. |
Davidroid | 2:4fd08b67958c | 673 | * @retval None. |
Davidroid | 2:4fd08b67958c | 674 | */ |
Davidroid | 2:4fd08b67958c | 675 | void STSPIN820_Enable_Power_Bridges(void) |
Davidroid | 1:bc265521eb00 | 676 | { |
Davidroid | 2:4fd08b67958c | 677 | if (en_fault_irq.read() == 0) |
Davidroid | 2:4fd08b67958c | 678 | { |
Davidroid | 2:4fd08b67958c | 679 | //en_fault_irq.write(1); |
Davidroid | 2:4fd08b67958c | 680 | wait_ms(BRIDGE_TURN_ON_DELAY_ms); |
Davidroid | 2:4fd08b67958c | 681 | enable_en_fault_irq(); |
Davidroid | 2:4fd08b67958c | 682 | } |
Davidroid | 1:bc265521eb00 | 683 | } |
Davidroid | 1:bc265521eb00 | 684 | |
Davidroid | 2:4fd08b67958c | 685 | /** |
Davidroid | 2:4fd08b67958c | 686 | * @brief Disabling the power bridges (forcing the output bridges at HiZ). |
Davidroid | 2:4fd08b67958c | 687 | * @param None. |
Davidroid | 2:4fd08b67958c | 688 | * @retval None. |
Davidroid | 2:4fd08b67958c | 689 | */ |
Davidroid | 2:4fd08b67958c | 690 | void STSPIN820_Disable_Power_Bridges(void) |
Davidroid | 1:bc265521eb00 | 691 | { |
Davidroid | 2:4fd08b67958c | 692 | disable_en_fault_irq(); |
Davidroid | 2:4fd08b67958c | 693 | //en_fault_irq.write(0); |
Davidroid | 1:bc265521eb00 | 694 | } |
Davidroid | 1:bc265521eb00 | 695 | |
Davidroid | 2:4fd08b67958c | 696 | /** |
Davidroid | 2:4fd08b67958c | 697 | * @brief Enabling interrupts. |
Davidroid | 2:4fd08b67958c | 698 | * @param None. |
Davidroid | 2:4fd08b67958c | 699 | * @retval None. |
Davidroid | 2:4fd08b67958c | 700 | */ |
Davidroid | 2:4fd08b67958c | 701 | void STSPIN820_EnableIrq(void) |
Davidroid | 1:bc265521eb00 | 702 | { |
Davidroid | 2:4fd08b67958c | 703 | __enable_irq(); |
Davidroid | 1:bc265521eb00 | 704 | } |
Davidroid | 1:bc265521eb00 | 705 | |
Davidroid | 2:4fd08b67958c | 706 | /** |
Davidroid | 2:4fd08b67958c | 707 | * @brief Disabling interrupts. |
Davidroid | 2:4fd08b67958c | 708 | * @param None. |
Davidroid | 2:4fd08b67958c | 709 | * @retval None. |
Davidroid | 2:4fd08b67958c | 710 | */ |
Davidroid | 2:4fd08b67958c | 711 | void STSPIN820_DisableIrq(void) |
Davidroid | 1:bc265521eb00 | 712 | { |
Davidroid | 2:4fd08b67958c | 713 | __disable_irq(); |
Davidroid | 1:bc265521eb00 | 714 | } |
Davidroid | 1:bc265521eb00 | 715 | |
Davidroid | 2:4fd08b67958c | 716 | /** |
Davidroid | 2:4fd08b67958c | 717 | * @brief Getting the state of the EN_FAULT pin. |
Davidroid | 2:4fd08b67958c | 718 | * @param None. |
Davidroid | 2:4fd08b67958c | 719 | * @retval None. |
Davidroid | 2:4fd08b67958c | 720 | */ |
Davidroid | 2:4fd08b67958c | 721 | uint32_t STSPIN820_EN_FAULT_PIN_GetState(void) |
Davidroid | 1:bc265521eb00 | 722 | { |
Davidroid | 2:4fd08b67958c | 723 | return (uint32_t) en_fault_irq; |
Davidroid | 1:bc265521eb00 | 724 | } |
Davidroid | 1:bc265521eb00 | 725 | |
Davidroid | 2:4fd08b67958c | 726 | /** |
Davidroid | 2:4fd08b67958c | 727 | * @brief Initialising the GPIOs. |
Davidroid | 2:4fd08b67958c | 728 | * @param None. |
Davidroid | 2:4fd08b67958c | 729 | * @retval None. |
Davidroid | 2:4fd08b67958c | 730 | */ |
Davidroid | 2:4fd08b67958c | 731 | void STSPIN820_GpioInit(void) |
Davidroid | 1:bc265521eb00 | 732 | { |
Davidroid | 2:4fd08b67958c | 733 | disable_en_fault_irq(); |
Davidroid | 2:4fd08b67958c | 734 | enable_en_fault_irq(); |
Davidroid | 2:4fd08b67958c | 735 | STSPIN820_Reset(); |
Davidroid | 1:bc265521eb00 | 736 | } |
Davidroid | 1:bc265521eb00 | 737 | |
Davidroid | 2:4fd08b67958c | 738 | /** |
Davidroid | 2:4fd08b67958c | 739 | * @brief Initialising the PWM. |
Davidroid | 2:4fd08b67958c | 740 | * @param None. |
Davidroid | 2:4fd08b67958c | 741 | * @retval None. |
Davidroid | 2:4fd08b67958c | 742 | */ |
Davidroid | 2:4fd08b67958c | 743 | void STSPIN820_PwmRefInit(void) {} |
Davidroid | 2:4fd08b67958c | 744 | |
Davidroid | 2:4fd08b67958c | 745 | /** |
Davidroid | 2:4fd08b67958c | 746 | * @brief Setting the frequency and the duty-cycle of PWM. |
Davidroid | 2:4fd08b67958c | 747 | * The frequency controls directly the speed of the device. |
Davidroid | 2:4fd08b67958c | 748 | * The duty-cycle controls the torque of the device. |
Davidroid | 2:4fd08b67958c | 749 | * @param frequency The frequency of PWM in Hz. |
Davidroid | 2:4fd08b67958c | 750 | * @param duty_cycle The duty-cycle of PWM in [0..100]%. |
Davidroid | 2:4fd08b67958c | 751 | * @retval None. |
Davidroid | 2:4fd08b67958c | 752 | */ |
Davidroid | 2:4fd08b67958c | 753 | void STSPIN820_PwmRefSetFreqAndDutyCycle(uint32_t frequency, uint8_t duty_cycle) |
Davidroid | 1:bc265521eb00 | 754 | { |
Davidroid | 2:4fd08b67958c | 755 | pwm_period = (double) (1.0f / frequency); |
Davidroid | 2:4fd08b67958c | 756 | pwm_duty_cycle = (double) duty_cycle; |
Davidroid | 1:bc265521eb00 | 757 | } |
Davidroid | 1:bc265521eb00 | 758 | |
Davidroid | 2:4fd08b67958c | 759 | /** |
Davidroid | 2:4fd08b67958c | 760 | * @brief Starting the PWM. |
Davidroid | 2:4fd08b67958c | 761 | * @param None. |
Davidroid | 2:4fd08b67958c | 762 | * @retval None. |
Davidroid | 2:4fd08b67958c | 763 | */ |
Davidroid | 2:4fd08b67958c | 764 | void STSPIN820_PwmRefStart(void) |
Davidroid | 1:bc265521eb00 | 765 | { |
Davidroid | 2:4fd08b67958c | 766 | /* Setting the period and the duty-cycle of PWM. */ |
Davidroid | 2:4fd08b67958c | 767 | ref_pwm.period(pwm_period); |
Davidroid | 2:4fd08b67958c | 768 | ref_pwm.write(pwm_duty_cycle); |
Davidroid | 2:4fd08b67958c | 769 | |
Davidroid | 2:4fd08b67958c | 770 | /* Setting a callback with the same period of PWM's, to update the state machine. */ |
Davidroid | 2:4fd08b67958c | 771 | ticker.attach(Callback<void()>(this, &STSPIN820::STSPIN820_StepClockHandler), pwm_period); |
Davidroid | 1:bc265521eb00 | 772 | } |
Davidroid | 1:bc265521eb00 | 773 | |
Davidroid | 2:4fd08b67958c | 774 | /** |
Davidroid | 2:4fd08b67958c | 775 | * @brief Stopping the PWM. |
Davidroid | 2:4fd08b67958c | 776 | * @param None. |
Davidroid | 2:4fd08b67958c | 777 | * @retval None. |
Davidroid | 2:4fd08b67958c | 778 | */ |
Davidroid | 2:4fd08b67958c | 779 | void STSPIN820_PwmRefStop(void) |
Davidroid | 1:bc265521eb00 | 780 | { |
Davidroid | 2:4fd08b67958c | 781 | ref_pwm.write(0.0f); |
Davidroid | 2:4fd08b67958c | 782 | ticker.detach(); |
Davidroid | 1:bc265521eb00 | 783 | } |
Davidroid | 1:bc265521eb00 | 784 | |
Davidroid | 2:4fd08b67958c | 785 | /** |
Davidroid | 2:4fd08b67958c | 786 | * @brief Putting the device in standby mode. |
Davidroid | 2:4fd08b67958c | 787 | * @param None. |
Davidroid | 2:4fd08b67958c | 788 | * @retval None. |
Davidroid | 2:4fd08b67958c | 789 | */ |
Davidroid | 2:4fd08b67958c | 790 | void STSPIN820_ReleaseReset(void) |
Davidroid | 1:bc265521eb00 | 791 | { |
Davidroid | 2:4fd08b67958c | 792 | standby_reset = 1; |
Davidroid | 1:bc265521eb00 | 793 | } |
Davidroid | 1:bc265521eb00 | 794 | |
Davidroid | 2:4fd08b67958c | 795 | /** |
Davidroid | 2:4fd08b67958c | 796 | * @brief Putting the device in reset mode. |
Davidroid | 2:4fd08b67958c | 797 | * @param None. |
Davidroid | 2:4fd08b67958c | 798 | * @retval None. |
Davidroid | 2:4fd08b67958c | 799 | */ |
Davidroid | 2:4fd08b67958c | 800 | void STSPIN820_Reset(void) |
Davidroid | 1:bc265521eb00 | 801 | { |
Davidroid | 2:4fd08b67958c | 802 | standby_reset = 0; |
Davidroid | 1:bc265521eb00 | 803 | } |
Davidroid | 1:bc265521eb00 | 804 | |
Davidroid | 2:4fd08b67958c | 805 | /** |
Davidroid | 2:4fd08b67958c | 806 | * @brief Setting the decay mode pin state. |
Davidroid | 2:4fd08b67958c | 807 | * @param gpio_state State of the decay mode pin ("0" to reset, "1" to set). |
Davidroid | 2:4fd08b67958c | 808 | * @retval None. |
Davidroid | 2:4fd08b67958c | 809 | */ |
Davidroid | 2:4fd08b67958c | 810 | void STSPIN820_SetDecayGpio(uint8_t gpio_state) |
Davidroid | 1:bc265521eb00 | 811 | { |
Davidroid | 2:4fd08b67958c | 812 | decay = gpio_state; |
Davidroid | 1:bc265521eb00 | 813 | } |
Davidroid | 1:bc265521eb00 | 814 | |
Davidroid | 2:4fd08b67958c | 815 | /** |
Davidroid | 2:4fd08b67958c | 816 | * @brief Getting the decay mode pin state. |
Davidroid | 2:4fd08b67958c | 817 | * @param None. |
Davidroid | 2:4fd08b67958c | 818 | * @retval None. |
Davidroid | 2:4fd08b67958c | 819 | */ |
Davidroid | 2:4fd08b67958c | 820 | uint8_t STSPIN820_GetDecayGpio(void) |
Davidroid | 1:bc265521eb00 | 821 | { |
Davidroid | 2:4fd08b67958c | 822 | return (decay != 0 ? 1 : 0); |
Davidroid | 1:bc265521eb00 | 823 | } |
Davidroid | 1:bc265521eb00 | 824 | |
Davidroid | 2:4fd08b67958c | 825 | /** |
Davidroid | 2:4fd08b67958c | 826 | * @brief Setting the direction pin state. |
Davidroid | 2:4fd08b67958c | 827 | * @param gpio_state State of the direction pin ("0" to reset, "1" to set). |
Davidroid | 2:4fd08b67958c | 828 | * @retval None. |
Davidroid | 2:4fd08b67958c | 829 | */ |
Davidroid | 2:4fd08b67958c | 830 | void STSPIN820_SetDirectionGpio(uint8_t gpio_state) |
Davidroid | 1:bc265521eb00 | 831 | { |
Davidroid | 2:4fd08b67958c | 832 | direction = gpio_state; |
Davidroid | 1:bc265521eb00 | 833 | } |
Davidroid | 1:bc265521eb00 | 834 | |
Davidroid | 2:4fd08b67958c | 835 | /** |
Davidroid | 2:4fd08b67958c | 836 | * @brief Setting the full step mode. |
Davidroid | 2:4fd08b67958c | 837 | * @param None. |
Davidroid | 2:4fd08b67958c | 838 | * @retval None. |
Davidroid | 2:4fd08b67958c | 839 | */ |
Davidroid | 2:4fd08b67958c | 840 | void STSPIN820_SetFullStep(void) |
Davidroid | 1:bc265521eb00 | 841 | { |
Davidroid | 2:4fd08b67958c | 842 | mode1 = mode2 = mode3 = 0; |
Davidroid | 1:bc265521eb00 | 843 | } |
Davidroid | 1:bc265521eb00 | 844 | |
Davidroid | 2:4fd08b67958c | 845 | /** |
Davidroid | 2:4fd08b67958c | 846 | * @brief Selecting the STSPIN820 mode1, mode2 and mode3 pins levels. |
Davidroid | 2:4fd08b67958c | 847 | * @param mode1_level Level of the mode1 gpio (0 low, 1+ high). |
Davidroid | 2:4fd08b67958c | 848 | * @param mode2_level Level of the mode2 gpio (0 low, 1+ high). |
Davidroid | 2:4fd08b67958c | 849 | * @param mode3_level Level of the mode3 gpio (0 low, 1+ high). |
Davidroid | 2:4fd08b67958c | 850 | * @retval None. |
Davidroid | 2:4fd08b67958c | 851 | */ |
Davidroid | 2:4fd08b67958c | 852 | void STSPIN820_SetModePins(uint8_t mode1_level, uint8_t mode2_level, uint8_t mode3_level) |
Davidroid | 1:bc265521eb00 | 853 | { |
Davidroid | 2:4fd08b67958c | 854 | mode1 = (mode1_level != 0 ? 1 : 0); |
Davidroid | 2:4fd08b67958c | 855 | mode2 = (mode2_level != 0 ? 1 : 0); |
Davidroid | 2:4fd08b67958c | 856 | mode3 = (mode3_level != 0 ? 1 : 0); |
Davidroid | 1:bc265521eb00 | 857 | } |
Davidroid | 1:bc265521eb00 | 858 | |
Davidroid | 2:4fd08b67958c | 859 | /** |
Davidroid | 2:4fd08b67958c | 860 | * @brief Initializing step clock compare value. |
Davidroid | 2:4fd08b67958c | 861 | * @param None. |
Davidroid | 2:4fd08b67958c | 862 | * @retval None. |
Davidroid | 2:4fd08b67958c | 863 | */ |
Davidroid | 2:4fd08b67958c | 864 | void STSPIN820_TimStckCompareInit(void) {} |
Davidroid | 2:4fd08b67958c | 865 | |
Davidroid | 2:4fd08b67958c | 866 | /** |
Davidroid | 2:4fd08b67958c | 867 | * @brief Deinitializing the timer used for the step clock. |
Davidroid | 2:4fd08b67958c | 868 | * @param None. |
Davidroid | 2:4fd08b67958c | 869 | * @retval None. |
Davidroid | 2:4fd08b67958c | 870 | */ |
Davidroid | 2:4fd08b67958c | 871 | void STSPIN820_TimStckDeInit(void) {} |
Davidroid | 2:4fd08b67958c | 872 | |
Davidroid | 2:4fd08b67958c | 873 | /** |
Davidroid | 2:4fd08b67958c | 874 | * @brief Initializing the timer used for the step clock. |
Davidroid | 2:4fd08b67958c | 875 | * @param None. |
Davidroid | 2:4fd08b67958c | 876 | * @retval None. |
Davidroid | 2:4fd08b67958c | 877 | */ |
Davidroid | 2:4fd08b67958c | 878 | void STSPIN820_TimStckInit(void) {} |
Davidroid | 2:4fd08b67958c | 879 | |
Davidroid | 2:4fd08b67958c | 880 | /** |
Davidroid | 2:4fd08b67958c | 881 | * @brief Setting the frequency of PWM. |
Davidroid | 2:4fd08b67958c | 882 | * The frequency controls directly the speed of the device. |
Davidroid | 2:4fd08b67958c | 883 | * @param frequency The frequency of PWM in Hz. |
Davidroid | 2:4fd08b67958c | 884 | * @retval None. |
Davidroid | 2:4fd08b67958c | 885 | */ |
Davidroid | 2:4fd08b67958c | 886 | void STSPIN820_TimStckSetFreq(uint32_t frequency) |
Davidroid | 1:bc265521eb00 | 887 | { |
Davidroid | 2:4fd08b67958c | 888 | pwm_period = (double) (1.0f / frequency); |
Davidroid | 1:bc265521eb00 | 889 | } |
Davidroid | 1:bc265521eb00 | 890 | |
Davidroid | 2:4fd08b67958c | 891 | /** |
Davidroid | 2:4fd08b67958c | 892 | * @brief Starting the step clock. |
Davidroid | 2:4fd08b67958c | 893 | * @param None. |
Davidroid | 2:4fd08b67958c | 894 | * @retval None. |
Davidroid | 2:4fd08b67958c | 895 | */ |
Davidroid | 2:4fd08b67958c | 896 | void STSPIN820_TimStckStart(void) {} |
Davidroid | 2:4fd08b67958c | 897 | |
Davidroid | 2:4fd08b67958c | 898 | /** |
Davidroid | 2:4fd08b67958c | 899 | * @brief Stopping the step clock. |
Davidroid | 2:4fd08b67958c | 900 | * @param p_toggle_odd Pointer to the volatile toggleOdd variable. |
Davidroid | 2:4fd08b67958c | 901 | * @retval "1" if OK, "0" if the STCK pin is High (forbidden configuration). |
Davidroid | 2:4fd08b67958c | 902 | */ |
Davidroid | 2:4fd08b67958c | 903 | uint8_t STSPIN820_TimStckStop(volatile uint8_t *p_toggle_odd ) |
Davidroid | 1:bc265521eb00 | 904 | { |
Davidroid | 2:4fd08b67958c | 905 | __disable_irq(); |
Davidroid | 2:4fd08b67958c | 906 | if (*p_toggle_odd == 1) |
Davidroid | 2:4fd08b67958c | 907 | { |
Davidroid | 2:4fd08b67958c | 908 | __enable_irq(); |
Davidroid | 2:4fd08b67958c | 909 | return 1; |
Davidroid | 2:4fd08b67958c | 910 | } |
Davidroid | 2:4fd08b67958c | 911 | if (step_clock != 0) |
Davidroid | 2:4fd08b67958c | 912 | { |
Davidroid | 2:4fd08b67958c | 913 | __enable_irq(); |
Davidroid | 2:4fd08b67958c | 914 | return 0; |
Davidroid | 2:4fd08b67958c | 915 | } |
Davidroid | 2:4fd08b67958c | 916 | //HAL_TIM_OC_Stop_IT(&hTimerStepClock, BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK); |
Davidroid | 2:4fd08b67958c | 917 | __enable_irq(); |
Davidroid | 2:4fd08b67958c | 918 | STSPIN820_TimStckDeInit(); |
Davidroid | 2:4fd08b67958c | 919 | return 1; |
Davidroid | 1:bc265521eb00 | 920 | } |
Davidroid | 1:bc265521eb00 | 921 | |
Davidroid | 1:bc265521eb00 | 922 | |
Davidroid | 1:bc265521eb00 | 923 | /*** Component's Instance Variables ***/ |
Davidroid | 1:bc265521eb00 | 924 | |
Davidroid | 1:bc265521eb00 | 925 | /* ACTION 9 --------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 926 | * Declare here interrupt related variables, if needed. * |
Davidroid | 1:bc265521eb00 | 927 | * Note that interrupt handling is platform dependent, see * |
Davidroid | 1:bc265521eb00 | 928 | * "Interrupt Related Methods" above. * |
Davidroid | 1:bc265521eb00 | 929 | * * |
Davidroid | 1:bc265521eb00 | 930 | * Example: * |
Davidroid | 1:bc265521eb00 | 931 | * + mbed: * |
Davidroid | 1:bc265521eb00 | 932 | * InterruptIn feature_irq; * |
Davidroid | 1:bc265521eb00 | 933 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 934 | /* En Fault Interrupt. */ |
Davidroid | 2:4fd08b67958c | 935 | InterruptIn en_fault_irq; |
Davidroid | 1:bc265521eb00 | 936 | |
Davidroid | 1:bc265521eb00 | 937 | /* ACTION 10 -------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 938 | * Declare here other pin related variables, if needed. * |
Davidroid | 1:bc265521eb00 | 939 | * * |
Davidroid | 1:bc265521eb00 | 940 | * Example: * |
Davidroid | 1:bc265521eb00 | 941 | * + mbed: * |
Davidroid | 1:bc265521eb00 | 942 | * DigitalOut standby_reset; * |
Davidroid | 1:bc265521eb00 | 943 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 944 | /* Standby/reset pin. */ |
Davidroid | 2:4fd08b67958c | 945 | DigitalOut standby_reset; |
Davidroid | 2:4fd08b67958c | 946 | |
Davidroid | 2:4fd08b67958c | 947 | /* Direction of rotation pin. */ |
Davidroid | 2:4fd08b67958c | 948 | DigitalOut direction; |
Davidroid | 2:4fd08b67958c | 949 | |
Davidroid | 2:4fd08b67958c | 950 | /* Pulse Width Modulation pin. */ |
Davidroid | 2:4fd08b67958c | 951 | PwmOut ref_pwm; |
Davidroid | 2:4fd08b67958c | 952 | |
Davidroid | 2:4fd08b67958c | 953 | /* Decay pin. */ |
Davidroid | 2:4fd08b67958c | 954 | DigitalOut decay; |
Davidroid | 2:4fd08b67958c | 955 | |
Davidroid | 2:4fd08b67958c | 956 | /* Step clock pin. */ |
Davidroid | 2:4fd08b67958c | 957 | DigitalOut step_clock; |
Davidroid | 2:4fd08b67958c | 958 | |
Davidroid | 2:4fd08b67958c | 959 | /* Mode1 pin. */ |
Davidroid | 2:4fd08b67958c | 960 | DigitalOut mode1; |
Davidroid | 2:4fd08b67958c | 961 | |
Davidroid | 2:4fd08b67958c | 962 | /* Mode2 pin. */ |
Davidroid | 2:4fd08b67958c | 963 | DigitalOut mode2; |
Davidroid | 2:4fd08b67958c | 964 | |
Davidroid | 2:4fd08b67958c | 965 | /* Mode3 pin. */ |
Davidroid | 2:4fd08b67958c | 966 | DigitalOut mode3; |
Davidroid | 2:4fd08b67958c | 967 | |
Davidroid | 2:4fd08b67958c | 968 | /* Timer to trigger the PWM callback at each PWM pulse. */ |
Davidroid | 2:4fd08b67958c | 969 | Ticker ticker; |
Davidroid | 1:bc265521eb00 | 970 | |
Davidroid | 1:bc265521eb00 | 971 | /* ACTION 11 -------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 972 | * Declare here communication related variables, if needed. * |
Davidroid | 1:bc265521eb00 | 973 | * * |
Davidroid | 1:bc265521eb00 | 974 | * Example: * |
Davidroid | 1:bc265521eb00 | 975 | * + mbed: * |
Davidroid | 1:bc265521eb00 | 976 | * DigitalOut ssel; * |
Davidroid | 1:bc265521eb00 | 977 | * DevSPI &dev_spi; * |
Davidroid | 1:bc265521eb00 | 978 | *------------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 979 | |
Davidroid | 1:bc265521eb00 | 980 | /* ACTION 12 -------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 981 | * Declare here identity related variables, if needed. * |
Davidroid | 1:bc265521eb00 | 982 | * Note that there should be only a unique identifier for each component, * |
Davidroid | 1:bc265521eb00 | 983 | * which should be the "who_am_i" parameter. * |
Davidroid | 1:bc265521eb00 | 984 | *------------------------------------------------------------------------*/ |
Davidroid | 1:bc265521eb00 | 985 | /* Identity */ |
Davidroid | 1:bc265521eb00 | 986 | uint8_t who_am_i; |
Davidroid | 1:bc265521eb00 | 987 | |
Davidroid | 1:bc265521eb00 | 988 | /* ACTION 13 -------------------------------------------------------------* |
Davidroid | 1:bc265521eb00 | 989 | * Declare here the component's static and non-static data, one variable * |
Davidroid | 1:bc265521eb00 | 990 | * per line. * |
Davidroid | 1:bc265521eb00 | 991 | * * |
Davidroid | 1:bc265521eb00 | 992 | * Example: * |
Davidroid | 1:bc265521eb00 | 993 | * float measure; * |
Davidroid | 1:bc265521eb00 | 994 | * int instance_id; * |
Davidroid | 1:bc265521eb00 | 995 | * static int number_of_instances; * |
Davidroid | 1:bc265521eb00 | 996 | *------------------------------------------------------------------------*/ |
Davidroid | 2:4fd08b67958c | 997 | /* Data. */ |
Davidroid | 1:bc265521eb00 | 998 | void (*flag_interrupt_callback)(void); |
Davidroid | 1:bc265521eb00 | 999 | void (*error_handler_callback)(uint16_t error); |
Davidroid | 2:4fd08b67958c | 1000 | volatile uint8_t toggle_odd; |
Davidroid | 1:bc265521eb00 | 1001 | device_params_t device_prm; |
Davidroid | 2:4fd08b67958c | 1002 | double pwm_period; |
Davidroid | 2:4fd08b67958c | 1003 | double pwm_duty_cycle; |
Davidroid | 1:bc265521eb00 | 1004 | uint8_t device_instance; |
Davidroid | 2:4fd08b67958c | 1005 | |
Davidroid | 2:4fd08b67958c | 1006 | /* Static data. */ |
Davidroid | 2:4fd08b67958c | 1007 | static uint8_t number_of_devices; |
Davidroid | 1:bc265521eb00 | 1008 | }; |
Davidroid | 1:bc265521eb00 | 1009 | |
Davidroid | 1:bc265521eb00 | 1010 | #endif /* __STSPIN820_CLASS_H */ |
Davidroid | 1:bc265521eb00 | 1011 | |
Davidroid | 1:bc265521eb00 | 1012 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |