查看: 2109|回复: 24

[技术讨论] 飞控套件上手ABC

[复制链接]

0

主题

0

好友

101

积分

童生

Rank: 2

  • TA的每日心情

    2016-7-14 01:29
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2016-7-12 10:38:19 |显示全部楼层

    ----------------------------------------------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,
           在这里,找到没~
           QQ截图20160713192601.jpg

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

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

           QQ截图20160713200329.jpg


          

    然后是安装


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


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

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

           工程导入

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

           QQ截图20160713202356.jpg

          
           左上角,File-Import-DAVE Project

           QQ截图20160713210632.jpg

           QQ截图20160713210807.jpg


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

           QQ截图20160713210953.jpg


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

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

    QQ截图20160712102550.jpg



    properties,出来工程设置框。


    QQ截图20160712102747.jpg



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

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

    像这样


    QQ截图20160712103123.jpg


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

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


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


    他也是按照流程做了,可还是出现头文件的缺失: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接口与电脑相连
           在这里

           QQ截图20160713222508.jpg


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

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


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

    电调固件烧写

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


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

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

           QQ截图20160713233421.jpg


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

           QQ截图20160713234033.jpg


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

           QQ截图20160713234240.jpg


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

           QQ截图20160713234431.jpg


           嗯,对,现在: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脚。

           QQ截图20160714004232.jpg



           下面介绍测试例子。

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

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

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


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

           QQ截图20160714000910.jpg


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

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

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

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


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

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


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


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


       QQ截图20160714005318.jpg



            看,是有吧。

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

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

           别 2 了。。。

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

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

    6.关于飞控的遥控方法

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


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



           另一个消息就是,这个接口,并不是惯性思维想到的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信号的改接方法和输出方式。

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


    回复

    使用道具 举报

    0

    主题

    0

    好友

    14

    积分

    白丁

    Rank: 1

  • TA的每日心情
    郁闷
    2016-7-19 16:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-7-16 10:41:51 |显示全部楼层
    对我帮助很大,谢谢
    回复

    使用道具 举报

    2

    主题

    1

    好友

    83

    积分

    童生

    Rank: 2

  • TA的每日心情
    难过
    2016-8-16 16:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-7-27 15:43:04 |显示全部楼层
    谢谢,对我帮助也很大
    回复

    使用道具 举报

    1

    主题

    0

    好友

    80

    积分

    童生

    Rank: 2

  • TA的每日心情
    奋斗
    2016-10-6 13:13
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2016-8-7 15:20:23 |显示全部楼层
    多谢分享,最后两个图片看不了  楼主能否重新上传最后两张图片 多谢
    回复

    使用道具 举报

    3

    主题

    0

    好友

    51

    积分

    童生

    Rank: 2

  • TA的每日心情

    2016-8-14 11:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2016-8-14 14:42:05 |显示全部楼层
    楼主可否发一份成功移植到keil下的工程???我照着教程文档做下去,出现了很多问题,如下图。
    AZQ0CD@[Q]7`XW{0PY8)U3G.jpg
    RD2K)H}MH@LX@1U@{OU%~ST.png
    回复

    使用道具 举报

    0

    主题

    0

    好友

    101

    积分

    童生

    Rank: 2

  • TA的每日心情

    2016-7-14 01:29
  • 签到天数: 2 天

    [LV.1]初来乍到

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

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

    使用道具 举报

    2

    主题

    0

    好友

    208

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    慵懒
    7 天前
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2016-8-22 08:06:25 |显示全部楼层
    本帖最后由 sjh2100 于 2016-8-22 09:25 编辑

    RCReceive.h文件中:

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

    //#define BT_ONLY
    //-------------------------------------------------
    如何修改,就把注释行前缀去掉吗?后面没有定义内容呢

    main.c中含有
    //----------------------------------------------------------------------------
    //
    //                Default Mode: RC controlled with switch for Bluetooth-App Control
    //                (for Bluetooth only Version "#define BT_ONLY" in the RCReceive.h)
    //
    //----------------------------------------------------------------------------

    回复

    使用道具 举报

    1

    主题

    0

    好友

    120

    积分

    童生

    Rank: 2

  • TA的每日心情
    郁闷
    2016-9-1 11:36
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 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_ */
    回复

    使用道具 举报

    2

    主题

    0

    好友

    208

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    慵懒
    7 天前
  • 签到天数: 10 天

    [LV.3]偶尔看看II

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

    使用道具 举报

    2

    主题

    0

    好友

    61

    积分

    童生

    Rank: 2

  • TA的每日心情
    开心
    2016-8-23 20:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 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
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-9 04:13 , Processed in 0.161964 second(s), 20 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部