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
