你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

去年做的一个飞控,STM32F103C8T6

[复制链接]
wsn-412377 发布时间:2015-3-4 12:19
飞行控制算法还不是很好,今年有时间继续完善一下,先上视频看看,大家有兴趣的一起学习
! G9 A4 c5 F& G: Y+ }+ R好像不能直接放视频哦,那只能跳转到优酷了
+ a! |# S3 [5 V. Q" _  u8 a6 a+ K; d& A* @
一个是制作调试的视频
, B& }4 j% y/ j- i+ G5 @' S4 jhttps://v.youku.com/v_show/id_XN ... 1-103.3.1-2.1-1-1-0- |0 F5 u$ {" @7 K
0 k* L/ N) u9 m, O- f
这个是飞机上FPV的视频
( M% H+ z" Y8 D6 k/ V1 Ihttps://v.youku.com/v_show/id_XNzI0NDkxNTI4.html0 E7 C' _/ j7 b" g+ B
赞 收藏 评论10 发布时间:2015-3-4 12:19

举报

10个回答
党国特派员 回答时间:2015-3-4 13:01:21
你这是什么意思?这样的贴子,直接删除了。
天使♀的☆宇★翼 回答时间:2015-3-4 15:56:28
学习学习,支持一下!
feel-376797 回答时间:2015-3-4 15:59:52
谢谢分享
拼命三郎 回答时间:2015-3-4 16:27:23
xxxx.png
沐紫 回答时间:2015-3-4 17:03:45
不错,楼主能详细介绍下吗?
北斗光寒 回答时间:2015-3-4 20:49:53
不是公开资料的吗
wsnfly~ 回答时间:2015-3-13 09:41:14
沐紫 发表于 2015-3-4 17:03
) b- Q6 ~% S) O不错,楼主能详细介绍下吗?

! H) O# L" S- f1 B/ o0 r& t. a当然可以,就是写的太乱了怕大家看不清楚
9 p* v0 h* o. K. w9 L. J. {
0 o& k# q. ]/ S/ W! m& d5 B
wsnfly~ 回答时间:2015-3-13 14:36:34
#include "aquanjubianliang.c"
2 P! l3 e) N: W) I5 k! K% l! N2 Z: W* j
#include "usart.h"
* [1 r. r9 B8 B0 N#include "delay.h"
4 I5 z" h. H# x, E#include "led.h" # V0 |5 b# u, w2 ^3 E, Z9 j* Z% L/ K
#include "key.h"
; \& e6 f0 V& ]1 E6 o#include "exti.h"
' L. [1 m4 z0 c& w6 y#include "wdg.h"
1 J& X3 n0 f$ F2 p#include "timer.h". h# S  \; A4 B" k
#include "lcd.h"    5 g+ M1 d0 \& u$ i2 o! S
#include "rtc.h"
: w) w5 e  u! A% T% [#include "wkup.h"8 j2 L+ ^( z  I
#include "adc.h"/ R4 X: ]7 o1 l8 N5 K- X
#include "dma.h"
5 ]$ G8 \$ J. Q#include "24cxx.h"! |$ P" e; ~* N8 n: j' F6 m" K' P
#include "flash.h"
. P: w7 h- |7 J* ~: x#include "24l01.h", d6 V3 B7 ?, N# ]( y  c* N* [9 L
#include "mmc_sd.h"4 ~. x/ F9 d8 l1 f$ \
#include "remote.h"
; G4 W; E, P7 P#include "ds18b20.h"
& Q3 B! [5 B" g% w#include "mouse.h"
4 s: t. N# i* k. h5 X& b#include "text.h"" Q- |: H9 ^% h5 I
#include "fat.h"6 U( e. U" U4 Q; p' _" |+ ?" d, V
#include "fontupd.h"
0 D& g4 H7 t! z/ P5 b4 T9 U#include "IIC.h"$ i0 j: ~* c+ n# D
#include "inv_mpu.h"
: b; Q7 U) E" l0 C#include "inv_mpu_dmp_motion_driver.h"
! `+ ^$ J9 _5 \- L#include "math.h"4 _. Q) T+ r7 {+ G- D0 {7 D, i
# A; K2 c0 K8 C( D- e9 o  L
zhinengchuankou();
, m* `8 l- @8 ]1 {7 ?+ P0 {  M) \% o. }, \& \( V" Y
#define duoji1 PAout(5)// PA8
4 ?/ x  H- |: P/ |#define duoji2 PAout(1)
$ Q7 ~/ e+ f, d$ x# z#define duoji3 PAout(0)9 }( i1 f. f2 P( A# n: L) m' N4 s- @
#define duoji4 PAout(2)
* j6 J+ m' c" N/ p) @! z6 x3 t, U! Z) u
s16 duojipianyi[4];8 G) a& k( Y0 C- x
3 j; F" S2 Q$ ~) r6 M* N
//u16 jiaosuduchangshu=50,jieshoulingmin=4,shijijiaosuduchangshu=50,zuidaxiuzhengsudu=60,zuixiaotiaozhengshudu=10,weitiaoweizhi=10,jiaosuduqudiancishu=5,zuidatiaozhengsudu=40;//可用! `+ J; f! k' i0 b
. {% o# \$ s4 x; c+ ^+ w: X  H( b
//jiaosuduchangshu计算出各轴需要的理论角速度用;jieshoulingmin由于接收机定时器有误差,消除误差用,会消除精度; shijijiaosuduchangshu用于取得角速度之后除数;zuidaxiuzhengsudu自稳系统的最大旋转速度8 [# ?; r, a8 n) a0 r- m# }# ^
//zuixiaotiaozhengshudu当调整速度小于此数值时,增加调整速度,weitiaoweizhi当调整速度小于此数值时 进行微调就可以,jiaosuduqudiancishu角速度的次数累加,越多越准确,但反应越慢,zuidatiaozhengsudu表示最大稳定时的速度
& b0 ~6 @( G; _& X4 Yu16 jiaosuduchangshu=100,jieshoulingmin=4,shijijiaosuduchangshu2=50,zuidaxiuzhengsudu=250,zuixiaotiaozhengshudu=6,weitiaoweizhi=2,jiaosuduqudiancishu=2,zuidatiaozhengsudu=60;
6 F" B# b/ V& S; f2 C
2 W" i7 J4 f9 @
; t9 n, W) l' ]) c; V; G' R//kongzhilingmin接收机的灵敏度用+ L. J" ?% B  ?3 D- `* O% x
u32 kongzhilingmin=30000;; G7 {% X6 t4 J
8 e9 T% l* j, @* W5 _4 h
u16 jieshouji[6],wei=0,jiesuo=0,jiaosuducishu=0,shijijiaosuduchangshu=20;
8 c1 ^5 g. _9 W( y% p4 is32 h,duojikongzhi[8],i,zhongduancishu,xlilunjiaosudu,ylilunjiaosudu,zlilunjiaosudu,xpianyijiaosudu,ypianyijiaosudu,zpianyijiaosudu,xjiaosudu,yjiaosudu,zjiaosudu,lingshijiaosudu,xjsd[100],yjsd[100],zjsd[100];
1 n9 m8 _- d% ~- l. Jdouble shurufuyi,shurushengjiang,shurufangxiang,shuruyoumen,t,pi=3.14159,youmen[10];5 ~6 x8 [' l, j; Q8 N; d
double nifuyi=0,nishengjiang=0,nifangxiang=0,niyoumen=0;5 E. w1 _6 q2 I1 [# N( \7 V6 a
double lilunfuyi,lilunshengjiang,lilunfangxiang,lilunyoumen,chafuyi,chashengjiang,chafangxiang,chayoumen,shijiyoumen;3 Q: d0 w# x% I4 i/ {2 n* k' \
u8 shuruyinjiao=10,suo=0,SendBuff[256]={97};
5 y  o) f& S3 v' L  d2 Z1 l: O6 ^$ U# K# ^# b
: ^. m; O" v8 b% r
int main(void)
) V0 s4 K# E; B" j0 z{
& a, B7 S0 L& g/ \9 {$ Q: V$ l//    u16 i;
3 J6 C& l. _, U1 o{
, ]' {3 O7 z/ P; T6 z: |6 eduojipianyi[0]=0;$ k' P8 V- [, R8 [
duojipianyi[1]=0;
0 y1 r8 u# J- H! ?7 hduojipianyi[2]=0;5 _* w8 ]6 @& A7 f" S$ a
duojipianyi[3]=0;
" ?* o& v4 g# \6 Y  duojikongzhi[0]=1100;6 j/ q9 V& ~" J) P4 m- R: C
duojikongzhi[1]=1100;) L3 I4 j9 w( {2 z
duojikongzhi[2]=1100;
1 P2 V: a+ q' c- g0 L( R( vduojikongzhi[3]=1100;
6 k6 {, Q) y1 U$ B7 T. {% }duojikongzhi[4]=2000;! u, M0 N5 E6 s: H/ Q
}9 r# w- t& T0 t# z& A8 {
   Stm32_Clock_Init(9); //系统时钟设置
# w7 ]- b# U: T! J5 q6 |delay_init(72); //延时初始化" F1 N! R3 n/ S4 [+ Y! J- ]; U9 d/ T
uart_init(72,1600);  //串口1初始化  / v" l" X( C; k
//USART1->DR=SendBuff[1];1 h* U& d+ d2 O5 k" A
gpioshezhi(); //引脚设置
# V! k4 j- E; p7 s% ?) @" B* f. Nled4=0;% J! G( x! i. j
// LED_Init();          //LED初始化
3 K3 |, u: @, s! k  v6 D: ii2cInit(); //I2C接口设置
9 P9 J" ?6 N/ u//Timer4_Init(7199,1000);6 q4 P. u2 ]" \) m9 q. B9 G
Timer3_Init(10000,72); //定时器3,中断开启,时间不定,输出PWM信号控制螺旋桨转速   抢断优先级" y# d/ g6 {" B
Timer2_Init(7199,70); //定时器2,有中断,70毫秒读取陀螺仪数据0 n8 O) g% G" p: C: L
Timer1_Init(60000,72);TIM1->CR1|=0x01;//定时器一,没有中断,用于计时接收机信号
; O( n" g0 Z8 e  R1 g6 o7 h. Q% Z5 NEXTI15_10_Init(); //10-15中断 接收机信号中断 抢断优先级% P: _- i) X/ B2 {5 U+ D
delay_ms(100); //延时300MS. S; u, q3 n! I9 U) a% X: U$ X
chuankoufasong(36,1); //串口发送,检测芯片是否运行
. ~; _9 E& d" K, n5 C4 lresult = mpu_init(); //dmp读出
% E5 [3 b4 l! {% B% jdelay_ms(100); //延时300MS! \( ?- ?( N( [0 Q# ~) S
{//去角速度偏移量,MPU6050制造误差
) Y! ^( g# r+ g$ vxpianyijiaosudu=dumpu6050jicunqi(0);
: ?3 t) C3 A& ?( T  L; _$ nypianyijiaosudu=dumpu6050jicunqi(1);& `; h4 D/ b) X; q
zpianyijiaosudu=dumpu6050jicunqi(2);8 R- r% Z3 l( v9 K+ i7 m- [5 @$ s
}! D3 c- A$ d& L8 h* Y- @9 y$ I

0 h9 g0 r6 e4 Sif(!result)7 m. E9 j3 ^2 M
  {      S# M( @+ B  Z  p% n1 C
chuankoufasong(36,2);
8 u- ]+ y, w4 o+ @2 r( Qmpufifo_init(); //dmp——fifo设置* P) O& C, K! [0 L! M/ w! M2 u8 _2 T
  }# D: [! }/ R0 v4 X
1 o0 ^# G  v* ?3 q( D) L" V$ B
MYDMA_Enable(DMA1_Channel4);; `" ~8 b! `1 y# r3 i1 G+ Q# A
chuankoufasong(37,4);
$ B# n" V3 @0 `/ I0 h1 ^6 w" IUSART1->DR=SendBuff[chuankoufasongwei];
3 S1 h0 o1 O2 n6 L9 _) D6 j   while(1) % j/ l- b( I3 j
{
: A7 g, t! `( G7 x0 i& r8 O{ //计算出理论飞行角度
, Z! _) ?" Q  n/////************************************************************************//* M7 T- C* U" `. d
lilunyoumen=shuruyoumen;9 t( k6 `1 S; [0 v# Y: L- Z
lilunfuyi=0.4*(shurufuyi/300);; B7 I* b; o6 e4 H* g8 N
lilunshengjiang=0.4*(shurushengjiang/300);
5 K4 t1 P4 h3 o  q( |1 H0 ~  slilunfangxiang=lilunfangxiang+nifangxiang*2 ;9 _- ?$ \; g& t; @, E
nifuyi=0;
5 \$ @( C6 ~( `/ g# Y# X6 b% Fnishengjiang=0;& v0 v. v* ^$ H5 C+ G2 u
nifangxiang=0;6 z5 R4 v& D" C& }
if(lilunshengjiang>3.14159/2){lilunfuyi=lilunfuyi+3.14159;lilunfangxiang=lilunfangxiang-3.14159;lilunshengjiang=3.1415/2;}: p( [6 ~. R" V0 D
if(lilunshengjiang<-3.14159/2){lilunfuyi=lilunfuyi+3.14159;lilunfangxiang=lilunfangxiang-3.14159;lilunshengjiang=-3.1415/2;}
" h) n$ M5 V. U  X& v2 N% L! Zif(lilunfangxiang>2*3.14159)lilunfangxiang=lilunfangxiang-2*3.14159;
& h5 G3 G+ n- L# g+ n8 tif(lilunfangxiang<0)lilunfangxiang=lilunfangxiang+3.14159*2;
, N2 s" c1 m: y& E6 Fif(lilunfuyi>3.14159)lilunfuyi=lilunfuyi-3.14159*2;" p( S& v4 j( @  s( w
if(lilunfuyi<-3.14159)lilunfuyi=lilunfuyi+3.14159*2;" T: G9 S% q8 [8 `$ U4 ~6 Q
}; Q( P1 C6 H. S
{ //计算出实际坐标和理论坐标差
; |/ H" t- P3 gchafuyi=Roll-lilunfuyi;
8 f' \* T0 F9 vif(chafuyi>pi)chafuyi-=2*pi;
) `8 Z9 I! l3 C8 E% v. N" xif(chafuyi<-pi)chafuyi+=2*pi;. ?( E1 B+ ?5 i
//if(chafuyi>(pi/8))chafuyi=pi/8;9 E: `' C' a% K% I/ M! A
//if(chafuyi<(-pi)/8)chafuyi=-pi/8;
6 e- ]3 }) Y& Y+ S8 gchashengjiang=-(Pitch-lilunshengjiang);# |- ^9 q- }: j7 Q# D
if(chashengjiang>(pi))chashengjiang-=2*pi;
6 d: h, A# f* |. _8 `$ I, vif(chashengjiang<-(pi))chashengjiang+=2*pi;' J% |0 I0 i. Q; H& |8 [: P; S: f% R
//if(chashengjiang>(pi/8))chashengjiang=pi/8;, _0 n( V$ z4 x$ g
//if(chashengjiang<(-pi)/8)chashengjiang=-pi/8;
5 q& i- f. j$ }! u. Rchafangxiang=-(Yaw-lilunfangxiang);
' o" c2 @" c7 j) `1 P  Tif(chafangxiang>pi)chafangxiang-=2*pi;- t9 N$ \. [- W
if(chafangxiang<-pi)chafangxiang+=2*pi;
: C- E4 `% g. N4 }- H) q  {( R4 }, G//if(chafangxiang>(pi/8))chafangxiang=pi/8;
0 N, V3 g+ H! [& `7 i//if(chafangxiang<(-pi)/8)chafangxiang=-pi/8;) Y6 k1 Z$ K) U; o' F9 v
}
) j( G& w/ o- M8 w9 I5 t{ //计算出飞行器各个轴需要的理论角速度
" q" h& S: g7 Z! f% axlilunjiaosudu=(chafuyi )*jiaosuduchangshu;
  V; z8 W7 u9 z; H6 B& i" Zylilunjiaosudu=(chashengjiang*cos(Roll)+chafangxiang*sin(Roll))*jiaosuduchangshu;
5 {( D: ^; z# F1 A* `) |# @zlilunjiaosudu=(chafangxiang*cos(Roll)-chashengjiang*sin(Roll))*jiaosuduchangshu;; v5 N( Z' f" c. }, C
if(xlilunjiaosudu>zuidatiaozhengsudu)xlilunjiaosudu=zuidatiaozhengsudu;. O0 L# G* N, i1 t8 c# b" X1 M- C
if(xlilunjiaosudu<-zuidatiaozhengsudu)xlilunjiaosudu=-zuidatiaozhengsudu;3 X; F* }& R! g. u/ L
if(ylilunjiaosudu>zuidatiaozhengsudu)ylilunjiaosudu=zuidatiaozhengsudu;+ R3 V2 B0 I, X% A. C3 ?
if(ylilunjiaosudu<-zuidatiaozhengsudu)ylilunjiaosudu=-zuidatiaozhengsudu;, v% @$ ?0 N  P1 \2 J% j
if(zlilunjiaosudu>zuidatiaozhengsudu)zlilunjiaosudu=zuidatiaozhengsudu;9 e* `4 I# P6 Q# ~, @
if(zlilunjiaosudu<-zuidatiaozhengsudu)zlilunjiaosudu=-zuidatiaozhengsudu;
. x1 Y5 j: K# p4 ]+ [- d* \3 Aif(xlilunjiaosudu<zuixiaotiaozhengshudu&&xlilunjiaosudu>weitiaoweizhi)xlilunjiaosudu=zuixiaotiaozhengshudu;3 x! u4 b# {, ]3 ?3 `+ B& {
if(ylilunjiaosudu<zuixiaotiaozhengshudu&&ylilunjiaosudu>weitiaoweizhi)ylilunjiaosudu=zuixiaotiaozhengshudu;
  i% n# B- Z' F5 O8 o/ \if(zlilunjiaosudu<zuixiaotiaozhengshudu&&zlilunjiaosudu>weitiaoweizhi)zlilunjiaosudu=zuixiaotiaozhengshudu;: J0 J9 h% m' Y2 Z/ f) H5 D
if(xlilunjiaosudu>-zuixiaotiaozhengshudu&&xlilunjiaosudu<-weitiaoweizhi)xlilunjiaosudu=-zuixiaotiaozhengshudu;
  A2 m, q' {3 ?$ Q/ m$ dif(ylilunjiaosudu>-zuixiaotiaozhengshudu&&ylilunjiaosudu<-weitiaoweizhi)ylilunjiaosudu=-zuixiaotiaozhengshudu;
  s, \; _( }3 W4 b7 kif(zlilunjiaosudu>-zuixiaotiaozhengshudu&&zlilunjiaosudu<-weitiaoweizhi)zlilunjiaosudu=-zuixiaotiaozhengshudu;
: F; z. ?3 B0 E1 L- c& o0 u/ N, h}
& x0 a7 \, M, O, x/ F& h{   //计算角速度平均数$ k) `/ B- C; u5 I( e

  ~! e' W$ p* V: C* Q6 k3 _" jxjiaosudu=0;
7 a1 m' a9 {6 \$ H# G8 pyjiaosudu=0;0 q* n9 f/ I# w6 u; Z2 Z+ H( _1 B
zjiaosudu=0;3 G% p0 f. \( H5 ?1 V# h
for(i=0;i<jiaosuduqudiancishu;i++)& n* n  s7 k- s1 C* A$ O
{
9 V1 e, q1 u+ y/ v8 ixjiaosudu+=xjsd[i];
% H2 H8 O3 C1 Z5 m/ H+ Xyjiaosudu+=yjsd[i];
) A1 ?0 c0 o% a/ g* h9 }, v" Vzjiaosudu+=zjsd[i];# E& g' U1 i( R- }* X
}; k+ S/ f- b6 \& {) Z7 o
xjiaosudu/=jiaosuduqudiancishu;
5 G- a1 }' i+ ~/ |/ b9 @yjiaosudu/=-jiaosuduqudiancishu;7 J3 G: O+ ]' t% K' U5 A; [& z
zjiaosudu=zjiaosudu/jiaosuduqudiancishu;
. |2 @8 v9 ~2 U: L}/ t5 P/ R; `9 e9 ^5 z' {

& `# a3 e. w% i! @6 Z( p( |
, R" ~6 c- F0 s. Vif(shuruyoumen>1200) //如果油门处于激活状态
- t5 H5 x3 l1 f% x3 [! Q' c8 Y/ U' D{ //从理论角速度计算功电机运行的信号强度
$ K2 P% V; W) X. r
5 D# m0 i/ q+ O' x7 Kshijijiaosuduchangshu=shijijiaosuduchangshu2*(lilunyoumen-800)/1000*(lilunyoumen-600)/1000;( M& U' h% N) p
lingshijiaosudu=(-xjiaosudu)/shijijiaosuduchangshu;6 S" c2 d( q$ \" N) Y, [8 X
if(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;
# r6 v. e! n# j. jif(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;
8 |! U9 y3 t. Y9 O5 |( l7 H//xjiaosudu=-shurufuyi/jiaosuduchangshu-lingshijiaosudu;//角速度调整模式时 jiaosuduchangshu=15# x+ I3 B' {! r3 w  z: l7 D
//xlilunjiaosudu=-shurufuyi/jiaosuduchangshu;
. X& K; e$ u: m! U6 S8 O1 Exjiaosudu=xlilunjiaosudu-lingshijiaosudu;+ O& t5 U( G9 V% q* k: v
lingshijiaosudu=(yjiaosudu)/shijijiaosuduchangshu;
$ e# r. e4 r/ i2 Iif(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;0 s- c& _5 s- k& C( B1 _( E9 ^# S" y
if(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;" F5 p1 P' o# z- `/ @/ r( O
//yjiaosudu=shurushengjiang/jiaosuduchangshu-lingshijiaosudu;
- x% |1 C; D( {, `% A/ i//ylilunjiaosudu=shurushengjiang/jiaosuduchangshu;! ?$ u- {; Q1 ], [/ a6 r1 ]& ~
yjiaosudu=ylilunjiaosudu-lingshijiaosudu;
: J1 e  ^: |! c/ R0 klingshijiaosudu=(zjiaosudu)/shijijiaosuduchangshu;
4 d! l  h1 w8 tif(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;$ i4 e% ?: `7 a! w
if(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;4 h: Q8 t) G) N
//zjiaosudu=shurufangxiang/jiaosuduchangshu-lingshijiaosudu;
* z+ a) `& k9 b9 C% z. j" m- K//zlilunjiaosudu=shurufangxiang/jiaosuduchangshu;
) t2 Z5 H# x+ i' G9 i' b$ f, Wzjiaosudu=zlilunjiaosudu-lingshijiaosudu;! o' T7 @' p6 m; u" T
if(lilunyoumen>1700)lilunyoumen=1700;/ `( r) e/ d( D- Q1 L. X
duojikongzhi[0]=lilunyoumen+xjiaosudu+yjiaosudu+zjiaosudu*3+duojipianyi[0];$ }% _) S" S* O8 C3 `) _8 Q- ~! {
duojikongzhi[1]=lilunyoumen-xjiaosudu+yjiaosudu-zjiaosudu*3+duojipianyi[1];
3 L4 W- v6 @2 ]0 Lduojikongzhi[2]=lilunyoumen-xjiaosudu-yjiaosudu+zjiaosudu*3+duojipianyi[2];, J& o; h- r" C* N
duojikongzhi[3]=lilunyoumen+xjiaosudu-yjiaosudu-zjiaosudu*3+duojipianyi[3];
5 E7 N6 X$ {& a3 D2 x8 g) s7 zfor(i=0;i<4;i++)) N  o! p9 v  a/ }
{& k! _; X3 [8 U
if(duojikongzhi[i]<1200)duojikongzhi[i]=1200;! v4 _2 }4 [1 P/ f; Y0 C. l* b
}
  s5 P' F% d) W; {}
' j8 d# i) |( K9 S3 E* F. Velse { //如果油门为0! {/ o) T0 Z2 i8 i  N+ a5 W
duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=1100;
% y5 @$ G4 B% `/ d# H! X+ Alilunfuyi=Roll;: `$ c0 h  H/ x
lilunshengjiang=Pitch;. {& Z9 x1 K8 L. V
lilunfangxiang=Yaw;
" a  f7 M2 v% s, w% ^}/ e* S4 L  i8 D8 G- t& W
//t=double(jieshouji[0])/100;4 u$ ?" r6 T7 C9 U( E5 y1 [7 S
/*1 F: x; |( }/ Z
for(i=0;i<6;i++){
. }, T' Y4 D8 i}  ?: E( c" y# v, c2 e  m: a+ _3 [9 E+ L
chuankoufasong(36,shurufuyi);
4 L. S$ J% C* x4 I5 [, v8 e% i7 T9 j. Ychuankoufasong(37,shurushengjiang);
, R, ?7 n0 W. i" k- W- vchuankoufasong(38,shuruyoumen);1 v% B# A" |" E3 n
chuankoufasong(39,shurufangxiang);delay_ms(30);2 a- a: m' |" N& |* T
{ //发送串口数据,功电脑读取.
3 C+ r: Z2 E3 T$ sh=shurufangxiang;( K& a) N9 o5 c/ h
chuankoufasong(36,xjiaosudu); delay_ms(10);- I% x/ t( U" ]  ]/ J1 @: g' b
h=shuruyoumen;
- @2 A- Z3 [" H! H1 echuankoufasong(37,yjiaosudu); delay_ms(10);) O, D9 F4 L2 I' L
h=chafangxiang*57;( b2 M8 F6 ?$ `. g
chuankoufasong(38,zjiaosudu);$ v8 r5 o+ d! i3 ^  H
delay_ms(10);. f7 y! ]2 Z+ M' H  l
chuankoufasong(39,duojikongzhi[3]);
$ J$ o: f  J/ v) M8 N9 Jdelay_ms(10);5 W0 H( y9 g. U( F
//duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=shuruyoumen+1100;+ p7 l! n- t  B$ d: [/ c
}, E% {& D0 d5 m. r; R- a8 |2 b
h=xjiaosudu;
5 }6 G' w. C3 N- x% kchuankoufasong(36,h);9 k( m2 O+ A5 j4 N7 C
h=yjiaosudu;! k/ T  ?0 s8 d7 ]
chuankoufasong(37,h); delay_ms(10);
1 Y. i( D% k* `2 f$ a0 g; _3 ph=zjiaosudu;
9 d" T6 D2 B' J! A+ ]" Jchuankoufasong(38,h);+ T& M# \! h  C! E4 s
h=shurufangxiang;
. @0 y# t! s" `3 Q+ I$ r: Q" mchuankoufasong(39,h);
& w" S6 Q) [& U+ t# C: j4 Ih=shuruyoumen;
2 j  w' c( j3 O( hchuankoufasong(39,jieshouji[4]);
: E! \' m% i( g' sh= dumpu6050jicunqi(0);
4 d( `! p6 C- |+ G6 ]chuankoufasong(37,h);
2 P$ V5 {- d4 ?& q5 D1 z% wh= dumpu6050jicunqi(1);1 X' j: E0 ^2 A. Q9 C2 Y9 K
chuankoufasong(38,h);! v$ H  E5 J& @% d
h= dumpu6050jicunqi(2);
* F6 Y' j/ k5 e* n, d9 |6 Kchuankoufasong(39,h);
) {0 A. y; J4 s, bchuankoufasong(36,jieshouji[3]);! }0 ^' |. y! q- }
chuankoufasong(37,jieshouji[2]);+ G- F& B/ s- m) c+ |' ?' w1 ~. I
chuankoufasong(38,jieshouji[4]);. \2 C  }" H0 K; n3 T( ~7 b; G
*/
* ^$ q! Z- f1 U, z( x8 b* p{
5 O) ]  c' V; p2 @2 R8 `if((USART1->SR&0X40)!=0)
5 e1 Y' v2 ]. U4 a, S$ z3 y2 U{7 R9 O) q& x% ~4 n% E4 Y% g

/ }  J. C7 V# E, H, K, s1 i7 Dzhinengchuankou();
: x' n3 G' Q# o! P: M  a% u}9 Q& |1 p3 o6 u) V6 ]
}! T$ s7 f4 U+ Z8 B6 I% T

6 U5 I% L1 W* O4 t/ F1 o}+ Q* l' ~- C+ U( ^
( c8 w" F$ N" y4 t7 X3 v1 l
}
5 N- u: u- \" e2 jvoid TIM2_IRQHandler(void) //定时器2 ,用于读取DMP数据& G6 H8 }" b. q% f- v# W
{
/ n; S. k2 C& q# F/ E& c; x/ d. ZTIM2->SR&=~(1<<0);//清除中断标志位                  
2 B/ t0 U' b" k6 ~, O+ V+ i  8 ^3 o# q, m' n
dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more);  9 }+ Y! K4 d% V( h
     if (sensors & INV_WXYZ_QUAT )$ z2 Y, C6 q  U
{
' G1 [, w4 F0 I   q0=quat[0] / q30;/ J% o# C! ^7 L) u
q1=quat[1] / q30;! _! U; _& v4 J$ l/ Y$ W
q2=quat[2] / q30;
: S7 N) r) w) ^: ?) o; t$ F q3=quat[3] / q30;) E: Y6 Y3 K6 E$ y" X
Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1); // roll副翼5 N$ \- x! ~% a% w& S
Pitch  = asin(-2 * q1 * q3 + 2 * q0* q2); // pitch升降: C+ f, a2 {- A8 t
   Yaw =  atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) ;//方向
0 x. @# ^+ E, N3 v" A$ x
; ]" u: m9 {, K: v //h=Roll*57295;
& |0 i: ]( d0 D' [7 d //chuankoufasong(36,h);
5 P4 s) p9 g0 Y2 u //h=Pitch*57295;
1 `+ q0 ~5 A6 t% G# l% E //chuankoufasong(37,h);- D) p( ?0 p4 b' e" D! m
//h=Yaw*57295;! |, j4 A) t  _6 @
// chuankoufasong(38,h);
* K$ }- ^' F- s6 f0 Z: B4 y6 d. U
" Q7 `; o, |  J2 I: p// PrintChar("nihao\n");+ y2 ~) i; C& T- b/ H5 J2 `" P0 C0 S
}$ ]# k/ P5 ]6 S9 w7 x( {1 S7 i8 m

+ m) K; F, a4 h- R2 R3 g8 F7 g+ Mxjsd[jiaosuducishu]=(gyro[0]-0);
" u" @# A3 p2 x1 j# Z, D4 qyjsd[jiaosuducishu]=-(gyro[1]-0);+ ~# \+ t& z# d" ?7 }& o2 M& v
zjsd[jiaosuducishu]=(gyro[2]-0);! E# L( K/ ]; q3 }6 s: G: s
jiaosuducishu++;
+ _0 I/ `1 b  Z# I- Y- j+ M, ]+ g. Kif(jiaosuducishu>=jiaosuduqudiancishu)jiaosuducishu=0;( k' c8 I+ g( I, x
3 j, v% W, Y$ K- Z$ r' P- ~
}1 N7 X7 j8 L+ U

. P$ K6 z0 G: ?0 P, `8 a
$ T  I9 b3 d; w5 o2 [9 }* W# z+ ]5 }8 d# G# i& X1 H! j
! c0 R& z  J% z/ \4 P

- P8 ^5 d1 _7 j; Q8 N0 E
! f6 O4 W: R& G# L
5 r+ q, @& E# @6 p' f, n. S8 \- m+ k$ a/ m

- w8 x' |+ w% u! C5 c; r2 {+ |( c4 s5 g6 S! J- X7 E
. V/ k6 U. f% {! @! m" Y
void EXTI15_10_IRQHandler(void) //接收机信号接收中断         耗时2微秒  以内: U$ t' `6 G% G' x  ~
{
3 C5 z: J, x% Q% H- N- a) Bu8 jicixunhuan;+ Y1 ~: W/ j. O
for(jicixunhuan=12;jicixunhuan<16;jicixunhuan++)
" p; b6 e" s- b  ^7 @* X! o{' b& L5 Y3 ^$ @" o; y& N! t! l
if(((GPIOB->IDR>>jicixunhuan)&1)){7 N# `! L9 d, r% X
shuruyinjiao=jicixunhuan;# z/ J$ Q7 z5 P- A. J. ]
TIM1->CNT=0;% C& i! E; o4 y* e
}
, y8 ~1 [4 J6 G}9 V& P% Q- G6 {3 Q! ?; F

: Y+ z6 b% |- x' A& ]if(!(GPIOB->IDR>>12&0xf)){ //如果接收机发送结束/ E" r( p  G& B$ ]
if(TIM1->CNT>1000&&TIM1->CNT<2000)
& \/ Z7 L- }9 P4 R1 J{9 x; R8 W! ?6 j7 t% g% L& y
jieshouji[shuruyinjiao-10]=TIM1->CNT; //将接收机变量保存到变量
8 y, v; d# ~1 k) R0 `. Ajieshouji[shuruyinjiao-10]/=jieshoulingmin;; g: u% f; \+ k) ?) y( O& c' N7 }
jieshouji[shuruyinjiao-10]*=jieshoulingmin;3 N3 [9 I9 c( r2 @! X
}1 c  P, _: O8 @7 d8 o$ {& Z# ~
if(shuruyinjiao==15)1 [, a% u$ I- C: V- X! ~
{
# V0 Q; Q* j5 |- D8 l9 B7 U/////************************************************************************//1 f6 {$ r7 ^) \+ i2 H
//计算得到每个摇杆的行程: w( ?& S) V* ^/ K/ r; z* D
if((youmen[0]-jieshouji[3])<100&&(shuruyoumen-jieshouji[3])<100)
& k. o  @3 R8 ?1 c  M& U6 V{
& b( X+ f  m2 d; qshurufuyi=1492-jieshouji[3];7 }8 m, ?4 B1 a- y; T' c( x  F6 V
}6 x1 A7 _* n* V5 P" q7 s6 |6 e# Y/ p
youmen[0]=jieshouji[3];9 }1 e' i! F: ]" I6 Y
shurushengjiang=1492-jieshouji[2];
1 x. u' t( h% dshurufangxiang=1492-jieshouji[5];) i( f' ?7 j& o
shuruyoumen=jieshouji[4];% c! `2 x) N; j) c, q6 S
/////************************************************************************//5 i* y' ?6 e0 b' P2 K1 {6 |
//每个遥感的行程转化成每次的偏移量
$ [# U  R, a5 K6 w3 enifuyi=nifuyi+shurufuyi/kongzhilingmin;
% U  b! c, e+ d# \) R; c" d: [nishengjiang=nishengjiang+shurushengjiang/kongzhilingmin;( X* o2 p- u( d# t
nifangxiang=nifangxiang+shurufangxiang/kongzhilingmin;2 {9 o: E+ a0 _' @! S
}
1 E6 ?/ f, `5 s8 p# m}4 o$ \5 y' D" K
if(shuruyoumen<1190){jiesuo++;/ ^6 t9 W2 h( d5 m
if(shurufangxiang>200){
$ ^  |* R# D8 M/ A  Uif(jiesuo>700) {
' u% ^1 W/ z* K) y/ r& }% A0 N5 jjiesuo=0;+ Y1 s# c9 g. N$ r" N* {/ O* Z
suo=0;
9 ]' c* R8 ^3 c2 i0 J* B$ t}
) i  @# H% ]; H0 w0 H3 d}
3 K1 {/ {9 h5 [if(shurufangxiang<-200){
" M- T5 y" n+ Zif(jiesuo>700){" [8 ^/ k' J; {; i' \/ V: w2 A. U4 C
jiesuo=0;
$ [, }7 _, @! zsuo=1;
) o" k* _4 \# H- ]( _) d}* c, O- V9 ?- j* D" W  e* m
}4 F4 |$ q) o; X8 \: L8 V
}& b0 _. v% u/ F8 y( m8 j  _
else jiesuo=0;
6 V+ i2 e0 T  s3 a: U- y! h7 Yzhongduancishu++;
* [8 a" ~$ l. K3 pEXTI->PR=1<<10;
+ x: r5 T4 F: ]* wEXTI->PR=1<<11;
: E  i1 L, p; \- P* Y% Z* nEXTI->PR=1<<12;' t. v  g& b# q) k! k. }' I" ^
EXTI->PR=1<<13;
/ Z7 O! O2 Y* w& T! `9 k6 PEXTI->PR=1<<14;
; O, F! O6 {% B: S5 b- c: TEXTI->PR=1<<15;1 B/ k4 y4 ]3 p: G! m+ v% z
}
. d1 m( Z* [- O2 \; X
: [( X: F7 l5 c. {1 l+ \void TIM3_IRQHandler(void) //定时器3,用于输出PWM信号   耗时1微秒 以内. u$ m" D& r4 o
{
3 [8 s5 O+ Y1 |0 w# Z& P2 A) }7 `if(suo==1){
$ y1 M) ~6 i. I( U8 A/ C: bif(shuruyoumen<1200)duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=1100;
; |4 L7 b( U; X" S5 A- }9 zTIM3->CNT=duojikongzhi[wei];# x+ Q& @5 _8 R% ^. ~
if(wei==0){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji1=1;}0 }. O# Y8 p; @
if(wei==1){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji2=1;}4 {: `( a4 {% r& P5 A, M
if(wei==2){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji3=1;}
3 q6 J% d# `9 \1 ]* x$ j, |if(wei==3){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji4=1;led4=!led4;}
, i) r: C, V# ]) f4 u0 ^if(wei==4){duoji1=0;duoji2=0;duoji3=0;duoji4=0; }
# L' a7 u* d- I2 T  h$ e                % v7 z5 A/ p2 K$ M

# K8 H# S) Y5 b0 Pwei++;, z; w1 S7 B9 x4 y
if(wei>4)wei=0;
/ n* `+ M4 R. I1 F& f}) q/ a* M% @4 B  o# S
if(suo==0)led4=0;
9 \) ]9 O5 M" n" E7 V. j9 G( qTIM3->SR&=~(1<<0);//清除中断标志位  , B. D0 W+ y& T# q& c  u) U, Z; Q
}% }4 _/ B, ~8 t9 U( R1 F
% _! A, Z* ^/ ?
void TIM4_IRQHandler(void)
6 I( K8 o6 L( M8 K, F{* j' n" Q; ]/ P7 x; Y; q
TIM4->SR&=~(1<<0);//清除中断标志?1 y' V3 O) {' u9 q; t5 }
/*?
! t3 c4 D8 R' D$ t  F
$ r% r  `5 I& @  U*/, P6 Q0 E: B# k& g7 K0 v3 }. E
}
6 i: T, j3 R9 i+ U! K1 T6 }' o9 K+ j* w. F
, [3 R6 T2 j, `
zhinengchuankou()4 s" E8 c3 E) y6 O0 O, N0 G- I. L
{. S, z& O" l8 B) d4 \, {, }
USART1->SR&=~(1<<6);
5 }3 x2 k9 F" E7 l3 }chuankoufasongwei++;
, K+ f7 x, j) w8 E4 Z- B  Yif(chuankoufasongwei>=20){chuankoufasongge=1;
: ~7 |" d4 D6 W) I" ?' [if(chuankoufasongcishu==36){
7 C! O+ b- U" c% s( `SendBuff[0]=36;/ U2 b9 _, t  m  p9 q& E+ m0 G( o
chuankoufasongshuju=Roll*572957;  n6 y. c, G# H& }8 F
chuankoufasongcishu=37;
1 M, X1 h  j2 f, K1 M$ l% ^}else
) {  r0 ?! ]8 z- S, iif(chuankoufasongcishu==37){" R1 ^) j7 [( m& M! @8 [  A, L
SendBuff[0]=37;
' L1 x& A, U1 R; I. Ychuankoufasongshuju=Pitch*572957;
/ `5 b# b0 c' @chuankoufasongcishu=38;
8 j2 e' j' e; w+ C}else8 E0 o. }9 q$ D) a5 x
if(chuankoufasongcishu==38){
5 ?% s3 u' [5 X% \6 E0 b3 ISendBuff[0]=38;
# F: i2 }1 p3 J+ Mchuankoufasongshuju=Yaw*572957;
( u1 n7 N2 q/ a# zchuankoufasongcishu=36;$ U( i" J4 ]- R% Q  D0 y* B# l0 r. ~3 @7 ^
}
( j% T- _4 F' V7 q7 P7 h: Iif(chuankoufasongshuju<0){, C! W8 P2 z  Q2 y9 b2 u# Q- O" Q
SendBuff[chuankoufasongge]=45;  // 给SBUFA数据
8 u1 |9 a& D0 i( a) Rchuankoufasongge++;
8 p6 |0 H8 p) E4 ]}
% N5 M2 q  E" g4 Z5 H% V* c  w, I7 \0 C0 t8 P. J
if(chuankoufasongshuju>=100000000){
3 d1 t4 l4 ]4 A8 H0 USendBuff[chuankoufasongge]=(chuankoufasongshuju/100000000)%10+48;  // 给SBUFA数据
5 d+ T. E9 V3 u* o3 O8 Bchuankoufasongge++;/ g0 z, j; r) F& L+ m# e
}3 r; ], J6 f, F& w$ F7 a* K
if(chuankoufasongshuju>=10000000){
9 L( N0 c6 F1 I, c* Y( RSendBuff[chuankoufasongge]=(chuankoufasongshuju/10000000)%10+48;  // 给SBUFA数据2 ?/ U3 J& G7 }6 ~+ J( R9 s$ A
chuankoufasongge++;  n- W( e7 g, ^8 Y" q& F' p* l5 S) k( S
}
+ _/ a2 {& T6 v1 B% a* tif(chuankoufasongshuju>=1000000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1000000)%10+48;  // 给SBUFA数据- r# @$ g. d/ V! G) m
chuankoufasongge++;9 U$ V& ]' Q' w
}
: q6 A+ C1 Z) V+ e5 r3 ~if(chuankoufasongshuju>=100000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/100000)%10+48;  // 给SBUFA数据+ M7 @, |1 }. q
chuankoufasongge++;
3 W' N! `# T1 L) U. U}
9 U" M2 h* ]  |- aif(chuankoufasongshuju>=10000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/10000)%10+48;  // 给SBUFA数据/ b7 p& [* W* M+ M( e
chuankoufasongge++;
: t3 f$ T0 j; r}
  U1 }7 K3 X  Q/ N3 `% `2 ~if(chuankoufasongshuju>=1000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1000)%10+48;  // 给SBUFA数据
' L) ^8 X3 B5 G9 }3 p8 |3 ~chuankoufasongge++;) r3 m( h' |" e( k/ _& |8 B
}3 Y* z9 O; R0 t
if(chuankoufasongshuju>=100) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/100)%10+48;  // 给SBUFA数据
) K5 b- [  U7 t0 ochuankoufasongge++;5 a/ t% z! Z4 g
}1 Z' k$ n' f5 y* O
if(chuankoufasongshuju>=10) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/10)%10+48;  // 给SBUFA数据3 p; R. G: s5 u+ l7 Z
chuankoufasongge++;/ O+ D/ }( F/ y, r, o  a
}/ s/ Y( \, e0 M; s0 ?
if(1) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1)%10+48;  // 给SBUFA数据
* d! z1 p# w7 R  t5 L+ a4 zchuankoufasongge++;
, U/ v: k/ X% g& y}8 J' P8 q) J2 ]' H# M
for(;chuankoufasongge<20;chuankoufasongge++)6 W. p. V) }" H- E
SendBuff[chuankoufasongge]=10;6 k' j1 |/ D$ i& H5 K
chuankoufasongwei=0;
7 x+ j7 J- O8 Q8 Y}
; y) w$ G9 G% l$ @9 x: b& N7 s" [! FUSART1->DR=SendBuff[chuankoufasongwei];$ ]9 j+ l, d4 r/ g4 Q8 x
}0 `# y; `$ `/ m/ T
foxglove 回答时间:2015-3-13 14:59:33
这些代码仔细看看不错
wsnfly~ 回答时间:2015-3-13 15:55:48
foxglove 发表于 2015-3-13 14:59
* I- U  ~# X8 z4 j& B0 u1 ~这些代码仔细看看不错
1 m' S4 ^0 u2 L" B' O2 ~" w# Y
我写的乱七八糟的,很长时间没看,自己都看的累

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版