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: X_NUCLEO_IHM12A1 mbed
Fork of SchedamotoriIHM12A1 by
main.cpp
- Committer:
- Manu_L
- Date:
- 2016-11-17
- Revision:
- 2:1e4061cedf1d
- Parent:
- 0:773e2a2be16f
- Child:
- 5:21a4085d2057
File content as of revision 2:1e4061cedf1d:
/**
******************************************************************************
* @file main.cpp
* @author IPC Rennes
* @version V1.0.0
* @date April 25th, 2016
* @brief mbed simple application for the STMicroelectronics X-NUCLEO-IHM12A1
* Motor Control Expansion Board: control of 2 Brush DC motors.
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2016 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 "stspin240_250_class.h"
/* Variables -----------------------------------------------------------------*/
/* Initialization parameters of the motor connected to the expansion board. */
Stspin240_250_Init_t initDeviceParameters =
{
20000, /* Frequency of PWM of Input Bridge A in Hz up to 100000Hz */
20000, /* Frequency of PWM of Input Bridge B in Hz up to 100000Hz */
20000, /* Frequency of PWM used for Ref pin in Hz up to 100000Hz */
50, /* Duty cycle of PWM used for Ref pin (from 0 to 100) */
TRUE /* Dual Bridge configuration (FALSE for mono, TRUE for dual brush dc) */
};
/* Motor Control Component. */
STSPIN240_250 *motor;
/* Functions -----------------------------------------------------------------*/
/**
* @brief This is an example of error handler.
* @param[in] error Number of the error
* @retval None
* @note If needed, implement it, and then attach it:
* + motor->AttachErrorHandler(&myErrorHandler);
*/
void myErrorHandler(uint16_t error)
{
/* Printing to the console. */
printf("Error %d detected\r\n\n", error);
/* Infinite loop */
while(1)
{
}
}
/**
* @brief This is an example of user handler for the flag interrupt.
* @param None
* @retval None
* @note If needed, implement it, and then attach and enable it:
* + motor->AttachFlagIRQ(&myFlagIRQHandler);
* + motor->EnableFlagIRQ();
* To disable it:
* + motor->DisbleFlagIRQ();
*/
void myFlagIRQHandler(void)
{
/* Code to be customised */
/************************/
printf(" WARNING: \"FLAG\" interrupt triggered.\r\n");
/* Get the state of bridge A */
uint16_t bridgeState = motor->GetBridgeStatus(0);
if (bridgeState == 0)
{
if (motor->GetDeviceState(0) != INACTIVE)
{
/* Bridges were disabled due to overcurrent or over temperature */
/* When motor was running */
myErrorHandler(0XBAD0);
}
}
}
/* Main ----------------------------------------------------------------------*/
int main()
{
uint8_t demoStep = 0;
/* Printing to the console. */
printf("STARTING MAIN PROGRAM\r\n");
//----- Initialization
/* Initializing Motor Control Component. */
#if (defined TARGET_NUCLEO_F030R8)||(defined TARGET_NUCLEO_F334R8)
motor = new STSPIN240_250(D2, D9, D6, D7, D5, D4, A2);
#elif (defined TARGET_NUCLEO_L152RE)
motor = new STSPIN240_250(D2, D9, D6, D7, D5, D4, A3);
#else
motor = new STSPIN240_250(D2, D9, D6, D7, D5, D4, A0);
#endif
if (motor->Init(&initDeviceParameters) != COMPONENT_OK) exit(EXIT_FAILURE);
/* Set dual bridge enabled as two motors are used*/
motor->SetDualFullBridgeConfig(1);
/* Attaching and enabling an interrupt handler. */
motor->AttachFlagIRQ(&myFlagIRQHandler);
motor->EnableFlagIRQ();
/* Attaching an error handler */
motor->AttachErrorHandler(&myErrorHandler);
/* Printing to the console. */
printf("Motor Control Application Example for 2 brush DC motors\r\n");
/* Set PWM Frequency of Ref to 15000 Hz */
motor->SetRefPwmFreq(0, 15000);
/* Set PWM duty cycle of Ref to 60% */
motor->SetRefPwmDc(0, 60);
/* Set PWM Frequency of bridge A inputs to 10000 Hz */
motor->SetBridgeInputPwmFreq(0,10000);
/* Set PWM Frequency of bridge B inputs to 10000 Hz */
motor->SetBridgeInputPwmFreq(1,10000);
/* Infinite Loop. */
printf("--> Infinite Loop...\r\n");
while (1)
{
switch (demoStep)
{
case 0:
printf("STEP 0: Motor(0) FWD Speed=100%% - Motor(1) Inactive\r\n");
/* Set speed of motor 0 to 100 % */
motor->SetSpeed(0,100);
/* start motor 0 to run forward*/
/* if chip is in standby mode */
/* it is automatically awakened */
motor->Run(0, BDCMotor::FWD);
break;
case 1:
printf("STEP 1: Motor(0) FWD Speed=75%% - Motor(1) BWD Speed=100%%\r\n");
/* Set speed of motor 0 to 75 % */
motor->SetSpeed(0,75);
/* Set speed of motor 1 to 100 % */
motor->SetSpeed(1,100);
/* start motor 1 to run backward */
motor->Run(1, BDCMotor::BWD);
break;
case 2:
printf("STEP 2: Motor(0) FWD Speed=50%% - Motor(1) BWD Speed=75%%\r\n");
/* Set speed of motor 0 to 50 % */
motor->SetSpeed(0,50);
/* Set speed of motor 1 to 75% */
motor->SetSpeed(1,75);
break;
case 3:
printf("STEP 3: Motor(0) FWD Speed=25%% - Motor(1) BWD Speed=50%%\r\n");
/* Set speed of motor 0 to 25 % */
motor->SetSpeed(0,25);
/* Set speed of motor 1 to 50% */
motor->SetSpeed(1,50);
break;
case 4:
printf("STEP 4: Motor(0) Stopped - Motor(1) BWD Speed=25%%\r\n");
/* Stop Motor 0 */
motor->HardStop(0);
/* Set speed of motor 1 to 25% */
motor->SetSpeed(1,25);
break;
case 5:
printf("STEP 5: Motor(0) BWD Speed=25%% - Motor(1) Stopped\r\n");
/* Set speed of motor 0 to 25 % */
motor->SetSpeed(0,25);
/* start motor 0 to run backward */
motor->Run(0, BDCMotor::BWD);
/* Stop Motor 1 */
motor->HardStop(1);
break;
case 6:
printf("STEP 6: Motor(0) BWD Speed=50%% - Motor(1) FWD Speed=25%%\r\n");
/* Set speed of motor 0 to 50 % */
motor->SetSpeed(0,50);
/* Set speed of motor 1 to 25 % */
motor->SetSpeed(1,25);
/* start motor 1 to run backward */
motor->Run(1, BDCMotor::FWD);
break;
case 7:
printf("STEP 7: Motor(0) BWD Speed=75%% - Motor(1) FWD Speed=50%%\r\n");
/* Set speed of motor 0 to 75 % */
motor->SetSpeed(0,75);
/* Set speed of motor 1 to 50 % */
motor->SetSpeed(1,50);
break;
case 8:
printf("STEP 8: Motor(0) BWD Speed=100%% - Motor(1) FWD Speed=75%%\r\n");
/* Set speed of motor 0 to 100 % */
motor->SetSpeed(0,100);
/* Set speed of motor 1 to 75 % */
motor->SetSpeed(1,75);
break;
case 9:
printf("STEP 9: Motor(0) BWD Speed=100%% - Motor(1) FWD Speed=100%%\r\n");
/* Set speed of motor 1 to 100 % */
motor->SetSpeed(1,100);
break;
case 10:
printf("STEP 10\r\n: Stop both motors and disable bridges\r\n");
/* Stop both motors and disable bridge */
motor->HardHiZ(0);
motor->HardHiZ(1);
break;
case 11:
printf("STEP 11: Motor(0) FWD Speed=100%% - Motor(1) FWD Speed=100%%\r\n");
/* Start both motors to go forward*/
motor->Run(0,BDCMotor::FWD);
motor->Run(1,BDCMotor::FWD);
break;
case 12:
default:
printf("STEP 12: Stop both motors and enter standby mode\r\n");
/* Stop both motors and put chip in standby mode */
motor->Reset();
break;
}
/* Wait for 5 seconds */
wait_ms(5000);
/* Increment demostep*/
demoStep++;
if (demoStep > 12)
{
demoStep = 0;
}
}
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
