Pi40952 3x2b Driver
Previous versions suffered from ground bounce during high-current switching events. The 3x2B revision addresses this by:
Because the PI40952 uses logic inputs, you can implement speed control by enabling/disabling the channel rapidly using PWM on the EN pin OR by toggling one of the input bits. The cleaner method is using the enable pin:
// Same pin definitions as above + PWM on EN (Pin 4) void setup() pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(EN, OUTPUT); // Set EN pin as PWM-capable (e.g., Pin 4 on Arduino Uno is not PWM? Use Pin 5 or 6 instead) // This example uses Pin 5 as EN.void setSpeed(int speedPercent) // 0 to 255 analogWrite(EN, map(speedPercent, 0, 100, 0, 255)); pi40952 3x2b driver
void loop() motorForward(); for (int i = 0; i <= 100; i++) setSpeed(i); delay(20); delay(1000); for (int i = 100; i >= 0; i--) setSpeed(i); delay(20); motorStop(); delay(1000);
Sample Initialization Code (Arduino C++ pseudo-code):
// Define pins for Channel A #define A0 2 #define A1 3 // Channel B #define B0 4 #define B1 5 // Channel C #define C0 6 #define C1 7 #define ENABLE 8void setup() pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(B0, OUTPUT); pinMode(B1, OUTPUT); pinMode(C0, OUTPUT); pinMode(C1, OUTPUT); pinMode(ENABLE, OUTPUT); digitalWrite(ENABLE, HIGH); // Enable driver Because the PI40952 uses logic inputs, you can
void setChannelA(int state) // state: 0=Off, 1=Low, 2=Mid, 3=Full digitalWrite(A0, state & 1); digitalWrite(A1, (state >> 1) & 1);
The PI40952 3x2B driver functions as expected within [X] MHz under [Y] pF load. Suitable for [application]. Full characterization requires official datasheet.