你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
nyszx 发表于 2020-5-2 21:23- ^/ R$ O5 I, k% X8 g/ R& [ 楼主很厉害啊,无刷驱动,飞控系统,无线通讯,软硬件,各种算法,matlab...膜拜!最近买了点书,也想学学 ...
无人机组开发平台视频讲解
无人机组开发平台介绍
基于 STM32F4 构建的Stinger X210赛车无人机
【外网项目分享】无人机Firefly Pro制作指导
用于避障和区域测绘的无人机
DIY高大上四旋翼无人机飞控
几个基于STM32的开源无人机飞控
CREELINKS开源无人机--资料大全免费!
基于无人机的图像和GPS数据采集系统的研究与实现
float Butterworth_Low_Pass(float Data_IN) //2阶巴特沃斯低通滤波器截止频率30HZ FS=1000
{
float Gain=0.0078202080334971915 ;
float b[]={1,2,1};
float a[]={1, -1.7347257688092752 , 0.76600660094326389 };7 E; R; _7 q4 X; l/ {( n7 A
1 c, x% V5 s# [5 }8 j
static float Last_Data_IN=0;
static float Last_Last_Data_IN=0;
float Data_OUT;2 r A' |/ d: E3 A3 `# Z# F
static float Last_Data_OUT=0;
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;" x( l; v# E) W3 K3 P' {
Last_Data_IN=Data_IN;% I2 g, x3 v! z/ q5 z, g
Last_Last_Data_OUT=Last_Data_OUT;2 u/ I1 I/ z! h' P% q
Last_Data_OUT=Data_OUT;6 \" u5 g$ B% q: A! @6 o0 v- U
return Data_OUT;. s" W: h1 B0 c! g5 V
}& L/ ]/ g% y0 A$ {6 m: ~
上面代码Gain即为matlab生成的Gain参数,b和a分别对应matlab中的Num参数与Dem参数,函数输入为带滤波的数据,返回为滤波后的数据,需要注意的是,我是按采样频率为1000HZ设计的,就必须要求该函数的执行周期为1ms,不然滤波效果就与期望的不符了。2 L; t2 ~- `: |5 ^1 t
杂七杂八的东西太多了,所以比较费时间,我的电调比较简单,就是方波六步,没上FOC,以及高频注入
void STEP1( int PWM)
{8 |, a* h( M; `, l+ t/ u6 B
TIM1->CCR1=PWM; p+ R6 o. k# H: V5 P8 P0 z/ t
TIM1->CCR2=PWM;! y" r8 Z# L% Q
TIM1->CCR3=PWM; //给占空比# u3 R, r$ O, H0 G! O: P: K6 z
//关T5 - n$ [4 A& S, I# z! J) _. k6 j
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出
GPIOA->BRR=0X00000400;//PA10置0 3 Y. P1 b* N/ g$ v+ H% n8 |3 {
//关T6
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFF7)|0X00000004; //PB1输出3 `+ a* {- b: X
GPIOB->BRR =0X00000002;//PB1置0
//常开T43 b/ q9 u1 A( g
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 - d6 l2 Z* m/ b. g
GPIOB->BSRR =0X00000001;//PB0置1* j. R& B( T) k$ E y, d8 i* c
//关T3* W8 ~; V9 e% _! r4 K
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出% h* O/ t# i" @* U
GPIOA->BRR=0X00000200;//PA9置0) V5 Z( S6 _6 t" c! j* s8 X
//开T1PWM7 d$ c4 e/ E; t6 f& ^, M2 b3 @
GPIOA->MODER=(GPIOA->MODER&0XFFFEFFFF)|0X00020000; //PA8 PWM
//关T2# j; R+ f; A6 L$ q/ N
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0 8 g! i; ~, }* g: W4 c8 V# c
}
void STEP2( int PWM)
{
TIM1->CCR1=PWM;1 X3 _9 t$ P; H5 K& x( @; d
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比$ e+ W$ p" l0 B! e& q$ c
//关T44 @# N; p& z& r0 X2 F$ t: x
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 + K9 ]! P# X3 @
GPIOB->BRR =0X00000001;//PB0置0
//关T3
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出
GPIOA->BRR=0X00000200;//PA9置0
//T1常开
GPIOA->MODER=(GPIOA->MODER&0XFFFDFFFF)|0X00010000; //PA8输出
GPIOA->BSRR=0X00000100;//PA8置1
//关T29 t7 C' i m1 G
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0 ) p7 j- G x5 c
//开T6PWM
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFB)|0X00000008; //PB1 PWM
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出
GPIOA->BRR=0X00000400;//PA10置0
}. _+ f1 u; A* ^" ~