第2章 基于Arduino的四轴飞行器

合集下载

四轴飞行器-概念扫盲

四轴飞行器-概念扫盲

四轴飞行器-概念扫盲最近一个月,在朋友傻鱼的帮助下,搭建起一套四轴飞行器。

鉴于四周飞行器、智能家庭之类的,都是各类Geek蛋疼而毫无创新的爱好,所以给各位分享下其中的一些基本概念。

作为扫盲帖,不含有任何高级内容,内行请直接略过。

先来个照片:首先谈谈四轴的原理,就是4个螺旋桨,对角的两个旋转方向相同,相邻的旋转方向相反。

顺时针转的叫反桨,逆时针转的叫正桨。

所以当他们转速相同时,就可以抵消旋转上带来的反作用力,不至于自己打转。

当然也就不需要直升机的尾桨了。

当然任何东西的制造都有误差,一套四轴飞起来以后,难免各个螺旋桨,机架的平衡等存在些问题。

所以安装后有个很必要的调试的过程,调试以后,过小的误差,就由飞控自己解决了。

也就是确保遥控器没有动作信号时,自己保持平衡。

鉴于四轴的复杂性,没有飞控基本别指望靠手来起飞。

分别讲各个配件吧。

**机架** :就是个架子,用来把各种东西拼上去。

有不同的材料,价格差异也较大。

我买的是SK450,塑料的,比较重,相当的结实,至今没有摔坏。

追求高性能的可以选碳纤维机架的,会轻不少,比如X450、X600。

这里的数字是指轴距,比如SK450和X450的轴距就是450mm。

也就是对角线两个轴之间的距离。

机架上的电机安装座决定了你能安装什么样的电机,轴距决定了最大可以安装多大的桨。

450mm轴距的机架可以安装最大10英寸的桨。

一般初学时买个塑料机架玩玩就好,玩熟悉了可以依据动手能力酌情选择碳纤维或者自己做。

我一开始就是选择这样一个可以尽快飞起来的机架,毕竟系统的迭代要以第一次可运行为基础。

最近开始考虑自己做机架了。

SK450的一个腿的重量就有41克。

而最近发现买IC时带的IC管子,一根20cm的也才不到10克,硬度却是够用的。

105元。

**电机** :这玩意讲究可就多了。

一般玩四轴的也就是22xx 系列的规格。

我用的是朗宇的A2212-KV980。

2212是其尺寸规格,具体我就不列出了。

四轴飞行器无线通讯及上位机设计

四轴飞行器无线通讯及上位机设计

四轴飞行器无线通讯及上位机设计摘要四轴飞行器,又称四旋翼飞行器,因其起飞和降落所需空间少,在障碍物密集环境下的超控性高,以及它飞行姿态保持平稳能力强的优点,在民间和军事领域有广泛的应用前景。

其中,小型四轴飞行器的研究近年来趋成熟,并未自动控制,先进传感器技术以及计算机科学等诸多技术领域的融合研究提供了一个平台。

本文通过对四轴飞行器的性能指标的分析,明确设计思路及原理,围绕四轴飞行器无线通讯系统、上位机程序等的设计展开讨论,并确定可行方案。

最终提出使用以2.4MHz的无线遥控对其四轴飞行器进行通讯,使用的是NRF24L01无线通讯模块,四轴飞行器的上位机则用QT进行设计以达成目的。

本次毕业设计主要通过设计上位机控制的飞行器,掌握控制系统的一般设计方法,熟悉常用的元器件,对所学单片机知识进一步强化,了解电路调试仿真的基本方法,培养综合应用所学理论知识来指导设计的能力。

关键字:四轴飞行器,无线通讯,计算机科学Quadrotors’wireless communications and software designAbstractAxis aircraft, also known as four-rotor aircraft,Rotary-wing air-crafts have many military and civilian applications due to their requiring small areas for taking off and landing,great maneuverability in Obstacle-heavy environment and great ability to maintain the position and orientation.The research of small scale quad rotors,one kind of rotary wing air-crafts,have gradually become mature in recent years,and also provided an important platform for investigations in such fields as the autonomous control,advanced sensor technology and computer science.This paper analyzes the performance of four-axis aircraft, a clear design ideas and principles, around quadrocopter wireless communications system designed PC program like to discuss and identify possible options. Finally proposes the use of a wireless remote control aircraft 2.4MHz its axis of communication, using wireless communication module NRF24L01, four aircraft of the PC is used to achieve the purpose of designing QT.The graduation project is mainly controlled by the PC design aircraft, master control system design methods are generally familiar with common components, to further strengthen the learning MCU knowledge to understand the basic method of circuit simulation and debug, develop comprehensive application theoretical knowledge ability to guide the design.Key words: Quadrocopter, Wireless communication, Computer Science目录第一章绪论 (4)1.1 四轴飞行器的发展和现状 (4)1.2 无线通讯概念 (4)1.3 上位机概念 (5)第二章单片机下位机设计 (7)2.1 主要芯片 (7)2.2 无线模块 (8)2.2.1 主要特点 (8)2.2.2 引脚功能 (8)2.2.3 工作模式 (10)2.2.4 工作原理 (10)2.2.5 配置字 (11)2.2 SPI协议 (12)2.3 单片机的通讯技术 (13)2.3.1并行通信 (13)2.3.2 串行通信 (14)2.4 串行通信的方式 (16)2.4.1 单工模式 (16)2.4.2 半双工模式 (16)2.4.2 全双工模式 (17)2.3 系统电路设计 (18)2.4.1 控制器无线模块 (18)2.4.2 四轴飞行器无线模块 (19)2.4 下位机程序设计 (21)第三章基于QT的上位机设计 (22)3.1 Qt工具简介 (22)3.2 Qt窗口部件 (23)3.3 Qt对象模型 (23)3.4 Qt的容器类 (24)3.5 Qt2D绘图 (24)3.5.1基本图形的绘制和填充 (25)3.5.2 坐标系统 (25)3.5.3 其他绘制 (26)第四章系统整体调试 (27)4.1 系统整体流程设计 (27)4.2系统调试 (29)4.3 调试结果分析 (29)第五章结束语 (30)第一章绪论1.1 四轴飞行器的发展和现状四轴飞行器是四桨、非共轴多旋翼飞行器,属于多旋翼飞行器的一种,是一种典型的、完全利用电子控制手段取代机械控制手段的飞行器之一。

四轴飞行器地设计

四轴飞行器地设计

深圳大学本科毕业论文(设计)题目: 四轴飞行器的设计姓名: * * *专业: 机械设计制造及其自动化学院: 机电工程学院学号: 12880008指导教师: * * *职称:2016年 4月 19日深圳大学本科毕业论文(设计)诚信声明本人郑重声明:所呈交的毕业论文(设计),题目《》是本人在指导教师的指导下,独立进行研究工作所取得的成果。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明。

除此之外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。

本人完全意识到本声明的法律结果。

毕业论文(设计)作者签名:日期:年月日目录一.综述 (7)(一)产品发展历史 (7)(二)项目研究现状 (7)(三)研究目的..................................... 错误!未定义书签。

(四)主要研究内容.. (8)二.产品工作原理 (9)(一)产品技术方案的提出 (9)(二)产品总体结构 (9)(三)产品工作原理 (9)三.产品结构设计 (11)(一)产品性能要求 (15)(二)产品设计计算 (15)1.参数选择 (15)2.估算整机重量 (16)3.功率计算 (17)4.上下平板连接使用螺纹连接类型及连接件选择 (17)5.机身支架与马达底座之间控轴公差与配合 (18)(三)产品结构设计 (21)1.产品装配图 (21)机架装配 (22)电机装配 (23)脚架装配 (24)2.产品零件图 (25)缓冲套 (25)脚架 (25)马达底座 (26)下平板 (26)橡胶套1............................................. 错误!未定义书签。

橡胶套2 (27)四.结构分析与试验 (29)结论 (30)【摘要】Solidworks软件是美国Solidworks公司开发的三维CAD软件,是世界上第一个基于windows开发的三维CAD软件,功能强大、易学易用与技术创新是Solidworks软件的三大特点。

四轴飞行器设计方案

四轴飞行器设计方案

四轴飞行器设计方案四轴飞行器设计方案一、引言四轴飞行器是一种具有四个电动机的飞行器,通过控制电机的速度来调整姿态和飞行方向。

本文将介绍一种四轴飞行器设计方案,包括材料选择、电机配置、控制系统等方面。

二、材料选择1. 框架材料:选择轻质且具有足够强度的材料,如碳纤维复合材料,以提高飞行器的耐用性和飞行稳定性。

2. 电机:选用高效率、低功耗的无刷电机,以提高续航时间和飞行效能。

3. 电池:选择高能量密度的锂聚合物电池,以提供足够的电力供应。

4. 传感器:配置加速度计和陀螺仪,以实时测量飞行器的运动状态,并通过算法进行控制。

三、电机配置为了实现四轴飞行器的稳定飞行和灵活操控,需要配置四个电动机,分别安装在飞行器的四个角落。

电机和框架之间采用弹性支撑装置,以减少机械振动和飞行噪音。

电机与框架之间的连接采用可调节的装置,以便根据飞行器的需要进行调整。

四、控制系统飞行器的控制系统包括飞行控制器、遥控器、传感器等。

飞行控制器是整个系统的核心,负责接收遥控器的指令,并通过内部的算法计算出合适的电机转速来实现飞行器的姿态调整和飞行控制。

飞行控制器还需要与传感器进行数据交互,以获取飞行器实时的运动状态。

五、功能扩展为了增加飞行器的功能,可以增加以下扩展设备:1. 摄像头:配备高清摄像头,实现视频拍摄和实时传输功能。

2. 红外传感器:用于无人机的避障功能。

3. GPS导航系统:提供飞行器的定位和导航功能,实现航线的自动规划和自主飞行。

4. 载荷释放装置:用于携带和释放物品,可在特定场景下使用。

六、安全保障措施为了确保四轴飞行器的安全性,应采取以下措施:1. 安全起飞和降落:制定飞行区域和起飞降落区域,确保无人机在安全的条件下起飞和降落。

2. 自动返航功能:确保在遇到故障或信号丢失时,飞行器能够自动返回起飞点。

3. 遥控频率选择:在多无人机飞行环境中,选择不同的频率,以避免干扰和冲突。

七、总结通过以上设计方案,我们可以实现一款稳定飞行、灵活操控、功能丰富且安全可靠的四轴飞行器。

基于单片机的四轴飞行器设计

基于单片机的四轴飞行器设计

基于单片机的四轴飞行器设计Abstract:This paper presents the design and implementation of a quadrotor based on a microcontroller. The objective of this project is to build a quadrotor platform that can be used for various applications. The quadrotor is equipped with a microcontroller to perform flight control and sensor data acquisition. A range of sensors including IMU, barometer, and GPS are employed to improve the flight stability and precision. The software is developed in C language on an open-source platform, which is easy to modify and extend. Various experiments and performance evaluations are conducted to verify the stability, reliability, and versatility of the quadrotor.Keywords: quadrotor, microcontroller, flight control, sensor, stabilityIntroduction:Quadrotors, also known as quadcopters or drones, have gained increasing attention in various applications such as aerial photography, surveillance, and transportation. A quadrotor is a rotary-wing aircraft that employs four rotors arranged in a cross configuration to generate lift and maneuverability. With the advancement of microcontroller technology, quadrotors can now be designed and implemented using a small-scale microcontroller such as STM32, Arduino, and Raspberry Pi. Microcontrollers provide a convenient and efficient way to perform real-time flight control and sensor data acquisition. In this paper, we present the design andimplementation of a quadrotor based on a microcontroller.System Design:The quadrotor system consists of four identicalpropulsion units, a frame, a microcontroller, a battery, and several sensors. Each propulsion unit consists of a motor, an electronic speed controller (ESC), and a propeller. The frame is made of carbon fiber to minimize the weight and improvethe strength. The microcontroller used in this design isSTM32F407, which has sufficient processing power and memoryto perform real-time flight control and sensor data acquisition. The battery used in the system is a LiPo battery with a capacity of 3000mAh to provide sufficient power forthe quadrotor. A range of sensors including IMU, barometer, and GPS are employed to improve the flight stability and precision. The IMU is used to measure the orientation and acceleration of the quadrotor, while the barometer is used to measure the altitude. The GPS is used to provide location information for the quadrotor.Flight Control:The flight control of the quadrotor is performed by the microcontroller using a proportional-integral-derivative (PID) algorithm. The PID algorithm is used to control the pitch, roll, yaw, and altitude of the quadrotor. The pitch, roll,and yaw are controlled by varying the speeds of the four motors, while the altitude is controlled by varying thethrust of the four motors. The sensor data is acquired by the microcontroller at a sampling rate of 100Hz. The sensor datais processed by the PID algorithm and the control signals are sent to the ESCs to adjust the speed of the four motors. The PID algorithm is tuned using a trial-and-error method to achieve stable and precise flight control.Software:The software used in this design is developed in C language on an open-source platform. The software consists of three main modules: flight control, sensor data acquisition, and communication. The flight control module performs the PID algorithm to control the quadrotor, while the sensor data acquisition module reads and processes the data from the sensors. The communication module is used to transmit the sensor data and control signals to a ground station. The software is designed to be flexible and easily modified to accommodate different sensors and algorithms.Experiments and Performance Evaluations:Various experiments and performance evaluations are conducted to verify the stability, reliability, andversatility of the quadrotor. The quadrotor is tested in both indoor and outdoor environments to evaluate the flightstability and precision. The GPS is tested to verify the accuracy of the location information. The results show thatthe quadrotor is capable of stable and precise flight control and the GPS provides accurate location information.Conclusion:In this paper, we have presented the design and implementation of a quadrotor based on a microcontroller. The system consists of four propulsion units, a frame, a microcontroller, a battery, and several sensors. The microcontroller performs real-time flight control and sensor data acquisition using a PID algorithm. The software is developed in C language on an open-source platform, which is easy to modify and extend. Various experiments andperformance evaluations are conducted to verify the stability, reliability, and versatility of the quadrotor. The resultsshow that the quadrotor is capable of stable and precise flight control and can be used for various applications.。

四轴飞行器控制原理简单介绍ppt课件

四轴飞行器控制原理简单介绍ppt课件
再次利用陀螺进行物体姿态检测需要进行累计误差的消除怎样建立误差模型和通过组合导航修正累积误差是一四轴飞起来??
我们需要有: 1,机架 2,电机 3,电调
2
在控制飞行器飞行时,有如下技术难点:
首先,在飞行过程中它不仅受到各种物理效应的作用,
还很容易受到气流等外部环境的干扰,很难获得其准确
的性能参数。
其次,微型四旋翼无人飞行器是一个具有六个自由度,
而只有四个控制输入的欠驱动系统。它具有多变量、
非线性、强耦合和干扰敏感的特性,
使得飞行控制系统的设计变得非常困难。
再次,利用陀螺进行物体姿态检测需要进行累计误差的
消除,怎样建立误差模型和通过组合导航修正累积误差
是一个工程难题。
3
如何控制一个四轴??
16
2,定高 低空定高:超声波 高空定高:气压计 3,定位:GPS
17
怎样让四轴飞得更安全?
18
1,检测电压电量 2,遥控丢失信号保护 3,错误状态识别 4,回家
19
我们需要有: 1,遥控器 2,接收机
4
5
如何让四轴自己飞??
我们需要有: 1,传感器 2,飞控
6
如何让四轴自己飞??
我们需要有: 1,传感器 2,飞控
7
四轴飞行器的原理?
8
四轴飞行器的原理?
9
10
11
12
13
14
怎样让四轴飞得更稳定?
15
1,PID的调试 P: 控制响应速度 I:消除静态误差 D:抑制过冲

使用Arduino实现飞行控制实验


K/P=24 0.27 0.88 0.73
K/P=4 -0.13 0.57 0.35
K/P=1.5 0.04 0.73 0.42
K/P=24
K/P=4
K/P=1.5
效果如何?
下一步
• 将电机加入系统,控制四轴飞行器。 • 系统对数据进行反馈,使飞行器平衡。
谢谢聆听!
使用Arduino实现飞行控制
中期报告 张馨元
基本思路:
使用MPU-6050测量飞行器角度 通过蓝牙操作舵机,实现上升,下降,转弯 对返回信号进行处理,使飞机平衡。
目前进度:
学习MPU-6050测量角度原理,实现较准确测量角度,并可视化。
MPU-6050的原理
MPU-6050的核心器件是3轴MEMS陀螺仪和3轴MEMS加速度计。 MEMS---微电机系统
误差200次,估计误差为200次数据的平均值。
绕Y轴旋转角
(绕Y轴零偏角度大了点是因为安装问题)
数据稳定性和准确性的表现
刚刚初始化:
一段时间后(半分钟左右)
对震动的敏感情况: (这里用手指轻轻敲击MPU)
红色是加速度计测得的绕x轴旋转角 蓝色是陀螺仪测得的绕X轴旋转角
零偏矫正保证两个数据的平均值都在0点附近, 但加速度计测得的数据波动很大
陀螺仪测得数据出现了 明显的累积误差
陀螺仪对小振动 基本免疫
简单的滤波
基于以上讨论,陀螺仪和加速度计各有利弊, 需要融合数据取长补短。最简单的滤波是给两个数据加上权重。 Angular = K*gyroangular + P*accangular
T=30s AngularX shift /° AngularY shift /° AngularZ shift /°

ug四轴编程教程

ug四轴编程教程编程是一门技术,我们可以通过编程来控制和操作各种设备,包括四轴飞行器。

在本教程中,我们将学习如何对四轴飞行器进行编程,使其完成一些特定的任务。

1. 准备工作:在开始编程之前,需要确保你已经正确安装了相关的软件和驱动程序。

通常来说,我们会使用Arduino IDE作为编程工具,并选择适合的硬件来搭建四轴飞行器。

2. 获取控制器:四轴飞行器需要一个控制器来接收指令并控制飞行。

常见的控制器包括基于Arduino的飞控板,如Ardupilot、Pixhawk等。

你需要根据你使用的飞控板来进行编程。

3. 建立通信:在编程之前,需要确保你与飞控板之间建立了正确的通信。

通常情况下,我们会使用串口通信来与飞控板进行交互。

你需要了解如何通过串口与飞控板进行通信,并掌握使用相关库函数的方法。

4. 编写驱动代码:飞行器的四个电机通常由驱动器来控制。

你需要编写驱动代码,指定每个电机的转速和方向。

这些代码通常包括PWM信号的控制和编码器的读取。

你需要了解相关的电调和编码器的工作原理,并根据需求编写相应的代码。

5. 实现姿态控制:四轴飞行器的姿态控制通常通过PID控制算法来实现。

你需要编写代码,监测四轴飞行器的姿态并计算出相应的控制指令。

PID控制算法涉及到参数的调整和反馈的处理,你需要了解如何调整PID参数以实现稳定的飞行。

6. 添加遥控器功能:四轴飞行器通常可以通过遥控器进行控制。

你需要编写代码,读取遥控器的信号并解析出相应的控制指令。

你需要了解如何读取遥控器的信号,并根据具体的需求来解析和处理。

7. 实现高级功能:除了基本的飞行控制之外,你还可以添加一些高级功能,如自动起飞和降落、路径规划、视觉导航等。

这需要你有一定的编程和算法基础,并对相关的传感器和技术有所了解。

总结:通过以上的步骤,你可以开始编程你的四轴飞行器了。

编程是一项有趣的任务,它不仅可以帮助你掌握编程技术,还可以让你更好地理解飞行器的工作原理。

四轴飞行器设计概述


硬件及控制算法
平衡自稳控制算法
PID控制器原理框图
33
硬件及控制算法
在实际使用中,以X轴平衡为例,使用到了两套PID算法, 对陀螺仪的数据进行PD运算,可使飞行器在某一范围内稳 定或者很缓慢的偏移,并且可以抗大的扰动,此为飞行器 平衡算法。但单独依靠此算法飞行器无法自动回到零点, 这就需要对飞行器的实时角度进行PI运算或PID运算,当飞 行器发现与零点有偏差,PI运算立刻起作用,修正飞行器 角度,此为飞行器自稳算法。
四轴飞行器设计概述
褚凯
1
09电子信息工程01
一、四轴简介及其发展前景 二、系统组成 三、硬件及控制算法 四、后续研究
2
四轴简介及其发展前景
什么是四轴飞行器?
四轴飞行器是微型飞行器的其中一种,也是一 种智能机器人。其构造特点是在它的四个角上 各装有一旋翼,由电机分别带动,叶片可以正 转,也可以反转。为了保持飞行器的稳定飞行, 在四轴飞行器上装有3个方向的陀螺仪和3 轴 加速度传感器组成惯性导航模块,通过电子调 控器来保证其快速飞行。
模块外部引脚(PIO11)输入电平,
20
可以实现模块工作状态的动态转换。
硬件及控制算法
蓝牙串口模块驱动电路
21
硬件及控制算法
第一版飞控
22
硬件及控制算法
23
硬件及控制算法
第二版飞控
24
硬件及控制算法
25
硬件及控制算法
滤波融合算法
1.滑动窗口滤波法
把连续取N个采样值看成一个队列,队列的长度固定 为N,每次采样到一个新数据放入队尾,并扔掉原来 队首的一次数据(先进先出原则),把队列中的N个数 据进行算术平均运算,就可获得新的滤波结果。

四轴飞行器设计方案

四轴飞行器设计方案1. 引言近年来,随着无人机技术的迅猛发展,四轴飞行器作为一种多用途的飞行器,被广泛应用于农业、电影拍摄、物流配送等领域。

本文将介绍一种基于四轴飞行器的设计方案,包括硬件组成和软件控制两个部分。

2. 硬件组成2.1 主要部件四轴飞行器主要由以下组件组成: - 电机驱动器:用于驱动四个电机的旋转。

- 电机:四个电机将产生的推力用于飞行器的升力。

- 电调:控制电机的转速和方向。

- 陀螺仪:用于测量飞行器的姿态和角速度。

- 加速度计:测量飞行器的加速度。

- 遥控器:用于操控飞行器的起飞、降落和飞行动作。

2.2 组件连接和布局四个电机均与电机驱动器相连,电调控制电机的转速和方向。

陀螺仪和加速度计用于测量飞行器的姿态和加速度,通过控制算法计算出飞行器的姿态调整信号,并传输给电机驱动器。

遥控器通过无线信号与飞行器通信,实现飞行器的遥控操控。

3. 软件控制飞行器的软件控制主要包括姿态控制和飞行路径规划两个方面。

3.1 姿态控制姿态控制是飞行器能够保持平衡和稳定飞行的核心技术。

通过读取陀螺仪和加速度计的数据,飞行器可以获得当前的姿态和角速度。

根据设定的目标姿态和当前姿态之间的差异,控制算法计算出控制信号,并通过电机驱动器调整电机的转速和方向,使飞行器保持平衡。

3.2 飞行路径规划飞行路径规划决定了飞行器的飞行轨迹和行为。

通过遥控器的输入,飞行器可以实现起飞、降落、前进、后退、转向等动作。

通过设定行进速度和转向角速度,控制算法可以计算出飞行器的轨迹和运动方式,并通过电调控制电机的转速和方向,实现飞行器的运动。

4. 性能指标四轴飞行器的性能指标包括飞行时间、控制精度、载荷能力等。

4.1 飞行时间飞行时间取决于飞行器的电池容量和电机的功耗。

较大容量的电池可以提供更长的飞行时间,但会增加飞行器的重量,影响携带能力。

4.2 控制精度控制精度是指飞行器能够准确控制姿态和飞行路径的能力。

精确的姿态控制可以使飞行器平衡和稳定飞行,精确的飞行路径控制可以使飞行器按照预设的轨迹和动作飞行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章 基于Arduino的四轴飞行器 2.3.3 模块介绍 1、电机输出模块 (2)相关代码 //主要函数定义 extern uint8_t PWM_PIN[8]; void initOutput();//初始化函数 void mixTable();//PID计算 void writeMotors();//信号输出到电机 //输出程序 uint8_t PWM_PIN[8] = {9,10,11,3,6,5,A2,12}; //定义输出接口 void initOutput() { for(uint8_t i=0;i<4;i++) { pinMode(PWM_PIN[i],OUTPUT); }//初始化,使PWM引脚作为输出引脚

void mixTable() { int16_t maxMotor;//定义最大转速电机编号 uint8_t i; #define PIDMIX(X,Y,Z) rcCommand[THROTTLE] + axisPID[ROLL]*X + axisPID[PITCH]*Y + YAW_DIRECTION * axisPID[YAW]*Z //PID算法 motor[0] = PIDMIX(-1,+1,-1); motor[1] = PIDMIX(-1,-1,+1); motor[2] = PIDMIX(+1,+1,+1); motor[3] = PIDMIX(+1,-1,-1);//4个电机输出计算(PID) maxMotor=motor[0];//以下代码限制最大输出油门,防止异常 for(i=1; i<4; i++) if (motor[i]>maxMotor) maxMotor=motor[i]; for(i=0; i<4; i++) { if (maxMotor > MAXTHROTTLE) //保证当某一个油门达到最大时,陀螺仪仍有良好的信号连接 motor[i] -= maxMotor - MAXTHROTTLE; motor[i] = constrain(motor[i], rottle, MAXTHROTTLE); if ((rcData[THROTTLE] < MINCHECK) && !f.BARO_MODE) motor[i] = rottle; if (!f.ARMED) motor[i] = MINCOMMAND; } } void writeMotors() { OCR1A = motor[0]>>3; // pin 9输出电机1号 OCR1B = motor[1]>>3; // pin 10输出电机2号 OCR2A = motor[2]>>3; // pin 11输出电机3号 OCR2B = motor[3]>>3; // pin 3输出电机4号 }

void writeAllMotors(int16_t mc) { //所有电机输出设定为mc for (uint8_t i =0;i<4;i++) { motor[i]=mc; } writeMotors(); } /*电调初始化函数,电调初始化完成后注释掉defined重新上传 #if defined(ESC_CALIB_CANNOT_FLY) writeAllMotors(ESC_CALIB_HIGH); blinkLED(2,20, 2); delay(4000); writeAllMotors(ESC_CALIB_LOW); blinkLED(3,20, 2); while (1) { delay(5000); blinkLED(4,20, 2); #endif } exit; #endif*/

2、遥控器发送/接收模块 (2)相关代码 //RX.h主要函数定义 #include "Arduino.h" #define RC_CHANS 8 #define PCINT_PIN_COUNT5 #define PCINT_RX_PORTPORTB #define PCINT_RX_MASKPCMSK0 #define PCIR_PORT_BIT(1<<0) #define RX_PC_INTERRUPTPCINT0_vect #define RX_PCINT_PIN_PORTPINB #define ROLLPIN4//预定义各信道的名称 #define THROTTLEPIN 3 #define PITCHPIN5 #define YAWPIN2 #define AUX1PIN6 #define AUX2PIN 7 #define AUX3PIN 1 //保留 #define AUX4PIN 0 //保留 #define PCINT_RX_BITS (1<<1),(1<<2),(1<<3),(1<<4),(1<<0) void configureReceiver(); void computeRC(); uint16_t readRawRC(uint8_t chan);//初始信号读取函数 //接收代码 volatile uint16_t rcValue[RC_CHANS] = {1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502}; static uint8_t rcChannel[RC_CHANS] = {ROLLPIN, PITCHPIN, YAWPIN, THROTTLEPIN, AUX1PIN,AUX2PIN,AUX3PIN,AUX4PIN}; static uint8_t PCInt_RX_Pins[PCINT_PIN_COUNT] = {PCINT_RX_BITS}; void configureReceiver() { for(uint8_t i = 0; i < PCINT_PIN_COUNT; i++){ PCINT_RX_PORT |= PCInt_RX_Pins[i]; PCINT_RX_MASK |= PCInt_RX_Pins[i]; } PCICR = PCIR_PORT_BIT; PCICR |= (1 << 0) ; #define RX_PIN_CHECK(pin_pos, rc_value_pos) \ if (mask & PCInt_RX_Pins[pin_pos]) { \ if (!(pin & PCInt_RX_Pins[pin_pos])) { \ dTime = cTime-edgeTime[pin_pos]; \ if (900 rcValue[rc_value_pos] = dTime; \ } \ } else edgeTime[pin_pos] = cTime; \ } ISR(RX_PC_INTERRUPT){//中断函数用于响应 uint8_t mask; uint8_t pin; uint16_t cTime,dTime; static uint16_t edgeTime[8]; static uint8_t PCintLast; pin = RX_PCINT_PIN_PORT; mask = pin ^ PCintLast; cTime = micros(); sei(); PCintLast = pin; #if (PCINT_PIN_COUNT > 0) RX_PIN_CHECK(0,2); #endif #if (PCINT_PIN_COUNT > 1) RX_PIN_CHECK(1,4); #endif #if (PCINT_PIN_COUNT > 2) RX_PIN_CHECK(2,5); #endif #if (PCINT_PIN_COUNT > 3) RX_PIN_CHECK(3,6); #endif #if (PCINT_PIN_COUNT > 4) RX_PIN_CHECK(4,7); #endif #if (PCINT_PIN_COUNT > 5) RX_PIN_CHECK(5,0); #endif #if (PCINT_PIN_COUNT > 6) RX_PIN_CHECK(6,1); #endif #if (PCINT_PIN_COUNT > 7) RX_PIN_CHECK(7,3); #endif ISR(PCINT0_vect) { uint8_t pin; uint16_t cTime,dTime; static uint16_t edgeTime; pin = PINB; cTime = micros(); sei(); dTime = cTime-edgeTime; if (900dTime;} else edgeTime = cTime; //如果bit2在高电平(PPM pulse上升),存储时间 } uint16_t readRawRC(uint8_t chan) {//读取原始信号 uint16_t data; uint8_t oldSREG; oldSREG = SREG; cli(); // 禁止中断 data = rcValue[rcChannel[chan]]; SREG = oldSREG; return data; }

void computeRC(){//提取遥控器信号,进行数据处理,主要取平均值

相关文档
最新文档