首页资源分类电子电路模拟及混合电路 > 袁博士飞行器

袁博士飞行器

已有 447969个资源

下载专区

文档信息举报收藏

标    签:飞行器

分    享:

文档简介

四轴飞行器建模仿真电路

文档预览

圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 圆点博士小四轴 2014 版使用手册 第一章:小四轴电机安装方法 第二章:小四轴引导模式进行硬件测试 第三章:小四轴应用模式---DMP 姿态测试 第四章:小四轴应用模式---手柄测试 第五章:小四轴通讯协议 1 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 第一章:小四轴电机安装方法 一:小四轴十字模式下的电机安装 前后:黑白电机。左右:红蓝电机 前后:安装 B 浆。左右:安装 A 浆 前后:逆时针转(俯视图)。左右:顺时针转(俯视图) 风向检查:所有电机必须朝地面吹风。 电机转向检查:相邻电机转向必须相反 2 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 第二章:小四轴引导模式 一:进入小四轴引导模式 二:运行飞行器控制软件 三:串口波特率设置方法 四:测试小四轴和蓝牙模块的通讯 五:查询蓝牙模块的主从模式 六:查询和设置蓝牙模块的波特率 七:清除蓝牙连接 八:小四轴飞行器操作快捷键 九:检查小四轴的电压检测功能 十:检查陀螺仪和加速度计的安装情况 十一:检查磁力计的安装情况 十二:蓝牙连接测试 十三:进行 LED 灯的测试 十四:进行电机测试 3 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 一:进入小四轴引导模式 首先,用 USB 线把小四轴连接到电脑。在小四轴上开关处于关闭状 态,并且锂电池已经安装的情况下,小四轴上的充电指示灯会亮起。 然后,打开小四轴上的开关,此时小四轴上的的系统指示灯会进行每 秒两次的快速闪烁,表明小四轴 运行在引导模式。用户需要在 5 秒内 按下小四轴上的白色开关进入硬件维护模式。如果 5 秒内开关没有被 按下,小四轴会退出引导模式,自动进入应用模式。当小四轴运行在 应用模式下时,指示灯变成每秒一次的闪烁。当小四轴运行在应用模 式下时,电脑可能会提示无法识别的 USB 设备,这属于正常情况,因 为只有在引导模式下,才支持 USB,在应用模式下,USB 仅被用于充 电。 上电 (指示灯闪烁) 按下白色开关 引导模式 (用于更新固件和硬件测试) 二:运行飞行器控制软件,进入硬件维护模式,刷新并打开 USB。这 时候,标题会显示引导程序版本(如下图所示),如果不显示,请检 查 USB 连接。 4 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 三:串口波特率设置方法。要实现小四轴和蓝牙模块的通讯,小四轴 的 STM32 所设定的串口波特率必须和蓝牙模块当前设定的一致。小四 轴的默认出厂设置使用的是 115200 的波特率,即小四轴的 STM32 固 件的波特率设置为 115200,并且蓝牙模块的串口波特率也设置为 115200。 注意:如果你购买的是焊接好的套件,请勿随意修改 STM32 和蓝牙模 块的串口波特率,错误的操作会导致蓝牙通讯失败。 四:测试小四轴和蓝牙模块的通讯。在小四轴芯片数据测试栏输入 AT, 并回车,在小四轴处于非连接的状态下,小四轴会返回应答字符串 OK。 注意,如果小四轴蓝牙处于已经处于连接状态,那么蓝牙模块将不会 应答该指令。 5 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 五:查询蓝牙模块的主从模式。在小四轴芯片数据测试栏输入 AT+ROLE? 即可以查询到当前蓝牙模块处于主模式还是从模式。小四轴 的蓝牙模块出厂默认设置模式是从模式,USB 蓝牙适配器上使用的是 主模式。 6 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 六:查询和设置蓝牙模块的波特率。通过在小四轴芯片数据测试栏输 入下列指令,可以查询和设置蓝牙模块的波特率。 注意,如果设置了新的波特率,必须给小四轴重新上电才能开始生 效。另外,改动蓝牙模块波特率后,如果 STM32 固件的波特率没有做 对应的改变,则小四轴将会无法和蓝牙模块通讯。 7 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 如果用户更换了小四轴上出厂的蓝牙模块,并且该蓝牙模块默认波特 率是 9600,那么用户可以按照下列顺序对蓝牙模块进行设置: 首先按下 F5, 把 STM32 固件的波特率设置为 9600。 然后按下 F6, 修改蓝牙模块的波特率到 115200。 然后给小四轴重新上电。 8 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 七:清除蓝牙连接。在蓝牙处于主模式的情况下, 如果它已经和某一个 从蓝牙设置连接过,那么必须首先清除原有的连接信息,才能从新连 接新的从设备。对于处于从模式的蓝牙,不需要使用该指令。 八:小四轴飞行器操作快捷键。通过按下 F1, 用户可以获取更多操作信 息。 注意:请慎用快捷键 F12。一旦执行 F12, 蓝牙模块的串口模块波特率 将会被修改为 230400。这将会导致小四轴和蓝牙模块失去通讯。 9 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 如果你不小心进行了该操作。请按照下列操作顺序 进行修复: 首先:按下 F11,使得 STM32 波特率修改到 230400,和蓝牙模块一致。 其次:按下 F6 把蓝牙模块波特率修改回到 115200。 然后:重新给小四轴上电。 10 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 九:检查小四轴的电压检测功能。小四轴提供了两路电压的检测,当 锂电池没有安装的时候,所检测的电压将会低于 4V,软件会显示失败。 十:检查陀螺仪和加速度计的安装情况。点击陀螺仪和加速度机的测 试,软件会返回芯片的 ID 数据,并显示成功。如果该测试显示失败, 则需要检查陀螺仪和加速度计芯片是否有焊接问题。此时,在小四轴 芯片数据测试栏会显示一些数据供用户参考。 注意:这些数据仅供用户参考,在不同的测试情况下,所获得的数据 会不同,因而不作为芯片检测的依据。 11 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 十一:检查磁力计的安装情况。点击磁力计测试,软件会返回芯片的 ID 数据,并显示成功。如果该测试显示失败,则需要检查磁力计芯片 是否有焊接问题。此时,在小四轴芯片数据测试栏会显示一些数据供 用户参考。 注意:该部分仅使适用于用户已经在小四轴上安装了磁力计芯片 HMC5883L 或者 MPU9150 芯片的情况。另外,这些数据仅供用户参 考,在不同的测试情况下,所获得的数据会不同,因而不作为芯片检 测的依据。 12 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 十二:蓝牙连接测试。点击该测试,软件会返回 OK。 13 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 注意:如果小四轴上的蓝牙已经和其他蓝牙设备连接上,则蓝牙模块 会工作在数据透传模式,从而不响应测试指令,软件此时会显示 NA。 此时,用户应该断开小四轴和其它设备的连接后,再测试。 十三:进行 LED 灯的测试。根据用户所使用的小四轴支架的不同,有 可能只能点亮一个 LED 灯。这属于正常现象。 注意:由于小四轴上硬件设计支持的是 3V 供电的高亮 LED 灯,对于不 是高亮的 LED 灯,由于工作电压不同,不能使用在小四轴上。连接该 类 LED 灯到小四轴,会导致小四轴死机或者损坏等风险。 14 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 十四:进行电机测试。在电机测试中,由于软件使用的电机 PWM 驱动 信号占空比教小,有的电机可能无法驱动。此时用户可以根据下列步 骤尝试手动更改电机驱动信号来进行测试。在进行电机测试时,用户 应该注意不要被浆叶打到。 注意:电机测试必须在锂电池已经连接的情况下进行。 第一步:使用指令 pwmon 打开电机电源。 第二步:设置电机驱动信号占空比,指令格式为:pwm+电机编号+占 空比。如 pwmm120 所代表的意思是把电机 M1 的占空比设置到 20%。 每次只能测试一个电机,不能同时转动所有电机。 第三步:测试完成后,使用指令 pwmoff 关闭电机电源。 15 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 第三章:小四轴应用模式---DMP 姿态测试 一:进入小四轴应用模式 二:安装 USB 蓝牙适配器驱动 三:打开小四轴和上位机软件 四:连接蓝牙和上位机 五:查看小四轴姿态 六:查看小四轴欧拉角波形图 一:进入小四轴应用模式 首先,确保小四轴锂电池已经正确安装。注意,请勿反插电池,反插 电池会烧毁小四轴。如果没有电池,也可以用 USB 暂时供电。但是, 在无电池模式下,一旦试图驱动电机转动,小四轴会因为供电不足, 自动重新启动。 然后,打开小四轴上的开关,此时小四轴上的的系统指示灯会进行每 秒两次的快速闪烁,表明小四轴正在运行引导模式。用户等待 5 秒 后,小四轴会退出引导模式,自动进入应用模式。当小四轴运行在应 用模式下时,指示灯变成每秒一次的闪烁。当小四轴运行在应用模式 下时,电脑可能会提示无法识别的 USB 设备,这属于正常情况,因为 只有在引导模式下,才支持 USB,在应用模式下,USB 仅被用于充 电。 引导模式 (用于更新固件和硬件测试) 5 秒延时 应用模式 (运行用户代码) 16 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 二:首先运行 USB 蓝牙适配器驱动程序(如下图所示)安装 USB 蓝牙 适配器驱动。 安装完成后,插入 USB 蓝牙适配器(套件 T2)。此时系统会自动安装 驱动。用户可以在系统属性中检查驱动安装是否正常。 注意:目前笔记本电脑所搭配的蓝牙 4.0 无法和小四轴的蓝牙 4.0 模块 连接。 当前,蓝牙 4.0 串口模块只支持和与它类似的蓝牙 4.0 串口模 块连接,或者与支持蓝牙 4.0 的手机连接。 17 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 三:打开小四轴和上位机软件。刷新并打开无线蓝牙串口,然后进入 串口终端界面。 四:连接蓝牙和上位机。在选择显示方式一栏点击蓝牙配置。如果窗 口在不断显示数据,那么表明小四轴已经和上位机软件连接上。否则 点击进行蓝牙连接测试。在蓝牙连接成功后,请记得点击退出蓝牙连 接测试。 注意:如果蓝牙连接无法成功,请试图重新插拔 USB 蓝牙适配器。 18 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 五:查看小四轴姿态。在蓝牙连接成功后,用户即可以在上位机主界 面查看到小四轴姿态。用户也可以把显示方式设置为姿态/电压/手柄来 查看数据。 六:查看小四轴欧拉角波形图。用户也可以进入波形显示界面来查看 波形图。波形图的纵坐标显示范围是-180 度到+180 度。 注意:当采样率低于 60 帧每秒时,姿态显示将会有可能出现停顿。 19 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 第四章:小四轴应用模式---手柄测试 一:选择电脑游戏手柄 二:连接游戏手柄 三:更新小四轴下位机软件 四:小四轴控制命令 五:手柄控制 六:按键说明 七:电机转动 20 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 一:选择电脑游戏手柄 圆点博士小四轴支持通过游戏手柄来控制小四轴。目前测试通过的游戏手 柄包括: 1,微软 XBOX360 摇杆 2,北通的阿修罗 SE。目前市场价 99 元左右,记得要购买 USB 有线版本 21 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 二:连接游戏手柄。通过 USB 口把手柄连接到电脑后,系统会自动给手柄 安装驱动程序。驱动安装完成后,运行圆点博士上位机软件。这时,上位 机软件会自动检测和连接游戏手柄。 注意:必须使是 1.4 版本以上的上位机软件。 22 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 三:更新小四轴下位机软件。由于小四轴出厂预装的固件并不支持手柄控 制,所以用户需要首先进行固件更新。固件更新的方法和前面的描述相 同。 第 1 步:通过硬件维护菜单进入引导模式,并打开 USB 连接。 第 2 步:选择位于上位机软件 FWH 目录下的 bsact_app_fwh_ctrl_v01.bin 文件,并点击下载固件文件,直到完成固件的下载。固件下载完成后,小 四轴会自动运行更新过的固件。此时,用户可以断开 USB 线。 注意一:更新该固件后,小四轴上的 LED 指示灯变为常亮。 注意二:更新该固件后,上位机不再显示姿态。 第 3 步:通过蓝牙串口把小四轴以无线的方式和上位机建立连接,并通过 上位机主界面打开串口终端窗口。用户此时可以进行下列人机互动测试。 23 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 四:小四轴控制命令。 1.打开电机电源和电机 LED 灯。可以有两种方式实现该操作。 方式一:直接点击主界面上的解锁电机 方式二:在串口终端输入命令 pwon,并回车。 此时,用户可以看到小四轴返回字符串:D-motor power on。同时小四轴 电机下方的 LED 灯被点亮。如果要关闭电机电源,可以点击主界面上的锁 定电机,或者使用命令 pwof. 2.查看下位机固件版本。通过在串口终端输入命令 ver,并回车,可获取固 件版本信息。 3. 查看电池电压。通过在串口终端输入命令 bat,并回车,可获取电压信 息。电压的单位是毫伏。 注意:在电机电源关闭的情况下,无法获取正确的电池电压。 24 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 4.查看下位机 PID 参数。通过 pall 指令可以获得 X,Y,Z 三轴的 P 参数,通 过 iall 指令可以获得 X,Y,Z 三轴的 I 参数。 5.设置下位机 PID 参数。通过指令 wrpx****, wrpy****, wrpz****, wrix****, wriy****, wriz****六个指令可以设置 PID 中 X,Y,Z 三轴的 P 和 I 参数。其中****必须是 0000-9999 范围内的十进制数。如 wrpx0012 把 X 轴的 P 参数修改为 12。 注意:在上述例子中,不可以使用 wrpx12, 必须为 wrpx0012。 6.查看控制参数。通过 ctrl 可以获取当前的油门,控制方向参数。返回的 参数数据顺序为:油门,前后,左右,航偏。 7.设置控制参数。通过 rc 指令可以设置油门,控制方向参数。参数顺序 为:油门,前后,左右,航偏。具体使用方式是:rcaabbccdd。 .其中 aa 的取值范围是 00-FF 到十六进制数,代表 0-255 的油门范围。 .其中 bb,cc,dd 的取值范围是 00-7F 或者 80-FF 的十六进制数,分别代表 前后,左右,航偏方向控制。不过最高位代表控制方向,所以数据范围是 0-127 的正方向数据或者反方向数据。 注意一:进行控制参数的设置的时候,上位机需要处于非飞行模式。因为 在飞行模式下,参数会被游戏手柄自动更新。通过命令设置的控制参数会 无效。 注意二:在下位机源代码文件 bs004_motor.c 中,有一个参数叫 BS004_Motor_Scale。它是用于按比例放大油门数据的。即我们所发送的油 门数据,在下位机固件中会被按照 BS004_Motor_Scale 所定义的数字进行 放大。比如,当我们发送 rc60000000 的时候,下位机实际的油门数值为 25 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 0x60 乘以 BS004_Motor_Scale。当前,程序默认设置为 BS004_Motor_Scale=10。如果为了在相同油门下获得更快的转速,那么应 该把 BS004_Motor_Scale 的值修改到更大的数。 五:手柄控制。在上位机界面点击进入飞行测试。此时,游戏手柄数据被 接入,通过拨动手柄上的摇杆,可以实现油门和方向的控制。 注意一:进行手柄控制的时候,上位机需要处于飞行模式。 注意二:如果主界面没有显示 XBOX360 手柄,可能当前连接的手柄和 XBOX360 不兼容,而无法控制。 六:按键说明。右上角四个按钮 A B X Y 用于设置或者取消左手油门和非 线性油门。在默认的情况下,右边的摇杆用于控制油门,左上角的摇杆用 于控制上下和左右方向,当设置了左手油门后,左上角的摇杆用于控制油 26 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 门,右边的摇杆用于控制上下和左右方向。在非线性油门模式下,输出的 油门数据和摇杆位置不成线性关系,在油门数据小的情况下,油门数据随 摇杆变化大,在油门数据大的情况下,油门数据随摇杆变化小。非线性油 门的设计更有利于飞行。偏航是由手柄前方的左右两个按钮来控制的,通 过控制这两个按钮,可以实现偏航。 七:电机转动。在飞行模式下, 1. 当推动油门摇杆的时候,小四轴上的四个电机会一起转动。 2. 当向上推动方向摇杆的时候,前面的电机(M1)会转动 3. 当向上推动方向摇杆的时候,后面的电机(M3)会转动 4. 当向右推动方向摇杆的时候,右边的电机(M2)会转动 5. 当向左推动方向摇杆的时候,左边的电机(M4)会转动 6. 当推动右边的偏航按钮的时候,右边的电机(M2)和左边的电机(M4)会 27 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 转动。 7. 当推动左边的偏航按钮的时候,前面的电机(M1)后面的电机(M3)会转 动。 8. 同时推动这些按钮的时候,电机根据累加的结果进行转动。电机的转 速取决于手柄的摇杆位置,一次小四轴代码中的油门放大比例系数 BS004_Motor_Scale。 28 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 第五章:小四轴通讯协议 一:小四轴发送数据到上位机通讯协议说明 二:发送小四轴姿态数据给上位机 三:上位机发送数据到小四轴通讯协议 四:小四轴接收数据的代码结构 五:小四轴接收数据的校验方法 六:小四轴接收数据的命令 七:小四轴接收数据的参数传递 29 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 一:小四轴发送数据到上位机通讯协议说明。小四轴和上位机采用下面 的协议方式进行通讯:数据头+数据+校验码+数据尾。所有数据采用 ASC 码的方式进行通信。 数据头: 0x3A(对应字符:) 数据区:0x30-0x39,0x41-0x46 (分别对应 0-9,A-F 的 ASC 码) 检验码:采用相加和为 00 的方式 数据尾:0x2F (对应字符/) 一个通讯格式的例子(字符串显示方式)为:B644FF431C0D1B80/ 其中数据段为:B6,44,FF,43,1C,0D,1B 其中校验码为:80 我们把各个数据依次相加: B6+44+FF+43+1C+0D+1B+80=300 取低 8 位,结果为 00,表明数据校验通过。 30 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 把上述例子转化到 ASC 码,可以得到(以十六进制表示): 3A,42,36,34,34,46,46,34,33,31,43,30,44,31,42,38,30,2F 二:发送小四轴姿态数据给上位机。首先我们结合一个小四轴发送到上 位机的欧拉角数据进行逆向分析,然后再给出一个正向分析的例子。 假定小四轴发送到上位机的欧拉角数据为 :B73C66410C4460B6/ 去除数据头,数据尾,和校验码,我们得到数据(以十六进制表示): B7,3C66,410C,4460 转为到十进制,可以得到:0x3C66=15462,0x410C=16652,0x4460=17504 第一个数字 B7 的 B 是数据类型标识,该标识告诉上位机所发送的数据 是欧拉角数据。 第一个数字 B7 的 7 是数据偏移标识,该标识告诉上位机所发送的数据 有没有作 18000 的数据偏移。 我们把第一个数字 B7 的 7 以二进制的方式来表示,得到 0111, 其中第 一个必须为 0,第 2 个为 1 表示 15462 这个数据已经做了 18000 的偏 移,依次类推,第 3 个为 1 表示 16652 这个数据已经做了 18000 的偏 移,第 4 个为 1 表示 17504 这个数据已经做了 18000 的偏移。如果为 0,则表示没有做数据偏移。 把上述的十进制数根据第一个数字 B7 中的 7 的标识,去除数据偏移价 值,可以得到: 0x3C66=15462,减去 18000=2538 0x410C=16652,减去 18000=1348 31 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 0x4460=17504,减去 18000=96 把数据除以 100,可以得到: Pitch=2538/100=25.38 度 Roll=1348/100=13.48 度 Yaw=96/100=0.96 度 通过上面的逆向数据分析,我们基本可以了解了小四轴的欧拉角数据传 播格式。下面我们来做一个正向推导。 假定我们要传一个下面的角度给上位机软件: 俯仰角(pitch)=0.02;横滚角(roll)=-0.11;偏航角(yaw)=-0.07 第一步,我们把角度放大 100 倍,依次得到 0002,-0011,-0007。 第二步,我们把负数做一个 18000 的数据偏移,依次得到: 0001,17989,17993, 转换到 16 进制为: 0001,4645,4649 由于第 2 和第 3 个数据做了 18000 的数据偏移,所以我们数据偏移标识 数据是 0011(二进制表示),添加上数据类型标识 B, 我们得到第一个 数据是: B3 因而我们得到的数据流是:B3,00,01,46,45,46,49 32 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 把上述 7 个数据相加,可以得到低两位的结果是 CE。 用 0x100-0xCE,得到校验和:32 把数据加上数据头和数据尾,则可得到: :B300014645464932/ 转化到 ASC 码,可以得到(以十六进制表示): 3A,42,33,30,30,30,31,34,36,34,35,34,36,34,39,33,32,2F 依次把上述数据通过串口发送到上位机(先发 3A,后发 2F),上位机即 可以把该欧拉角显示出来。 下面列出更多数据供大家参考: :B300DD45704394E4/ :B300DD45714394E3/ :B300DD45714394E3/ 下面为参考代码: Int Pitch=pitch*100;int Roll=roll*100;int Yaw=yaw*100; unsigned char euler_data_sign=0; if(Pitch<0) {euler_data_sign|=4;pitch+=18000;} if(Roll<0) {euler_data_sign|=2; roll+=18000;} if(Yaw<0) {euler_data_sign|=1;yaw+=18000;} mpu6050_euler_data[0]= Pitch; mpu6050_euler_data[1]= Roll; mpu6050_euler_data[2]= Yaw; for(i=0;i<3;i++){ mpu6050_euler_data_buf[i*2]=(mpu6050_euler_data[i]>>8)&0xff; mpu6050_euler_data_buf[i*2+1]=mpu6050_euler_data[i]&0xff;} data_type=0xB0| mpu6050_euler_data_sign; 33 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) checksum=data_type; for(i=0;i<6;i++) checksum+=anbt_mpu6050_euler_data_buffer[i]; checksum&=0xff; checksum=~checksum; checksum++; AnBT_Uart1_Send_Char(':');Uart1_Send_Num(data_type); for(i=0;i<6;i++)Uart1_Send_Num(mpu6050_euler_data_buf[i]); Uart1_Send_Num(checksum); Uart1_Send_Char('/'); void Uart1_Send_Num(unsigned char number){ unsigned char num_low,num_high; num_low=number&0x0f;num_high=(number&0xf0)>>4; if(num_high<10)USART_SendData(USART1,num_high+48); else USART_SendData(USART1,num_high+55) while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}; if(num_low<10)USART_SendData(USART1,num_low+48); else USART_SendData(USART1,num_low+55); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}} 三:上位机发送数据到小四轴通讯协议。小四轴和上位机采用下面的协 议方式进行通讯:数据头+数据+校验码+数据尾。所有数据采用 ASC 码 的方式进行通信。 数据头: 0x3A(对应字符:) 数据区:0x30-0x39,0x41-0x46 (分别对应 0-9,A-F 的 ASC 码) 检验码:采用相加和为 00 的方式 数据尾:0x2F (对应字符/) 34 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 四:小四轴接收数据的代码结构。小四轴在串口中断中接收数据,并完 成数据的校验。具体实现方法是: 第 1 步:串口中断触发,如果是接收中断,则从串口缓冲读取数据。相 对应的实现代码是:com_receive_data=USART_ReceiveData(USART1); 第 2 步: 检查该数据是不是数据头:0x3A(对应字符:),如果是,则 把接收数据的缓冲区指针移到开头。相对应的实现代码是: if(com_receive_data==AnBT_Command_Head) com_receive_str_index=0; 第 3 步:检查该数据是不是数据尾:0x2F (对应字符/),如果是,则 进行数据校验。相对应的实现代码是: else if(com_receive_data==AnBT_Command_Tail) … 第 4 步:如果不是数据头,也不是数据尾,则把数据装入缓冲区,并移 动数据缓冲区指针到下一个位置。相对应的实现代码是: else {com_receive_str_buf[com_receive_str_index] = com_receive_data; com_receive_str_index++; } 通过上述步骤,数据缓冲区包含了上述协议中所描述的数据区和校验 码,并且通过数据缓冲区指针,我们可以知道数据缓冲区中数据的长 度。下面我们详描如何对数据缓冲区中的数据进行处理。 35 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 五:小四轴接收数据的校验方法。 第 1 步:首先把数据区的数据进行相加。由于数据缓冲区包含了数据区 和校验码,所以在数据相加的时候,注意不要包含校验码的相加。相对 应的实现代码是: for(i=0;i58) com_receive_data_checksum_low-=55; else receive_data_checksum_low-=48; 第 4 步:合并校验码的高位和低位: com_receive_data_checksum= ((receive_data_checksum_high<<4)&0xf0)|( receive_data_checksum_low&0 x0f) 第 5 步:把从第 1 步中计算出来的数据区校验和和第 4 步中得到的校验 码进行相加,并检查结果是否为 0,对应的代码是: 36 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) com_data_checksum=com_data_checksum+receive_data_checksum; if(com_data_checksum==0) … 通过上述步骤,我们实现了对数据的校验。下面我们详描如何对数据缓 冲区中的数据进行解释。 六:小四轴接收数据的命令。通过上述步骤,我们获得了可靠的数据。 下面我们对这些数据进行解释。在小四轴的代码中,我们实现了下面十 四种命令。 首先,我们把数据区的前两个字节赋值到一个命令变量,然后进行命令 分析。 anbt_com_command_HH=com_receive_str_buf[0]; anbt_com_command_HL=com_receive_str_buf[1]; anbt_com_command_LH=com_receive_str_buf[2]; anbt_com_command_LL=com_receive_str_buf[3]; 命令一:BAT, 返回电池电压。 if((anbt_com_command_HH=='B')&&(anbt_com_command_HL=='A')&&(anb t_com_command_LH=='T')) anbt_com_command_ops=1 命令二:VER, 返回固件版本号。 if((anbt_com_command_HH=='V')&&(anbt_com_command_HL=='E')&&(anb t_com_command_LH=='R')) anbt_com_command_ops=2 命令三:CTRL, 返回控制量,如油门值,方向等。 37 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) if((anbt_com_command_HH=='C')&&(anbt_com_command_HL=='T')&&(anb t_com_command_LH=='R')&&(anbt_com_command_LL=='L')) anbt_com_command_ops=3 命令四:PALL, 返回 PID 参数中所有的 P 值。 if((anbt_com_command_HH=='P')&&(anbt_com_command_HL=='A')&&(anb t_com_command_LH=='L')&&(anbt_com_command_LL=='L')) anbt_com_command_ops=4 命令五:IALL, 返回 PID 参数中所有的 I 值。 if((anbt_com_command_HH=='I')&&(anbt_com_command_HL=='A')&&(anbt _com_command_LH=='L')&&(anbt_com_command_LL=='L')) anbt_com_command_ops=5 命令六:WRPX, 设置 PID 参数中 X 轴的 P 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='P')&&(anbt_com_command_LL=='X')) anbt_com_command_ops=6 命令七:WRPY, 设置 PID 参数中 Y 轴的 P 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='P')&&(anbt_com_command_LL=='Y')) anbt_com_command_ops=7 命令八:WRPZ, 设置 PID 参数中 Z 轴的 P 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='P')&&(anbt_com_command_LL=='Z')) 38 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) anbt_com_command_ops=8 命令九:WRIX, 设置 PID 参数中 X 轴的 I 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='I')&&(anbt_com_command_LL=='X')) anbt_com_command_ops=9 命令十:WRIY, 设置 PID 参数中 Y 轴的 I 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='I')&&(anbt_com_command_LL=='Y')) anbt_com_command_ops=10 命令十一:WRIZ, 设置 PID 参数中 Z 轴的 I 值。 if((anbt_com_command_HH=='W')&&(anbt_com_command_HL=='R')&&(an bt_com_command_LH=='I')&&(anbt_com_command_LL=='Z')) anbt_com_command_ops=11 命令十二:PWON, 打开电机电源。 if((anbt_com_command_HH=='P')&&(anbt_com_command_HL=='W')&&(an bt_com_command_LH=='O')&&(anbt_com_command_LL=='N')) anbt_com_command_ops=12 命令十三:PWOF, 关闭电机电源。 if((anbt_com_command_HH=='P')&&(anbt_com_command_HL=='W')&&(an bt_com_command_LH=='O')&&(anbt_com_command_LL=='F')) 39 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) anbt_com_command_ops=13 命令十四:RC, 发送遥控器参数给小四轴。 if((anbt_com_command_HH=='R')&&(anbt_com_command_HL=='C')) anbt_com_command_ops=14 七:小四轴接收数据的参数传递。在上一节中,我们描述了这些命令, 在这节中,我们来详细描述和这些命令一起的参数传递。 PID 设 置 命 令 中 的 参 数 传 递 。 在 上 述 PID 设 置 命 令 中 , 我 们 有 WRPX,WRPY,WRPZ,WRIX,WRIY,WRIZ 六个设置命令,在命令后面,跟随的 是参数,下面我们来看这些传递参数的处理方式。 第 1 步:因为数据区包含的数据是以 ASC 码的方式存在的,所以我们把 这些数据转换成数字。 for(i=0;i<4;i++) com_receive_data_buf[i]=com_receive_str_buf[i+4]-48; 第 2 步:对数据进行十进制转换。 pid_data_buffer=com_receive_data_buf[0]*1000+com_receive_data_buf[1] *100+com_receive_data_buf[2]*10+com_receive_data_buf[3]; 下面举例进行说明。当我们需要设置 X 轴的 P 数据到 20 的时候,在上 位机执行下面指令即可: WRPX0020。 40 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 注意: 1. 数据长度必须是四个十进制数,如上面例子中的 0020. 2. 需要把下图中把显示方式设置为姿态/电压/手柄。 3. 需要使用 1.4 及以后上位机软件版本。 接下来我们看遥控器控制命令中的参数传递。遥控参数紧跟在遥控命令 RC 后面。数据长度为四个字节,数据处理方式和 PID 略为不同。 第 1 步:因为数据区包含的数据是以 ASC 码的方式存在的,所以我们把 这些数据转换成数字。 for(i=0;i<8;i++) { com_receive_data_buf[i]=com_receive_str_buf[i+2]; if(com_receive_data_buf[i]>58) com_receive_data_buf[i]-=55; else com_receive_data_buf[i]-=48; } 第 2 步:合并高低位 for(i=0;i<4;i++) remote_ctrl_data_buffer[i]=com_receive_data_buf[i*2]*16+com_receive_da ta_buf[i*2+1]; 第 3 步:赋值给对应的控制量(gas/pitch/roll/yaw) remote_ctrl_data_gas=remote_ctrl_data_buffer[0]; remote_ctrl_data_pitch= remote_ctrl_data_buffer[1]&0x7f; 41 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) remote_ctrl_data_roll= remote_ctrl_data_buffer[2]&0x7f; remote_ctrl_data_yaw= remote_ctrl_data_buffer[3]&0x7f; 第 4 步:根据数据的最高位来设置控制量的方向(pitch/roll/yaw) if(remote_ctrl_data_buffer[1]&0x80) remote_ctrl_data_pitch = - remote_ctrl_data_pitch; if(remote_ctrl_data_buffer[2]&0x80) remote_ctrl_data_roll = - remote_ctrl_data_roll; if((remote_ctrl_data_buffer[3]&0x80)==0x80) remote_ctrl_data_yaw = - remote_ctrl_data_pitch; 下面举例进行说明。假定我们从上位机发出下面指令: RC90010283。则 表明,油门控制量为 90(十六进制),Pitch 转向量为正方向的 1,Roll 转向量为正方向的 2,yaw 转向量为负方向的 3。 注意: 1. 数据长度必须是四个十六进制数,如上面例子中的 90010283. 2. 需要把下图中把显示方式设置为姿态/电压/手柄。 3. 需要使用 1.4 及以后上位机软件版本。 42 圆点博士小四轴 2014 版使用手册 (版本 1.0,2014 年 5 月发布) 43

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。