STM32 ADC noise - Page 1
Forum section: electronics / general

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 25, 2018, 12:07:43 pm
content: I have a demo board of STM32F407I have configured the ADC in DMA mode for 500 samples. I just added the samples together to get the maximum variance of data. Therefore if the ADC readings were stable, then the sum of the samples would be also a fixed number.The problem is that I can not get stable results even if I connect the ADC input to the ground. Naturally, it should demonstrate 0, but it shows massive variations. Interesting is that when I connect the ADC input the ground after the 3.3V regulator (the ground which is in common with the MCU), it shows much more noise in comparison with when I connect the input to the ground before the regulator/board. Personally, I think this is the issue with bypass caps (the designer has excluded them) and weak or lack of grounding.Here is output which I captured using SWV real-time tracingADC has connected to the ground after 3.3V regulatorADC has connected to the ground before 3.3V regulator

author: MasterT
author_rank: Frequent Contributor
timestamp: October 25, 2018, 02:13:41 pm
content: Looks o'k, 500 pulse in the chart is just +1 count of the adc summed up over 500 samples. When connection is done before voltage regulator, there is negative offset, 12-bits adc would change +1 to 0 having -1mV voltage, though no wonder second chart is shifted down copy of the first one. To compare properly, DC offset has to be added to avoid negative voltage at the input.

author: MT
author_rank: Super Contributor
timestamp: October 25, 2018, 04:01:47 pm
content: Read errata papers on ADC for the F4 series.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 25, 2018, 06:50:36 pm
content: Quote from: MasterT on October 25, 2018, 02:13:41 pmNo, it must be much more stable than this, especially when it is connected to the ground. 500 samples with 0.5uS speed (2Msps), means 250uS capture of input. Let assume we plan to make an oscilloscope with this. therefore each sample is important because it is a representation of the input. I think the grounding is very bad in this demo board which makes the ground too noisy and when we connected the ADC input to the edge of the ground (ground wire), it is quieter and less noisy than the ground on the PCB.

author: SiliconWizard
author_rank: Super Contributor
timestamp: October 25, 2018, 07:23:36 pm
content: Would be interesting to see pictures of this board.

author: AndyC_772
author_rank: Super Contributor
timestamp: October 25, 2018, 07:36:54 pm
content: Have you checked that the ADC clock rate is configured to a valid value?

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 25, 2018, 07:44:22 pm
content: Quote from: SiliconWizard on October 25, 2018, 07:23:36 pmit is a two layers board without a ground plane

author: MasterT
author_rank: Frequent Contributor
timestamp: October 25, 2018, 09:42:30 pm
content: Quote from: VanitarNordic on October 25, 2018, 06:50:36 pmMy understanding, each data point is a sum of 500 samples. Here is DS , page 135, table 68.https://www.st.com/resource/en/datasheet/dm00037051.pdfET Total unadjusted error +-5 LSB. Summing up 500 samples, error grows to 2500 LSB. If averaging needed, than you need to divide a summ by 500, to convert it back into 12-bits range.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:42:12 am
content: Quotewell, 500 samples mean 500 full conversions in a sequence. if we add them up, it gives a number which shows any small variances in them. if we average them, we have averaged 500 samples in sequence and minimized the variance in the data. in case of connecting to the ground, because theoretically, all 500 values are zero, then sum or average must be fixed numbers in time.You say LSB error is typically +/-2 and maximum +/-5. Therefore adding this up causes at least to 1000 -/+LSB error, and this naturally causes by the STM32 error if other conditions are perfect.My goal is to grab a specific part of the input signal and detect any small changes in the amplitude. I just use the sum concept (getting an integral which is the sum of all ADC values) to detect the variance in data. By the datasheet, it seems to be natural or maybe it can be slightly better by shielding.I have to do integral to detect a small change in amplitude. it means I have to sum up the values, which is an unstable number by this situation.if I want to build a DSO, then I have to just pass each sample to the output or screen.

author: JVR
author_rank: Regular Contributor
timestamp: October 26, 2018, 07:59:58 am
content: In a board with a proper layout, I've been able to get around 1LSB of noise out of a F4, so I would suggest you read the DS again, make sure that the clock is set up correctly, make sure there is not another function trying to use the ADC pin as well, or just change to a different pin for a test. Check that you have the capture time set up aligned to the ADC clock.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 08:09:09 am
content: Quote from: JVR on October 26, 2018, 07:59:58 amAll of them are correct except the layout which is a demo board. it has no ground plane. no pin uses the ADC. actually, I have enabled just the ADC, nothing more. I check the values using the real-time SWV> I have tested another Pin also. as discussed above, since I add the values, then I add the variance or error. therefore this output seems to be normal.What I struggle is that I want to take an integral or check the amplitude of the signal in the given samples or time frame. therefore I have summed all 500 values. but if I do so, this instability is obvious. maybe I have to read several times (for example 5 times) and average this, but this causes a delay.this is the clock

author: JVR
author_rank: Regular Contributor
timestamp: October 26, 2018, 09:36:49 am
content: The problem with just summing, is that you are summing the error as well, as has been said. Decimate the error by dividing your 500 samples by 500, and you should get a very stable output from the ADC.In terms of the board, yes its not a spectacularly good design, lack of decoupling etc, but since you have nothing else connected, it should not be that noisy. Also make sure that your debugger and the DUT are on the same ground voltage, using good quality USB cables, as the noise might be induced from your PC. I'f often found the best way to characterize a system's ADC is to have it powered from the design PSU, and getting samples off either via BT, or IrDA. PC's are noisy bastards, and if you are sharing a groundplane with one, you will need a lot more than just a few caps to clean that power up to avoid 0.8mV ripple affecting your ADC pins.Also does the F4 you are using have a reference, or are you referencing to Vcc? Since the supply ripple will also affect the ADC.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 10:22:18 am
content: Quote from: JVR on October 26, 2018, 09:36:49 amI have no other option to check the values. because I either have to connect a programmer and PC to check variables by the SWV or connect using the serial port. Either PC is involved, at least within prototype settings. First Vref was connected to Avcc but I disconnected it myself and connected it to a TL431 reference, but no improvement.Regarding summing up and averaging, of course averaging and dividing by 500 will handle stable result but it is not useful for my purpose because as I mentioned I suppose to take integral (or the sum of digital values) to check the amplitude of the signal and averaging destroys small changes or variations. one solution is to take sampling several times (for example 10 times) and then divide by 10 but it causes a delay in high-frequency pulses because the ADC has to be stopped, the calculation should be done and then started again and if the calculations cause a delay, it affects the response.

author: eliocor
author_rank: Unknown
timestamp: October 26, 2018, 11:08:36 am
content: Use ADC in DMA mode with a ping-pong buffer.

author: AndyC_772
author_rank: Super Contributor
timestamp: October 26, 2018, 11:19:02 am
content: How could that possibly affect the noise level?IMHO if the board has no ground plane, all bets are off. NO sane reason exists to make a PCB without one, and time spent diagnosing problems that are due to poor grounding is completely wasted. It's not even a good learning experience.If there's any doubt about the board layout, pick up a dirt cheap ST Nucleo board for a similar CPU and try that. Life is too short to waste any part of it on 2 layer boards.I have an STM32F405 on one of my own boards right in front of me. No issues with the ADC whatsoever.

author: JVR
author_rank: Regular Contributor
timestamp: October 26, 2018, 11:25:46 am
content: Quote from: VanitarNordic on October 26, 2018, 10:22:18 amRight, I've been doing too much refactoring today. I kept reading that as IntegerEasiest is as Andy suggests, bin the board. But if you want to give it the best possible chance, run it off a batterypack, and connect serial TX/RC via 1k resistors at a low-ish baudrate. With the ground connected to the PC via a 100R.Throw some decoupling at the chip, and beef up the grounds if you can.Its not pretty, but it will get you out of a hole.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 12:02:29 pm
content: Quote from: AndyC_772 on October 26, 2018, 11:19:02 amThe ST Nucleo is a 4 layers design? Actually, I want to design a PCB just for my own purpose (not a demo board or header board which uses all I/Os) and dedicate one layer completely for the ground and another one for traces.Would you please check how your board reacts with my challenge? I mean summing up the values. assign a DMA buffer size of 500 and sum all value, like taking an integral

author: MasterT
author_rank: Frequent Contributor
timestamp: October 26, 2018, 02:03:18 pm
content: Basically, integrating over a pull of samples you increasing resolution of your adc. I'd refer to atmel's AVR121 app. note, but thumbs rule is you should divide by 2 for sum of 4 samples, getting 1 extra bit. Divide by 2 for s16, 3 - s64, 4 - s256 etc.I'd measure performance of the STM adc on stm32f103 blue pill board (two layers) in the past, and got pretty bad results with ENOB close to 8-bits (12-bit adc).So, I don't think 4 layers would make big difference, and the only option to get better resolution is to use external fast 14/16 bits adc, like ad7988 or similar.

author: splin
author_rank: Frequent Contributor
timestamp: October 26, 2018, 02:08:04 pm
content: Your results look fairly typical to me for the STM32F405 which are known to have very noisy ADCs. You need to read AN4073 which should explain it all and give some tips to minimise the noise by changing the ART settings etc.https://www.st.com/content/ccc/resource/technical/document/application_note/a0/71/3e/e4/8f/b6/40/e6/DM00050879.pdf/files/DM00050879.pdf/jcr:content/translations/en.DM00050879.pdfFrom that document you can see that with a low noise DC voltage at the ADC i/p, the ADC noise results in a peak to peak dispersion of output codes of around 20 LSBs, which equates to a standard deviation of approx 20/6.6 or 3.03 LSBs. The SNR (signal to noise ratio) is therefore 20 x log10(4096/2/sqrt(2)/3.03) = 53.5dB which isn't great. ST don't specify the SNR of the STM32F405 in the datasheet - probably for that reason.The F3 series 12bit ADCs are much better with a typical SNR of 67dB with a single ended input (the '405 ADC is S/E) or 70dB with differential inputs - almost 7x less noise than the STM32F405.As you are averageing 500 samples (albiet without the final divide by 500), the random, uncorrelated ADC noise will be reduced by sqrt(500). Assuming all the noise is uncorrelated the 20 LSB peak to peak noises reduces to .89. Multiply by 500 to give the same scale as your results gives 447 which is far off your 500 LSB spread (approx 30 to 530).There is a big caveat hower; as has been pointed out earlier you shouldn't test by grounding the input because of DC offset in the ADC - any noise which takes the input level below 0V will give a zero code, so depending on the amount of offset you could be seeing only a fraction of the noise in your results - which you demonstrate by moving the grounding point.

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 02:31:11 pm
content: If your first picture shows the sum of 500 samples then your DC offset is aprox +0.5 LSB (500*0.5=250) and the noise is aprox +/-0.45 LSB [250-(500*0.45) .. 250+(500*0.45)]..

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 03:27:52 pm
content: very good technical points from all contributors discussed in this topic to solve the problem, but I got confused about what should I do with this task.the task is to measure the amplitude or detect amplitude changes in the input signal and by the way, we have to take an integral or sum up all ADC values. 500 ADC values or whatever.I should not be concerned about the mentioned noise when I connect the ground to the input? I have connected the input to a waveform generator and the result was noisy alsoThe PCB board does influence the results? it means designing 4L PCB or 2L with a full layer of the ground will fix it?Should I choose a different MCU? I have some STM32F103C8 in hand. It can handle the speed of 1MSPS which is enough.Should I use an external ADC to do this? such as ADCS747X or MCP33121D-10 or similar but I see they also offer LSB errors similar to STM32 although smaller, but anyway it will affect the result in case of summing up the ADC values

author: SiliconWizard
author_rank: Super Contributor
timestamp: October 26, 2018, 03:36:42 pm
content: Just a couple remarks here.You mentioned the lack of bypass caps, but looking at the board, at least the MCU seems properly bypassed as there seems to be a bypass cap in each corner of the IC and even an LC at what probably is VDDA (but I'm not sure, didn't bother to check the pinout in the datasheet). The placement is not ideal but it should do the job. Maybe the power supplies are not properly bypassed? Didn't look too closely.I don't know how the power supply and ground are distributed on the board. But without a proper ground plane, they may not be routed properly and there may even be some loops? (Can't see that on the pic.)Hardware issues aside, not sure either what your MCU setup really is. You said you're not using any analog input if I get it correctly? Then how is the ADC channel configured? With your incomplete config, the ADC's input may actually be floating? Something to check.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 03:46:41 pm
content: Quote from: SiliconWizard on October 26, 2018, 03:36:42 pmhe has not used bypass for VDDA. I mentioned I just have configured one ADC input and nothing more to check where the noise comes from. I have configured the ADC in DMA mode for 500 samples. When the conversion finishes, it calls the callback routine and it that routine I first Stop the DMA and make the calculation and at the end I start the DMA again. ADC does the job because I can see changes when I connect the input to ground or VCC or similar. The problem is not because of these points.

author: MasterT
author_rank: Frequent Contributor
timestamp: October 26, 2018, 03:55:39 pm
content: Quote from: VanitarNordic on October 26, 2018, 03:27:52 pmIf integral sum of 500 needed, that means extra 9-bits required for your application, totalling to 12 + 9 = 21 bits. No chance you ever could get such resolution with internal ADC.Quote+-2LSB for 16-bits, in other words noise is 16 times(!) lower, than for internal STM adc.

author: SiliconWizard
author_rank: Super Contributor
timestamp: October 26, 2018, 04:00:57 pm
content: Quote from: VanitarNordic on October 26, 2018, 03:46:41 pmI was referring to L1/C21/C22 group. What are they actually connected to?Funnily enough, the board is not just a poor layout job. The component referencing is also funky. There are multiple components with the same reference. Guess they may have assigned one reference for one value? That's weird. I wonder what PCB package they have used that even allows duplicate references.Quote from: VanitarNordic on October 26, 2018, 03:46:41 pmOK, I may have misunderstood this part you said: "no pin uses the ADC. actually, I have enabled just the ADC, nothing more."Could still be some ADC parameters to tweak.Also, you could check if there is a mean to internally connect the ADC input to ground and see what difference it makes (unless you already did that).

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 05:55:49 pm
content: What is your problem here? Your ADC works nice.Your DC offset is +0.5 LSB and the noise is 0.9 LSB peak to peak.That is an excellent result with that board and F407, imho..

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:00:41 pm
content: Quote from: imo on October 26, 2018, 05:55:49 pmMy problem is that I want to measure the amplitude of the signal or detect amplitude changes. Therefore I have to take an integral, it means adding up the ADC values, but as you see the variance is high. if I take an average (divide the sum by 500), then the variation or small amplitude changes will be destroyed (naturally averaging normalizes the data). Do you have a suggestion?

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 06:05:09 pm
content: Frankly, I do not understand what you want to do.Could you describe in detail what measurements you want to provide?

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:08:51 pm
content: Quote from: imo on October 26, 2018, 06:05:09 pmTell me how to measure the amplitude of a signal in a given time frame?. what I do is to sample that time frame by the ADC and calculate the sum of these values. right?Do you have another suggestion?

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 06:17:14 pm
content: In order to measure an amplitude of the signal in given time frame you have to use a "peak detector".With an ADC you sample the signal within the time frame and you take the sample with the highest value - that is the peak amplitude..

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:26:25 pm
content: Quote from: imo on October 26, 2018, 06:17:14 pmWith your suggested method, can we measure if the input signal (in the given time frame) changes a few mV or hundreds of mV?

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:34:28 pm
content: Actually what I'm doing is the same but with ADC as described here:https://electronics.stackexchange.com/questions/35735/measure-ac-sine-wave-amplitude-with-adc

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 06:39:05 pm
content: What you describe is following:1. you sample a signal with 12bit ADC (3.3V Vref), the "resolution" is 1LSB = 0.8mV (theoretically), the ADC range is 0..3.3V2. you make N samples within a timeframe T [0..T]3. you want to detect the MAXima of the signal during the timeframe T - that is done by "derivation" of the signal (the dV/dt will change the sign).Is that correct?

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 06:45:03 pm
content: Quote from: imo on October 26, 2018, 06:39:05 pmany changes in the amplitude (measuring how much) in that time frame or within those N samples (for example 0 to T, as you mentioned)

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 06:48:14 pm
content: You want to detect the changes (dV/dt) during the sampling or after the timeframe T (when all the samples are sampled)?

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 07:06:19 pm
content: Quote from: imo on October 26, 2018, 06:48:14 pmWe have to do after because we don't know where it happens (in which sample or samples together), but we are sure in which time frame. Therefore the time frame is fixed from a to b.I used to add all values together and compare with previous value but it did not work because of instability. Averaging increases the stability but small variations will be destroyed.

author: iMo
author_rank: Super Contributor
timestamp: October 26, 2018, 07:20:59 pm
content: I think you have to amplify the signal changes only (ie. 100x). Through an RC derivative circuit (ie. with an opamp) + amplifier (opapm). Then do the sampling.https://www.electronics-tutorials.ws/opamp/opamp_7.html

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 26, 2018, 07:55:00 pm
content: Quote from: imo on October 26, 2018, 07:20:59 pmI've already done that. if you think no other way than averaging, I'll increase the gain

author: splin
author_rank: Frequent Contributor
timestamp: October 26, 2018, 09:30:50 pm
content: What are the maximum and minimum amplitudes of the signal that you want to measure?What accuracy do you need?What frequency range does the signal have?Is the signal a sine wave of a single frequency at any one time?Is the signal constant and for how long?Do you have to have a measurement result every 250us or could be longer or shorterCould the signal have a constant DC offset?

author: iMo
author_rank: Super Contributor
timestamp: October 28, 2018, 09:33:41 am
content: Look at this circuit - it amplifies 1mV (50us) pulse superimposed on 5V DC. It will do with "any DC" voltage ("DC" is "filtered out" by R1C1 time constant). Amplification of the diff amplifier set to 100x.An example only, you have to modify it according to your reqs.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 28, 2018, 08:50:58 pm
content: Quote from: imo on October 28, 2018, 09:33:41 amYou mean this circuit just amplifies the 1mV and not the carrying 5DC?Although I am using this circuit with AC couplinghttps://www.electronics-tutorials.ws/opamp/opamp_7.htmlone limitation I have is that the circuit uses a battery and a single supply. I have to power the OpAmp with the single supply techniques. at the moment I inject a voltage to the + rail.

author: aandrew
author_rank: Frequent Contributor
timestamp: October 29, 2018, 12:00:45 pm
content: Quote from: VanitarNordic on October 26, 2018, 12:02:29 pmThe Nucleo-144 boards are 6 layer boards.

author: iMo
author_rank: Super Contributor
timestamp: October 30, 2018, 08:44:56 am
content: Quote from: VanitarNordic on October 28, 2018, 08:50:58 pmYes - see the simulation above..The circuit amplifies only changes which are "faster" than t=R1C1 time constant. The "DC" is slower than R1C1.When the "background signal" is "slower" than "a pulse superimposed on the background signal" it will amplify the superimposed pulse only."Slower" means its "fastest changes periods" are longer than t=R1C1 (or better N*R1C1)..Or something like thatPS: see below:yellow signal: a 20mV 50us long pulses (with 50ms period) superimposed on a1Vpp2Vpp 0.2Hz sine wave, while the sine wave is offset at 3V DCgreen signal: the pulses amplified 100x with above circuit.Mind there is the DC coupling..

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 30, 2018, 10:27:33 am
content: QuoteNo way to run this circuit with a single supply?

author: iMo
author_rank: Super Contributor
timestamp: October 30, 2018, 10:33:02 am
content: Try with a single rail (rail-rail) opamp. Avoid input/output voltages close to VCC and GND (closer than 100-300mV), better consult the datasheet.PS: the above sine wave is 2Vpp at 3V DC.PPS: it works somehow with a cheapo LM358 single supply opamp, thus it should work fine with any modern single supply r-r opapm..

author: aandrew
author_rank: Frequent Contributor
timestamp: October 30, 2018, 03:03:24 pm
content: Quote from: VanitarNordic on October 30, 2018, 10:27:33 amYou can run it on a single rail if your inputs don't go below 0V and are happy with some distortion around 0V.Alternatively, you can use a little trick to generate a weak/noisy negative rail. You don't need the rail to be very clean because you're only using it for some headroom for the op-amp to do its work.Take an LM2776 to invert the supply and feed the output to the -V of the opamp. This is a very inexpensive way to get clean output down to 0V. You can make it even more inexpensive if you use an MCU pin to generate the pulses which drive the switched capacitor inverter.There is also the LM7705 which generates a very precise/well regulated -0.23V which can be used on devices which cannot take a negative voltage rail but where you want to get an undistorted signal around 0V.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: October 31, 2018, 12:17:16 am
content: Quote from: aandrew on October 30, 2018, 03:03:24 pmin this specific application, we want to amplify mV range signals and measure them by the ADC, then do you think using a charge pump such as 7660 (or the ones you mentioned) does not inject wild noises to the circuit?

author: aheid
author_rank: Regular Contributor
timestamp: November 04, 2018, 12:47:56 pm
content: Quote from: VanitarNordic on October 26, 2018, 06:26:25 pmWhat's the time frame like? If it's fairly long, can't you just use a low-pass filter (in code)? Or am I misunderstanding you?

author: David Hess
author_rank: Super Contributor
timestamp: November 06, 2018, 01:32:35 am
content: The usual test for ADC noise is the standard deviation of the output which directly returns RMS noise. Sometimes peak-to-peak noise is used in applications where it is more relevant.Microcontroller ADCs are usually very noisy because ground currents from the digital side get directly into the ADC via the signal and reference grounds. This can be somewhat ameliorated by using instrumentation amplifiers to drive the analog and reference input referenced to the microcontroller's ground.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: November 06, 2018, 08:14:33 am
content: Quote from: David Hess on November 06, 2018, 01:32:35 amI read that the digital and analog grounds must be connected in just one point, it means separated ground planes but connected in 1 point. it seems ground separation does not help to reduce the noise. if you think an external ADC is more stable, then I gonna test an external one.

author: David Hess
author_rank: Super Contributor
timestamp: November 06, 2018, 08:30:13 am
content: Quote from: VanitarNordic on November 06, 2018, 08:14:33 amThat is how it is suppose to be done for the reason I identified; a single point ground removes ground loop errors. A good ADC should produce less noise than that but ADCs embedded with microcontrollers are often compromised by all of the digital switching noise no matter what is done.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: November 06, 2018, 08:45:29 am
content: QuoteDo you have experience with an external ADC? for my case 10 or 12bits 1Msps is enough.I think that's the reason why in many equipments we see external ADCs

author: David Hess
author_rank: Super Contributor
timestamp: November 06, 2018, 09:45:20 am
content: Quote from: VanitarNordic on November 06, 2018, 08:45:29 amThat certainly is a factor. It is very difficult, and sometimes impossible, to achieve low noise using an ADC built into a microcontroller.There are lots of external 12 bit 1MS/s sampling ADCs which achieve close to their noise free resolution.

author: VanitarNordic
author_rank: Frequent Contributor
timestamp: January 13, 2019, 10:57:47 am
content: Quote from: imo on October 28, 2018, 09:33:41 amHi imoI came back to this topic because now I want to focus on it.in my case, the small signal has the same frequency as the input signal. actually, the input signal itself might change. for example, if the input signal is 100Hz, then the variations are also 100Hz, something like phase shift with changes in the amplitude, but very very small in the range of uV which should be amplified before detection. for example, if it is a square pulse, then the falling edge of the pulse shifts a bit and starts falling sooner or maybe later. something like this.if I amplify the whole signal, then the variations will be destroyed because the opamp amplifies everything and many signal points will be clipped by the opamp when they go near supply rails. therefore I will miss those points. Therefore if I could be able to just amplify the changes, it is perfect.