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);
Revision 3:52b7f2fcaf74, committed 2016-05-26
- Comitter:
- grussian
- Date:
- Thu May 26 10:19:07 2016 +0000
- Parent:
- 2:36907e2448eb
- Child:
- 4:a25f8ece82c9
- Commit message:
- Updated the new X_NUCLEO_IPS02A1 Library which fixed compiler error
Changed in this revision
| X_NUCLEO_IPS02A1.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/X_NUCLEO_IPS02A1.lib Thu Apr 07 15:40:09 2016 +0000 +++ b/X_NUCLEO_IPS02A1.lib Thu May 26 10:19:07 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/grussian/code/X_NUCLEO_IPS02A1/#06d0eb54630a +http://mbed.org/users/grussian/code/X_NUCLEO_IPS02A1/#9edf6b8f3b2f
--- 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

X-NUCLEO-IPS02A1 - 24V Intelligent power switch expansion board