你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
nyszx 发表于 2020-5-2 21:23& F* o, j, P& O6 f( c" } 楼主很厉害啊,无刷驱动,飞控系统,无线通讯,软硬件,各种算法,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 ;* Y7 |+ t, M5 ]3 o" g( F0 c. t; ~
3 K& ^) M# s# `$ }
float b[]={1,2,1};
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;7 H2 V9 C% U9 k& d0 `2 x
static float Last_Last_Data_OUT=0; 0 A, ?+ [' `7 I% m" r( x6 P! y" P
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;8 B5 G8 S. p- o+ [6 k' W% D
Last_Last_Data_OUT=Last_Data_OUT;
Last_Data_OUT=Data_OUT;4 A1 p/ z9 V9 F0 A1 B
return Data_OUT;
}/ X3 c( h: B6 K F4 F
上面代码Gain即为matlab生成的Gain参数,b和a分别对应matlab中的Num参数与Dem参数,函数输入为带滤波的数据,返回为滤波后的数据,需要注意的是,我是按采样频率为1000HZ设计的,就必须要求该函数的执行周期为1ms,不然滤波效果就与期望的不符了。4 |6 s* x( q. \* Q! A8 y
杂七杂八的东西太多了,所以比较费时间,我的电调比较简单,就是方波六步,没上FOC,以及高频注入
void STEP1( int PWM)
{
1 d: Y. O+ s, Z! O$ \) u4 U
TIM1->CCR1=PWM;7 x8 U! G- [7 a0 G7 B) y
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比7 {+ i3 S B" ?# m& p7 |; C2 A
//关T5
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出$ l0 U: M8 f. u- _
GPIOA->BRR=0X00000400;//PA10置0
//关T6, M, T/ V7 e, t. U
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFF7)|0X00000004; //PB1输出1 V5 _! N6 Y4 c) l6 ? Y
GPIOB->BRR =0X00000002;//PB1置0
//常开T4
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出 : F6 _9 W1 B9 ~
GPIOB->BSRR =0X00000001;//PB0置1
//关T3
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出
GPIOA->BRR=0X00000200;//PA9置0
//开T1PWM
GPIOA->MODER=(GPIOA->MODER&0XFFFEFFFF)|0X00020000; //PA8 PWM
//关T2
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0
}3 w3 G+ @# G5 V) n
z! S! C5 @3 J. `$ |
void STEP2( int PWM)9 E; e H! `+ b+ P
{
TIM1->CCR1=PWM;, R8 K* G- x! \. {! |
TIM1->CCR2=PWM;
TIM1->CCR3=PWM; //给占空比
//关T4
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFD)|0X00000001; //PB0输出
GPIOB->BRR =0X00000001;//PB0置0
//关T3
GPIOA->MODER=(GPIOA->MODER&0XFFF7FFFF)|0X00040000; //PA9输出
GPIOA->BRR=0X00000200;//PA9置0 d5 I- {" M; F m, e
//T1常开( R, @4 N1 M5 q {: U% ?
GPIOA->MODER=(GPIOA->MODER&0XFFFDFFFF)|0X00010000; //PA8输出: U& l' D5 { L4 a0 E
GPIOA->BSRR=0X00000100;//PA8置1 - W3 R+ @7 i/ G5 [
//关T21 Y Y/ t" M' m3 O$ ]8 s: i
GPIOA->MODER=(GPIOA->MODER&0XFFFF7FFF)|0X00004000; //PA7输出
GPIOA->BRR =0X00000080;//PA7置0 6 l1 F( k! d0 ^/ x: W
//开T6PWM8 x. [. e |0 _- v7 a# [
GPIOB->MODER=(GPIOB->MODER&0XFFFFFFFB)|0X00000008; //PB1 PWM" @2 ]4 j/ t( N. E! S8 y5 a
//关T5 ; O( v$ o5 {% w# Z2 a: t
GPIOA->MODER=(GPIOA->MODER&0XffDFFFFF)|0X00100000; //PA10输出
GPIOA->BRR=0X00000400;//PA10置0 ) u" N' j' p! T" C
}