DDS differential filter (2023 Update)

formatting link
Most DDS chips have complementary DAC current outputs and the appnotes usually waste one and go to some effort to bias up a single-ended comparator. It's not any harder to go full diff on the filter, get twice the swing, and use the zero cross.

To make a clock, the filter can have a ghastly Bode plot. It doesn't have to resemble any of the classic mathematical forms. So it can be designed by Spice fiddling with parts in stock.

The sketched filter is 5th order, but I might play with 3rd order, maybe with an elliptic notch, and save a couple of inductors. Probably not a good idea, actually.

I think we can park the DDS at cos(0) when it's not in use, to bias the comparator way off zero. Some hysteresis would be prudent too. ADCMP562 has that.

Reply to
jlarkin
Loading thread data ...

It's generally a good idea, and I've done it myself, because it ensures that the rejected frequency components cancel out, instead of them appearing at the DDS's DAC power supply pins, where they need to be decoupled into the ground rail. On multi-DDS chips (e.g. AD9959) these signals can cross-talk between the different DDSs before they reach the power pins for decoupling.

The better appnotes specify a balun to drive a single-ended filter. Some actual schematics use a fast differential op-amp to subtract the two outputs, but if you do that before the filter the op-amp has to be fast enough to track any harmonics (that the filter will reject) or they can cause pain.

Clifford Heath

Reply to
Clifford Heath

People usually throw away the complementary current output, with maybe a resistor to ground, so the supply currents should cancel. Seems like a waste of signal.

I can see how a balun is useful to output a good sine wave against ground without an amp at the end, but I'll be driving a diff input comparator so the balanced filter looks good.

One of my guys ran the NuHertz software and it designed a great balanced filter that uses standard values. Amazing software, crabby guy, ugly screens.

formatting link
It did an elliptic version too, but we'll be tight on board area and the four extra caps aren't worth the space.

I'm inclined to split the right end and center-tap to ground, to reduce common-mode junk that might feed from the DDS chip. Gotta keep the unipolar current sources happy too. Worth Spicing.

Reply to
jlarkin

That's some gnarly passband ripple, for sure. The comparator doesn't care much, but I bet the phase whoopdedoos are not too pretty either.

Cheers

Phil Hobbs

Reply to
Phil Hobbs

We only use it at one frequency at a time!

I'm modifying it to account for the DC issues of the DDS diff current sources. I have a sort of hybrid semi-differential filter in mind.

formatting link
This config removes hf common-mode junk too.

Filter theory hurts my head so I avoid it.

Reply to
jlarkin

One of the things I've learned fairly recently is that discrete LC filters are a bag of hurt when it comes to production. I used to use a lot of packaged Mini-Circuits elliptic filters until the last project, when I got tired of paying for them. I can run a filter design program just as well as they can, right?

Well, no. Turns out that a lot of parts get swapped around at random, probably during reel changes or 2nd-op hand placement when the PnP machine doesn't quite hold enough reels. Yelling at the factory people doesn't help as much as I thought/hoped it would.

This probably happens with ordinary RC components too, but one 0402 bypass or coupling cap is pretty much as good as another, and the same is true for many if not most discrete resistors with values under 10K or so. I'm not going to notice if an I2C pullup is 4.7K instead of 2.2K or whatever. I will if a 22 nH inductor is placed in a spot for an 82 nH inductor, though....

... or at least, I will notice it if I have the foresight to design a test jig to sweep the filter response and compare it with a limit line, rather than just checking for the expected level at one or two points within the passband. Oops. Where'd *that* spur come from?

Anyway, yeah, baluns followed by single-ended filters are a good way to go. For some reason, I get a bit more signal out of certain chips with an SBTCJ--1WX+

180-degree splitter than I do with a straight transformer or balun.

-- john, KE5FX

Reply to
John Miles, KE5FX

The mini-ckts mlcc flters are great, but start around 1 GHz or so. I want a 15 MHz filter so I'll have to make it.

It's strange that nobody makes a series of lp filters aimed at the DDS market.

Yikes, fire your assemblers. Nothing will work if they mix up parts.

What about voltage dividers, gain set resistors, voltage reg programming, all that? Values matter.

We work in time domain, so some of our testing is oscilloscope mask limits on pulses and such. Our intent is to production test for any possible value or assembly/soldering error.

But no passive balun will work from 15 MHz to 1 mHz. You narrowband RF types have it easy.

My DDS chip has differential current outputs, and my comparator is differential, so a balanced filter makes sense.

formatting link
Still, lots of parts.

Reply to
jlarkin

On 2022-09-03 21:47, John Miles, KE5FX wrote: [...]

It's likely a splitter with three windings instead of two. That gets you better LF response if the driver is up to the challenge.

Jeroen Belleman

Reply to
Jeroen Belleman

MCL makes tons of HF/VHF filters, although they're all single-ended AFAIK. I used a batch file to scrape all the .S2P files for them a few years back, and wrote a tool to cascade them interactively

formatting link
dangerous, because if they were to ban my IP for abusing their server I'd be hating life.

I don't think they do it all that often with resistors and caps, or we would indeed have had trouble along those lines. My guess is they load those first, then run out of slots somewhere in the middle of the 0603 inductors. They get handed off to a different person who isn't always as careful as they should be.

One of those unfortunate cases where we have no choice but to "inspect in quality." I should hang out a shingle building production test jigs, I've done enough of that lately...

-- john, KE5FX

Reply to
John Miles, KE5FX

Good gravy, where are you having them assembled? In antarctica by penguins? Seriously? Arbitrarily changing resistor values by more than a factor of 2? I'd fire mine if they used thick film rather than the specified thin film.

That sort of nonsense wouldn't fly with me or my consulting/licensing customers.

Gotta do more than yell, man.

Cheers

Phil Hobbs

Reply to
Phil Hobbs

You just have to do your abuse in the library or the coffee shop. ;)

Put the inductors on the back of the board. ;)

Dunno how you expect to avoid final test. It's pretty important that you know the thing works right before shipping it, yes?

Cheers

Phil Hobbs

Reply to
Phil Hobbs

We usually buy small Ls that have a color dot or something. The Coilcrafts do. Our automated VOA machine can check them. Every board gets inspected with that.

Inspection has a powerful process feedback element. We flog as required.

Reply to
jlarkin

It's difficult to build good LC filters in SMD for HF. The multi-layer inductors that work fine at UHF just don't have the required Q at lower frequencies.

I designed a nice-looking 7th order bandpass filter for 50MHz, then started looking for SMD parts to realise it. Stick the actual Q values into LTSpice and weep. 1dB pass-band loss turns into 60dB loss really quickly.

Coilcraft make suitable small inductors that are wound, not multi-layer, but you pay a lot more for that.

Clifford Heath

Reply to
Clifford Heath

Errors in those areas are rare, and will usually (but obviously not always) get flagged in test.

Of course there's a test/burn-in cycle, and it's *very* thorough. Everything in the front end is actively tested via a custom ATE harness. However, there are four switched LP/BP filters to check, and we were originally testing those by simply feeding in a signal near the center frequency and verifying that the UUT reported the expected power level +/- the expected tolerance. That wasn't sufficient to catch one of the cases where they swapped some 0603 inductors around.

Fortunately I caught it myself when diagnosing another problem. The swapped inductors were not a major issue in this case -- they wouldn't have caused a spec violation, and almost certainly would never have been noticed in the field -- but that whole episode scared me straight. We now test at several more points, and next time around I'll use a full mask test.

I've found enough forehead-slapping production faults in HP and Tek gear over the years that I don't harbor any illusions about perfection at the assembly or QA stages. It's an axiom that you're not supposed to rely on testing for quality -- I think that goes back to Deming? -- but that's an exercise in wishful thinking IMHO. As long as people are involved, you've gotta test thoroughly or quality will suffer.

-- john, KE5FX

Reply to
John Miles, KE5FX

Good point there, our (Coilcraft) parts also have the dots. Most of them do, anyway.

-- john, KE5FX

Reply to
John Miles, KE5FX

On Sunday, September 4, 2022 at 5:00:24 PM UTC-7, Clifford Heath wrote:

By "7th order bandpass" I'll guess you mean 7 resonators. BPF are usually even order. Anyway, you're right that wirewound CCI will be more expensive than multilayer. Multilyers are rarely good enough for bandpass filters.

Just to experiment, I hacked out a 5-coil 10% 50 MHz BPF using 82 nH MIDI (1812SMS-82NGL_) coils, just to experiment.

features

  • 50 MHz center freq
  • 10% nominal BW (b4 non-idealities)
  • 20 dB nominal return loss
  • all 5 coils coerced to 82 nH (coercion "paid for" with additional caps)
  • 5 finite transmission zeros
  • Coil Q: guess 80 (midi spring)
  • Cap Q: guess 250
  • All internal nodes have design capacitance to ground (enable absorbtion of parasitic capacitance; costs caps)

Version 4 SHEET 1 6120 3588 WIRE 496 -736 432 -736 WIRE 624 -736 560 -736 WIRE 1488 -736 1424 -736 WIRE 1616 -736 1552 -736 WIRE 2352 -736 2288 -736 WIRE 2480 -736 2416 -736 WIRE 208 -672 -240 -672 WIRE 368 -672 272 -672 WIRE 432 -672 432 -736 WIRE 432 -672 368 -672 WIRE 624 -672 624 -736 WIRE 688 -672 624 -672 WIRE 784 -672 688 -672 WIRE 960 -672 848 -672 WIRE 1168 -672 960 -672 WIRE 1232 -672 1168 -672 WIRE 1360 -672 1296 -672 WIRE 1424 -672 1424 -736 WIRE 1424 -672 1360 -672 WIRE 1616 -672 1616 -736 WIRE 1712 -672 1616 -672 WIRE 2032 -672 1712 -672 WIRE 2096 -672 2032 -672 WIRE 2224 -672 2160 -672 WIRE 2288 -672 2288 -736 WIRE 2288 -672 2224 -672 WIRE 2480 -672 2480 -736 WIRE 2544 -672 2480 -672 WIRE 2592 -672 2544 -672 WIRE 3056 -672 2656 -672 WIRE 432 -608 432 -672 WIRE 480 -608 432 -608 WIRE 624 -608 624 -672 WIRE 624 -608 560 -608 WIRE 1424 -608 1424 -672 WIRE 1472 -608 1424 -608 WIRE 1616 -608 1616 -672 WIRE 1616 -608 1552 -608 WIRE 1712 -608 1712 -672 WIRE 2288 -608 2288 -672 WIRE 2336 -608 2288 -608 WIRE 2480 -608 2480 -672 WIRE 2480 -608 2416 -608 WIRE 960 -592 960 -672 WIRE 2032 -560 2032 -672 WIRE -240 -528 -240 -672 WIRE 1168 -528 1168 -672 WIRE 368 -512 368 -672 WIRE 3056 -512 3056 -672 WIRE 1712 -496 1712 -544 WIRE 1808 -496 1712 -496 WIRE 688 -480 688 -672 WIRE 1360 -480 1360 -672 WIRE 2224 -480 2224 -672 WIRE 2544 -480 2544 -672 WIRE 1712 -448 1712 -496 WIRE 1808 -448 1808 -496 WIRE 960 -416 960 -512 WIRE -240 -288 -240 -448 WIRE 368 -288 368 -448 WIRE 368 -288 -240 -288 WIRE 688 -288 688 -416 WIRE 688 -288 368 -288 WIRE 960 -288 960 -352 WIRE 960 -288 688 -288 WIRE 1168 -288 1168 -464 WIRE 1168 -288 960 -288 WIRE 1360 -288 1360 -416 WIRE 1360 -288 1168 -288 WIRE 1712 -288 1712 -368 WIRE 1712 -288 1360 -288 WIRE 1808 -288 1808 -384 WIRE 1808 -288 1712 -288 WIRE 2032 -288 2032 -496 WIRE 2032 -288 1808 -288 WIRE 2224 -288 2224 -416 WIRE 2224 -288 2032 -288 WIRE 2544 -288 2544 -416 WIRE 2544 -288 2224 -288 WIRE 3056 -288 3056 -432 WIRE 3056 -288 2544 -288 WIRE -240 -240 -240 -288 WIRE 3056 -240 3056 -288 FLAG -240 -240 0 FLAG 3056 -240 0 SYMBOL res 3040 -528 R0 SYMATTR InstName R_load00 SYMATTR Value 50 SYMBOL voltage -240 -544 R0 WINDOW 0 25 23 Left 2 WINDOW 3 25 93 Left 2 WINDOW 123 36 64 Left 2 WINDOW 39 27 106 Left 2 SYMATTR InstName Vsrc00 SYMATTR Value "" SYMATTR Value2 AC 2 SYMATTR SpiceLine Rser=50 SYMBOL cap 272 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C1 SYMATTR Value 343.705540p SYMATTR SpiceLine Rser=0.037 SYMBOL cap 384 -512 M0 SYMATTR InstName C2 SYMATTR Value 28.367562p SYMATTR SpiceLine Rser=0.449 SYMBOL ind 576 -624 R90 WINDOW 0 5 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName L1 SYMATTR Value 82n SYMATTR SpiceLine Rser=0.322 SYMBOL cap 560 -752 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C3 SYMATTR Value 75.416515p SYMATTR SpiceLine Rser=0.169 SYMBOL cap 704 -480 M0 SYMATTR InstName C4 SYMATTR Value 14.427057p SYMATTR SpiceLine Rser=0.883 SYMBOL cap 848 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C5 SYMATTR Value 63.512945p SYMATTR SpiceLine Rser=0.200 SYMBOL ind 944 -608 R0 SYMATTR InstName L2 SYMATTR Value 82n SYMATTR SpiceLine Rser=0.322 SYMBOL cap 976 -416 M0 SYMATTR InstName C6 SYMATTR Value 292.455428p SYMATTR SpiceLine Rser=0.044 SYMBOL cap 1184 -528 M0 SYMATTR InstName C7 SYMATTR Value 196.936941p SYMATTR SpiceLine Rser=0.065 SYMBOL cap 1376 -480 M0 SYMATTR InstName C8 SYMATTR Value 6.183996p SYMATTR SpiceLine Rser=2.059 SYMBOL cap 1296 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C9 SYMATTR Value 29.234988p SYMATTR SpiceLine Rser=0.436 SYMBOL ind 1568 -624 R90 WINDOW 0 5 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName L3 SYMATTR Value 82n SYMATTR SpiceLine Rser=0.322 SYMBOL cap 1552 -752 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C10 SYMATTR Value 85.807236p SYMATTR SpiceLine Rser=0.148 SYMBOL ind 1696 -464 R0 SYMATTR InstName L4 SYMATTR Value 82n SYMATTR SpiceLine Rser=0.322 SYMBOL cap 1696 -608 R0 SYMATTR InstName C11 SYMATTR Value 159.281578p SYMATTR SpiceLine Rser=0.080 SYMBOL cap 1792 -448 R0 SYMATTR InstName C12 SYMATTR Value 43.812471p SYMATTR SpiceLine Rser=0.291 SYMBOL cap 2048 -560 M0 SYMATTR InstName C13 SYMATTR Value 111.772393p SYMATTR SpiceLine Rser=0.114 SYMBOL cap 2240 -480 M0 SYMATTR InstName C14 SYMATTR Value 112.596793p SYMATTR SpiceLine Rser=0.113 SYMBOL cap 2160 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C15 SYMATTR Value 170.870341p SYMATTR SpiceLine Rser=0.075 SYMBOL ind 2432 -624 R90 WINDOW 0 5 56 VBottom 2 WINDOW 3 32 56 VTop 2 SYMATTR InstName L5 SYMATTR Value 82n SYMATTR SpiceLine Rser=0.322 SYMBOL cap 2416 -752 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C16 SYMATTR Value 45.940816p SYMATTR SpiceLine Rser=0.277 SYMBOL cap 2560 -480 M0 SYMATTR InstName C17 SYMATTR Value 70.752997p SYMATTR SpiceLine Rser=0.180 SYMBOL cap 2656 -688 R90 WINDOW 0 0 32 VBottom 2 WINDOW 3 32 32 VTop 2 SYMATTR InstName C18 SYMATTR Value 104.602713p SYMATTR SpiceLine Rser=0.122 TEXT -1312 -2784 Left 2 ;o TEXT 5416 1528 Left 2 ;o TEXT -232 -856 Left 2 !.net I(R_load00) Vsrc00 TEXT -240 -792 Left 2 !.SAVE S11(vsrc00) S21(vsrc00) TEXT -216 -912 Left 2 !.ac lin 3801 10e6 200e6 TEXT 448 -1024 Left 2 ;"10% BW" 50 MHz BPF\nQL = 80\nQC = 250

Reply to
Simon S Aysdie

Well, 20 cents in quantity for a 0805, 30 cents for the midi springs. They do great stuff and are generous with samples.

There are lowpass filters that are designed around finite-Q parts; Williams has tables for some. The math is even nastier than ideal filters.

But a DDS filter doesn't need a beautifully flat frequency response graph. It drives a comparator.

Reply to
John Larkin

I didn't respond previously because that LTSpice doesn't work for me. It displays and appears to run the sim, but then I can't probe anywhere to view a trace.

Has anyone else seen this behaviour or knows how to fix it?

CH

Reply to
Clifford Heath

Why not use the excellent tool debugging features in LTspice? Oh, that's right, they don't have any.

Reply to
Ricky

Hi Clifford,

Only s11 and s21 are saved via .SAVE ....

Simply comment it away (or delete) if you want all the nets. I rarely use the rest of the nets for this sort of thing. Sorry--habit!

Reply to
Simon S Aysdie

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.