打印

怎样利用stm32实现数值积分,各位大侠帮忙

[复制链接]
3035|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fanningjia|  楼主 | 2010-4-6 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么用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数据转换放在缓存中,而不是连续两组都放在缓存中后才加一次
那样我取这些值不知道什么时候取合适
怎么确保离散取值之间的时间
其实整体看就是个离散积分,梯形算法的离散积分,但是有点头疼,不知道你做过离散积分没,或者有比较好的建议。

相关帖子

沙发
电子马甲| | 2010-4-6 19:16 | 只看该作者
确实 比较 乱

使用特权

评论回复
板凳
因特网用户| | 2010-4-6 20:24 | 只看该作者
找本数值分析的书看有很多算法
有牛顿-柯茨算法  龙贝格算法 等

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

52

帖子

0

粉丝