HAL STM32G4 +ADC手动触发采集+各种滤波算法实现

news/2024/4/28 18:37:13

HAL STM32G4 +ADC手动触发采集+各种滤波算法实现


  • 📍相关篇《HAL STM32G4 +TIM1 3路PWM互补输出+VOFA波形演示》

✨本篇内容也是继欧拉电子相关无刷电机驱动控制学习的相关基础内容。仅作为个人笔记记录使用。

  • 📍感谢网友提供的相关内容《基于STM32的ADC采样及各式滤波实现》文中的源码个人分享:
链接:https://pan.baidu.com/s/1CnhBREQ2-iRqjImH-ZAaGQ?pwd=9d37 
提取码:9d37
  • 🔖VOFA+波形显示ADC数据可以参考上面的文章介绍。

📙ADC采用各种滤波算法实现

  • 🔖来源于上面参考内容源码。
  • 🌿算术均值滤波算法
int averageFilter(int N)
{int sum = 0;short i;for(i = 0; i < N; ++i){sum += HAL_ADC_GetValue(&hadc1);	}return sum/N;
}
  • 🌿中值滤波算法
int middleValueFilter(int N)
{int value_buf[N];int i,j,k,temp;for( i = 0; i < N; ++i){value_buf[i] = HAL_ADC_GetValue(&hadc1);					}for(j = 0 ; j < N-1; ++j){for(k = 0; k < N-j-1; ++k){//从小到大排序,冒泡算法if(value_buf[k] > value_buf[k+1]){temp = value_buf[k];value_buf[k] = value_buf[k+1];value_buf[k+1] = temp;}}}return value_buf[(N-1)/2];
}
  • 🌿一阶互补滤波
int firstOrderFilter(int newValue, int oldValue, float a)
{return a * newValue + (1-a) * oldValue;
}
  • 🌿平滑均值滤波
#define N 10
int value_buf[N];
int sum=0;
int curNum=0;
int moveAverageFilter()
{if(curNum < N){value_buf[curNum] = HAL_ADC_GetValue(&hadc1);sum += value_buf[curNum];curNum++;return sum/curNum;}else{sum -= sum/N;sum += HAL_ADC_GetValue(&hadc1);return sum/N;}
}
  • 🌿限幅平均滤波
//限幅平均滤波
#define A 50
#define M 12
int data[M];
int First_flag=0;
int LAverageFilter()
{int i;int temp,sum,flag=0;data[0]=HAL_ADC_GetValue(&hadc1);for(i=1;i<M;i++){temp=HAL_ADC_GetValue(&hadc1);if((temp-data[i-1])>A||((data[i-1]-temp)>A)){i--;flag++;}else{data[i]=temp;}}for(i=0;i<M;i++){sum+=data[i];} return  sum/M;
}
  • 🌿卡尔曼滤波
int KalmanFilter(int inData)
{static float prevData = 0;                                 //先前数值static float p = 10, q = 0.001, r = 0.001, kGain = 0;      // q控制误差  r控制响应速度 p = p + q;kGain = p / ( p + r );                                     //计算卡尔曼增益inData = prevData + ( kGain * ( inData - prevData ) );     //计算本次滤波估计值p = ( 1 - kGain ) * p;                                     //更新测量方差prevData = inData;return inData;                                             //返回滤波值
}

测试例程

  • 🔖分别使能ADC1的通道11(PB11),和ADC2通道0(PA0)进行adc采样。
    在这里插入图片描述

  • 转换周期和精度配置,触发方式
    在这里插入图片描述

  • 📝main函数

int main(void)
{/* USER CODE BEGIN 1 */float temp[2];
uint8_t TempData[12]={0,0,0,0,0,0,0,0,0,0,0x80,0x7F} ;//vofa float数据流显示格式/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();MX_ADC1_Init();MX_ADC2_Init();/* USER CODE BEGIN 2 *///HAL_UART_Receive_IT(&huart3,(uint8_t *)&aRxBuffer,1);HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);//ADC自校验HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1) {/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc1); HAL_ADC_Start(&hadc2);//Vstep = Vref(3.3) / 4095=8.056mV	temp[0]=HAL_ADC_GetValue(&hadc1)*8.056f;//AIN11->PB12temp[1]=HAL_ADC_GetValue(&hadc2)*8.056f;//*0.02094726f; //ADC2.AIN1->PA0memcpy(TempData,(uint8_t*)temp,sizeof(temp));HAL_UART_Transmit_DMA(&huart1,(uint8_t *)TempData,12); HAL_Delay(100);}/* USER CODE END 3 */
}
  • 📚程序源码:
  • 🔖采用的STM32G431
链接:https://pan.baidu.com/s/1iIzQpNHDAG-XTEMcmXUIlA?pwd=7gs0 
提取码:7gs0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.tangninghui.cn.cn/item-12138.htm

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚&#xff0c;财联社报道&#xff0c;百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈&#xff0c;最后确定由百度提供这项服务&#xff0c;苹果预计采取 API 接口的方式计费。 苹果将…

Facebook防封如何做?附解禁方法

Facebook作为跨境主要业务平台&#xff0c;一直以来封号率都非常高。相信点进来的各位或多或少地遇见了个人号被封&#xff0c;广告账户被禁&#xff0c;FB主页被封等情况。针对此类问题&#xff0c;今天就小编也来分享自己的Facebook防封经验。 一、Facebook被封原因 主要有以…

龙膜全新推出膜力行“一站式汽车膜全面解决方案”

中国&#xff0c;深圳&#xff0c;2024年3月&#xff0c;全球特种材料公司伊士曼携旗下汽车膜品牌亮相24届九州汽车生态博览会&#xff0c;重磅发布了创新型汽车膜销售服务和售后的一站式解决方案——龙膜膜力行&#xff0c;进一步推动与4S集团、单店的深度合作。这一合作不仅为…

亚马逊云科技《生成式 AI 精英速成计划》

最近亚马逊云科技推出了「生成式AI精英速成计划」&#xff0c;获取包含&#xff1a;免费学习热门生成式AI课程、技能证书、人力主管的面试辅导、云计算国际认证、免费去往北美参加全球用户大会等&#xff5e; 针对开发者和企业非技术专业人士&#xff0c;了解如何使用大模型平台…

谭浩强第五版C语言课后习题(编程题)+答案

谭浩强第五版作为初学C语言必读的一本教材&#xff0c;课后习题具有非常大的参考价值&#xff0c;也是很多高校期末考试或者考研的重要参考。在这里我整理了一部分个人认为比较重要的编程题&#xff0c;供大家作参考 1.输入两个数&#xff0c;求他们的最大公约数和最小公倍数&…

如何使用Android平板公网访问本地Linux code-server

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…