Author Topic: Coil driver op-amp compensation  (Read 1971 times)

0 Members and 1 Guest are viewing this topic.

Offline DigitalDesignerTopic starter

  • Contributor
  • Posts: 12
  • Country: ie
Coil driver op-amp compensation
« on: October 19, 2021, 09:53:14 pm »
Hello,
I have designed the coil driver circuit attached. My background is more digital and would appreciate very much some help and suggestions to make sure it works correctly.

The system receives an input signal from a phone or mp-player and drives different coils (inductance values in the schematic) which are just "simple coils" and not speakers. As shown in the schematic there is a single input bias network (R34, R35, R37, C63) but many op-amp current-controlling circuits connected to it (only one such op-amp circuit is shown in the schematic). Each one of such op-amp/mosfet circuit drives a different coil of one of two coil types (values also shown in the schematic) and with different current values (from 1mA to 50mA).

Ideally, if possible, the circuit should operate from 1Hz to ideally up to 100KHz.


These are my main questions:
(a) about the op-amp compensation components (R79, R80, C27) I copied the values from a coil-driving schematic online but don't know how to set their value correctly. How do I do that?

(b) because the input signal is common to all op-amps i.e. biased "only once", can I change the current of each coil driver by changing R88? Or should I do that only through R78? I put R88 to allow the op-amp output signal to go higher than it would otherwise go, which might be needed if the current sensing resistor.R78 is high perhaps(??)

(c) if it is good practice to use R88 to set the current differently for each coil, would that affect the value of the compensation circuit (R79, R80, C27)?

Also any other general suggestions are also welcome.

If relevant, these are the datasheets for the mosfet and the op-amp
PMV450ENEA ( https://assets.nexperia.com/documents/data-sheet/PMV450ENEA.pdf )
MCP6004 (https://www.mouser.com/datasheet/2/268/21733e-41017.pdf)

Thank you very much
JS
« Last Edit: October 20, 2021, 02:13:35 am by DigitalDesigner »
 

Online Kleinstein

  • Super Contributor
  • ***
  • Posts: 14795
  • Country: de
Re: Coil driver op-amp compensation
« Reply #1 on: October 20, 2021, 08:27:12 am »
I would not use R88 at all and adjust the current via the value for R78. It is more like the voltage over R78 is already relatively large. One may consider to make the divider for the DC point a bit more asymmetric more like 2:1 instead of 1:1. So less voltage lost to R78 and more avialable for the coil and FET.

The MOSFETs given is quite small and may get problems with dissipating the heat (e.g. some 100 mA and 1.5 V). I would plan for a larger case like SOT223 at least. With enough copper around to dissipate the heat, a SOT23 would no longer be much smaller.

The compensation may need a higher capacitance.  Just try it in the simulation. Driving a inductive load is a bit tricky. I would plan for an additional RC (e.g. 10 nF, 100 Ohms range) in parallel to the coil for the very high frequency part. It may work without, but just in case it helps to have footprints on the board.
 

Online David Hess

  • Super Contributor
  • ***
  • Posts: 17167
  • Country: us
  • DavidH
Re: Coil driver op-amp compensation
« Reply #2 on: October 20, 2021, 08:25:47 pm »
I would not use R88 at all and adjust the current via the value for R78. It is more like the voltage over R78 is already relatively large. One may consider to make the divider for the DC point a bit more asymmetric more like 2:1 instead of 1:1. So less voltage lost to R78 and more avialable for the coil and FET.

I actually like using R88 because I would rather have the same current shunt for all outputs than the same gain setting resistor.

However changing R88 or R78 changes the response of the output stage which I do not like, so I would have fixed them both and changed the signal levels at the non-inverting inputs despite the extra complexity.  This means buffering the input signal with a follower to drive an attenuation network at the input of each driver so one extra operational amplifier.

R88 (or R78) is constrained by the required gain.  I would tend to find the optimum value of C27, or the frequency compensation network which replaces C27, empirically with a transient response test.  The analytical solution is not too difficult using a bode plot, but since I would end up testing it empirically anyway, it would not save me any time.
« Last Edit: October 20, 2021, 08:27:35 pm by David Hess »
 

Offline DigitalDesignerTopic starter

  • Contributor
  • Posts: 12
  • Country: ie
Re: Coil driver op-amp compensation
« Reply #3 on: October 23, 2021, 12:28:27 am »
Thank you for your reply.

following your suggestions I have been reading quite a bit but still confused as to how calculate the values.

I tried simulation (I have Altium) but don't have much experience and could not find the simulation files for those parts (my subscription expired a while back so cannot download them).

Is there any other place where I can find Altium-ready simulation components (without having to doing some editing which I am not familiar with and might risk changing something I shouldn't then get incorrect results)?

Thank you very much.
 

Offline DigitalDesignerTopic starter

  • Contributor
  • Posts: 12
  • Country: ie
Re: Coil driver op-amp compensation
« Reply #4 on: November 18, 2021, 08:36:00 am »
Hello,
We are kind of stuck. Could anybody help with this?

The previous replies are appreciated but limited for our experience.

Any information about both how to calculate the values of the capacitors and resistors. Perhaps some starting values and a methodology/rationale on how to increase/decrease each of them and what to see on the oscilloscope? Or maybe some links to some simple to understand explanation about working out the values and tuning them in a practical manner?

Thank you very much.
 

Offline Kevin.D

  • Frequent Contributor
  • **
  • Posts: 290
  • Country: england
Re: Coil driver op-amp compensation
« Reply #5 on: November 19, 2021, 02:12:51 am »
Hello,
I have designed the coil driver circuit attached. My background is more digital and would appreciate very much some help and suggestions to make sure it works correctly.

The system receives an input signal from a phone or mp-player and drives different coils (inductance values in the schematic) which are just "simple coils" and not speakers. As shown in the schematic there is a single input bias network (R34, R35, R37, C63) but many op-amp current-controlling circuits connected to it (only one such op-amp circuit is shown in the schematic). Each one of such op-amp/mosfet circuit drives a different coil of one of two coil types (values also shown in the schematic) and with different current values (from 1mA to 50mA).

Ideally, if possible, the circuit should operate from 1Hz to ideally up to 100KHz.


These are my main questions:
(a) about the op-amp compensation components (R79, R80, C27) I copied the values from a coil-driving schematic online but don't know how to set their value correctly. How do I do that?

(b) because the input signal is common to all op-amps i.e. biased "only once", can I change the current of each coil driver by changing R88? Or should I do that only through R78? I put R88 to allow the op-amp output signal to go higher than it would otherwise go, which might be needed if the current sensing resistor.R78 is high perhaps(??)

(c) if it is good practice to use R88 to set the current differently for each coil, would that affect the value of the compensation circuit (R79, R80, C27)?



attempt to answer  your three questions in order :-

(a) The compensation components required (for loop stability) are largely dependent on the load (type), and when a largely inductive load is involved the poles produced by that L in combination with Cgd are rather complex double poles with peaking (an LC pair), difficult to compensate against using the normal Opamp compensation scheme's and it's usually just easier to compensate with a series RC  across that inductance, using that method we can then (above some required frequency ) make the load look resistive/capacitive (much easier to compensate for in a current source) to the error amplifier control loop rather than inductive, the draw back of doing this is that you sacrifice some input impedance (good current source = high impedance) seen by the load which instead now sees the lower impedance of RC pair you added across it.

 The best and an efficient way to find what values you need is to learn to do a spice simulation and learn to make and interpret bode plot's of the feedback loop (warning it's not a light topic and takes a fair bit effort and study to learn to do it well, even after  years of studying it I often still run into new situations that I have to learn how to best handle them) . Most people will only occasionally tinker in control loop design and aren't bothered about getting optimum performance so don't bother with the heavy study investment required to do loop gain analysis and get by by just disturbing the control loop (i.e. stepping the load value or the control voltage) and monitoring the output until they find values for compensation components that prevent to much ringing before the output returns to a new steady state, this can usually get you in the ballpark of where you need to be with simple control loops (i.e. known and fixed loads)

Attached is a screen shot of basic simulation and plot I just did with some good compensation for the driving the size coils you specified. The Opamp and MOSFET I used here are not to dissimilar (in the specs that are relevant to freq stability) to the ones you specified so that the compensation values used here should be fairly close and be good for your components choices. 
when driving your  395u coil use Cdamp= 100n ,Rdamp ~ 50 - 100
when driving the 46u coil use Cdamp= 180n , Rdamp ~ 10
the other components should be ok left to what I set them here, although if you want to upload a ltspice sim with containing your specific components it's easy to do a quick check.
edit :-  I was going to insert that screen shot here but for some reason the forum server software is corrupting the  sharp gif format screen shot when I attach it to this post it only accepted  a  blurry jpeg format for some reason. Note the Vi and Ii in the feedback path of that spice sim  are not part of the circuit but are the probe elements I use for doing loop gain plots      see :- LTspiceXVII\examples\loogain(2).asc   t.et.al()


(b)   How high the Opamp output needs to go to allow a given max current is not determined by R88 but would be the value of the MOSFET Vgs required plus the voltage drop across Rsense (R78) at that current . So if you spec upto 50 mA, then if Rsense = 16   then Vsense = 800 mV also  PMV450 MOSFET Vgs(th) max = 2.7 (we should use the worst case specs from data sheet unless you are screening/selecting them for atypical values) , and also from the MOSFET Vgs versus Id curves requires another ~ 100 mV for Id= 50mA . Vtotal = .8 + .1 + 2.7 = 3.6 V   ,  i.e.  3.3 V supply insufficient for 50mA (unless screening MOSFET for a typical Vgs(th)). Best use a Lower value Rsense say 10R max.


(c) It would reduce the bandwidth of the feedback loop because you are reducing loop gain (dividing feedback by 10 for example shifts the entire feedback loop gain bode plot down by 20 dB) but also any roll off cap (if present) has less effect, the overall effect is to reduce BW by some smaller intermediate amount , it shouldn't have a big effect on  stability here because you are using an RC across the Load as your primary stability components rather than your Opamp compensation elements which you would just adjust for max loop performance now that the load is decoupled by  what I call 'direct load compensation' . 

Good luck
« Last Edit: November 19, 2021, 08:54:54 am by Kevin.D »
 
The following users thanked this post: DigitalDesigner

Offline DigitalDesignerTopic starter

  • Contributor
  • Posts: 12
  • Country: ie
Re: Coil driver op-amp compensation
« Reply #6 on: December 26, 2021, 04:22:16 am »
Kevin thank you so very much!!!
You have no idea how much all those details helped!! It made all the difference!
And thank you even more for the simulation!!
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf