Signal Processing (amplifier and filter)

Thread Starter

Z'YonG

Joined Feb 2, 2017
63
Hi there,
I am working on amplifying a small but high frequency signal. The amplitude of the signal is around 10mV and I need to amplify and filter it in order for the microcontroller to detect the specific pulses in the signal and process. The centre frequency of the pulses is around 5 MHz, so I need to design a band pass filter for such a signal, filter out anything that is below 4 MHz and above 6 MHz
There are two ways that I am trying to detect the pulse:
1. Amplify the signal first, use band pass filter to filter the amplified signal, and then send it to the Arduino Nano to detect the pulse and process with it. The microcontroller chips for the Arduino Nano is Atmega328p.
2. Use Nucleo f411re development board to do a digital signal processing, send the signal to the board, and then process it with the microcontroller inside, the microcontroller chip is STM32F411RE.

For method 1, I am currently facing a problem of design a proper amplifier and band pass filter for my signal. anyone have any idea about amplifier and filter design, the requirement for my signal is amplify the 10mV signal to somewhere that is detectable by the microcontroller (may be 3V?) and then design a band pass filter with centre frequency of 5 MHz

For method 2, is the STM32F411RE powerful enough to detect such small signal straight away? or is it better to amplify it first?

Which method is easier?

Thank you!
 

MrChips

Joined Oct 2, 2009
30,821
Forget about which is easier. You want the one that is most effective.

Firstly, you need to define what you are trying to analyze.
What are you looking for in the 5MHz signal?
 

Thread Starter

Z'YonG

Joined Feb 2, 2017
63
Forget about which is easier. You want the one that is most effective.

Firstly, you need to define what you are trying to analyze.
What are you looking for in the 5MHz signal?
I had a very noise signal, and I tried to make Arduino to detect the signal that I want. so basically, I send the signal to the ADC pin of my Arduino Nano, and want the Arduino to detect the signal at around 5MHz and form a pulse, so I am able to calculate the time to receive that signal.
The signal that I am sending is show in my attachment, it is quite small and noise, and I don't want to detect the large signal in the front, only the small one around middle, from the white vertical dash line (E) afterwards.
The problem that I have at the moment are:
1. the signal is too small to detected.
2. I want to remove the larger useless signal that is in the front (filter everything out and only keep the signal in the middle)
I use oscilloscope the do some measurements, it looks like the signal that I want has centre frequency of 5MHz, and the amplitude is around 10mV.
26c81b783c59c3b8ac30299258549f37f6f17b56.png
 

MrChips

Joined Oct 2, 2009
30,821
Thank you for providing a very clear picture of what you are trying to do. Without this information we could have been running around in circles for 20 or more posts.

I assume that this is some kind of time-of-flight experiment.

Filtering the signal is not going to help you. You need to disable the sensor or disable the signal from the sensor for 2μs starting at the leading edge of the trigger pulse.

Alternatively, you can hold off sampling for 2μs after the leading edge of the trigger pulse.

An Arduino is not fast enough to digitize or measure your received pulse.
What you need is an analog comparator to detect the signal above the noise threshold. Use counting circuits either internal or external to the Arduino to measure the time delay from the trigger pulse.
 

Thread Starter

Z'YonG

Joined Feb 2, 2017
63
Thank you for providing a very clear picture of what you are trying to do. Without this information we could have been running around in circles for 20 or more posts.

I assume that this is some kind of time-of-flight experiment.

Filtering the signal is not going to help you. You need to disable the sensor or disable the signal from the sensor for 2μs starting at the leading edge of the trigger pulse.

Alternatively, you can hold off sampling for 2μs after the leading edge of the trigger pulse.

An Arduino is not fast enough to digitize or measure your received pulse.
What you need is an analog comparator to detect the signal above the noise threshold. Use counting circuits either internal or external to the Arduino to measure the time delay from the trigger pulse.

Thanks for the help, I agree that Arduino is not fast enough, so I am trying to use Nucleo F411RE module, and I have tried the time delay method, but the problem is: it still can not detect the signal...
 

MrChips

Joined Oct 2, 2009
30,821
Thanks for the help, I agree that Arduino is not fast enough, so I am trying to use Nucleo F411RE module, and I have tried the time delay method, but the problem is: it still can not detect the signal...
Not surprising. Did you use a comparator?
 

Thread Starter

Z'YonG

Joined Feb 2, 2017
63
Not surprising. Did you use a comparator?
No yet, I actually managed to amplified and filtered our signal, but it is still not detectable, I am thinking about to use rectifier and integrator circuit to reduce the frequency of the signal and try if it is detectable.
Any idea of rectifier and integrator circuit for high frequency signal like 5MHz? We only have single power supply here. I have been trying to use LM7171, but it doesn't work.
 

MrChips

Joined Oct 2, 2009
30,821
No yet, I actually managed to amplified and filtered our signal, but it is still not detectable, I am thinking about to use rectifier and integrator circuit to reduce the frequency of the signal and try if it is detectable.
Any idea of rectifier and integrator circuit for high frequency signal like 5MHz? We only have single power supply here. I have been trying to use LM7171, but it doesn't work.
When you say that you have tried to use something and it doesn't work, that doesn't give any helper much to work with.
Try to post a circuit schematic and describe what does or does not work.

Use a diode and integrator followed by a comparator circuit.
 
I am working with Z’YonG on a project in which we are trying to design and build an ultrasonic thickness gauge that will calculate the thickness of a given part based on the time difference between sending a signal and receiving a reflection back (using the known speed of sound through the medium).

As we are in the initial stages of prototyping, we are currently using an Arduino nano as the MCU for our prototype. We have successfully amplified the pulse generated by the MCU to a higher voltage, which is then used to excite the ultrasonic transducer (which is in contact with the part that is being measured). The reflection is then detected by the second element of the transducer and converted into an electric signal that is centred around the natural frequency of the transducer (5MHz). This signal is then processed (amplified and filtered) into a level that would be detectable by the MCU (circuit and scope screenshot as shown below). However due to MCU's limited sampling rate, the signal will not be reliably detected. Therefore I was wondering if we would be able to devise an envelope detector that would extract the amplitude modulation of the reflection signal, effectively converting a very high frequency into a lower frequency signal, which I am hoping would be detected by the MCU.

Screen Shot 2017-02-09 at 10.34.56.png

According to what I have read so far, this would be achieved by first rectifying the signal using a “super-diode” (precision rectifier configuration as shown below) and then integrate it through an op-amp integrator. However, it seems that because I am relying on single supply and the frequency of the signal of interest is very high, the rectifier will not work as I expected, in fact I did not get anything out of it. Is there perhaps a way of designing an envelope detector entirely from transistors instead of op-amps?

Precision Rectifier.png

Any pointers or suggestions will be highly appreciated!!

Thanks in advance!

Raphael
 

MrChips

Joined Oct 2, 2009
30,821
So you have a 50mV signal after amplification. Now use an LM311 comparator to trigger a 74HC123 monostable multivibrator.

Don't try to capture the received signal with the Arduino's ADC.

What you need to do is use the input capture function of the internal timer module. All you really need is the time interval between sending the ultrasonic pulse and receiving the reflection. That is what input capture is designed to do.
 
So you have a 50mV signal after amplification. Now use an LM311 comparator to trigger a 74HC123 monostable multivibrator.

Don't try to capture the received signal with the Arduino's ADC.

What you need to do is use the input capture function of the internal timer module. All you really need is the time interval between sending the ultrasonic pulse and receiving the reflection. That is what input capture is designed to do.
______________________

Hi MrChips, thanks for your reply.

I have now tried your suggestion but it seems that the LM311 will not be fast enough to respond to the 5MHz signal. I have configured the circuit as the one shown below.

Capture.PNG

The idea is to hold the voltage reference (Vin- pin) fixed at approximately 40mV so when the amplified signal, which was connected to the 'Vin+ pin', crossed that value (presumably along the rising edge), the internal comparator would cut out the current to the base of the output transistor, which would open the circuit and a voltage would build across the the output pin and ground. Notice that this arrangement appeared to have worked well in Multisim simulation, but unfortunately it didn't work in the breadboard.

Any ideas?

Thanks in advance!!
 
Top