你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
nyszx 发表于 2020-5-2 21:23 8 H, c- P2 p' J, x/ \8 M% T楼主很厉害啊,无刷驱动,飞控系统,无线通讯,软硬件,各种算法,matlab...膜拜!最近买了点书,也想学学 ...
无人机组开发平台视频讲解
无人机组开发平台介绍
基于 STM32F4 构建的Stinger X210赛车无人机
【外网项目分享】无人机Firefly Pro制作指导
用于避障和区域测绘的无人机
DIY高大上四旋翼无人机飞控
几个基于STM32的开源无人机飞控
CREELINKS开源无人机--资料大全免费!
基于无人机的图像和GPS数据采集系统的研究与实现
float Butterworth_Low_Pass(float Data_IN) //2阶巴特沃斯低通滤波器截止频率30HZ FS=1000
{! W+ ~; I8 K' C. W
float Gain=0.0078202080334971915 ;
float b[]={1,2,1};7 r. y" {+ M) x5 R0 L& r9 l
float a[]={1, -1.7347257688092752 , 0.76600660094326389 };
' {4 H$ ?/ P. R+ w
static float Last_Data_IN=0;
static float Last_Last_Data_IN=0;
float Data_OUT; B2 K4 Y/ f y7 B6 c7 c
static float Last_Data_OUT=0;+ y: j" q' q- B! S/ T: |
static float Last_Last_Data_OUT=0;
Data_OUT=(Gain*(b[0]*Data_IN + b[1]*Last_Data_IN + b[2]*Last_Last_Data_IN) - a[1]*Last_Data_OUT - a[2]*Last_Last_Data_OUT)/a[0];( r, E% ~8 s8 K8 [% X$ [1 X! T, A
Last_Last_Data_IN=Last_Data_IN;( S# Y+ O* M. w% B3 y/ ?) [2 @
Last_Data_IN=Data_IN;$ }& K" z/ J8 }
Last_Last_Data_OUT=Last_Data_OUT;' m0 Q9 ~- N+ X4 }
Last_Data_OUT=Data_OUT;
return Data_OUT;& z& m8 }/ o6 \ c C& A) i
}
上面代码Gain即为matlab生成的Gain参数,b和a分别对应matlab中的Num参数与Dem参数,函数输入为带滤波的数据,返回为滤波后的数据,需要注意的是,我是按采样频率为1000HZ设计的,就必须要求该函数的执行周期为1ms,不然滤波效果就与期望的不符了。5 V! J) t% x# i% t
杂七杂八的东西太多了,所以比较费时间,我的电调比较简单,就是方波六步,没上FOC,以及高频注入
void STEP1( int PWM)2 w* C/ M. O" j
{
* B' Z# e: R" F+ t; K: F+ u
TIM1->CCR1=PWM;/ \$ y6 L7 \$ W- ?( |
TIM1->CCR2=PWM;) _; _& F" U2 K2 ]# a+ n& v4 E
TIM1->CCR3=PWM; //给占空比
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出7 @) B+ Y" _6 ^- _/ X% \2 N4 A) S
GPIOA->BRR=0X00000400;//PA10置0
//关T6
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFF7)|0X00000004; //PB1输出
GPIOB->BRR =0X00000002;//PB1置0
//常开T44 Z; Y4 t* l/ ^; V) W
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出
GPIOB->BSRR =0X00000001;//PB0置1+ ?+ Q2 `; B. h4 V7 _" A# f# D
//关T3
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出
GPIOA->BRR=0X00000200;//PA9置0
//开T1PWM; [( g( i0 t( S+ S+ U& R
GPIOA->MODER=(GPIOA->MODER&0XFFFEFFFF)|0X00020000; //PA8 PWM
//关T2
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出& E' G8 I# _1 G) x
GPIOA->BRR =0X00000080;//PA7置0
}8 W0 V y/ _9 _+ h, ^
5 w8 B2 w; h$ Q( T: _8 s
void STEP2( int PWM)+ |% q' w& y) h( E3 m7 W' n7 J
{% O9 K# N' I- @, } h8 V
TIM1->CCR1=PWM;
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比/ w8 s9 E$ ]$ L8 g% q6 r
//关T4' v& m' U# W: g- o0 x
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出
GPIOB->BRR =0X00000001;//PB0置0
//关T3( G7 \; x9 [ L/ s8 S: \' Z
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出! E. U, G: u9 B; b5 K3 u0 e4 p
GPIOA->BRR=0X00000200;//PA9置0
//T1常开
GPIOA->MODER=(GPIOA->MODER&0XFFFDFFFF)|0X00010000; //PA8输出8 f/ p/ \7 k4 b. Q3 \) O, S
GPIOA->BSRR=0X00000100;//PA8置1 0 e* [. Z, N$ T) L- W( U) Q
//关T2
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出# b0 \# y4 }$ r& _! G" ?
GPIOA->BRR =0X00000080;//PA7置0 + a# M0 ?! n) b5 w. c) W9 d L
//开T6PWM
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFB)|0X00000008; //PB1 PWM; q+ G: d4 T3 m
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出3 }2 r) _2 \6 P9 ?9 g9 R' H
GPIOA->BRR=0X00000400;//PA10置0
}
+ G$ W4 L7 Q. q7 f; V% ?