v0.1
This commit is contained in:
13
yaokon/Core/User_Drivers/Filtering.c
Normal file
13
yaokon/Core/User_Drivers/Filtering.c
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "Filtering.h"
|
||||
|
||||
|
||||
|
||||
|
||||
Mean_Filtering_DataType Mean_filtering(Mean_Filtering_DataType *dat,uint32_t Dsize){
|
||||
Mean_Filtering_DataType sum=0;
|
||||
for(int i=0;i<Dsize;i++){
|
||||
sum+=*dat;
|
||||
dat++;
|
||||
}
|
||||
return (sum/Dsize);
|
||||
}
|
||||
27
yaokon/Core/User_Drivers/Filtering.h
Normal file
27
yaokon/Core/User_Drivers/Filtering.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef _FILTERING_H
|
||||
#define _FILTERING_H
|
||||
|
||||
#include "stdint.h"
|
||||
#include "queue.h"
|
||||
|
||||
/*******你需要均值滤波处理的数据类型(BEGIN)*******/
|
||||
/*--按需更改--*/
|
||||
typedef uint32_t Mean_Filtering_DataType;
|
||||
/*******你需要均值滤波处理的数据类型(END)*********/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Mean_Filtering_DataType Mean_filtering(Mean_Filtering_DataType *dat,uint32_t Dsize); //均值滤波函数
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
52
yaokon/Core/User_Drivers/RockingBar.c
Normal file
52
yaokon/Core/User_Drivers/RockingBar.c
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "RockingBar.h"
|
||||
#include "Filtering.h"
|
||||
|
||||
//static uint32_t RockingBar_ADC_Value[ROCKING_BAR_CH][FILLTERING_NUM];
|
||||
float RockingBar_Value[ROCKING_BAR_CH];
|
||||
SqQuecu RockingBar_ADC_Value_0;
|
||||
SqQuecu RockingBar_ADC_Value_1;
|
||||
SqQuecu RockingBar_ADC_Value_2;
|
||||
SqQuecu *P[ROCKING_BAR_CH]={&RockingBar_ADC_Value_0,&RockingBar_ADC_Value_1};
|
||||
/*函数RockingBar_ADC_GetValue
|
||||
* 功能:获取ADC转换的值存在数组中
|
||||
*/
|
||||
void RockingBarInit(void){
|
||||
InitQuecu(&RockingBar_ADC_Value_0);
|
||||
InitQuecu(&RockingBar_ADC_Value_1);
|
||||
}
|
||||
|
||||
|
||||
void RockingBar_ADC_GetValue(void){
|
||||
uint32_t sum=0;
|
||||
uint8_t num=0;
|
||||
uint32_t adcv=0;
|
||||
|
||||
for(int i=0;i<ROCKING_BAR_CH;i++){
|
||||
HAL_ADC_Start(&hadc1); //启动ADC转换
|
||||
HAL_ADC_PollForConversion(&hadc1,10); //等待ADC转换完成
|
||||
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
|
||||
{
|
||||
adcv = HAL_ADC_GetValue(&hadc1);
|
||||
if(enQueue(P[i],adcv)==false)deQueue(P[i]);
|
||||
enQueue(P[i],adcv);
|
||||
}
|
||||
|
||||
}
|
||||
HAL_ADC_Stop(&hadc1);
|
||||
|
||||
for(int i=0;i<ROCKING_BAR_CH;i++){
|
||||
sum=0;
|
||||
num=0;
|
||||
for(int n=0;n<P[i]->size;n++){
|
||||
num+=1;
|
||||
sum += P[i]->data[n];
|
||||
}
|
||||
RockingBar_Value[i]=sum/num;
|
||||
}
|
||||
}
|
||||
|
||||
void RockingBar_GetValue(void){
|
||||
RockingBar_ADC_GetValue();
|
||||
RockingBar_Value[0] = THRUST_MIN + ((THRUST_MAX-THRUST_MIN)/(4096))*(RockingBar_Value[0]-0);
|
||||
RockingBar_Value[1] = YAW_MIN + ((YAW_MAX-YAW_MIN)/(4096))*(RockingBar_Value[1]-0);
|
||||
}
|
||||
32
yaokon/Core/User_Drivers/RockingBar.h
Normal file
32
yaokon/Core/User_Drivers/RockingBar.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef _ROCKING_BAR_H
|
||||
#define _ROCKING_BAR_H
|
||||
|
||||
/*----stm32相关头文件(BEGIN)-------*/
|
||||
#include "main.h"
|
||||
#include "adc.h"
|
||||
/*----stm32相关头文件(END)---------*/
|
||||
#include "stdint.h"
|
||||
#include "queue.h"
|
||||
|
||||
|
||||
|
||||
#define ROCKING_BAR_CH 2 //采集的通道数
|
||||
#define FILLTERING_NUM 100 //均值滤波
|
||||
|
||||
#define THRUST_MAX (float)100
|
||||
#define THRUST_MIN (float)-100
|
||||
#define YAW_MAX (float)200
|
||||
#define YAW_MIN (float)-200
|
||||
|
||||
|
||||
extern float RockingBar_Value[ROCKING_BAR_CH];
|
||||
|
||||
void RockingBarInit(void);
|
||||
void RockingBar_ADC_GetValue(void);
|
||||
void RockingBar_GetValue(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user