3
\$\begingroup\$

I'm working on my microphone array and I have problem with signal. I'm using 16 microphones adn Teensy 4.1 MCU and breadboard to connect everything. I also designed PCB for MEMS microphones ICS-52000. Each microphone is 30cm away from each other and the MCU is in the middle of the grid. ICS-52000 on PCB enter image description here

I tested all my microphones connecting pins with standard ready-made jumper wires. I bought AWG22 cable to connect them in the final form, but I found problem here. When I connect my microphone to the breadboard and run program to collect data, I can see a lot on noise in the signal. Everything work fine, when I touch SCK (Clock 11,3MHz) pin with my finger. It's really strange behavior for me, because when I use standard jumper wire that I once bought in the store everything works, but when I use different wire it doesn't work properly.

Do you know what the reason for this behavior is?

Here is my Breadboard connection. White cable is SCK and the short blue cable im routing SCK on the bus, so I can use this SCK signal on all mics. enter image description here

\$\endgroup\$
3
  • \$\begingroup\$ Just to be sure, you expect a 11.2896MHz (256x44100) square wave pass just fine over a breadboard and 30cm of random airwire? Assuming the signal is not already total garbage and your finger happens to fix problem, do check if the clock edge polarity is correct, or check if a capacitor of few pF to simulate a finger fixes the problem. \$\endgroup\$
    – Justme
    Commented Dec 17, 2023 at 20:53
  • \$\begingroup\$ Shorten up all of the wires from your breadboard to the microphone PCB as much as possible and see what happens. I'm betting things will improve. \$\endgroup\$
    – SteveSh
    Commented Dec 17, 2023 at 21:38
  • \$\begingroup\$ Ideally, you would like be able to plug the mic PCB directly into your breadboard. \$\endgroup\$
    – SteveSh
    Commented Dec 17, 2023 at 21:41

2 Answers 2

2
\$\begingroup\$

From the micro's datasheet

enter image description here

Even on the slowest setting, this chip has very fast rise times. Considering the length of your cables (30cm*16=4.8m) and propagation speed of 0.25-0.3m/ns, a roundtrip in the cable with reflection at the end should take 28-38ns which is much longer than the rise/fall time. So the fast edge will propagate and reflect at both ends of the transmission line, creating "echoes". When this happens on the clock line, chips connected to it interpret these as multiple clock pulses, and you get missing bits.

When you put your finger on the clock line, you add some capacitance which slows down the edges, and also resistance which dampens this resonance, so you get less double clocking. It seems to "work" but it's not robust.

Also sending high speed digital signals in air wires is an effective way to make a wideband radio jammer. With a bit of luck, considering the rise time, you may even succeed in jamming FM radio.

You need to:

  • Probe it with a scope and a 10x probe.

  • Use cable that acts as a transmission line of known impedance (for example, 1.25mm pitch ribbon cable with IDC connectors) with one ground wire between each signal wire.

I checked the microphone datasheet and unfortunately these want their WSO to be connected to the next microphone's WS, which complicates cabling because you'll need two connectors on each microphone instead of one. But well, ribbon cable and IDC connectors are not expensive. So that's 8 wires, GND CLK GND WS GND DATA GND VCC.You could also use Cat5 or Cat6 cable, with pairs CLK/GND, WS/GND, DATA/GND, VCC/GND.

Another solution, if your dimensions are known and fixed, is to make 16x 30 cm long pcbs with a microphone on each and 0.1" headers on both ends. I quoted it at JLCPCB and that's less than $20 for 20 PCBs. If you don't need it to bend, that would be a good option.

  • Series termination resistor matched to transmission line at the source

Source is MCU for clock and WS, and also each microphone outputs DATA and WSO.

Note the microphones outputs see a different transmission line impedance because they drive the cable in both directions...

  • Slow down edges at the source to a rise/fall time that is fast enough, but not too fast. The first thing to do would be to set the GPIO to slow slew rate and lower drive strength. If that's not enough, put a ferrite bead on it, but it has to be the right one.

  • Get rid of the breadboard which has too much inductance for this, and replace with PCB with ground plane and connector for ribbon cable.

All these MCU boards usually have 1 ground pin per many many IOs. Considering the rise/fall times, that is way insufficient. Ground on the teensy will be a different potential from ground on your board. If possible, for the most critical signal (ie, clock) use the GPIO pin closest to a ground pin.

  • Microphones PCBs should also have a ground plane, and shortest possible connection between cable and microphone data output pin. If they have two connectors for daisy chaining, trace impedance should match cable impedance. If you go with the all-PCBs solution, trace impedance should be constant, like 100 ohms.

This is not an optimum solution because the data output of these microphones is three-state, data wire acts as a bus, and it is driven by each microphone in turn. But in a low noise low EMI setting, it will probably work.

\$\endgroup\$
1
  • \$\begingroup\$ Thank you for the reply and help. I soldered 100ohm resistor between SCK and GND on PCB and now it's working. \$\endgroup\$
    – erysvh
    Commented Dec 21, 2023 at 22:58
2
\$\begingroup\$

You can't just randomly plug wires into a breadboard like that and expect to not have signal integrity issues. Problems can start at your local line frequency (50 or 60Hz nearly everywhere on earth), and just get worse as the frequency goes up.

The most reliable thing to do is to build a board that includes both your microprocessor and your microphone, and understand that even with a PCB you can't just run traces any which-where. You may be able to use that module you picture, and plug it into the board.

Your most reliable approach would be a 4-layer board with power and ground planes for the signals to work against. With care, you could probably make it work with a 2-layer board, but you need to know what you're doing.

You could, maybe, make this work on a breadboard, but you'd need to re-think the whole setup, and if you had problems you'd never quite know if they're the chip, the programming, or the breadboard. Basically, you'd need to make sure you have a good solid ground connection to that breadboard of yours, tying all of its ground pins together underneath the module. Then you'd have to make make short connections to each of your signal wires (SCK, WS, SDO), twisting each one with a good ground wire, and make sure that it was terminated as best as you could at your board, which is itself not laid out well.

In the end you'll learn a lot about how to make things work well on a breadboard, and why it's less work to just make a good PCB.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.