I have many years experience with stepper motor drive circuits and there's nothing basically wrong with the schematic you have provided. It matches the requirements of the datasheet. The fact that the motor buzzes also indicates that you have power to the driver, have logic signals connected to the driver and the driver connected to the motor.
To fault find this circuit you'll need a multimeter, a couple of small LEDs and a couple of resistors (330R to 680R range).
First, check the power supplies:
Check that all the Gnd connections are connected together - your Arduino Gnd, the driver +5V supply Gnd and the motor +12V supply Gnd. If not, then nothing is going to behave as you expect.
With everything connected and powered up, use the multimeter to check that you have 4.5V to 5.5V between pin 16 and Gnd, and 10V to 15V between pin 8 and Gnd. If not, you need to correct this first.
Connect each LED in series with one of the resistors. Then connect one LED-resistor combination between +5V and pin 7, and the other between +5V and pin 10. (You can check the LED is the right way round by connecting your 5V supply and connecting the LED-resistor between +5V and Gnd). Your NPN transistor inverters will turn on these LEDs at the same time they pull the inverted driver pins low so you can see precisely what's going on with your drive signals.
Now, alter your Arduino code to run at a slow stepping rate, something like 1 step per second will be perfect, and observe the LEDs. If your code is correct, and the Arduino correctly wired to the circuit, you should observe the following:
Each LED should flash on and off every 2 seconds, (4 steps for each LED to complete its cycle). If either LED is not flashing, check the LEDs are correctly connected and the Arduino is correctly connected to the circuit.
Each LED should be on for half the time, 2 steps on and two steps off. If this is not the case, check your Arduino code.
Only one LED should change state each step. If both change together, either both on at the same time, or one on and the other off at the same time, then the motor has no direction information and won't rotate. It will alternately move from the detent position to an energised position, (less than half a step) and back again. If this is the case, go back and look at your Arduino code, you have a software problem not a circuit problem.
If the LEDs are flashing in 4-state cycles, per the above, then the drive signals are correct. Your focus must now shift to the driver-motor link.
Disconnect the motor connections to pins 3 and 6 and measure the resistance of the motor winding with a multimeter. It should be a value between 25 and 50 ohms. If not, you don't have the motor you think you do, or if the resistance is very high (or open circuit), then despite your checking the motor is not wired correctly. In this case, disconnect the other two wires and find a pair which do measure the correct resistance between them and connect thise to pins 3 and 6, and the other two to 10 and 15.
If the motor wires to pins 3 and 6 have the correct resistance, reconnect them and check the same thing with the wires between pins 10 and 15. If one pair is correct, but the other is not, then you have a faulty motor and it will not rotate under control.
If all the above are okay, but the circuit still doesn't work, then you've exhausted my imagination. Please let me know what you find and I'll do my best to help further.
Eventually, when it's all working, remove the LED-resistor combinations, they were only diagnostic aids. There are some small circuit improvements I'd make:
Decrease the inverter output pullup resistors to something like 2k7, (as at the maximum specified input current, you could be dropping a volt there); and
Add some good decoupling capacitors to the driver IC, (100nF ceramic between pins 16 and Gnd, and something upwards of 100uF at no less than 50V rating between pin 8 and Gnd.
These will keep things nice and tidy, and more resistant to interference and temperature changes, but not doing them is NOT your problem.
Last of all, don't run this circuit with any motor supply above 18V. The original silicon designs of this driver family were prone to failure if you even thought about the motor voltage going above its 36V max. And many people have come unstuck when driving inertial loads which cause the motors to regenerate energy into the motor supply, momentarily spiking the supply voltage and blowing up the driver. The maximum regenerated voltage is equal to the supply voltage, so keep that under 18V and you can't kill the driver by regenerating.
Best of luck!
There is a great deal of variability when looking at high speed changes in power draw. It isn't as easy as thinking about what might happen at DC. Some of the issues can be based on the length and size of conducting wires, as well as the configuration of power routing. This applies in both wiring and PCB routing of a power system.
It is possible common to have a power demand pulse quick enough that you have to think of power bus as a transmission line, rather than a lumped circuit element. The inductance of your power supply wire will resist current flow enough to drop the voltage a significant amount at the end of the transmission line. So in this situation, a diode and capacitor may solve the problem by keeping Arduino voltage high until the current can make it down the wire to fill the need.
It is a good idea to isolate the control and high power demand variation circuits. This doesn't have to be as much as a separate power supply, but could mean just not sharing long runs of power supply wiring, before T'ing off to each other.
Best Answer
I would recommend the L6470 which are a little pricy but worth it. Although a little work on coding at the beginning is needed, it will save you lots of hard work synchronizing all your motors to work with one another and enable you to use a cheaper MCU.