你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
nyszx 发表于 2020-5-2 21:23" T' A0 s% @/ O( V, q, Y 楼主很厉害啊,无刷驱动,飞控系统,无线通讯,软硬件,各种算法,matlab...膜拜!最近买了点书,也想学学 ...
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。关注该话题即可发布文章!
无人机组开发平台视频讲解
无人机组开发平台介绍
【外网项目分享】无人机Firefly Pro制作指导
用于避障和区域测绘的无人机
DIY高大上四旋翼无人机飞控
几个基于STM32的开源无人机飞控
基于无人机的图像和GPS数据采集系统的研究与实现
float Butterworth_Low_Pass(float Data_IN) //2阶巴特沃斯低通滤波器截止频率30HZ FS=1000
{
float Gain=0.0078202080334971915 ;7 b2 M* Z( s/ w7 Z) e
float b[]={1,2,1};; o1 b% M- x/ U, a) s. E
float a[]={1, -1.7347257688092752 , 0.76600660094326389 };
static float Last_Data_IN=0;
static float Last_Last_Data_IN=0;
float Data_OUT;
static float Last_Data_OUT=0;1 [4 i, P! y4 u5 `
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];
Last_Last_Data_IN=Last_Data_IN;
Last_Data_IN=Data_IN;* j$ N$ C& H n
Last_Last_Data_OUT=Last_Data_OUT;8 ]( b) G+ N" \1 G
Last_Data_OUT=Data_OUT;
return Data_OUT;
}+ F$ S/ C- e& a% t% b
上面代码Gain即为matlab生成的Gain参数,b和a分别对应matlab中的Num参数与Dem参数,函数输入为带滤波的数据,返回为滤波后的数据,需要注意的是,我是按采样频率为1000HZ设计的,就必须要求该函数的执行周期为1ms,不然滤波效果就与期望的不符了。" {# O# e9 E- Q1 {7 R; Z: t
杂七杂八的东西太多了,所以比较费时间,我的电调比较简单,就是方波六步,没上FOC,以及高频注入
void STEP1( int PWM)5 H0 j& d( g& Y l) D
{# z. o' D' X4 _) ^4 M
, K5 R0 s, Z" R! X/ h$ `- V6 n( U% q
TIM1->CCR1=PWM;
TIM1->CCR2=PWM;8 H0 C* |' Q3 D" S, [$ v1 V
TIM1->CCR3=PWM; //给占空比, T3 A. F* B2 g8 s# r9 C4 u
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出8 ~( o, N% _4 ~: k
GPIOA->BRR=0X00000400;//PA10置0 & u! Y* \2 P" v' u
//关T61 f+ P3 b' e, R3 m
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFF7)|0X00000004; //PB1输出+ w3 d! Z' W6 T, p
GPIOB->BRR =0X00000002;//PB1置05 l; p* Y: g; {+ N
//常开T43 V$ b* X% ]5 S8 F4 F: [
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出
GPIOB->BSRR =0X00000001;//PB0置10 ^+ ^4 r4 \, e. u3 I, }
//关T3# c" J1 E" L6 {+ z- R
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出
GPIOA->BRR=0X00000200;//PA9置01 v% Q6 v: w2 g" h* y, R9 n
//开T1PWM
GPIOA->MODER=(GPIOA->MODER&0XFFFEFFFF)|0X00020000; //PA8 PWM1 I1 P9 n$ f% V6 e: @3 @) Z8 m3 e
//关T2 g2 S: z; V) j( M5 S& ]( n2 a
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0
}& x- A* G$ I7 m- V: P% l8 U4 I
9 p- L" |; H" u& @7 z" K5 \1 r
void STEP2( int PWM)8 f5 D5 k* P( G1 i5 j' M: v `
{; a9 [2 g, E$ z1 r& B( A* c% g
TIM1->CCR1=PWM;
TIM1->CCR2=PWM;( y. N, ?8 n2 \# n. G3 C
TIM1->CCR3=PWM; //给占空比2 E6 p6 q, `" O0 Q( u8 J/ M p3 @
//关T4
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 9 Z1 B: ], Q3 T c& b2 y
GPIOB->BRR =0X00000001;//PB0置0# i4 t6 u, _4 J6 ?" e ]) H
//关T34 r3 t4 _# |6 K, ~
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出: B& K" A4 A! m8 b0 G. L& e
GPIOA->BRR=0X00000200;//PA9置0
//T1常开! G( @& f# m; E' }5 H# H5 M
GPIOA->MODER=(GPIOA->MODER&0XFFFDFFFF)|0X00010000; //PA8输出
GPIOA->BSRR=0X00000100;//PA8置1 3 s2 J- _5 K2 W7 }; r2 Z' i
//关T2 B+ ~1 Z8 M4 |7 b8 _
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0 6 W+ h8 p6 l1 Z2 A
//开T6PWM
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFB)|0X00000008; //PB1 PWM J y" b4 v# J: A! n3 e
//关T5 ) o) C' m" u$ s7 k* P: z
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出. ~7 y% G& Q( L* k/ r
GPIOA->BRR=0X00000400;//PA10置0
}
& \3 E3 m- Z" u$ Z* b1 @2 t