怎么用stm32实现数值积分啊?
A/D,DMA设置
所以对电流传感器电压传感器检测的数据接到开发板上
经过A/D采样后由DMA读取存在缓存里面
每次不仅要知道当时采样的值,还要知道前一次采样的值u(0),u(1);u(1),u(2);u(2),u(3)……..
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize =4;
//为了存储相邻两次采样的电流,电压值(前一次电流后一次电流,前一次电压后一次电压)
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//16bits
(data widths)
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //16bits
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
前面设置的vu16 ADC_ConvertedValue[4];
///////////////////////////////////
数据被DMA自动保存在预先定义的数组ADC_ConvertedValue[4]里面第一次AD转换的值ADC_Channel_8的值存到ADC_ConvertedValue[0],ADC_Channel_9的值存到ADC_ConvertedValue[1], 以此类推第一次扫描完后,第二次ADC_Channel_8的转换值是保存到ADC_ConvertedValue[2], 4个缓存存满后,前面的值就会被覆盖dma的初始化中有关于缓冲区大小的设置,当缓冲区满的时候,dma自动从头覆盖
针对一组电压叠加
那么第一次我取ADC_ConvertedValue[0],ADC_ConvertedValue[1]的值
dma自动从头覆盖,第二次取值是第一转换的ADC_ConvertedValue[1]和第二次转换的ADC_ConvertedValue[0]
dma覆盖到第一次转换的ADC_ConvertedValue[1],那么ADC_ConvertedValue[0],ADC_ConvertedValue[1]都是新值,那么就可以直接取这两个值。。。。。我说的有点乱
也就是每次我做加法是在一组AD数据转换放在缓存中,而不是连续两组都放在缓存中后才加一次
那样我取这些值不知道什么时候取合适
怎么确保离散取值之间的时间
其实整体看就是个离散积分,梯形算法的离散积分,但是有点头疼,不知道你做过离散积分没,或者有比较好的建议。
|