This is a static snapshot of the site saved for posterity. No future updates will be made here and all interactive features (comments, etc.) are disabled.

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 8

void 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.