Simple test application for the STMicroelectronics X-NUCLEO-IHM01A1 Stepper Motor Control Expansion Board.

Dependencies:   X_NUCLEO_IHM01A1 mbed

Fork of HelloWorld_IHM01A1 by ST Expansion SW Team

Motor Control with the X-NUCLEO-IHM01A1 Expansion Board

This application provides a simple example of usage of the X-NUCLEO-IHM01A1 Stepper Motor Control Expansion Board.
It shows how to use one stepper motor connected to the board, moving the rotor to a specific position, with a given speed value, direction of rotation, etc.

Revision:
5:8065b587ade0
Parent:
3:fffa53c7aed2
Child:
6:32166bfc04b0
--- a/main.cpp	Thu Nov 19 14:26:05 2015 +0000
+++ b/main.cpp	Fri Nov 20 18:02:01 2015 +0000
@@ -63,6 +63,82 @@
 L6474 *motor;
 
 
+/* Functions -----------------------------------------------------------------*/
+
+/**
+  * @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(&FlagIRQHandler);
+  *           + motor->EnableFlagIRQ();
+  *         To disable it:
+  *           + motor->DisbleFlagIRQ();
+  */
+void FlagIRQHandler(void)
+{
+    /* Set ISR flag. */
+    motor->isrFlag = TRUE;
+
+    /* Get the value of the status register. */
+    unsigned int status = motor->GetStatus();
+    
+    /* Check HIZ flag: if set, power brigdes are disabled. */
+    if ((status & L6474_STATUS_HIZ) == L6474_STATUS_HIZ)
+    { /* HIZ state. Action to be customized. */ }
+    
+    /* Check direction. */
+    if ((status & L6474_STATUS_DIR) == L6474_STATUS_DIR)
+    { /* Forward direction is set. Action to be customized. */ }
+    else
+    { /* Backward direction is set. Action to be customized. */ }
+    
+    /* Check NOTPERF_CMD flag: if set, the command received by SPI can't be performed. */
+    /* This often occures when a command is sent to the L6474 while it is in HIZ state. */
+    if ((status & L6474_STATUS_NOTPERF_CMD) == L6474_STATUS_NOTPERF_CMD)
+    { /* Command received by SPI can't be performed. Action to be customized. */ }
+    
+    /* Check WRONG_CMD flag: if set, the command does not exist. */
+    if ((status & L6474_STATUS_WRONG_CMD) == L6474_STATUS_WRONG_CMD)
+    { /* The command received by SPI does not exist. Action to be customized. */ }
+    
+    /* Check UVLO flag: if not set, there is an undervoltage lock-out. */
+    if ((status & L6474_STATUS_UVLO) == 0)
+    { /* Undervoltage lock-out. Action to be customized. */ }
+    
+    /* Check TH_WRN flag: if not set, the thermal warning threshold is reached. */
+    if ((status & L6474_STATUS_TH_WRN) == 0)
+    { /* Thermal warning threshold is reached. Action to be customized. */ }
+    
+    /* Check TH_SHD flag: if not set, the thermal shut down threshold is reached. */
+    if ((status & L6474_STATUS_TH_SD) == 0)
+    { /* Thermal shut down threshold is reached. Action to be customized. */ }
+    
+    /* Check OCD  flag: if not set, there is an overcurrent detection. */
+    if ((status & L6474_STATUS_OCD) == 0)
+    { /* Overcurrent detection. Action to be customized. */ }
+
+    /* Reset ISR flag. */
+    motor->isrFlag = FALSE;
+}
+
+/**
+  * @brief  This is an example of user handler for the errors.
+  * @param  error error-code.
+  * @retval None
+  * @note   If needed, implement it, and then attach it:
+  *           + motor->AttachErrorHandler(&ErrorHandler);
+  */
+void ErrorHandler(uint16_t error)
+{
+    /* Printing to the console. */
+    printf("Error: %d.\r\n", error);
+    
+    /* Aborting the program. */
+    exit(EXIT_FAILURE);
+}
+
+
 /* Main ----------------------------------------------------------------------*/
 
 int main()
@@ -71,7 +147,7 @@
     DevSPI dev_spi(D11, D12, D13);
 
     /* Initializing Motor Control Component. */
-    motor = new L6474(D8, D7, D9, D10, dev_spi);
+    motor = new L6474(D2, D8, D7, D9, D10, dev_spi);
     if (motor->Init(NULL) != COMPONENT_OK)
         return false;