Patent Publication Number: US-8996115-B2

Title: Charge balancing for arbitrary waveform generator and neural stimulation application

Description:
CROSS-REFERENCES TO RELATED APPLICATIONS 
     This application is related to co-pending application Ser. Nos. 13/081,936 and 13/082,097, which are incorporated herein by reference in their entirety. 
     FIELD OF THE INVENTION 
     This application relates generally to a method for charge balancing, and more specifically, this application relates to an implantable medical device for charge balancing arbitrary waveforms for spinal cord stimulation. 
     BACKGROUND OF THE INVENTION 
     Programmable pulse generating systems are used to treat chronic pain by providing electrical stimulation pulses from an electrode array placed in or near a patient&#39;s spine. Such Spinal Cord Stimulation (SCS) is useful for reducing pain in certain populations of patients. SCS systems typically include one or more electrodes connected to an External Pulse Generator (EPG) or an Implanted Pulse Generator (IPG) via lead wires. In the case of an EPG, the lead wires must be connected to the EPG via an exit from the body. The pulse generator, whether implanted or external, generates electrical pulses that are typically delivered to the dorsal column fibers within the spinal cord through the electrodes which are implanted along or near the epidural space of the spinal cord. In a typical situation, the attached lead wires exit the spinal cord and are tunneled within the torso of the patient to a sub-cutaneous pocket where the IPG is implanted, or the wires exit the patient for connection to the EPG. 
     Neural stimulators for SCS to date have been limited to waveform shapes dictated by their circuitry. Most emit relatively simple rectangular or trapezoidal stimulation phases with exponential, clamped-exponential, or rectangular charge recovery phases. Similar waveform limitations typically exist for stimulators used in other medical applications such as cardiac implants, cochlear implants, etc. Nevertheless, it is desirable that other waveform shapes be available, as such shapes may be useful in controlling which nerve fibers respond to a stimulation pulse. By selecting particular fibers for response, the therapeutic benefit of neural stimulation can be increased and side-effects decreased. Additionally, other waveform shapes may achieve effective stimulation results while requiring less energy than traditional waveforms, thereby extending the battery life of the stimulator. 
     Currently, the principal way to select a stimulation waveform was to design a stimulator that emitted that waveform as its only form, or as one of a handful of parameter-driven options. For example, a stimulator may be provided that adjusts the charge recovery phase to either an exponential or a rectangular shape based on the pulse rate selected by the user. The stimulation phase is typically provided with only a fixed rectangular shape. In contrast, it would be useful to allow the use of an arbitrary waveform shape for the either the stimulation phase, charge recovery phase, or both, rather than being limited to a simple waveform shape designed into the circuitry. 
     Desired is a capability of producing complex waveform shapes, whether or not they are inherently piecewise-linear, in particular with an ability to adjust amplitudes and pulsewidths simply and efficiently, such as, for example, by providing an ability to rescale portions of a waveform in time, thus adjusting pulsewidths on the fly without having to re-compute the waveform samples. 
     An additional problem with existing neural stimulators is that they include DC blocking capacitors to balance charges and prevent the flow of direct current to the body tissue. Balancing such charges and blocking dc current flow is considered desirable for safety reasons. Desired is an approach that removes or reduces the need for such blocking capacitors by inherently balancing the stimulation waveform charges and preventing the flow of direct current. 
     SUMMARY OF THE INVENTION 
     Disclosed herein is a device/system capable of producing complex waveform shapes, whether or not they are inherently piecewise-linear. It is also capable of adjusting amplitudes and pulsewidths simply and efficiently. 
     Also disclosed is a device/system that completely or partially removes the need for blocking capacitors by inherently balancing the stimulation waveform current and preventing the flow of direct current, such as by providing a charge balancing phase that has a charge that is equivalent but inverse to that delivered during the stimulation phase. 
     Further disclosed herein is a device/system that can rescale portions of a waveform in time, thus adjusting pulsewidths, directly without having to recompute the waveform samples. Such a device/system can also generate the waveform, for example by using data from one or more small template waveshapes stored in a small memory, permitting it to use much less memory for complex waveforms. 
     Provided are a plurality of embodiments the invention, including, but not limited to, a method for balancing charges provided by a medical device for providing a therapy to a patient, the method comprising the steps of:
         providing a first portion of a stimulation waveform for stimulating a stimulation region of a patient, the first portion of the stimulation waveform inducing an electrical charge at the stimulation region of the patient; and   providing a second portion of a stimulation waveform for stimulating the stimulation region of the patient after providing the first portion of the stimulation waveform for substantially canceling the electrical charge at the stimulation region of the patient,   wherein the second portion of the stimulation waveform is primarily comprised of a portion having a shape other than a square wave and other than a decaying exponential.       

     Also provided is a method for balancing charges provided by a medical device for providing a therapy to a patient, the method comprising the steps of:
         providing a first portion of a stimulation waveform for stimulating a stimulation region of a patient, the first portion of the stimulation waveform inducing a first electrical charge at the stimulation region of the patient;   providing a second portion of the stimulation waveform determined based on the first portion of the stimulation waveform for stimulating the stimulation region of the patient after providing the first portion of the stimulation waveform, the second portion of the stimulation waveform having a shape other than a square wave or a decaying exponential and substantially canceling the first electrical charge at the stimulation region of the patient; and   providing a passive recovery phase after providing the second portion of the stimulation waveform for removing any residual charge at the stimulation region of the patient.       

     Still further provided is a method for balancing charges provided by an implantable medical device for providing a therapy to a patient at a stimulation region near the spine of a patient, the method comprising the steps of:
         providing an electrode near the stimulation region;   providing an implanted waveform generating device connected to the electrode;   the waveform generating device generating a first portion of a stimulation waveform for stimulating the stimulation region using the electrode, the first portion of the stimulation waveform inducing a first electrical charge at the stimulation region; and   the waveform generating device generating a second portion of the stimulation waveform based on the first portion of the stimulation waveform for stimulating the stimulation region using the electrode after providing the first portion of the stimulation waveform, with the second portion of the stimulation waveform substantially canceling the first charge at the stimulation region of the patient,   wherein the second portion of the stimulation waveform includes a substantial portion having a shape other than a square wave and other than a decaying exponential.       

     Also provided is a method for balancing charges provided by an implantable medical device for providing stimulation to a patient at a stimulation region of the patient, the method comprising the steps of:
         providing an electrode near the stimulation region;   providing a waveform generating circuit connected to the electrode;   the waveform generating circuit generating a first portion of a stimulation waveform by converting digital data into an analog signal for stimulating the stimulation region using the electrode, the first portion of the stimulation waveform inducing a first electrical charge at the stimulation region;   the waveform generating circuit generating a second portion of the stimulation waveform by converting digital data based on the first portion of the stimulation waveform into an analog signal for stimulating the stimulation region using the electrode after providing the first portion of the stimulation waveform, the second portion of the stimulation waveform including a substantial portion having a shape other than a square wave and other than a decaying exponential with the second portion of the stimulation waveform substantially canceling the first electrical charge at the stimulation region of the patient,   wherein no substantial residual induced electrical charge remains in the stimulation region subsequent to the second portion of the stimulation waveform.       

     Further provided is a device for stimulating a stimulation region of a patient comprising: a waveform generation circuit for providing a stimulation waveform by converting digital data into an analog signal for providing to the stimulation region of the patient; and a control device for controlling the waveform generation circuit. 
     The above control device can be adapted for directing the waveform generation circuit for generating a charge canceling waveform for providing to the stimulation region of the patient subsequent to providing a stimulation waveform to the stimulation region, such that the charge canceling waveform is derived based on the shape of the stimulation waveform. 
     In addition is provided a device for stimulating a stimulation region within a patient comprising: an electrode adapted to be provided near the stimulation region; a waveform generation device adapted to be implanted in the patient, the waveform generation device including: a waveform generation circuit connected to the electrode for providing a stimulation waveform to the electrode by converting digital data into an analog signal, and a control device for controlling the waveform generation circuit. 
     The above control device can be adapted for directing the waveform generation circuit for generating a charge canceling waveform by converting digital data into an analog signal for providing to the stimulation region within the patient subsequent to providing the stimulation waveform, such that the charge canceling waveform substantially cancels an electrical charge induced to the stimulation region by the stimulation waveform. 
     The above control device can also adapted for accepting control inputs for providing a second stimulation waveform having a different shape than the first stimulation waveform, with the control device being further adapted for providing a second charge canceling waveform specifically based upon the second stimulation waveform for canceling the charge provided to the stimulation region by the second stimulation waveform. 
     Still further provided is a system for stimulating a stimulation region of a patient utilizing the above devices and/or methods. Such a system can also be provided to include one or more of an electrode adapted to be provided near the stimulation region; a waveform generation device such as one of the above disclosed devices or such as a device for performing one or more of the above methods; an external device for wirelessly connecting to the control device for controlling an operation of the waveform generation device; and/or an external power source for connecting inductively to the energy storage device for recharging the energy storage device when the energy storage device is in a vicinity of the external power source. 
     Also provided are additional embodiments of the invention, some, but not all of which, are described hereinbelow in more detail. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The features and advantages of the examples of the present invention described herein will become apparent to those skilled in the art to which the present invention relates upon reading the following description, with reference to the accompanying drawings, in which: 
         FIG. 1  is a block diagram showing a high-level structure of an example embodiment; 
         FIG. 2  is a block diagram showing a more detailed structure of a possible construction of the example embodiment used as an implantable pulse generator; 
         FIG. 3  is a block diagram showing an example system used as an external pulse generator; 
         FIG. 4  is a schematic of one example implementation of part of a pulse generator circuit and supporting components in an example system; 
         FIG. 5  is a schematic of another example implementation of part of a pulse generator circuit and supporting components in another example system; 
         FIG. 6  is a schematic of an example implementation of a waveform generation circuit and supporting components in an example system; 
         FIG. 7  is an example output waveform construction result of an example waveform generation circuit; 
         FIG. 8  is another example output waveform construction result of an example waveform generation circuit; 
         FIG. 9  is another example output waveform construction result of the example waveform generation circuit; 
         FIG. 10  is another example output waveform construction result of the example waveform generation circuit; 
         FIG. 11  is a circuit diagram of an example amplitude dividing circuit; 
         FIG. 12  is a diagram illustrating a two-phase stimulation pulse with charge balancing; 
         FIG. 13  is another diagram illustrating time scaling; 
         FIG. 14  is an example output waveform construction result of the example waveform generation circuit using scaling features; 
         FIG. 15  is an example complex output waveform construction result of the example waveform generation circuit; 
         FIG. 16  is a diagram illustrating an example implantable pulse generation device; 
         FIG. 17  is a diagram illustrating a medical application of some of the example devices; and 
         FIG. 18  is another example complex output waveform construction result of the example waveform generation circuit. 
     
    
    
     DETAILED DESCRIPTION OF THE EXAMPLE EMBODIMENTS 
     Disclosed is a device, or system of devices cooperating with each other, for providing a flexible and highly adaptable stimulation waveform, such as might be used for medical purposes such as spinal stimulation (such as for pain reduction, for example). This system includes a neurostimulation pulse generator that uses digital waveform synthesis techniques to generate stimulation pulses with programmable waveshapes. 
       FIG. 1  is a generic diagram of an example stimulation system. Such a system includes a Pulse Generator (PG) component  1 , a set of two or more electrodes (which may include the PG&#39;s enclosure)  2 , external programming and user controlling devices  3 ,  4 , and a connection to an external power supply  5 . The Pulse Generator  1  is typically generally comprised of an internal power supply  6 , a controller  7 , Pulse Generator electronics  8 , and a protection circuit  9 . 
       FIG. 2  shows a more specific example system where most of the components for generating the stimulation waveform are implanted in a patient for providing medical therapy by utilizing an implantable PG (IPG)  101  that could utilize the disclosed features. This system is comprised of the IPG  101  that includes a stimulation ASIC  108  and protection components  109 . The IPG  101  is further comprised of a microcontroller  107  for controlling the functions of the IPG via the control bus  12 , and a power ASIC  106  for powering the components via a power bus  11 . Because this implantable system avoids the need for any components or wires that exit the body of the patient  120 , the IPG  101  includes an RF transceiver (transmitter/receiver)  14  with an antenna  16  for allowing the IPG to communicate with devices external to the patient&#39;s body, such as a clinician programmer  103  and user controller(s)  104 , which also have antennas  18  and  19 , respectively, to communicate with the transceiver  14  via a wireless protocol. Furthermore, the IPG also includes an embedded power supply including a power ASIC  106  for conditioning the device power, a (long life) rechargeable battery  13 , and a secondary inductive coil  15  (or some other means) for receiving power from an external source outside the body of the patient  120 . A corresponding external power supply  105  would typically require a corresponding primary charging coil  17  to complete the power connection to the embedded power supply to charge the battery  13 . The IPG  101  is connected to one or more electrode arrays  102  including a plurality of electrodes via a header (not shown) connected via feedthroughs (not shown) to the protection components  109 . The IPG  101  is provided in a hermetically sealed case made of, or coated by, human implantable compatible materials, and requiring only that the contacts attached to the lead body of the electrode array(s) be electrically connectable to the IPG through the header. The electrode leads and electrodes themselves, along with portions of the header that are exposed to the patient, must all be made of, or coated by, materials that are compatible with implantation in the human body. 
       FIG. 3  shows an example system that can be provided with similar capabilities, but without requiring an implantable PG. Instead, the system of  FIG. 3  uses an external PG (EPG)  201  that is provided outside of the body of the patient  220 . The EPG  201  can be comprised of similar components as that of the IPG  101 , except that it need not be made of implantable materials. Instead, the EPG  201  is connected to the electrode array  202  via a percutaneous lead  22  that must exit the body. The lead  22  is then connected to the EPG  201  via a connector  23 . The EPG  201  can be directly connected to the corresponding clinician programmer  203  and user controller  204 , or a wireless connection similar to that of the IPG  101  could also be used. The EPG can be powered via an internal battery or connected to an external power source, as desired. 
     One end of the percutaneous lead  22  is typically surgically implanted in or near the tissue to be stimulated. The other end is brought through a wound in the skin, and can be connected to the EPG when electrical stimulation is needed. The implanted end of the Percutaneous Lead typically includes electrode surfaces similar to those on the implanted lead(s). The EPG may be designed to be mobile, such that it can be carried by the patient, such as by mounting on a belt. In such a case, a battery would prove useful to increase mobility. 
     An Implantable Pulse Generator is surgically placed inside the body along with one or more implanted leads (as shown by example in  FIG. 2  and discussed above). One end of each implanted lead (often called the “proximal” end) is electrically and physically connected to the IPG via the header, while the other end (often called the “distal” end) is placed in or near the tissue to be electrically stimulated. The distal end includes one or more exposed electrode surfaces, electrically connected to the IPG, that transfer the electrical stimulation pulses to the tissue. 
     Outside the body, the external power supply is used to transfer power to the IPG, either for charging a battery or capacitor inside the IPG or providing direct power for the IPG&#39;s electronics. This is done via the charging coil, which is placed over or near the area where the IPG is implanted, and forms the primary coil of a transformer with the secondary coil inside the IPG, although a separate coil electrically connected to the IPG but somewhat remote from the IPG could be used. The two coils, coupled inductively, provide power transfer through the skin. The external power supply itself can be powered by a battery to allow for patient mobility, or it may also draw power from a mains power source. 
     Also outside the body, the clinician programmer is used to program the IPG, configuring it for the particular patient and defining the electrical stimulation therapy to be delivered to the target tissue. The clinician programmer is typically highly functional, allowing IPG programs to be substantially modified by updating programs and/or data stored in memory in the IPG, to allow great flexibility in programming the IPG. 
     The user controller is used to control the operation of the IPG in a manner limited by its programming. Thus, the user controller is typically less functional than the clinician programmer. The user controller can alter one or more parameters of the electrical stimulation therapy to adjust the therapy to the liking of the patient, depending on the IPG&#39;s program and configuration as set with the clinician programmer. 
     The operation of an EPG (as shown by example in  FIG. 3  and discussed above) is similar, with the exception that there is typically no need for inductive transfer of power as direct cable connections can be used to recharge any battery, for example, and the electrode leads must pass through the body to connect to the EPG. 
     Pulse generators (PGs), whether implanted pulse generators (IPGs) or external pulse generators (EPGs), have, to date, used waveforms that are generally rectangular for the stimulation phase of the waveform and either rectangular or exponential for the charge recovery phase. However, waveform shapes other than these basic choices may be effective in selecting which nerve fibers are activated by an EPG or IPG. For example, one waveform shape may be preferable for selecting large-diameter fibers, while another shape may be preferable for small-diameter fibers. Because the fiber diameter in a given nerve is related to the function of that fiber, improved selectivity of one nerve fiber over another can improve the likelihood of achieving the desired results of neural stimulation, such as pain relief, with less occurrence of undesirable side-effects such as pain or muscle spasms. 
     For safety reasons, most PGs use charge-balanced waveforms. A charge-balanced waveform is one in which the effective DC current is zero or nearly zero. For example, various national and international standards limit the net DC current to 10 μA (AAMI/ANSI NS-14, incorporated by reference), or 0.1 μA (ISO 45502-2-1, incorporated by reference), depending on the intended use of the PG. A charge-balanced pulse is made up of at least two phases of stimulation current, each phase having a single polarity, such that the integral of the current over time of all the phases, representing accumulated electrical charge, equals zero. Typically, there are two phases, the first phase being intended to create the desired effect in the tissue, and the second phase, of opposite polarity, used to bring the waveform into charge balance. 
     To prevent tissue damage and/or electrode corrosion, charge delivered on one electrode is usually recovered on the same electrode, because any residual charge can change the chemical composition of the tissue near the electrode. It does not take much imbalance to get significant electrode corrosion, which is particularly problematic in implanted devices. 
     Typically, charge-balancing is done with the aid of DC blocking capacitors that are provided in the conditioning/protection circuit, which serve the function of integrating the charge transferred in the stimulation phases up to a given time. By bringing the voltage on the capacitor to its original value during the charge recovery phase of the pulse, the integral of the current is brought to zero, assuring charge balance. These DC blocking capacitors are bulky, which runs counter to the goal of making a PG as small as possible (in particular, for an IPG). DC blocking capacitors have other drawbacks as well, as in some designs, the DC leakage through the capacitor dielectric and/or insulation results in a DC current through the tissue, the opposite of the intended reason for including the capacitors. 
     Thus, provisions for charge balancing without requiring DC blocking capacitors is discussed herein as well. This feature permits the construction of smaller PGs and eliminates the risk of DC leakage through the capacitors. 
     The waveform generation core is the primary component that is modified by this disclosure, and can be comprised of waveform generation circuitry including any or all of the following components: one or more memories to store waveshape templates, a phase accumulator, a step-size register, one or more waveshape calculation logic circuits, and a clock source. Which of these devices are utilized depends on the desired implementation, any of which may be omitted where not needed, and any of which can be replicated as desired. Conditioning/protection components may also be used, although at least some embodiments seek to avoid such components through an active protection and charge dissipation methodology. These components are described in more detail, below. An example operation of a device comprising at least one of all of these components can be generally described, along with at least one medical application. 
     Provided is the utilization of a waveform shape stored in memory and used as a template for generating shaped stimulation pulses. These templates can be programmed via the clinician programmer, which may have a selection of available shape templates for the clinician to choose from, or the templates may be programmed into the device during manufacture. The memory is structured such that each memory location represents a time step, and the value stored in each memory location represents the amplitude at that time step. Basically, the waveform is generated by addressing a memory to retrieve some number of waveform samples stored in a memory for any of the desired waveform shapes, in the following manner: A waveform is to be constructed using one or more phases for creating portions of the stimulation pulse waveform, including both the stimulation phase and the charge recovery phase. At the start of each phase of the stimulation pulse, a phase accumulator is set to a programmed offset value as a start address used to retrieve a waveform sample value from memory. This offset value sets the sample, from the waveshape template stored in memory, that will start the pulse. 
     As the phase continues, at each sample time the phase accumulator is incremented by a step size stored in a step-size register to calculate the next address value. This next address value is used to select an additional sample from the stored waveshape template, and the process is iterated again to retrieve additional amplitude samples from the waveshape template that make up the current phase of the pulse. The step size in the example is a fixed-point number that can have both integer and fractional components, if desired. By permitting fractional increments in the step size, it is possible to generate waveshape durations of any integer length, not just those that divide evenly into the number of samples in the waveshape template. Also, if the fixed-point step size is less than one, the pulse width will be made longer than the number of samples in the template; samples can then be automatically be duplicated, as necessary, to extend the pulse. This allows the memory size required for reasonable fidelity to be optimized for the typical pulse width used by the therapy, while still allowing very short or very long pulse widths to be possible. 
     The output from the phase accumulator is used as an index into a programmably selected waveform memory as described above, or it can be used to index a shape-generating logic circuit, depending on the current implementation and/or desired output waveform. A waveform memory would be used to look up a waveform sample that was stored in advance at the indexed location of the memory and output the desired waveform shape, which allows a great flexibility in the shapes of waveforms. A single register, in contrast, which outputs the same (constant) programmed value regardless of the index could be used to generate rectangular waveforms. A shape logic circuit, in contrast, computes a fixed mathematical function based on the input index (or based some other input or internal function) and outputs the result as a waveform shape, which may be particularly useful for situations where waveforms that are provided by simple mathematical equations are desired (such as exponentials, ramps, sine waves, etc.). 
     The output from the waveform memory or waveform calculation logic (whichever was chosen) then drives a digital-to-analog converter (DAC), called a “waveform DAC”, which creates a reference current (or voltage). This reference current (or voltage) is in turn used as the input of several multiplying digital-to-analog converters, called “amplitude multipliers”. The data input of the converters comes from programmable amplitude registers for that phase of the stimulation waveform. The result of the multiplication is a current (though a voltage could also be generated), positive or negative (or equivalently, sink or source), which is output to the electrodes in contact with body tissue. By adjusting the values in the amplitude registers, the amount and polarity of current (or voltage) output to each electrode can be adjusted, thus shaping the electric field generated by the phase. Although the examples provided herein focus on the use of a single waveform generation circuit that can drive a plurality of electrodes by driving the output into a number of amplitude-multiplying DACs, replication of the waveform generation circuit can be used to provide additional flexibility to the output, if desired, such that any given waveform generation circuit may independently drive a subset of one or more electrodes. In such a situation, the circuits could be modified to share memories of waveform shape templates to reduce unnecessary replication. 
     The stimulation waveform is divided into a series of pulses, each of which is divided into a series of unipolar phases. Each phase has a programmable repetition count (to repeat the phase a number of times, if desired) and a programmable delay before the next phase. Circuitry in the stimulator automatically sequences the phases and their repetitions, and hence, the pulses that are made up from the phases. This allows a single stimulation pulse to have more than two phases defined for it. This structure allows for “n-lets”, or pulses that have repeated stimulation phases, as well as one or more “pre-pulses”, where one or more additional phases are added prior to the stimulation phase to provide pre-polarization. 
     Programmable dividers for amplitude (each called a “current divider”) and time (each called a “clock divider”) can be used to scale a waveform simultaneously in time and amplitude in such a way that permits charge balancing in cases where the same shape is used for both the stimulus and charge recovery phases. The current and clock dividers can be omitted or can be included but unused, if desired. In such a case, the current divider and clock divider registers could be programmed appropriately to provide charge balancing. 
     The pulse generator typically includes amplitude multipliers for every channel on the device. 
     Pulse Generator Architecture 
     The improvements discussed herein can be used with an Implantable Pulse Generator (IPG) as shown in  FIG. 2  (discussed above) or an External Pulse Generator (EPG) as shown in  FIG. 3  (also discussed above). The description below will focus on example implementations using the IPG based system, but an EPG system could be easily adapted in a similar manner. 
     As described above, a block diagram of the internal functions of an example IPG system is shown in  FIG. 2 . 
     The microcontroller  107 , which is implemented using a programmable controller as is known in the art, controls at least the embedded components of the system, stores stimulation program information, and performs other control and management functions, some of which are disclosed herein. The RF Transceiver  14  implements bidirectional digital communications at radio frequencies in the IPG with external devices as desired. The attached antenna  16  is used to transmit and receive these radio signals, by which the IPG communicates with such components as the User Controller  104 , Clinician Programmer  103 , and/or External Power source  105 , among other possible devices. 
     The Power ASIC  106  is connected to the Battery  13 , which provides electrical power to the powered internal components. The Power ASIC  106  is also connected to the secondary coil  15 , by which it receives electrical energy inductively coupled through the patient&#39;s body from the primary charging coil  17 . The Battery  13  may be either primary or rechargeable, or may be omitted in lieu of some other power source. If the battery  13  is a primary battery, the external power unit  105 , the charging coil  17  and secondary coil  15  may be omitted. Typically, a secondary battery that is rechargeable is desirable to lengthen the useful life of the battery and avoid additional surgeries to replace the pulse generator or its components. Other power supplies in the future may prove useful to replace the battery implementation. 
     The Stimulation ASIC  108  includes the stimulation pulse waveform generation circuitry. This ASIC  108  is controlled by the microcontroller  107  and has power supplied by the Battery and/or Secondary Coil via the Power ASIC. 
     The Protection Components  109 , if used, may include DC blocking capacitors and electrical transient suppression components, among other components. Together, these components protect the tissue from unwanted electrical signals and DC currents, and protect the PG from external electrical events such as electrostatic discharge, defibrillation, or electrocautery. In some embodiments, particularly those discussed in a related application, some of these components might be reduced (in size and/or quantity) or eliminated through the use of active charge balancing techniques. Thus, for at least some embodiments (in particular embodiments exclusively using active charge balancing), the waveform generation core may consist of only the stimulation ASIC, along with any supporting components, if necessary. 
     Waveform Generation Core 
       FIGS. 4 and 5  show generalized embodiments of potential waveform generation core designs for use in providing the improved waveform generation capabilities. In general, power and control connections are not shown in these figures, as their use is within the skill of the art based on this discussion. 
       FIG. 4  shows a simplified block diagram of a generic waveform generation core of a stimulator system incorporating the waveform generation improvements. A reference generator “Iref”  41  that is a reference current source sets the over-all amplitude scaling of the system. A clock signal CLK  42 , sets the over-all time scaling of the system, and the Clock Divider  43  scales the clock by a configurable division factor. The Waveform Generator  40 , representing the core of the waveform generation function, outputs the shape of each phase of the pulse, creating the “normalized waveform” that basically forms the stimulation waveform into its desired shape. The Current Divider  44  scales the output of the Waveform Generator  40  by performing a division operation, creating the “scaled waveform”. Finally, the Amplitude Multipliers  45   a ˜ 45   n  (typically one per channel) multiply the scaled waveform by a configurable amplitude and polarity for each individual channel CH 1 ˜CHn in the electrode array  49 . The peak amplitude and polarity for each channel do not vary during a given phase of a pulse, but do change from one phase to the next. Each Amplitude Multiplier  45  has an independent current output, each of which can be used to drive a subset of one or more of the stimulation electrodes. Furthermore, multiple current outputs can be used to drive a single electrode. 
       FIG. 5  shows a simplified block diagram of a stimulator similar to that of  FIG. 4  with the addition of DC blocking capacitors  47   a ˜ 47   n  and passive-recovery switches  46   a ˜ 46   n . The addition of the blocking capacitors and passive-recovery switches allows charge balancing to be achieved in a passive manner by selectively closing the switches and connecting the capacitors to a common node. Thus, the embodiment of  FIG. 5  would be more likely utilized where an active charge balance function is either not utilized, or not sufficient to completely balance the charges produced by the device, whereas the embodiment of  FIG. 4  could be utilized where an effective charge balancing procedure is used. 
     Although not shown, the waveform generation circuitry could be replicated and provided with a multiplexor or set of switches connected to the inputs of the amplitude-multiplying DACs in order to allow different waveforms to drive various subsets of the electrodes. However, in the example, one waveform generation circuit is provided, and deemed satisfactory for many purposes. 
     Waveform Generator 
     The internal structure of an example embodiment of the Waveform Generator  40  is shown in  FIG. 6 . Again, the power connections are not shown, and only some of the control inputs most applicable to this discussion are shown in this figure. 
     Generally, this example waveform generator is comprised of, for example, a 24 bit input bus  601  for inputting a desired step size. A summer  602  is used to increment an address value based on the step size as the device iterates over each phase. An offset register or input  613  can be used to correct for waveform distortions that may occur for certain step sizes by being preloaded in the preload, as described below. A digital preload multiplexer  604  is used to switch between the offset at the start of the phase or the sum value to continue the phase. 
     The output of the preload multiplexer  604  is carried by the address bus  612  and contains the address value that is input into the delay  603  for a step delay for input into the summer  602  to increment the address by one step size. For the example embodiment, only the highest 8 bits of the address are input into the waveform generating circuit  600 . Other embodiments might use the entire address, however, or may also use more or fewer bits depending on the shape fidelity required for the therapeutic application. 
     The waveform generating circuit  600  outputs digital values representing the desired amplitude values at each time step of the waveform, and is comprised of those shape components that will generate the desired waveform shapes. Such shape components can include one or more RECT registers  607  which generate constant values regardless of input address for generating square wave pulses. Such shape components can also include one or more shape logic circuits  605   a ,  605   b  . . . for generating waveforms based on mathematical functions, for example. Furthermore, the waveform generating circuit  600  can also be comprised of one or more memory circuits  606   a ,  606   b  . . . that contain values representing programmed shape templates of desired waveforms. 
     A shape multiplexor  608  is used for choosing which shape component output is desired, based on a shape control input from the microcontroller (not shown), for example. The shape multiplexor  608  output  614  is connected to a carry multiplexor  609  that is used to zero the value at the start/end of the phase (when the summer overflows, for example). A Digital to Analog converter  610  converts the 8 bit shape data value into an analog value  611  of a current or, in some embodiments, a voltage, which is then connected to dividers and/or multipliers, as desired, to scale the shape into the desired amplitude. 
     Example operations of the example Waveform Generator described above can now be provided. In the first cycle of waveform generation in this example, the preload input of the preload multiplexor  604  has a value of “1”. This causes the initial 24-bit output on the address bus  612  to be the 24-bit value OFFSET:$00:$00. That is to say, it is a 24-bit value with an OFFSET value in the most significant eight bits, and the least significant sixteen bits all zero. In subsequent cycles the preload input to the multiplexor  604  is “0”, and as a result, the 24-bit digital word “STEP” input  601  is added in the summer  602  (Σ) to the output of the unit delay  603  (z −1 ) block, making a new 24-bit sum and one bit of carry. Tracing the path of the sum, one can see that it then becomes the input to the unit delay  603  (z −1 ) block. Thus, with each clock cycle, the sum on the address bus  612  increases by the amount “STEP”. 
     In the Example shown in  FIG. 6 , the most significant eight bits of the sum are used as the address into two memories, Memory  1   606   a  and Memory  2   606   b , which may be any kind of digital memory such as RAM, ROM, EEPROM, Flash, or other types. The memories  606   a  and  606   b  each store a different wave shape template of a desired waveform to be generated. The address indexes the desired entry of the template for the particular clock cycle. Note that the address does not necessarily increment by one in every clock cycle. Depending on the value of STEP, it could also increment by less than one, resulting in multiple samples of a given entry in the template being used, or it could increment by more than one, resulting in only some, but not all, samples being used. Thus, an output waveform of arbitrary duration is synthesized from a wave shape template of fixed duration. 
     In the special case of rectangular waveforms, every element of the memory would be set to the same value. Thus, to avoid this inefficient use of memory space, the device can provide a number of rectangle registers, numbered RECT 1 -RECTn. In the Example of  FIG. 6 , four such RECT 1 -RECT 4  registers  607  are used. Since rectangular waveforms have the same amplitude value for all addresses, it is not necessary to actually address these registers. 
     Similarly, it is possible to use digital logic circuits in place of a memory to generate useful waveforms. Two such logic circuits are shown in  FIG. 6  as blocks Shape Logic  1   605   a  and Shape Logic  2   605   b . For example, a rising ramp waveform may be generated by connecting the top 8 bits of the sum directly to one of the multiplexer  608  inputs (in lieu of a memory), or a falling ramp may be generated by connecting the logical inverses (using a NOT operation) of the top 8 bits to the multiplexer input. Other variations are possible, such as providing exponential generators, sine wave generators, parabolic generators, etc. Such circuits might utilize the address inputs as part of the mathematical function or not, depending on the desired application. 
     The outputs of the memories  606   a ,  606   b , rectangle registers  607 , and shape logic circuits  605   a ,  605   b  pass to the shape multiplexer  608 , which is controlled by the SHAPE input. This input is configured to select the desired waveform for a given phase, and is typically held constant for the entire phase. By setting SHAPE to the binary code 0111, for example, the waveform generated will use the template contained in Memory  2   606   b . This embodiment shows a data bus width of 8 bits as the output of the shape multiplexor, though more or fewer bits may be used to achieve the shape fidelity required for the therapeutic application. 
     The output of the shape multiplexer  608  passes into the carry multiplexer  609 , which is controlled by the carry output from the sum (Σ) block  602 . The carry multiplexer  609  sets the output of the waveform generator to zero when the sum overflows its 24 bits, for example. 
     Finally, the output of the carry multiplexer  609  drives a digital-to-analog converter  610  (DAC), which emits the normalized waveform output  611  from the Waveform Generator. 
     It can be seen that with each clock cycle, the sum, and hence the address, is incremented by the amount “STEP”. Hence, “STEP” is called the “step size” and sets the rate at which elements of the wave shape template are used to create the waveform. It also implicitly sets the pulse width, since after enough steps of that size, the sum operation will generate a carry, which signals that the waveform generation is complete for the current phase. 
     The waveform generator constructs stimulation pulses via control from a microcontroller and/or state machine (e.g., a sequencer) that programs the desired shape, step size, and offset required for each phase of the pulse. The microcontroller and/or state machine also control the delays between pulse phases and provide the clock source to the waveform generator. 
     When memory devices are to be used for waveform generation using stored shape templates, it is often desirable to ensure that a particular point in the template is reached, such as guaranteeing that the peak point of a sine wave is emitted, for example. If the sum were to always start at zero, this may not be possible for some step sizes on some shape samples as the peak could be bypassed in some of those cases. By configuring the OFFSET input appropriately, one can ensure that any selected single sample in the template waveform will be emitted in the synthesized waveform by shifting the chosen samples of the waveform. Thus, depending on the type of waveform, or the scaling of a particular waveform, or both, an appropriate OFFSET value is calculated by the microcontroller for each phase to ensure that the desired particular point in each phase is provided in the output waveform. 
     As possible examples of the operation of the example waveform generator of  FIG. 6 , consider the generation of a six-sample half-sine-wave pulse. Assume the waveform memory is configured with a template waveform of a half sine wave pulse. Further suppose a value for STEP is chosen with a zero OFFSET value.  FIG. 7  shows an example output as the bars, demonstrating the example waveform, while the dashed line illustrates the continuous-time half-sine pulse that these data points approximate. Although the data points are numerically correct, in that they do lie on the sine waveform, there is an asymmetry posed by the first chosen sample amplitude being $02 without a corresponding sample of $02 at the finish, thereby skewing the sine wave to the right. Thus, the overall shape of the pulse might not have the desired fidelity to a sine wave. 
     This asymmetry can be corrected by choosing an appropriate OFFSET value.  FIG. 8  shows such example data points as bars, with the continuous-time half sine wave pulse approximated by these pulses drawn as a dashed line. It can easily be seen that the data points both fit the sine wave curve well and have good symmetry. Thus, the OFFSET input can be used as illustrated to adjust the shape of the output waveform. 
     As a second example, consider the creation of an eight-sample rising exponential pulse. Example data are plotted as the bars in  FIG. 9 , with the continuous-time exponential pulse these points approximate drawn as a dashed line. Although the data fit the ideal exponential pulse, they never reach the maximum amplitude, which may be considered undesirable. In this situation, an OFFSET may be desirable. 
     Accordingly, the exponential pulse can be configured to reach its peak value by choosing an appropriate OFFSET value. This example is plotted as the bars in  FIG. 10 , with the continuous-time exponential they approximate plotted as a dashed line. It can be seen that the points fit the continuous-time exponential well, and they reach the maximum amplitude. Thus, the OFFSET input provides sufficient to ensure that a particular sample in the template waveform—in this case the last and peak sample—is reached when the waveform is generated. 
     Although both of the previous examples were of waveforms shorter than the template waveform, the waveform generator can also be used to create waveforms that are longer than the template waveform by making the STEP input sufficiently small, in which case the waveform generator will repeat samples from the template waveform to create a pulse of the desired width by stretching the waveform. 
     It is worth noting that there are trivial variations on this design that are basically equivalent. For example, the memories could be combined into a single larger memory, using one or more additional address lines to select between multiple wave shape templates. Similarly, enable inputs to the memories, rectangle registers, and/or shape logic could achieve a selection function equivalent to part or all of the shape multiplexer. Thus, there are a number of variations that can be used to implement the features of the waveform generator using different alternatives. 
     There are also several ways for the waveform generation circuitry components to be realized in hardware. First, it is possible to implement all of this circuitry in a single ASIC, either combined on-chip with the microcontroller or separate from it. Second, it is possible to combine some elements of this circuit on an ASIC with various separate components, for example by building most of the waveform generator in the ASIC and interfacing it to separate memories that are not part of the ASIC. Finally, it is also possible to build the waveform generator using discrete components. 
     Depending on the complexity of the waveforms to be generated and the therapeutic needs of the application, there are many ways to structure the architecture to achieve the features described above. A low-power microcontroller with dedicated programming stored in ROM could be utilized. Or, rather than using a low-power microcontroller, a device such as a more powerful central processing unit or a digital signal processor with appropriate programming stored in a computer readable medium, such as a memory device, could be used to directly synthesize the waveforms. In addition, field-programmable gate arrays could be programmed as a control source, state machine, and/or waveform generator. In this embodiment the preferred memory type for waveform template storage is RAM, though it could be equally effective to use flash memory, EEPROM, or some other form of ROM memory as is known in the art. 
     Current Divider 
     In an example embodiment, the output from the waveform generator is provided to a Current Divider to help provide relatively precise control over the normalized waveform amplitude. The Current Divider performs a division operation for scaling the waveform. As an example, such a scaling factor can scale the waveform by a division factor ranging from 1/1, 1/2, 1/3, and so on to 1/16. 
     With a current output from the example waveform generator described above, an example current divider can be implemented as shown in  FIG. 11 . Note that in  FIG. 11 , the notation “M=n” is used, where n is some number that indicates that the corresponding FET is replicated n times. Each of the n copies of that FET have the same gate, drain, and source connection shown in the diagram. 
     The circuit in  FIG. 11  adapts current mirror techniques to perform current division on the normalized waveform. In the example, a digital 4-bit divisor word enters on the D bus  32 , and the analog waveform to be divided enters on the I wire  31 . To describe its operation, it is first assumed that all of the FETs in the top row (Q 7 -Q 12 ) are functioning as switches and all are initially turned “on”. A portion of the waveform current coming in the I input  31  passes through FET Q 7  and then FET Q 1 . FET Q 1 , having its gate tied to its drain, sets the gate voltage for all of the rest of the bottom-row FETs (Q 2 -Q 6 ) to the value that is needed for it to carry the current flowing through it. Thus, each individual FET in the bottom row is biased to carry the same current value. However, many of the FETs are replicated according to the M factor—for those FETs, each replica is biased to carry that same current. Thus, if all four of Q 2 -Q 5  are carrying current, they will carry a total of 15 (8+4+2+1=15) times the current through Q 1 , and the current through Q 1  will be 1/16 of the current through the I input. 
     Now, consider the function of the D input  32 , which is a 4-bit value controlling Q 8 -Q 11  as switches. When D has the binary value 0000, all four switches (Q 8 -Q 11 ) are turned off, and the full current of the I input  31  (which is based on the output of the DAC in the Waveform Generator) will flow through Q 1 . When D has the binary value 0001, Q 11  will be turned on, so half the current from 1 will flow through Q 1  and half will flow through Q 5 . When D has the binary value 0100, Q 9  will be turned on, enabling the corresponding M=4 FET (Q 3 ). The result is that 1/5 of the input current I will flow through the Q 1  and 4/5 will flow through Q 3 . Thus, the binary value of the D input acts as a divisor, controlling how much of the input current I flows through Q 1 . 
     The output from the current divider is created by Q 6 . Its gate voltage is set by Q 1 , causing the current through it to be the same as that flowing through Q 1 . Thus, as the D and I inputs are varied, the current sunk at the output is equal to the current sunk by the I input, divided by (D+1), thereby providing a current sink  33  that is a value of I/(D+1) 
     Q 7  and Q 12  are configured as switches that are permanently turned on. Their purpose is to match the electrical environment of Q 1  and Q 6  to that of Q 2 -Q 5 , so that all of the bottom-row FETs see similar voltage, resistance, and capacitance in their connected components. This matching improves the accuracy of the division operation. 
     An alternative implementation could be provided using complimentary circuitry to provide a controlled voltage output when the DAC converter outputs a voltage rather than a current. It is also possible to bypass or eliminate the current divider for applications where its use is not necessary. 
     Amplitude Multiplier 
     The output from the waveform generation circuitry is passed to the amplitude multipliers that are associated with corresponding channels. The output from the waveform generation circuitry is replicated in a current mirror, creating one copy of the current per amplitude multiplier. Those copies of the current are passed to the amplitude multipliers that are associated with corresponding channels. Each amplitude multiplier is comprised of two sets of switched current mirrors, one using p-channel FETs (pFETs) to source current and one using n-channel FETs (nFETs) to sink current. The PG contains multiple amplitude multipliers, one for each stimulation channel. Thereby, the amplitude and polarity of each channel can be independently controlled. 
     Clock Divider 
     The clock divider  43  (see  FIGS. 4 ,  5 ) uses standard digital logic techniques to perform frequency division on the CLK input  42 . The division factor is configurable and must be an integer. That is to say, if the division factor is 3, then the clock divider outputs one clock cycle for every three cycles of the CLK input. If the division factor is 5, the clock divider outputs one clock cycle for every five cycles of the CLK input. Thus, the CLK frequency should be chosen sufficiently high to satisfy the shortest pulse width that would be expected, and must be high enough to consider the maximum number of samples that are to be used in any given pulse width (or “phase” as that term is used below). 
     Active Charge Balancing 
     As defined above, a charge-balanced pulse is one in which the net DC current is zero. This is often done using a passive balancing scheme by accumulating a voltage on a DC blocking capacitor during the stimulation phase, then discharging this voltage during a charge recovery (sometimes called “recharge”) phase. This is termed “passive recovery”, since the capacitor is passively permitted to discharge to its resting value. In these stimulators, the recovery phase is either exponential or a clamped exponential (owing to the nature of capacitor discharge). A controlled-current recovery phase could also be used, which can be used to avoid the long exponential tail required in passive recovery. In these stimulators, the recovery phase is substantially rectangular. However, accuracy limitations (explained below) mean that one must either give up amplitude resolution or make the recovery phase partially passive in order to ensure a net DC current of zero. In contrast, the PG described herein and in related applications is capable of wave shapes for all phases of the pulse, including both the stimulation and recovery phases. To perform this task, a more sophisticated approach to charge balance is provided. 
     Desired is a means to control the aspect ratio of the charge recovery phase as a function of the amplitude and pulse width of the stimulation phase. Consider  FIG. 12 , which shows a two-phase stimulation pulse. The first phase  61 , the stimulation phase, has a negative polarity, an amplitude of np and a pulse width of tp. The second phase  62 , the recovery phase, has a positive polarity, an amplitude of nr and a pulse width of tr. Both amplitudes np and nr have units of digital-to-analog converter (DAC) current or voltage units and are nonnegative integers. Both pulse widths tp and tr have units of clock cycles and are nonnegative integers. The net charge of the pulse is (nr·tr−np·tp). If the aspect ratio of the recovery phase is defined by a scaling factor k, such that the amplitude is scaled by (nr=np/k) and the pulse width is scaled by (tr=ktp), the charge delivered during the recovery phase is equal to the charge delivered during the stimulation phase. 
       FIG. 13  illustrates a simple example of how the scaling factor k can be utilized, showing k being used to divide the clock (so that only every k clock cycles are utilized) thereby stretching the wave in time, and a divisor k in amplitude, thereby preserving the overall areas of the waveform pulse  1   50  and pulse  2   51 . Such a division results in the same amount of charge transferred by each of the two curves, as their areas are basically equal, but because their polarity is opposite, the charges cancel out. Thus,  FIG. 13  shows how a pulse can be modified while preserving the charge using these scaling operations. 
       FIG. 14  shows this feature being applied to a half-sine wave shape. In this figure, both the stimulation  52  and charge recovery  53  phases are half-sine-waves using five samples each based on the same sample stored in memory. The recovery phase is scaled by two (k=2) using that value as both the current and clock dividers. Thus, the recovery phase has half the amplitude and twice the duration of the stimulation phase, the net DC charge is zero, and the pulse is charge-balanced, except for possible effects of residual inaccuracies in the system. Because the division is done in analog instead of by changing the amplitude multiplier DAC values, the relationship is truly independent of the amplitude value chosen. 
     Some residual inaccuracies in the pulse generator circuitry may cause the pulse to have a slightly non-zero net DC current. If this residual current is unacceptable, a solution is to include DC blocking capacitors and passive recovery switches that connect all of the stimulation outputs to a common point, restoring charge balance, as is shown in  FIG. 5 . 
     Furthermore, when a pulse consists of phases of different shapes, it may not be possible to generate a completely charge-balanced waveform while maintaining the intended shapes. In such situations, the DC blocking capacitors and passive recovery switches may be used to add a passive charge recovery phase to remove any residual charge. 
     Accordingly, by utilizing the time clock and current division functions, such balancing operations and scaling of waveform shapes is accommodated. 
     Arbitrary Waveform Creation 
     The hardware discussed above is primarily intended to be utilized to generate a waveform of an arbitrary shape to be used for such purposes as spinal stimulation, such as for pain control, for example, for implementation in systems such as those described in  FIGS. 1-3 . Some examples of waveforms that can be generated by this arrangement are described below, although it must be emphasized that one of the primary benefits of this approach is that waveforms of almost any desired arbitrary shape (scaled in amplitude and time) can be provided using these techniques. 
     By adding further modifications to the example embodiments, even more flexibility in generating waveform shapes can be provided. For example, utilizing the entire address bus (or even increasing its size) to address much more memory to access many different waveform samples could be utilized. Additional RECT registers can be added to increase the options for rectangular pulses, and/or any number of shape logic circuits could be utilized to provide complex mathematical shapes. As discussed above, the waveform generation circuitry could be replicated to provide additional flexibility in generating output waveforms to the electrodes. Thus, these concepts offer nearly infinite possibilities in generating waveform shapes, as desired, by providing the appropriate adaptations. 
     As an example of the flexibility of waveform generation, a pulse using these techniques can be divided into two or more phases of stimulation, an example of which is illustrated in  FIG. 15 , where three different phases are shown, one used twice. For any given channel, each phase has a single polarity and amplitude defined. Each phase has associated with it a clock divider value, a current divider value, a repetition count, a delay value, a waveform step size, a waveform offset value, and a waveform shape. Before generating a pulse, the external microcontroller loads registers in the stimulation ASIC with values representing the phases of the pulse. 
     To generate the example waveform of  FIG. 15 , when the microcontroller commands the ASIC to start the pulse, the ASIC then generates the phases in sequence. As each phase begins, the amplitude multipliers are loaded with the amplitude values and the polarities of each channel. The waveform generator is configured for the selected waveform for the phase, the current divider is loaded with the current division factor for the phase, and the clock divider is loaded with the clock division factor for the phase. The waveform generator then generates the waveform for the phase, after which the ASIC inserts a pre-programmed delay before starting the next phase. Phases can be repeated if the phase repetition count is set to a value greater than zero. Once the repetitions, if any, are completed, the ASIC then proceeds to generate the next phase of the pulse. 
     Thus, in the example of  FIG. 15 , a first phase  1   54  is generated consisting of a rectangular pulse  54 ′ and a delay  54 ″, a repeat of phase  1   55 , a phase  2   56  consisting of a half-sine pulse  56 ′ and a delay  56 ″, and phase  3  pulse  57  consisting of a dying exponential curve  57 ′ and a delay  57 ″. 
     In the additional example of  FIG. 18 , another waveform is generated including a first phase  1   74  consisting of a rectangular pulse  74 ′ with negative polarity and a delay  74 ″, a phase  2   75  consisting of a rising exponential pulse  75 ′ with negative polarity and a delay  75 ″, and phase  3   76  consisting of a quarter-sine pulse  76 ′ with positive polarity and a delay  76 ″. 
     By the above example architectures, the rectangular pulse could be generated using a RECT register, while the dying exponential, rising exponential, half-sine and quarter-sine pulses could be generated either by sampling respective normalized sine and exponential curves stored in memories, or by using a sine or exponential generator shape logic function, or some combination thereof. 
     At the microcontroller&#39;s command, charge balancing may be achieved by closing the switches that connect all of the DC blocking capacitors (if present) to a common node to passively balance the charge, or by generating an inverse of the curve of  FIG. 15  (or a new curve of equal but inverse area) to actively balance the charge, or some combination of the two or by using the scaling procedure discussed above on the curve but changing its scale at an equal inverse charge. It is also possible for charge balance to be achieved in a non-passive manner. Note that because phases  1  and  2  of  FIG. 15  are negative pulses, but phase  3  is a positive pulse, by ensuring that the area of phase three is equal to the sum of the areas of phase  1  times 2 plus phase  2  (or adding an additional phase to counter any residual charge), active charge balancing is possible for at least some circumstances. It is also possible to use a combination of active and passive charge balancing. 
       FIG. 16  shows an example IPG implementation useful for spinal pain management using an implanted PG that can utilize the features described above in more detail. 
     The microcontroller  307  will run the software and control the IPG&#39;s output. The microcontroller  307  will interface to other functional blocks to monitor IPG status, to send and receive communications, and to drive the channel configuration and output waveforms. 
     The RF transceiver  314  and matching network  340  and antenna  316  will provide a wireless communications interface to several external devices. The transceiver  314  will send and receive data while automatically handling data flow, RF channel control, error correction, and wakeup detection. The matching network  340  will provide the interface to the IPG&#39;s antenna  316 , which will be located in the header of the device. 
     The power architecture consists of the rechargeable battery  313 , the Power ASIC  306 , recharge coil  315 , along with a rectifier  330  and data modulation circuitry  331 . The rechargeable battery  313  will provide raw power to the IPG. The recharge coil  315  and rectifier  330  will accept power from a transcutaneous power link and convert it to a DC voltage, while the data modulation circuit  331  will use this link to transfer data to and from the external charger. The Power ASIC  306  will provide control of the recharge process, battery protection, and power for the digital, analog, and high-voltage components of the system. 
     The Stimulation ASIC  308  will produce the waveforms for stimulation, for example using one of the techniques identified hereinabove. It will provide pulse shaping in arbitrary waveforms to allow complete control of nerve fiber recruitment. 
     The protection circuitry  309  will enhance safety for both the patient and the IPG itself. The protection circuitry  309  will include protection from electrostatic discharge (ESD) and over-voltage conditions (from defibrillation pulses and electrocautery). The protection circuitry  309  will also include EMI filters. Ultimately, the pulses are delivered to the desired site within the patient by a series of electrodes  302 . 
     Thus, active charge balancing can utilize the same or completely different arbitrary waveforms generated by the PG, reducing or eliminating the need for passive charge balancing using capacitors. For example, the controller could easily initiate an active charge balancing procedure by repeating any given stimulation waveform in a scaled inverse manner for any given electrode, which should substantially balance the charge. 
       FIG. 17  shows an example application of the stimulator system for providing spinal stimulation. In that figure, the IPG  1  (or  101 ) is shown implanted in a patient. Also shown is the human spine comprising the C1-C7 cervical vertebrae  65 , the T1-T12 thoracic vertebrae  66 , the L1-L5 lumbar vertebrae  67 , and the S1-S6 S5 sacral vertebrae  68 . Electrodes  63  are shown disposed at the distal end of the lead  64 , which is routed near and along the spine so that the electrodes  63  are positioned near the thoracic vertebrae  66 . The electrodes  63  are attached to the IPG  1  via the lead  64 . 
     The leads and electrodes may be positioned anywhere along the spine to deliver/achieve the intended therapeutic effects of spinal cord electrical stimulation in the desired region of the spine. The distal end of the lead with its accompanying electrodes may be located beneath the dura along the epidural space and adjacent to a desired portion of the spinal cord using well-established and known techniques for implanting and positioning SCS leads and electrodes, and the IPG  61  may be programmed using a clinician programmer, patient programmer, or other type of programming device  3 ,  4  (or  103 ,  104 ), as desired (and further described above). 
     With respect to the Waveform Generator inside the Stimulation ASIC, the provided reference output to the Amplitude Multipliers could be a current, a voltage, or a digital value; all three forms can be similarly utilized, and thus only the current output embodiments are shown. Similarly, the output from the Current Divider could be a current, a voltage, or a digital value. The output of the Iref generator could be either a current or a voltage, or the Iref generator could be omitted if the Waveform Generator outputs a digital value. Thus, using the techniques described herein modified according to the particular output needs can be used to apply these concepts to a great number of different applications. 
     Furthermore, the Current Divider could be connected between the Iref and the Waveform Generator, or it could be connected between the Waveform Generator and the Amplitude Multipliers. The Current Divider could also be bypassed or omitted. The outputs from the Amplitude Multipliers could be voltages instead of currents. 
     The terminology of current “flowing to” and “flowing from”, or “sink” and “source”, can vary depending on whether one uses the convention of current flowing from positive to negative or from negative to positive. Whichever convention one uses is not important to practicing the invention. 
     The current divider and waveform multiplier could be built with thermometer encoding instead of binary weighting. 
     The current divider and waveform multiplier could have built-in fixed scaling factors (×2, ×4, ×½, ×¼, etc.). 
     The operation of truncating the phase accumulator to generate the address could be replaced by a round-to-nearest or ceiling (round-upwards) operation. If a large memory is available, truncation or rounding could be skipped and the entire phase accumulator used as the address. 
     Many other example embodiments of the invention can be provided through various combinations of the above described features. Although the invention has been described hereinabove using specific examples and embodiments, it will be understood by those skilled in the art that various alternatives may be used and equivalents may be substituted for elements and/or steps described herein, without necessarily deviating from the intended scope of the invention. Modifications may be necessary to adapt the invention to a particular situation or to particular needs without departing from the intended scope of the invention. It is intended that the invention not be limited to the particular implementations and embodiments described herein, but that the claims be given their broadest reasonable interpretation to cover all novel and non-obvious embodiments, literal or equivalent, disclosed or not, covered thereby.