Microcontrollers are often required to generate timed output nanoseconds pulses. The pulse width of the pulses that can be generated from a microcontroller is limited by its clock speed. In an optical LiDAR system, it may desirable to generate nanoseconds pulses to drive a laser driver for instance with a microcontroller. This post describes how to generate precise nanoseconds pulses with a microcontroller irrespective of its clock speed.
For an Arduino, functions like digitalWrite and digitalRead is performed using a number of clock cycles. At 8MHz that’s 125ns per instruction, so from the point of toggling a pin on to the point of turning off would give you 4 instructions to play with..This is not adequate for generating narrow pulses. To overcome this limitation, an external circuit which uses a monostable multivibrator can be used and this post provides the schematic and test of such circuit.
A multivibrator is an electronic circuit used to implement systems such as oscillators, timers and flip-flops. A monostable multivibrator is also known as a one-shot multivibrator. For a monostable multivibrator, one of the states is stable and the other state is unstable. A trigger pulse causes the circuit to enter the unstable state and the circuit will return to the stable state after time usually set by an external capacitor and an external resistor. Such a circuit is useful for creating a timing period of fixed duration in response to some external trigger with variable pulse duration. For more information about multivibrator, visit this page: Multivibrator
There are a range of monostable multivibrator on the market, with some faster than others. They can provide varying pulse width. For this post, the CD74HC221M96 from Texas Instruments was selected. The CD74HCT221 are dual monostable multivibrators with reset. An external resistor (RX) and an external capacitor (CX) control the timing and the accuracy for the circuit. Adjustment of RX and CX provides a wide range of output pulse widths from the Q and Q\ terminals.
The pulse width of the output pulse Q and Q\ is set according to: tw = 0.7*RX*CX. The minimum value for RX is 500 ohms. To get a pulse width of 40 ns for instance and with RX=500 ohms, CX needs to be 115 pF.
The schematic for the multivibrator is shown below, with Vcc=5V:
The circuit was assembled and tested with a signal generator connected to the input and an oscilloscope to the output. A consistent output of ~52 ns is observed irrespective of input signal pulse width as shown in the following figures. The pulse repetition frequency was set to 1kHz.
Using a microcontroller to trigger the circuit
The input pulses for the circuit can be generated with ease using any Arduino. The simplest method is to create pulses using the so-called “Bit-banging Pulse Width Modulation”. For more information, visit Secrets of Arduino PWM
If you have any comments or suggestions, please email us at firstname.lastname@example.org or leave a comment below.