arduino nano开发飞控的框架设计——新人的臆想

毒药台 2019-04-20 11:05:38
首先,在工控开发上,我还是个新人,学习工控arduino也有4个月,虽然以前搞过软件,但是C语言和硬件都是新手。这里来讨论这个大题目也是因为度娘提供的资料太少,希望来这里抛砖引玉,尤其我不爱读别人的代码,一切都只有自己研究。

很多人觉得nano太小了,无法独立完成飞控,据说apm就不是一块arduino开发出来的。
虽然nano资源太小,但是如果节省起来使用,做个简单的飞控还是有可能的。
很多人都想设计一个飞控,但是如何构建框架无处入手。
我设计了一个简单飞控的框架,希望各路大神过来拍砖,如果连关注都不关注,那我也太失败了。

先说一下设计目标:做一个简易飞控,不是商业需求,能够实现基本的飞行控制就可以了。比如提供稳定性和控制支持。

先列出来飞控设计内容列表

1、读取六通道接收机数据
2、读取陀螺仪姿态数据
3、读取其他传感器信息,比如GPS信息
4、所有算法实施
5、控制马达或者舵机

目标过程:读取接收机控制要求,读取陀螺仪姿态,结合两者计算出马达或舵机的动作。能够实现就好,其他暂不考虑。

首先,整个框架是以接收机为中心的,为什么?因为接收机是主动数据源,所有其他任务都可以看作被动任务。我的意思是,接收机的数据是由接收机发送过来的,而不是我要求过来的,数据到达时如果我不接收,数据就过去了,出现数据丢帧。所以必须首先安排读取接收机数据。在接收机数据完整获取之后,再考虑抽时间处理其他任务。大概也是因为这个原因,据说APM就是使用了一个独立的芯片来读取接收机数据。
值得庆幸的是,接收机的帧频率是60左右,就是说每一帧需要17毫秒,而读取一帧六通道接收机数据只需要4毫秒,大约留下13毫秒来处理其他事情,足够了。
当你完整的读取了接收机数据,并省出来13毫秒来处理其他任务的时候,你的飞控就基本大功告成了(从框架来说)。

下面说一下舵机和马达
舵机和马达的控制频率说是50,其实20-80都可以,稍微高一些好像动作更稳定,我试了试,60左右就可以工作的很好,所以就用接收机的频率了,每个接收机的一帧动一次马达。所以在剩下的13毫秒之内,可以抽出2-3个毫秒来控制所有的舵机和马达。我试了,4-6个舵机都还挺稳定的。好了,我们还有10个毫秒。
其他的就好说了,读取陀螺仪姿态计算用不了3毫秒,包括计算,计时再多两个毫秒也还够用(例如复杂运算)。
别的传感器先不说了。
算法实施主要是把接收机数据和姿态合并处理后,得出所需要的马达舵机数据,这个不费时间。
处理这些都可以在60HZ的范围内,如果怕时间不够,还可以用单双数,单数过程接收处理姿态,双数处理别的传感器或者计算,这些按30HZ处理也是足够的吧。

在这个基础上,简单基本的飞行动作大概就可以了。
如果要做自动飞行,只需要做个读写模块提供一系列飞行数据
如果要做学习动作,只需要保存所有控制数据就可以了

已上各个模块我都测试过,基本都达到了使用要求。
接收机数据漂移大约在16,可以凑合用了,基本稳定。
...全文
258 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
毒药台 2019-04-22
  • 打赏
  • 举报
回复
引用 楼主 weixin_42039994的回复:
首先,在工控开发上,我还是个新人,学习工控arduino也有4个月,虽然以前搞过软件,但是C语言和硬件都是新手。这里来讨论这个大题目也是因为度娘提供的资料太少,希望来这里抛砖引玉,尤其我不爱读别人的代码,一切都只有自己研究。

很多人觉得nano太小了,无法独立完成飞控,据说apm就不是一块arduino开发出来的。
虽然nano资源太小,但是如果节省起来使用,做个简单的飞控还是有可能的。
很多人都想设计一个飞控,但是如何构建框架无处入手。
我设计了一个简单飞控的框架,希望各路大神过来拍砖,如果连关注都不关注,那我也太失败了。

先说一下设计目标:做一个简易飞控,不是商业需求,能够实现基本的飞行控制就可以了。比如提供稳定性和控制支持。

先列出来飞控设计内容列表

1、读取六通道接收机数据
2、读取陀螺仪姿态数据
3、读取其他传感器信息,比如GPS信息
4、所有算法实施
5、控制马达或者舵机

目标过程:读取接收机控制要求,读取陀螺仪姿态,结合两者计算出马达或舵机的动作。能够实现就好,其他暂不考虑。

首先,整个框架是以接收机为中心的,为什么?因为接收机是主动数据源,所有其他任务都可以看作被动任务。我的意思是,接收机的数据是由接收机发送过来的,而不是我要求过来的,数据到达时如果我不接收,数据就过去了,出现数据丢帧。所以必须首先安排读取接收机数据。在接收机数据完整获取之后,再考虑抽时间处理其他任务。大概也是因为这个原因,据说APM就是使用了一个独立的芯片来读取接收机数据。
值得庆幸的是,接收机的帧频率是60左右,就是说每一帧需要17毫秒,而读取一帧六通道接收机数据只需要4毫秒,大约留下13毫秒来处理其他事情,足够了。
当你完整的读取了接收机数据,并省出来13毫秒来处理其他任务的时候,你的飞控就基本大功告成了(从框架来说)。

下面说一下舵机和马达
舵机和马达的控制频率说是50,其实20-80都可以,稍微高一些好像动作更稳定,我试了试,60左右就可以工作的很好,所以就用接收机的频率了,每个接收机的一帧动一次马达。所以在剩下的13毫秒之内,可以抽出2-3个毫秒来控制所有的舵机和马达。我试了,4-6个舵机都还挺稳定的。好了,我们还有10个毫秒。
其他的就好说了,读取陀螺仪姿态计算用不了3毫秒,包括计算,计时再多两个毫秒也还够用(例如复杂运算)。
别的传感器先不说了。
算法实施主要是把接收机数据和姿态合并处理后,得出所需要的马达舵机数据,这个不费时间。
处理这些都可以在60HZ的范围内,如果怕时间不够,还可以用单双数,单数过程接收处理姿态,双数处理别的传感器或者计算,这些按30HZ处理也是足够的吧。

在这个基础上,简单基本的飞行动作大概就可以了。
如果要做自动飞行,只需要做个读写模块提供一系列飞行数据
如果要做学习动作,只需要保存所有控制数据就可以了

已上各个模块我都测试过,基本都达到了使用要求。
接收机数据漂移大约在16,可以凑合用了,基本稳定。
使用PPM来读取接收机也是个办法,剩余时间也足够处理其他操作,但是读出来的数据有点怪,还在进一步实验中。我用的是乐迪接收机,自带PPM。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧