
Robo l minuscolo
Dependencies: X_NUCLEO_IHM04A1 mbed
Fork of HelloWorld_IHM04A1 by
Revision 0:dcc35ef6effc, committed 2016-05-03
- Comitter:
- brdirais
- Date:
- Tue May 03 11:46:15 2016 +0000
- Child:
- 1:4d9b9123d9e1
- Commit message:
- Hello World example using IHM04A1 Nucleo expansion board
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/X-NUCLEO-IHM04A1.lib Tue May 03 11:46:15 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST-Expansion-SW-Team/code/X-NUCLEO-IHM04A1/#2cb6ce8e07bd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 03 11:46:15 2016 +0000 @@ -0,0 +1,260 @@ +/** + ****************************************************************************** + * @file Multi/Examples/MotionControl/IHM04A1_ExampleFor4UniDirMotors/Src/main.c + * @author IPC Rennes + * @version V1.0.0 + * @date January 06, 2015 + * @brief This example shows how to use 1 IHM04A1 expansion board with + * 4 unidirectionnal Brush DC motors. + * Each motor has one lead connected to one of the bridge output, + * the other lead to the ground. The input bridges are not parallelised. + * The demo sequence starts when the user button is pressed. + * Each time, the user button is pressed, the demo step is changed + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ + +/* mbed specific header files. */ +#include "mbed.h" + +/* Component specific header files. */ +#include "l6206_class.h" + + + +/* Definitions ---------------------------------------------------------------*/ + + +#define MAX_MOTOR (4) + + + +/* Variables -----------------------------------------------------------------*/ + +static volatile uint16_t gLastError; +static volatile uint8_t gStep = 0; + + + +/* Variables -----------------------------------------------------------------*/ + +/* Initialization parameters. */ +L6206_Init_t init = +{ + L6206_CONF_PARAM_PARALLE_BRIDGES, + {L6206_CONF_PARAM_FREQ_PWM1A, L6206_CONF_PARAM_FREQ_PWM2A, L6206_CONF_PARAM_FREQ_PWM1B, L6206_CONF_PARAM_FREQ_PWM2B}, + {100,100,100,100}, + {FORWARD,FORWARD,BACKWARD,FORWARD}, + {INACTIVE,INACTIVE,INACTIVE,INACTIVE}, + {FALSE,FALSE} +}; + +/* Motor Control Component. */ +L6206 *motor; + +/* User button on Nucleo board */ +InterruptIn mybutton_irq(USER_BUTTON); + + + +/* Functions -----------------------------------------------------------------*/ + +/** + * @brief This function is executed in case of error occurrence. + * @param error number of the error + * @retval None + */ +void Error_Handler(uint16_t error) +{ + /* Backup error number */ + gLastError = error; + + /* Enter your own code here */ +} + +/** +* @brief This function is the User handler for the flag interrupt +* @param None +* @retval None +* @note If needed, implement it, and then attach and enable it: +* + motor->AttachFlagInterrupt(MyFlagInterruptHandler); +*/ +void MyFlagInterruptHandler(void) +{ + /* Code to be customised */ + /************************/ + /* Get the state of bridge A */ + uint16_t bridgeState = motor->CmdGetStatus(0); + + if (bridgeState == 0) + { + if ((motor->GetDeviceState(0) != INACTIVE)|| + (motor->GetDeviceState(1) != INACTIVE)) + { + /* Bridge A was disabling due to overcurrent or over temperature */ + /* When at least on of its motor was running */ + Error_Handler(0XBAD0); + } + } + + /* Get the state of bridge B */ + bridgeState = motor->CmdGetStatus(1); + + if (bridgeState == 0) + { + if ((motor->GetDeviceState(2) != INACTIVE)|| + (motor->GetDeviceState(3) != INACTIVE)) + { + /* Bridge A was disabling due to overcurrent or over temperature */ + /* When at least on of its motor was running */ + Error_Handler(0XBAD1); + } + } + } + + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Button Irq + * @param None + * @retval None + */ + +void button_pressed(void) +{ + mybutton_irq.disable_irq(); + gStep++; + if (gStep > MAX_MOTOR) + { + gStep = 0; + } + wait_ms(200); + mybutton_irq.enable_irq(); + +} + + +/** + * @brief Main program + * @param None + * @retval None + */ +int main(void) +{ + /*----- Initialization. -----*/ + + /* Initializing Motor Control Component. */ + motor = new L6206( D2, A4, D5, D4, A0, A1); + + /* When Init method is called with NULL pointer, the L6206 parameters are set */ + /* with the predefined values from file l6206_target_config.h, otherwise the */ + /* parameters are set using the initDeviceParameters structure values. */ + if (motor->Init(&init) != COMPONENT_OK) + exit(EXIT_FAILURE); + + /* Attach the function MyFlagInterruptHandler (defined below) to the flag interrupt */ + motor->AttachFlagInterrupt(MyFlagInterruptHandler); + + /* Attach the function Error_Handler (defined below) to the error Handler*/ + motor->AttachErrorHandler(Error_Handler); + + /* Printing to the console. */ + printf("Motor Control Application Example for 1 Motor\r\n\n"); + + + /* Select the configuration with no bridge paralleling, two unidirectionnal motors on bridge A + and two unidirectionnal motors on bridge B */ + motor->SetDualFullBridgeConfig(PARALLELING_NONE___2_UNDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B); + + /* Set PWM Frequency of bridge A inputs to 10000 Hz */ + motor->SetBridgeInputPwmFreq(0,1000); + + /* Set PWM Frequency of bridge B inputs to 25000 Hz */ + motor->SetBridgeInputPwmFreq(1,2000); + + // Attach button_pressed function to Irq + mybutton_irq.fall(&button_pressed); + + /* Infinite loop */ + while(1) + { + + if (gStep > 0) + { + /* Set speed of motor 0 to 20 % */ + motor->SetMaxSpeed(0,20); + /* start motor 0 */ + motor->Run(0, FORWARD); + } + + if (gStep > 1) + { + /* Set speed of motor 1 to 30 % */ + motor->SetMaxSpeed(1,30); + /* start motor 1 */ + motor->Run(1, FORWARD); + } + + if (gStep > 2) + { + /* Set speed of motor 2 to 40 % */ + motor->SetMaxSpeed(2,40); + /* start motor 2 */ + motor->Run(2, FORWARD); + } + + if (gStep > 3) + { + /* Set speed of motor 3 to 50 % */ + motor->SetMaxSpeed(3,50); + /* start motor 3 */ + motor->Run(3, FORWARD); + } + + if (gStep > 0) + { + wait_ms(1000); + + motor->CmdHardHiZ(0); + motor->CmdHardHiZ(1); + motor->CmdHardHiZ(2); + motor->CmdHardHiZ(3); + + wait_ms(1000); + } + } +} + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue May 03 11:46:15 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/082adc85693f \ No newline at end of file