用adc接地的时候发现有零点误差,于是就移植了网上一个f103的例程,通过多次测量求均值的方法来实现adc的精准测量。 思路大概就是先定义一个get_adc_average的函数,在函数里用 for(t=0;t<times;t++) { temp_val+=Get_Adc(); } 实现求平均值。然后Get_Adc()程序如下: u16 Get_adc() { //设置指定ADC的...
adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均 temp=(float)adcx*(...
adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均 LCD_ShowxNum(134,130,adcx,4,16,0); //显示ADCC采样后的原始值 temp=(float)adcx*(3.3/4096); //获取计算后的带小数的实际电压值,比如3.1111 adcx=temp; //赋值整数部分给adcx变量,因为adcx为u16整形 LCD_ShowxNum(13...
总之,仿真数据说明本设计的可重构流水线ADC基本满足设计指标。 利用Cadence中计算器里的AVERAGE对电源处的电流波形进行计算,最终可以得到各模块的功耗。对各模式下的功耗比例进行计算,可以得到表3所示结果。 本文设计的改进型可重构ADC在低精度工作模式下的功耗相比精度固定的ADC能降低约50%。总体来看,根据不同的条件进...
const adc16_hw_average_config_t averageConfig = {#if AVERAGING_HARDWARE true,#else false, /*!< Enable the hardware average function. */#endif kAdc16HwAverageCountOf32 /*!< Select the count of conversion result for accumulator. */ }; for (uint32 i = 0; i < m...
adc=Get_Adc_Average(ADC_Channel_1,10); temp=(float)adc*(3.3/4096);//printf("adc:%d\r\n",adc);//printf("volate:%0.2f\r\n",temp);if(temp>1.62&&temp<1.66) { sw=1; }elseif(temp>2.86&&temp<2.90) { sw=2; }elseif(temp>2.95&&temp<3.05) ...
普遍利用滑动平均(moving averageorsliding average)在平均样本数和快速响应间折中。M阶的滑动平均需要存储M个中间数据,每输入一个新数据同时放弃一个最老的数据,然后以新的M个数求取平均值。滑动平均仅需要加减操作和桶形结构先入先出寄存器组即可实现。当过采样比较大时可能需要采样分片加和级联多次滑动平均的方式...
u16 Get_Adc_Average(u8 ch,u8 times)//得到某个通道给定次数采样的平均值 { u32 temp_val=0; u8 t; for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times; } 1. 2. 3. 4. 5. 6. 7.
while(1){ adcx=Get_Adc_Average(ADC_CHANNEL_14,20);//获取通道5的转换值,20次取平均 i=8;de...
普遍利用滑动平均(moving average or sliding average)在平均样本数和快速响应间折中。M阶的滑动平均需要存储M个中间数据,每输入一个新数据同时放弃一个最老的数据,然后以新的M个数求取平均值。滑动平均仅需要加减操作和桶形结构先入先出寄存器组即可实现。当过采样比较大时可能需要采样分片加和级联多次滑动平均的...