你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
nyszx 发表于 2020-5-2 21:23 . J7 W% u2 s" Z楼主很厉害啊,无刷驱动,飞控系统,无线通讯,软硬件,各种算法,matlab...膜拜!最近买了点书,也想学学 ...
无人机组开发平台视频讲解
无人机组开发平台介绍
基于 STM32F4 构建的Stinger X210赛车无人机
【外网项目分享】无人机Firefly Pro制作指导
用于避障和区域测绘的无人机
DIY高大上四旋翼无人机飞控
几个基于STM32的开源无人机飞控
CREELINKS开源无人机--资料大全免费!
基于无人机的图像和GPS数据采集系统的研究与实现
float Butterworth_Low_Pass(float Data_IN) //2阶巴特沃斯低通滤波器截止频率30HZ FS=1000
{" G4 Z( |2 ~5 N# W9 ?% p
float Gain=0.0078202080334971915 ;
9 A: h+ T% D* _) o- I3 K% I
float b[]={1,2,1};
float a[]={1, -1.7347257688092752 , 0.76600660094326389 };' n9 Z1 w1 x% v- A9 ?
static float Last_Data_IN=0;
static float Last_Last_Data_IN=0;
float Data_OUT;
static float Last_Data_OUT=0;
static float Last_Last_Data_OUT=0; 5 \* W) `3 Y" |! j" F
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;7 T6 a1 B9 c* X9 q8 b
Last_Data_IN=Data_IN;1 n: }* P0 z5 p$ a6 ~$ w
Last_Last_Data_OUT=Last_Data_OUT;2 l! K% ^' Y4 s5 \. A
Last_Data_OUT=Data_OUT;* m+ ]- D/ l5 R v0 H ?8 i, h
return Data_OUT;/ s3 @2 [, @0 A! ^& h3 T% |, q
}
上面代码Gain即为matlab生成的Gain参数,b和a分别对应matlab中的Num参数与Dem参数,函数输入为带滤波的数据,返回为滤波后的数据,需要注意的是,我是按采样频率为1000HZ设计的,就必须要求该函数的执行周期为1ms,不然滤波效果就与期望的不符了。
杂七杂八的东西太多了,所以比较费时间,我的电调比较简单,就是方波六步,没上FOC,以及高频注入
void STEP1( int PWM)
{# L: p8 [& w7 T9 ?
! F6 m- ^6 R& h+ N5 d
TIM1->CCR1=PWM;( e. Z& L) e" X9 C. W
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比7 E/ p8 i& J& B. X0 U
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出
GPIOA->BRR=0X00000400;//PA10置0
//关T6
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFF7)|0X00000004; //PB1输出0 {+ b/ L8 G% q
GPIOB->BRR =0X00000002;//PB1置0
//常开T4
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 8 O1 v+ V7 k% r3 n
GPIOB->BSRR =0X00000001;//PB0置1
//关T3, J! F9 P. L" a/ ?
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出5 ?' ~9 [6 ?3 U+ y; a2 l& Q0 l% \
GPIOA->BRR=0X00000200;//PA9置03 m7 d7 V) T: K: i( Y0 l+ T% L. r; W
//开T1PWM( Q9 Y8 t+ X7 F: e
GPIOA->MODER=(GPIOA->MODER&0XFFFEFFFF)|0X00020000; //PA8 PWM
//关T2
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0 * |$ L- ^" E5 ~5 g [+ O
}+ d) B1 O/ h b7 U* o7 _. }
void STEP2( int PWM)
{
TIM1->CCR1=PWM;
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比( B( T4 ?9 u$ r- Y0 E- }
//关T4$ j* a' Y1 r. _" Y4 q
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 - _7 C* |5 p }% d+ f& }# r+ o
GPIOB->BRR =0X00000001;//PB0置0; ?8 M2 ]/ I8 v7 i! x
//关T3/ Y9 h- G) H; i+ g& w. j
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出) z! H4 [) @# t3 ?- z
GPIOA->BRR=0X00000200;//PA9置0
//T1常开
GPIOA->MODER=(GPIOA->MODER&0XFFFDFFFF)|0X00010000; //PA8输出9 l6 Y& P" Y3 P
GPIOA->BSRR=0X00000100;//PA8置1
//关T2" `6 ~% G5 W, y: u
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出, Z% M+ c* q7 ~- D- S
GPIOA->BRR =0X00000080;//PA7置0
//开T6PWM- b6 h. [/ H+ v
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFB)|0X00000008; //PB1 PWM* U* m& a- w! H
//关T5 7 F% E9 ~/ d4 W! n9 e& k2 A
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出
GPIOA->BRR=0X00000400;//PA10置0 6 @/ i$ U; f4 \% \4 U5 E
}$ _/ k% g3 v# F' r
: M: i/ h" o- l. M% l