2017-07-24 01:36 PM
Hello,
I have a project in which I want to measure voltages and currents of 3 phases and calculate the energy consumption for each power line. For this, after reading some documentation I learned that the dual mode is what I was looking for. My setup for this is putting all V1, V2 and V3 in ADC1 and I1 I2 and I3 in ADC2. This way I can get adc values for Vn and An simultaneously, which means that there would be no phase delay between voltage and current.
Getting here was easy, what started bothering me a little is that I'm unable to understand how the DMA acquires the data. From the reference manual there are many modes it can get the data, DMA mode 1, 2 and 3.
DMA mode 1 -> consecutive requests for each ADC;
DMA mode 2 -> used in interleaved mode (doesn't interest me)
DMA mode 3 -> similar to mode 2
I would either get a DMA request for every conversion and I'd read 2 bytes every time, or get a DMA request every 2 conversions
For set up purposes, Imagine ADC1 channels 0 2 and 4 (V1, V2 and V3 respectively) and ADC2 channels 1 3 and 5 (I1, I2, and I3 respectively) are being used and I configure the highest sampling rate (15 cycles, 450ns @30MHz) and I set up a timer to trigger the ADC every 10us. In my array I would get V1, V2, V3, V1, ... and in the other I1, I2, I3, I1, ...??? I would have to configure 2 DMAs, one for ADC1 and the other for ADC2. This seems the best way for using SIMD instructions. It would make it easy for me to calculate power and calculate Vrms and Irms
After some reading I found the injected mode, which generates a DMA request at the end of the conversion of all channels, each with their own register ?? How would this work for the DMA? Is the DMA triggered to read from 4 registers (maximum .. in my case it would be 3) for each ADC? Would it be better for my application? This mode got me confused.
So .. to sum it up.
After this I would get my sine waves. So now comes the filtering part in order to remove DC offset but this is a whole different story and a subject for another question or forum.
Basically this question was asked because I'm not sure if I understood the dual simultaneous mode and how it works with DMA. Also I don't know if my calculations for sampling rate can be done, maybe and if it can still be triggered by the timer even though it is continuous mode. It's the first time I'm using STM32's ADC and it's a lot of information and a lot of possibilities.
PS: I also didn't understand the
ADC_JOFRx
. Well, I understood it, it subtracts the offset from the read value so that it would remove the DC offset given by my hardware. But ... is it a good idea to use it? I want to hack my development board and use an external 0.1% 3V voltage reference since it's more stable than Vdd, but I'm inserting an 1V5 offset using the same Vdd as my board. Would it be safe to assume a static 2047 offset? I think a high pass filter would be better here.#multimode-adc #adc-config #adc-dma #adc