Simple demo example of X-NUCLEO-IPS02A1 24V Intelligent Power Switch Library usage.
Dependencies: X_NUCLEO_IPS02A1 mbed
Fork of HelloWorld_IPS02A1 by
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);
Diff: main.cpp
- Revision:
- 3:52b7f2fcaf74
- Parent:
- 1:59b97633b43d
- Child:
- 6:32a3eb2a79cd
diff -r 36907e2448eb -r 52b7f2fcaf74 main.cpp --- 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