富芮坤FR800X系列BLE之ADC滤波

这里做了个简单的滤波提高使用fr8000系列芯片时电池电压采样的精度,供大家参考

主要是采集了几十次,然后排序去头去尾再取平均值:

__attribute__((section("ram_code"))) void change_adc_data(uint16_t *data,uint32_t len)
{
	uint16_t n, m, i, j, temp;

	n= len;
	m = n;            //因为每进行一次第一轮循环,需要排序的数据都要“--”,因此定义变量m=n;
	for (i = 0; i < n; i++) {
		int exchange = 0;           //记录这一轮会不会有数据的交换;
		for (j = 0; j < m-1; j++) {
			if (data[j] > data[j + 1]) {
				temp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = temp;
				exchange = 1;
			}
		}
		m--;
		if (!exchange)  //若没有数据的交换,则数据已经排列完毕,跳出循环;
			break;
	}

}

void vbat_adc_enable(void)
{
	GPIO_InitTypeDef    GPIO_Handle;
    adc_InitParameter_t ADC_InitParam;
		
    __SYSTEM_ADC_CLK_ENABLE();
	__SYSTEM_GPIO_CLK_ENABLE();
	
	 pmu_set_pin_to_CPU(GPIO_PORT_D,BIT(GPIO_BIT_6));	
	
    GPIO_Handle.Pin       = GPIO_PIN_6;
    GPIO_Handle.Mode      = GPIO_MODE_AF_PP;
    GPIO_Handle.Pull      = GPIO_NOPULL;
    GPIO_Handle.Alternate = GPIO_FUNCTION_8;
    gpio_init(GPIO_D, &GPIO_Handle);

    ADC_InitParam.ADC_CLK_DIV    = 5;
    ADC_InitParam.ADC_SetupDelay = 80;
    ADC_InitParam.ADC_Reference  = ADC_REF_1P2V;
    ADC_InitParam.FIFO_Enable    = FIFO_DISABLE;
//    ADC_InitParam.FIFO_AlmostFullLevel = 0;

    adc_init(ADC_InitParam);
    adc_Channel_ConvertConfig(ADC_CHANNEL_1);
    adc_convert_enable();
		//co_printf("ENTER ADC enable \r\n");	
    return;
}

//这里获取了50个值 去头10个去尾10个,再取平均。实际也可以根据自己需求修改
void vbat_adc_get(void)
{
	uint16_t adc_data[50] = {0};
	uint32_t result_temp = 0;

	for(uint8_t i = 0;i<50;i++)
	{
		while(adc_DataValid_status() == 0){};	
		adc_data[i] = adc_get_data_FT();
	}
	change_adc_data(adc_data,50) ;
	for(uint8_t i = 10;i<40;i++)
	{
		result_temp += adc_data[i]; 
	}
	result_temp = result_temp/30;
	
	co_printf("ADC = %d\r\n",result_temp );
}

如上参考代码就完成了。我们直接用result_temp的值来计算自己的采集电压就可以了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值