|
本帖最后由 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电阻。
文字能力有限,写的乱七八糟的,大家将就看吧
|
欢迎继续阅读楼主其他信息
|