2赞

19回答

1收藏

飞控套件上手ABC

#竞赛 #竞赛 9910 人阅读 | 19 人回复 | 2016-07-12


----------------------------------------------2016.8.18---------------------------------------------------------------


嗯,刚才去论坛看了下各位的帖子,突然想到一个问题,前些天有小伙伴儿问我,为什么按照我说的,像飞控发送0-9的指令,飞控没有反应,不会像我说的返回各种传感器数据,这里说明一下,需要连接的串口是 “USB 串行设备 (COMx)”,而CDC那个是DEBUG那里的接口,并且,记得两个USB线都需要插上,这个之前我说过,原因我也没深究。
还有就是,并不是所有的代码烧进去之后都会出现这两个串口,有的版本的代码烧进去之后就只有 “Jlink CDC UART Port (COMx)”,这个是Jlink的调试接口,不是这个。


----------------------------------------------2016.8.18---------------------------------------------------


关于新版飞控代码开启APP遥控模式
详细来说,有两种方法:
1.飞控板上预留的串口接收机接口,RC-Control,的 P0.4,这是飞控板遥控数据输入的地方,接串口设备的TX引脚,通过这里输入的指令包的模式位,来控制飞控响应这里来的,还是APP来的遥控数据
2.当然,这里永远有第二选择,简单方便,代码里有个宏开关,打开,就只响应APP的遥控


我们还是都说明下吧
1.首先看之前我们看过的遥控数据,RC-Control端的,
看到第13,14字节,飞行模式,然后这飞行模式的值怎么取呢,我们回到源代码找答案:找到RCReceive.h这个头文件


看到了吧,这里定义了两个模式对应的值,并且这是个16位的数据,转换成16进制后就是两个字节的数据了,刚好对应遥控数据包里的两个字节
经测试,FLIGHTMODE1是蓝牙遥控模式,对应的16进制数据是 0x26 0xCA,所以,将你平时发送的数据包里的响应字节换成这两个就好了


2.好了,还是来说第二种方法,逼近简单粗暴还很有效
同样是得先找到头文件:哦不用了,就是刚才那个头文件并且上面刚才的截图就有,看到第一个宏定义,我就不重新放图了哈,
就上面那个就行,好了,看到第一个宏定义:#define BT_ONLY 通过字面意思想必大家也知道什么意思了吧,就是指响应蓝牙的遥控数据
你们看到的我这里是这样的,你们的工程里是被注释掉了的,只需要取消注释,重新编译工程,然后烧写代码,OK,你的工程也可以使用APP控制了。

刚才我又把这帖子的原来的部分看了一遍,其实这里的很多之前也提到过,比如方法一的说明,之前也讲到过。多亿,如果大家以后有什么问题,还是希望大家能翻翻以前的资料,招呼找哦啊有没有能用到的,可能不是直接有用,但是可以给你一定的参考和启发嘛,客观您说是不~

好了,就到这里,一直时间不是很多,写这些我有组孩子不好语言,经常删删改改的,今天就先更新这么多吧。改天把大家遇到的问题整理一下。



--------------------------------------------------------------------------------------------------------------------------------------------------------

     看来教程这个教程会很长,还很杂,嗯,对。
      希望写完之后大家有问题能先来教程贴看看。
      当然希望大家也把自己的经验分享分享,一起,跟这英某凌坑x的源码工程干一架!


--------------------------------------------------------  第一次使用华丽的分割线  ---------------------------------------------------------



这几天熬了几夜,摸索出来的一些结果,在这里跟大家分享一下,因为资料有限,感觉很容易走很多弯路浪费时间.想在这里跟大家分享一些.


       我已经没有搞了,等下个月再回来看看小伙伴儿们的进度,希望到时你们也分享分享哟

好,不废话了.

1.关于DAVE的使用


首先是版本,飞控工程和电调工程都是基于DAVE3开发的,同时DAVE4不想下兼容,SO,坑爹,只能使用3.


DAVE3下载链接



       点击DOWNLOAD,
       在这里,找到没~
      

       之后会出来一个注册页面。。。嗯,不对,咱还是先倒回去下,注册下,
       哈哈哈哈哈~
      

       好了,我们回去继续下载
       可能会因为浏览器Cookie相关问题导致返回去之后账户还是没登录,好吧,咱们再来详细点,如何找到下载链接
       英飞凌官网
      

      


      

然后是安装


完整的安装包在安装时,同时会向主安装目录安装库,所以可能安装完之后不能直接编译工程,需要确认工程设置里的库函数路径是正确的。


比如一开始的时候我就安装在D盘,而工程里的设置,有两个库的路径,是设置在C盘的,所以如果DAVE3没有安装在C盘,需要自己手动改一下工程设置,反正我是不喜欢工具软件装C盘。。。嘿嘿

       这会儿我们先把工程导入的步骤说完的,
      
       来,这里。

       工程导入

       桌面找到DAVE图标打开(会提示选择一个WorkSpace,为飞控工程新建一个问)

      

      
       左上角,File-Import-DAVE Project

      

      


       找到下载的飞控工程文件夹(我的已经添加了工程,别介那灰色啊~),Finish , 搞定

      


       好了,我们来确认工程库文件夹路径是否正确

    1).先在对应工程上右击,



properties,出来工程设置框。




找到图中所以设置,将其更改为你电脑上库所在路径(通常是根据你DAVE的安装路径来决定,库文件夹就在安装文件夹根目录),

图中我的是刚导入的工程,也还没修改,我的DAVE安装在D盘,需要改为D盘路径

像这样



你们就按照自己的路径来改咯。

库路径没有正确会在编译过程中出现很多头文件找不到的错误,所以,举一反三,如果发现有很多头文件找不到的时候,记得检查下库路径


(这里再补充下,是一个小伙伴儿遇到的问题)


他也是按照流程做了,可还是出现头文件的缺失:ARMCM4.h,而且我看了下我电脑上,这个头文件是有Keil目录下才有。呃。。。这 个,我们用的是DAVE的嘛,此处省略数天时间,结论是,记得按照:

        File-Import-Infineon-DAVE Project。。。

这样,导入工程,然后再进行编译。


2.关于转换工程到Keil下开发


一开始因为没有详细的资料,一度认为没法完全转换过去,后来找到了资料,官方,详细,有效!(还是资料重要啊)

首先是资料链接

教程上说明很详细,我就分享下我尝试的过程。

1).按照教程操作完之后,在Keil下编译,还是会出现很多头文件的缺失,这里算是一个小技巧吧,找到缺失的是哪个头文件,然后根据包含关系,到DAVE工程下找到它所在路径,然后就这个路径添加到Keil工程中.

2).原工程中有几个宏定义,虽然DAVE生成的某个头文件中会自动加上这些宏定义,但是有些函数库,最底层的,没有包含其他头文件的,这些宏定义自然就对其不可见,所以需要自己在Keil工程设置中手动定义。

    这里直接给出飞控工程需要定义的两个宏:ARM_MATH_CM4,__FPU_PRESENT,_RTE_

3).暂时没有想到,如果想起来了再添加吧


3.固件烧写与调试方法

飞控固件烧写

       对于飞控,板子上自带OBD板载仿真器,,其通过DEBUG-USB接口与电脑相连
       在这里

      


       如果使用DAVE,调试,它会自动安装Jlink最新驱动,调试的时候直接就可以下载
       同时,英飞凌也提供了单独的下载工具,XMC? Flasher
     
独立下载工具XMC Flasher的使用

       工具的运行依赖于JRE,所以请自己想办法安装好Jre,以便使用此工具
      
      


       首先是仿真器的连接,
              Configurations-Change-Select Emulator...-OK
       此时点击Connect...按钮便可与飞控板连接,然后是
             Select File...
       找到需要烧入的hex固件
            Program
       Done.

电调固件烧写

       下面大家先看着,如果发现我讲得你晕乎乎了,这里有位小伙伴整理了详细的烧写过程,很有条理,推荐给大家
       Thanks to Lonely Byte,撒花~
      
       由于电调调试接口是外接的,并且Jlink又比较常见,所以我们就用它好了
       首先是接线,调试接口是电调板子上朝上的插针,根据电路图看引脚定义,将其与Jlink连起来,记住,SWD模式。
       (为什么?不知道
      


       接下来进行固件的烧写。
       映像中当时我尝试的时候,XMC Flash 在这里没法用,当然也可能是我记错了,大家可以试试,方法在上面已经讲过。
       这里就说下使用Jlink进行烧写的步骤。

       开始菜单-Jlink文件夹-JFlash,打开JFlash.(之前有同学问,JFlash是什么,我电脑上没有,怎么办?   呃。。。对于这个问题我是这么想的:需要用Jlink--->没有Jlink--->搜索\了解\下载--->正常使用--->继续干活儿)
      
       好了好了,回来。

      


       首先是设置:Option-Project settings...-Target Interface:SWD

      


       然后。。。别急!还有第二步:CPU-Device-Infineon-XMC1302-0128

      


       好了,现在,打开hex文件:File-Open Data File...

      


       嗯,对,现在:Target-Auto
       完成之后就行了。

4.关于飞控与电调的通信方式

环形串口结构的数据包格式。飞控Wiki链接有原始讲解,结合源码分析效果更佳哦~

数据包总长度为13字节,前12字节,每3字节为一组,第一字节为命令标志字节,剩下两字节为16为电机调速数据,高字节在前,此3字节数据有4组,分别对应4个电调,最后一位是整个数据包结束标志。


数据包从XMC4500串口1的1通道TX引脚 P0.1发送到电调1的RX,电调1将其中前3字节数据小包取出后,将后3字节数据往前移动3字节位,后面空出的3字节填充状态与数据值,并继续将13字节数据包往下一个电调节点传。最后,4号电调将数据包发送回XMC P0.0脚。

      



       下面介绍测试例子。

       使用一条串口线,或者其他单片机串口,作为向电调发送数据包的测试端。

       此时我们可以不用为电调接功率电源,只需保证3.3v端供电便可。

       将串口线TX 连接电调RX端,嗯,另一根可以不接。别走!地线接上。。。
       串口波特率设置为115200,HEX发送模式,数据包测试实例如下:


22 02 00 22 02 00 22 02 00 22 02 00 04

      


       点击发送,如果操作无误,电调上绿灯会亮起,红色则代表错误
       这里可能会出现的问题我就暂时不写了,我码字好慢。。。

       此时如果需要测试电机,便可按照电路图引脚定义为电调接好功率端电源和电机,设置串口工具连续发送间隔为10ms左右,点击定时发送后即可观察到测试效果

5.关于飞控的一些调试选项

传感器数据和其他数据的输出。


       飞控固件烧写成功后,便可通过其USB接口的虚拟串口通道与电脑进行串口通信,下面是具体步骤说明

       同时将飞控板DEBUG 和 USB 丝印处的USB接口连接到电脑,(没去深究为什么,只插USB口不会有虚拟串口通道)
       此时电脑 “设备管理器” 可看到 “端口” 下面新出现一个串口号,使用串口工具,同样以115200的波特率,与其连接上。
       现在的需要取消HEX传送模式了,同时也取消HEX显示模式,这里指令有9条:1,2,3,4,5,6,7,8,9.


呃,,,虽然我也觉得这指令集合有点,略Low,不过简单易用就行了嘛。具体说明在此
      
      


       嗯,可能你发现了,不过其实是有指令 "4"的,我们还是看源码;


  



        看,是有吧。

       简单介绍下:
       1   返回当前遥控器数据,油门、偏航、升降(应该理解为俯仰Pitch更合适)、副翼(应该理解为横滚Roll更合适)
       2   “启动内部PWM”,没搞明白,没有仔细纠结源码了
       3   Yaw,Pitch,Roll, 偏航,俯仰,横滚,角度值
       4   没懂,需要看源码
       5   4轴电机油门输出,PWM值,
       6   没搞清,看看源码呢
       7   哈哈哈
       8   嘿嘿嘿
       9   气压,温度,XXX

       好了,以上是串口信息说出的简单说明,要想看连续数据变化的话,同样可以向飞控连续发送指令,不过提个醒,

       别 2 了。。。

       嗯,,,我的意思是,指令2,发送一次就停不下来了,只能重启

(突然想起那啥,黄金口诀:小什么重启,大问题重什么,,,)

6.关于飞控的遥控方法

遥控信号的输入方式和数据格式。


       两个消息:好消息和坏消息~
       好消息是,飞控板上预留了遥控器信号输入接口,需要自己焊上插针,
        
        



       另一个消息就是,这个接口,并不是惯性思维想到的PPM接收机输入接口,而是。。。

       又是一个坑爹的串口。。。咦~不对,想了想其实也可以是一个好消息。这意味着我们可以选用很多种通信模块作为遥控器了,只要是串口透传的模块,直接接上便能用,不用购置或者自制PPM信号板了。
       当然更多的还是觉得坑爹,以至于测试的时候我一直是用一根串口线连着,然后拿在手机飞。

       言归正传,将转口线TX端连接到最上面P0.4插针上,注意,地线。
      

接着同样以HEX模式,通过串口下飞控发送遥控数据

这里先上遥控数据协议:

     


       16字节的数据包包含了标志字节和各参数字节,第5字节是任意值

这里有一点需要注意,各参数都是有范围的,错误的数据将会使得飞控有不可预测的响应。并且还有一个通道数据量程中点值的概念,举个例子,俯仰Pitch的数据范围是1000 - 2000 ,这个时候我们应该取1500这个值来作为测试所用值,因为与此值差别过大的值,都会影响调试时飞控对姿态的调整,所以,并不是数据在允许范围之内就行。

我们再来对照代码

        

      这里是遥控数据的最大/最小值,中间是对应的16进制值,右侧是16进制中点值,这些是我另外注释上的。
      我们姑且认为这些是合适值进行测试,因为中点值在设计中可能不是线性计算得到的。
      那么我们的测试用遥控数据便可以出炉了

      30 00 01 80 00 A2 0B FF 2B FE 13 FD 21 32 1B FF

      为什么油门值没有使用中点值? 嘿,兄弟,你在逗我!
      作为验证,此时可以通过飞控USB虚拟串口端口发送指令1,查看飞控接收到的遥控数据

      不过在实际操作的时候,发现上面所选取的值并不是很准,具体原因,可能需要大家自己来试试了。

7.关于飞控的PWM信号输出

PWM信号的改接方法和输出方式。

好晚了,明晚再码字吧。。。


分享到:
回复

使用道具 举报

回答|共 19 个

倒序浏览

沙发

huizzzhou

发表于 2016-7-16 10:41:51 | 只看该作者

对我帮助很大,谢谢
板凳

耗子董

发表于 2016-7-27 15:43:04 | 只看该作者

谢谢,对我帮助也很大
地板

z-bo

发表于 2016-8-7 15:20:23 | 只看该作者

多谢分享,最后两个图片看不了  楼主能否重新上传最后两张图片 多谢
5#

南风吹梦

发表于 2016-8-14 14:42:05 | 只看该作者

楼主可否发一份成功移植到keil下的工程???我照着教程文档做下去,出现了很多问题,如下图。

AZQ0CD@[Q]7`XW{0PY8)U3G.jpg (79.21 KB, 下载次数: 61)

AZQ0CD@[Q]7`XW{0PY8)U3G.jpg

RD2K)H}MH@LX@1U@{OU%~ST.png (11.8 KB, 下载次数: 56)

RD2K)H}MH@LX@1U@{OU%~ST.png
6#

RuiJack

发表于 2016-8-18 21:08:28 | 只看该作者

南风吹梦 发表于 2016-8-14 14:42
楼主可否发一份成功移植到keil下的工程???我照着教程文档做下去,出现了很多问题,如下图。 ...

之前是转换了一次老版本的工程,这几天看得时候发现好像被我删掉了,等过几天空了我再用最新版本的工程试一遍
7#

22-2016421

发表于 2016-8-22 15:28:47 | 只看该作者

大神,为何我的RCReceive.h中没有#define BT_ONLY?难道是代码不够新?
/*
* RCReceive.h
*
*  Created on: 22.12.2014
*      Author: maan
*/

#ifndef RCRECEIVE_H_
#define RCRECEIVE_H_

#ifndef DEBUG_ON_PC
#include <DAVE3.h>
#endif

#define RC_UART_Handle                   UART001_Handle0
#define BT_UART_Handle UART001_Handle1

//Scale factors for angle and power                                                // other divisions tried with good stabilization
#define SCALE_YAW        90.0                        // from -10..+10    // divided by 3
#define SCALE_PITCH        30.0                // from -10..+10                // divided by 10
#define SCALE_ROLL        30.0        // from -10..+10                        // divided by 10
#define SCALE_POWER        100.0                        // from 0..100

//Scale factors for joysticks to norm vaue between -1 and 1
#define THROTTLE_MIN        306
#define THROTTLE_MAX        1783
#define RUDDER_MIN                6450
#define RUDDER_MAX                7884
#define ELEVATOR_MIN        4400
#define ELEVATOR_MAX        5834
#define AILERON_MIN                2354
#define AILERON_MAX                3788

//Values for Flightmode ON/OFF
#define FLIGHTMODE0                        8498
#define FLIGHTMODE1                        9930

void RC_Receive_Int_Handler();
void BT_Receive_Int_Handler();
void WatchRC(void* Temp);
void WatchRC_Init();
uint8_t GetRCCount();
int mergeBytes (uint8_t a, uint8_t b);
void GetRCData(float* power, float* yaw, float* pitch, float* roll);
long map(long x, long in_min, long in_max, long out_min, long out_max);
#endif /* RCRECEIVE_H_ */
8#

ず竹叶萧萧は

发表于 2016-8-23 16:31:43 | 只看该作者

本帖最后由 ず竹叶萧萧は 于 2016-8-23 16:40 编辑
sjh2100 发表于 2016-8-22 21:16
如何下载pinus 调控板软件?使用jlink方式接线没有说清楚,我的jlink无法连接。请楼主百忙之中指点一二。谢 ...

接线问题吗?把Jlink的SWDCLK和SWDIO两根线引出来然后按照电路图接好就行了,还有地线。没太懂你的问题所以不一定能帮上忙。http://blog.sina.com.cn/s/blog_154d272c90102wo6t.html
9#

ず竹叶萧萧は

发表于 2016-8-23 17:06:02 | 只看该作者

22-2016421 发表于 2016-8-22 15:28
大神,为何我的RCReceive.h中没有#define BT_ONLY?难道是代码不够新?
/*
* RCReceive.h

你没删吧,它是被注释掉的。
/*
* RCReceive.h
*
*  Created on: 22.12.2014
*      Author: maan
*/

#ifndef RCRECEIVE_H_
#define RCRECEIVE_H_

#include <DAVE3.h>
#include "BluetoothProtocol/BluetoothProtocol.h"

#define RC_UART_Handle                   UART001_Handle0
#define BT_UART_Handle UART001_Handle2

//-------------------------------------------------
//Only Bluetooth-App-Control needed

//#define BT_ONLY
//-------------------------------------------------
10#

ず竹叶萧萧は

发表于 2016-8-23 17:08:11 | 只看该作者

sjh2100 发表于 2016-8-22 21:16
如何下载pinus 调控板软件?使用jlink方式接线没有说清楚,我的jlink无法连接。请楼主百忙之中指点一二。谢 ...

http://blog.sina.com.cn/s/blog_154d272c90102wo6t.html
这里有接线方式,不知道你是不是想问这个
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条