----------------------------------------------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信号的改接方法和输出方式。 好晚了,明晚再码字吧。。。
|