Simple demo example of X-NUCLEO-IPS02A1 24V Intelligent Power Switch Library usage.

Dependencies:   X_NUCLEO_IPS02A1 mbed

Fork of HelloWorld_IPS02A1 by ST Expansion SW Team

HelloWorld_IPS02A1, demo example for IPS02A1 expansion board

Introduction

This example application provides a basic code to show how to use the X-NUCLEO-IPS02A1 Intelligent Power Switch Expansion Board. The example performs current measurements on output Channel 1 (Ch1) and Channel 2 (Ch2), continuously, in the following conditions:

  • 1) Ch1 OFF, Ch2 OFF
  • 2) Ch1 ON, Ch2 OFF
  • 3) Ch1 OFF, Ch2 ON
  • 4) Ch1 ON, Ch2 ON

for each configuration the Current for each channel is displayed over an opened console (use Hyperterminal or whatever, set 9600 as bauds, 8-bit data, no parity)

Demo Code

The basic operation done by the demo code, which can be used in the customer application are :

1) In order to use get the singleton instance of the X_NUCLEO_IPS02A1 by calling class method `Instance()`:

// IPS expansion board singleton instance
static X_NUCLEO_IPS02A1 *ips_expansion_board = X_NUCLEO_IPS02A1::Instance();

2) Switch-on or Switch-off loads output (Channel 1 or Channel 2) by setting or clearing associated digital input :

            ips_expansion_board.vps2535h.In_1 = 1; // switch-on Channel 1
            ips_expansion_board.vps2535h.In_2 = 0; // switch-off Channel 2 

3) Read Current circulating on Channel 1 or Channel 2 and print on the Terminal

            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
            printf("Current Ch1 = %2.3fA \n\r", Multisense_Signal);
            Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_2);
            printf("Current Ch2 = %2.3fA \n\r", Multisense_Signal);
Revision:
3:52b7f2fcaf74
Parent:
1:59b97633b43d
Child:
6:32a3eb2a79cd
--- a/main.cpp	Thu Apr 07 15:40:09 2016 +0000
+++ b/main.cpp	Thu May 26 10:19:07 2016 +0000
@@ -35,7 +35,7 @@
  *
  ******************************************************************************
 */ 
-
+ 
 /**
  * @mainpage X_NUCLEO_IPS02A1 Intelligent Power Switch Nucleo Expansion Board Firmware Package
  *
@@ -52,13 +52,13 @@
 #include "mbed.h"
 #include "assert.h"
 #include "x_nucleo_ips02a1.h"
-
+ 
 /*** Static variables --------------------------------------------------------- ***/
 #ifdef DBG_MCU
 #include "DbgMCU.h"
 static DbgMCU enable_dbg;
 #endif // DBG_MCU
-
+ 
 /* HW settings */
 /* Pay attention before changing HW settings, they must be coherent with you HW design */
 /* Power Switch Connection to Arduino connectors */
@@ -67,8 +67,7 @@
 #define IPS02A1_PIN_FR_STBY          (D4)
 #define IPS02A1_PIN_CURRENTSENSE1    (A2)
 #define IPS02A1_PIN_CURRENTSENSE2    (A3)
-
-
+ 
 /* V-Ref */
 #define V_REF 3.3
 /* Rsense Value */
@@ -77,9 +76,10 @@
 #define R_D1 56e3
 /* R_D2 */
 #define R_D2 36e3
-
+ 
 /* End of HW settings */
-
+ 
+/*** Variables ----------------------------------------------------------------- ***/
 static X_NUCLEO_IPS02A1 &ips_expansion_board = X_NUCLEO_IPS02A1::Instance(IPS02A1_PIN_IN_1,
                                                                           IPS02A1_PIN_IN_2,
                                                                           IPS02A1_PIN_FR_STBY,
@@ -89,33 +89,27 @@
                                                                           R_SENSE,
                                                                           R_D1,
                                                                           R_D2);
-    
-                          
+ 
 static Ticker ticker;
 DigitalOut UserLed(LED1);    
-
-/*** Main function ------------------------------------------------------------- ***/
-/* Generic main function/loop, interrupt based cyclic execution
-*/
-
 float Multisense_Signal = 0;    // Multisense pin - signal level
-bool  ButtonPressed = 0;         // User Button
-int   TestSequence = 1;           // Test sequence counter
-
+bool  ButtonPressed = 0;        // User Button
+int   TestSequence = 1;         // Test sequence counter
+ 
 //------------------------------------
 // Hyperterminal configuration
 // 9600 bauds, 8-bit data, no parity
 //------------------------------------
-
-InterruptIn UserButton(USER_BUTTON);  // B1 is the User Button
+ 
+InterruptIn UserButton(USER_BUTTON); // B1 is the User Button
 void B1_pressed (void);
 void LedBlink (int TestSequence);
 void Write_Serial (void);
 void Reset_Pins (void);
-
-
+ 
+/*** Main function ------------------------------------------------------------- ***/
 int main(void){
-    UserButton.fall(&B1_pressed);       //interrupt User Button
+    UserButton.fall(&B1_pressed);    //interrupt User Button
    
     printf("############################################################ \n\r");
     printf("###################  TEST PROCEDURE ######################## \n\r");
@@ -132,7 +126,7 @@
     
     
     while (true) {
-        // wait for User button is pressed 
+        // Wait for User button pressed.
         while (!ButtonPressed) {
         }
            
@@ -153,6 +147,7 @@
             printf(" 4) Ch1 ON,  Ch2 ON \n\r\n\r");
             printf("\n\r\n\r");
             break;
+ 
           case (2): {
             printf("Test 1: StandBy\n\r");
             Reset_Pins();
@@ -165,14 +160,12 @@
             printf("\n\r\n\r");
            }
            break;
-
-          
+ 
           case(3):{
             printf("Test 2: Ch1=ON, CH2=OFF\n\r");
             ips_expansion_board.vps235h2.In_1 = 1;
             ips_expansion_board.vps235h2.In_2 = 0;
             ips_expansion_board.vps235h2.Fr_Stby = 1;
-           
             wait (0.1);
             Write_Serial();
             Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
@@ -184,13 +177,12 @@
             printf("\n\r\n\r");
            }
            break;
-
+ 
           case(4):{
             printf("Test 3: Ch1=OFF, CH2=ON\n\r");
             ips_expansion_board.vps235h2.In_1 = 0;
             ips_expansion_board.vps235h2.In_2 = 1;
             ips_expansion_board.vps235h2.Fr_Stby = 1;
-
             wait (0.1);
             Write_Serial();
             Multisense_Signal= ips_expansion_board.GetCurrent(CHANNEL_1);
@@ -202,7 +194,7 @@
             printf("\n\r\n\r");
            }
            break;
-
+ 
           case(5):{
             printf("Test 4: Ch1=ON, CH2=ON  \n\r");
             ips_expansion_board.vps235h2.In_1= 1;
@@ -219,60 +211,49 @@
             printf("\n\r\n\r");
            }
           break;
-
+ 
           default: {
-            printf("End Test Cycle...press to user button to continue\n\n\n\r");  
+            printf("End of Test Cycle. Press the user button to continue...\n\n\n\r");  
             TestSequence = 0;
             Reset_Pins();
            }
           break;
-
         } 
-        
     }
-    
- }
-
-
+}
+ 
 void B1_pressed (){
-  // Interrupt procedure - User button is pressed
+    // Interrupt procedure - User button is pressed.
     TestSequence ++;
-
+ 
     UserLed = 1; // LED is ON
-    wait(0.05); // 50 ms
+    wait(0.05);  // 50 ms
     UserLed = 0; // LED is OFF
-
+ 
     ButtonPressed = 1;
-
 }
-
+ 
 void LedBlink (int TestSequence){
-// Option feedback by usingUser LED
+    // Feedback by using User LED.
     for (int TestCounter =0; TestCounter<TestSequence; TestCounter++) {
         UserLed = 1; // LED is ON
-        wait(0.05); // 50 ms
+        wait(0.05);  // 50 ms
         UserLed = 0; // LED is OFF
-        wait(0.05); // 50 msec
+        wait(0.05);  // 50 msec
     }
     wait(1-(TestSequence*2*0.05));
 }
-
+ 
 void Write_Serial (){
-// This code send messages and data to the serial port
-// send info to serial port
-
+    // This code sends messages and data to the serial port.
     printf("Input 1= %d\t", ips_expansion_board.vps235h2.In_1.read());
     printf("Input 2= %d\t", ips_expansion_board.vps235h2.In_2.read());
     printf("Fr_Stby= %d\t\n\r", ips_expansion_board.vps235h2.Fr_Stby.read());
-    
-
- }
+}
  
- void Reset_Pins(){
-// reset input pins to  
-   ips_expansion_board.vps235h2.In_1= 0;
-   ips_expansion_board.vps235h2.In_2 = 0;
-   ips_expansion_board.vps235h2.Fr_Stby = 0;
-}
-
-
+void Reset_Pins(){
+    // Reset input pins.
+    ips_expansion_board.vps235h2.In_1= 0;
+    ips_expansion_board.vps235h2.In_2 = 0;
+    ips_expansion_board.vps235h2.Fr_Stby = 0;
+}
\ No newline at end of file