-
Notifications
You must be signed in to change notification settings - Fork 2
/
开发说明.txt
106 lines (83 loc) · 4.22 KB
/
开发说明.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
由于MWC针对的多种飞行器类型、多种传感器和多种功能,所以在代码编写中使用了大量的宏定
和预编译,在删减了多余的代码之后,又发现了其核心代码基本未发挥Arduino库函数的作用而使用
了过多底层的东西,所以严重影响了其可读性。
所以,不再以MWC的代码作为开发基础,只作为参考。
本飞控程序应该:
1.最大限度地使用Arduino库函数进行编程;
2.尽可能将要实现的功能、语句封装在C++类中,各人负责的内容应尽量保持内容上的独立,减少引起代码混乱;
3.进行必要注释
4.为增强代码可读性,进行下面约定:
1)函数名和参数名中的单词首字母要大写,例如:SerialCom MyCom;
2)类名和这个类所在文件的名称保持一致:类SerialCom,文件SerialCom.h,SerialCom.cpp。
3)每次提交(commit)代码都要描述好修改了哪些内容。
5.每次commit之前,在Code::Blocks里用Clean workspace 清理一下项目,不要把编译过程中产生
的.o文件也提交了;除了Code::Blocks生成的工程文件.cbp之外,产生的其他文件不要提交(如:
.depend、.layout等)。
修改本文档请注意格式,开头加上******线,末尾用------线,用以分隔不同内容
******************************* 四轴硬件配置 **********************************
电机:新西达
电调:新西达30A
正反桨:
控制器:Arduino MEGA2560/UNO
陀螺仪:MPU6050加速度/角速度/温度传感器
电池:
遥控器:富斯CT6B
-----------------------------------------------------------------------------------
******************************* 任务分配 **********************************
共同负责:
LiteMultiCopter.cpp:主文件,Arduino的setup()和loop()函数在此文件中
Tzs:
PC端飞控调试/监控软件开发(如果有必要)
SerialCom.h//串口通信
SerialCom.cpp
MPU6050_RegistersMap.h//传感器数据读取
MPU6050.h
MPU6050.cpp
Receiver.h//信号从接收机到Arduino板的读取
Receiver.cpp
LX:
用matlab分析控制原理(如果有必要)
PID.h//飞控PID稳定和控制算法,决定四轴性能!
PID.cpp
Motor.h//电机PWM驱动
Motor.cpp
LED.h//夜间LED闪灯
LED.cpp
------------------------------------------------------------------------------------------
************************* 陀螺仪MPU6050和接收机数据的调用方法 ***********************
1.陀螺仪数据:
usage:
1)声明:
MPU6050 LMC_Sensor;
2)在Arduino的setup()函数中调用LMC_Sensor的初始化函数
LMC_Sensor.Init();
3)在Arduino的loop()循环中更新/读取传感器的数据
LMC_Sensor.ReadData();
4)在任何需要使用到传感器数据的地方:
eg:获取传感器绕X轴的转动角速度
float X_Angular_Velocity;
X_Angular_Velocity = LMC_Sensor.ReadGyroX();
eg:获取传感器沿X轴的加速度
float X_Acceleration;
X_Acceleration = LMC_Sensor.ReadAccX();
2.接收机数据:
四个通道的信号储存在Receiver类的成员变量ChannelData[4]数组中,
其元素ChannelData[0]到ChannelData[3]分别对应MEGA板上ANALOG IN的8,9,10,11引脚,
ChannelData[0]到ChannelData[3]不一定就是对应接收机的通道号码,因为这个取决于
8~11引脚于接收机的连接方式,例如引脚10不一定会连接到接收机3通道上。
注意:读到的信号范围理论是1100~1900微秒(实际比这个小一点11xx~18xx),恰好中
立点为1500。Arduino的Servo库并不是所有角度都可以被电调接收然后使电机转动的,具体
参考何琪辰的文章《Arduino控制多电调控制测试》。
usage:
1)声明:
Receiver LMC_Receiver;
2)在Arduino的setup()函数中调用LMC_Receiver的初始化函数
LMC_Receiver.Init();
3)在Arduino的loop()循环中更新/读取接收机的数据
LMC_Receiver.ReadData();
4)在任何需要使用到接收机信号的地方,使用ChannelData[4]数组中的元素即可:
eg:读取ChannelData数组中的第三个元素的数据作为油门
int throttle;
throttle = LMC_Receiver.ChannelData[2];
-------------------------------------------------------------------------------------------