5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 3493|回复: 21
打印 上一主题 下一主题

arduino pro mini 4合1多协议高频头

[复制链接]
跳转到指定楼层
楼主
发表于 2020-5-19 23:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 t20109020 于 2020-5-20 10:34 编辑

开源项目地址:https://github.com/pascallanger/DIY-Multiprotocol-TX-Module


网上淘的拆机6mm空心杯飞控板子,就是为了这个小东西才整了这个多协议高频头。
自己胡乱整的,相当的粗糙,只加了nrf24l01模块


原理图

电路看起来相当简单,这也是我开整的关键原因
3.3v电源部分中的22uf电容我改成了100uf也是可以的。
因为手里没有旋转编码开关,所以改成了4路拨码开关,原理可参见下图。

旋转开关的1248四个脚位对应4路拨码开关


上面这张原理图比较直观,但没有画出isp接口部分,下面补张图



焊接好isp接口,然后使用usbasp编程器下载程序。注意下载程序时要把旋转开关拨到0位置或4路拨码开关全部断开,否则无法下载程序!更重要的是:编程器要调到3.3v档位,编程器要调到3.3v档位,编程器要调到3.3v档位

板子制作好之后第一次上传程序前需要先修改arduino pro mini的熔丝位,如下


扩展位     高位       低位
0xFD     0xD3      0xFF


编程器工具我用的Progisp1.72,也可以使用官方推荐的AVR8 Burn-O-Mat,下载地址:http://avr8-burn-o-mat.brischalle.de/avr8_burn_o_mat_avrdude_gui_en.php
编程器驱动程序下载地址:http://www.protostack.com/downlo ... -x86-x64-v3.0.7.zip

官方教程中讲到完成熔丝位设置后需要上传BootLoaders,但是既然有编程器还要什么BootLoaders,事实证明没有BootLoaders也可以,在arduino ide中选no BootLoader上传或使用编程器上传都可以,非常灵活。

接下来把arduino ide升级到1.8.5以上。
附加开发板管理器地址:https://raw.githubusercontent.co ... n1_board_index.json
在ide开发板管理器中安装multi 4 in 1 avr boards
从github上把源码DIY-Multiprotocol-TX-Module-master.zip下载来

由于arduino空间有限,需要舍弃注释掉一些不需要的协议。
修改_Config.h配置文件
我只安装了nrf24l01模块,所以另外3个注释掉,减了不少肥!
//#define A7105_INSTALLED
//#define CYRF6936_INSTALLED
//#define CC2500_INSTALLED
#define NRF24L01_INSTALLED

编译发现还是太大,下载不了,继续减肥,下面是NRF24L01支持的所有协议,继续注释掉不需要的协议吧。
//The protocols below need a NRF24L01 to be installed
#define        ASSAN_NRF24L01_INO
#define        BAYANG_NRF24L01_INO
#define        BAYANG_RX_NRF24L01_INO
#define        BUGSMINI_NRF24L01_INO
#define        CABELL_NRF24L01_INO
#define        CFLIE_NRF24L01_INO
#define        CG023_NRF24L01_INO
#define        CX10_NRF24L01_INO                 //Include Q2X2 protocol
#define        DM002_NRF24L01_INO
#define        E01X_NRF24L01_INO
#define        ESKY_NRF24L01_INO
#define        ESKY150_NRF24L01_INO
#define        FQ777_NRF24L01_INO
#define        FX816_NRF24L01_INO
#define        FY326_NRF24L01_INO
#define        GD00X_NRF24L01_INO
#define        GW008_NRF24L01_INO
#define        HISKY_NRF24L01_INO
#define        HONTAI_NRF24L01_INO
#define        H8_3D_NRF24L01_INO
#define        KF606_NRF24L01_INO
#define        KN_NRF24L01_INO
#define        MJXQ_NRF24L01_INO
#define        MT99XX_NRF24L01_INO
#define        NCC1701_NRF24L01_INO
#define        POTENSIC_NRF24L01_INO
#define        PROPEL_NRF24L01_INO
#define        Q303_NRF24L01_INO
#define        SHENQI_NRF24L01_INO
#define        SLT_NRF24L01_INO
#define        SYMAX_NRF24L01_INO
#define        TIGER_NRF24L01_INO
#define        V2X2_NRF24L01_INO
#define        V761_NRF24L01_INO
#define        V911S_NRF24L01_INO
#define        XK_NRF24L01_INO
#define        YD717_NRF24L01_INO
#define        ZSX_NRF24L01_INO

为了ppm通道响应正常,根据自己的遥控器调整
我的是富斯i6,通道有效值为1000-2000,所以我选了TX_CUSTOM(1100-1900),开始不知道修改这里,使用默认的TX_ER9X,导致推油电机不转,折腾了我一天才搞定。
/** TX END POINTS **/
//It is important for the module to know the endpoints of your radio.
//Below are some standard transmitters already preconfigured.
//Uncomment only the one which matches your transmitter.
#define TX_ER9X                        //ER9X/ERSKY9X/OpenTX        ( 988<->2012 microseconds)
//#define TX_DEVO7                //DEVO                                        (1120<->1920 microseconds)
//#define TX_SPEKTRUM        //Spektrum                                (1100<->1900 microseconds)
//#define TX_HISKY                //HISKY                                        (1120<->1920 microseconds)
//#define TX_MPX                //Multiplex MC2020                (1250<->1950 microseconds)
//#define TX_WALKERA        //Walkera PL0811-01H        (1000<->1800 microseconds)
//#define TX_CUSTOM                //Custom

#if defined(TX_CUSTOM)
        #define PPM_MAX_100        1900        //        100%
        #define PPM_MIN_100        1100        //        100%
#endif

协议选择器也困扰了我许久,这里说明一下
配置文件中默认只开启了一页,若要开启多页,修改NBR_BANKS 值即可。
一页里面可以放14种协议,通常情况已经完全够用,所以我这里没有开启多页,选择了默认值。

//The parameter below indicates the number of desired banks between 1 and 5. Default is 1.
#define NBR_BANKS 1


下面是第一页的协议,把这14个协议修改成自己需要的协议就ok了。旋转开关1-14位置(同时开启ppm模式)对应这14个协议,0位置开启串口模式,15位置设置切换分页。
#if NBR_BANKS > 0
//******************************       BANK 1       ******************************
//        Switch        Protocol                 Sub protocol        RX_Num        Power                Auto Bind                Option        Chan Order
/*        1        */        {PROTO_FLYSKY,        Flysky                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },
/*        2        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 0
/*        3        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        1        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 1
/*        4        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        2        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 2
/*        5        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        3        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 3
/*        6        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        2        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 4
/*        7        */        {PROTO_AFHDS2A,        PWM_IBUS        ,        3        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },        // RX number 5
/*        8        */        {PROTO_SFHSS,        H107                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },
/*        9        */        {PROTO_FRSKYV,        NONE                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        40        ,        0x00000000 },        // option=fine freq tuning
/*        10        */        {PROTO_FRSKYD,        NONE                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        40        ,        0x00000000 },        // option=fine freq tuning
/*        11        */        {PROTO_FRSKYX,        CH_16                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        40        ,        0x00000000 },        // option=fine freq tuning
/*        12        */        {PROTO_FRSKYX,        EU_16                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        40        ,        0x00000000 },        // option=fine freq tuning
/*        13        */        {PROTO_DEVO        ,        NONE                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },
/*        14        */        {PROTO_WK2x01,        WK2801                ,        0        ,        P_HIGH        ,        NO_AUTOBIND        ,        0        ,        0x00000000 },
#endif

LED指示灯灭:程序未运行或未选择与关联模块有关的协议
Flash(on = 0.05s,off = 1s):选择了无效的协议(从编译中排除或无效的协议编号)
倒置Flash(on = 1s,off = 0.1s):模块正在等待绑定事件(从通道绑定或在无线电GUI中绑定)以绑定模式启动协议
快速闪烁(开= 0.1s,关= 0.1s):正在进行绑定
慢闪(开= 0.5s,关= 0.5s):已选择串行,但在RX引脚上未看到有效信号。
慢速闪烁(开= 1s,关= 1s):已选择PPM,但在PPM引脚上未看到有效信号。
快速两次闪烁(on = 0.1s,off = 0.1s,on = 0.1s,off = 0.5s):启用串行调试并正在等待串行连接
亮:模块处于正常操作模式(正在传输控制信号)。


如果模块始终/有时在开机时绑定,而无需按下按钮:
带有外部状态LED的Arduino Pro Mini:要解决此问题,请在D13和3.3V之间连接一个10K电阻。


文字能力有限,写的乱七八糟的,大家将就看吧





欢迎继续阅读楼主其他信息

沙发
发表于 2020-5-20 09:30 | 只看该作者
这是与遥控配合使用还是自成遥控体系。
3
发表于 2020-5-20 10:05 | 只看该作者
图一的那种能驱动,是什么协议
4
 楼主| 发表于 2020-5-20 10:08 | 只看该作者
=爱好者= 发表于 2020-5-20 09:30
这是与遥控配合使用还是自成遥控体系。

与控配合使用,其实就是avr版本的四合一高频头,网上卖的是stm32版,其他功能一样。
来自安卓客户端来自安卓客户端
5
 楼主| 发表于 2020-5-20 10:17 | 只看该作者
=爱好者= 发表于 2020-5-20 10:05
图一的那种能驱动,是什么协议

mt99子协议
来自安卓客户端来自安卓客户端
6
发表于 2020-5-20 13:10 | 只看该作者
控是ER9X的么
7
 楼主| 发表于 2020-5-20 13:22 | 只看该作者

所有控都支持,er9x可以使用串口模式,直接可以在控上设置协议,旋转开关都省了。
8
发表于 2020-5-20 15:04 | 只看该作者
t20109020 发表于 2020-5-20 13:22
所有控都支持,er9x可以使用串口模式,直接可以在控上设置协议,旋转开关都省了。

乐迪的有没有串口输出
9
 楼主| 发表于 2020-5-20 16:12 | 只看该作者
=爱好者= 发表于 2020-5-20 15:04
乐迪的有没有串口输出

那就不清楚了,就算没有串口使用ppm模式也是一样的。
来自安卓客户端来自安卓客户端
10
发表于 2020-5-21 08:56 | 只看该作者
t20109020 发表于 2020-5-20 16:12
那就不清楚了,就算没有串口使用ppm模式也是一样的。

不同的协议用不同的高频头吗
11
 楼主| 发表于 2020-5-21 19:30 | 只看该作者
=爱好者= 发表于 2020-5-21 08:56
不同的协议用不同的高频头吗

四合一高频头主板上可以装四种射频模块(a7105,cyrf6936,cc2500,nrf24l01),不同的射频模块支持不同的协议。比如我目前只需要mt99协议,该协议属于nrf24l01模块,所以我diy的板子上只安装了nrf24l01。
来自安卓客户端来自安卓客户端
12
发表于 2020-5-22 10:59 | 只看该作者
t20109020 发表于 2020-5-21 19:30
四合一高频头主板上可以装四种射频模块(a7105,cyrf6936,cc2500,nrf24l01),不同的射频模块支持不同的协 ...

24L02与01协议一样吗?


图一的小飞机飞起来怎么样,支持手动飞行吗
13
发表于 2020-5-26 10:34 | 只看该作者
图一用那种电机合适
14
 楼主| 发表于 2020-5-26 10:50 | 只看该作者
=爱好者= 发表于 2020-5-26 10:34
图一用那种电机合适

原装应该是6mm的,估计7mm也行,我用的615。
来自安卓客户端来自安卓客户端
15
发表于 2020-5-27 09:59 | 只看该作者
t20109020 发表于 2020-5-26 10:50
原装应该是6mm的,估计7mm也行,我用的615。

有手动模式没有
16
 楼主| 发表于 2020-5-27 14:10 | 只看该作者
=爱好者= 发表于 2020-5-27 09:59
有手动模式没有

没有,玩具级别的,自稳模式,只有一键翻滚之类的功能。
来自安卓客户端来自安卓客户端
17
发表于 2020-7-9 09:58 | 只看该作者
请教,电机安装的橡皮圈哪里获得?
18
发表于 2020-7-20 14:38 | 只看该作者
你的有回传吗?大神
19
发表于 2021-1-3 15:03 | 只看该作者
大神楼主:四合一高频头的串口通信协议详细数据结构有吗?您的另一个帖子“4合1高频头串口模式通信协议,留贴备忘”中还有第一字节的前六bit的含义未解释清楚,能提供详细的内容吗?
主要是四合一高频头如果采用16ch PPM输入,延迟太大,如果能把PPM信号改成sbus数据输入就爽了
20
发表于 2021-1-13 09:34 | 只看该作者
本帖最后由 294689006 于 2021-1-25 12:47 编辑

楼主好,有么有做接收机啊。。。先做接收机。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表