航模.fs.ia6b 接收机记录
以下是该产品的一些属性:
属性 | 参数 |
---|---|
产品型号 | FS-iA6B |
PWM通道 | 6 |
无线频率 | 2.4G |
无线协议 | AFHDS 2A |
遥控距离 | 500~1500m(空中) |
天线类型 | 双铜管天线(150mm*2) |
电源 | 4.0-8.4V |
RSSI | 支持 |
数据接口 | PWM/PPM/i.bus/s.bus |
温度范围 | -10℃—+60℃ |
湿度范围 | 20%-95% |
在线更新 | 是 |
外形尺寸 | 47 * 26.2 * 15 mm |
机身重量 | 10g |
认证 | CE,RCM, FCC ID:N4ZFLYSKYIA10 |
- 将电池装入发射机,然后关闭发射机;
- 将对码线插到接收机电池通道插口;
- 将接收机电池连接值接收机任意通道,接收机红色灯快速闪烁表明接收机处于对码状态;
- 按住发射机对码按键不松手,同时打开发射机;
- 接收机红色灯由快闪转变成慢闪表明对码成功,拔掉对码线,红色指示灯长亮;
- 断开接收机电源;
- 关闭发射机电源;
- 将所有舵机连接到接收机,然后将电池连接到接收机;
- 检查是否所有的舵机都按照要求正常工作;
- 如果对码失败,则按照之前的步骤重来;
为了让发射,接收距离更远,你需要注意以下几个点:
- 尽量保证双天线垂直,否则会减小控制范围;
- 双天线的夹角保持在 90 度,如下所示:(注意并不是要精确的保持垂直角度,重要的是尽可能保证天线互相远离):
- 天线应该尽可能远离金属导体,至少要有 1.5cm 以上的距离,轴电缆段不受此限制,但不要过度弯曲;
- 尽可能保持天线远离电动机,调速器,或其他噪声源;
- CH1 - CH6: 表示接收机的相应通道
- Bind, VCC: 表示用于对码和输入电源的通道;
- OUT: 表示输出 PPM 数据的 i-BUS 接口,用于连接串行总线接收机,扩展通道;
- IN: 表示各种传感器数据的输入接口,数据采集模块可随意串接;
- CH1 / PPM: 表示 CH1 输出通道兼有 PPM 信号输出功能;
引脚接口示意图如下所示:
对码时候的示意图如下所示:
舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。
一般而言,舵机的基准信号都是周期为 20ms, 宽度为 1.5ms 。这个基准信号定义的位置为中间位置。 舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。 最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是 1.5ms。
一般而言,对于 180 度的舵机, 0.5ms 代表 0 度; 1ms 代表 45 度; 1.5ms 代表 90 度; 2ms 代表 135 度; 2.5ms 代表 180 度。
示意图如下所示:
下面是解析该数据的 C 代码:
// ibus.h #ifndef __IBUS_H #define __IBUS_H #include <stdint.h> typedef struct{ int16_t ch[18]; }ibus_msg; extern int ibus_parse( ibus_msg *msg, uint8_t *src ); extern void ibus_show( ibus_msg *msg ); #endif
// ibus.c #include "ibus.h" #include <stdio.h> int ibus_parse( ibus_msg *msg, uint8_t *src ){ uint16_t calc_sum = 0; uint16_t ori_sum; uint8_t i; if( src[0] != 0x20 ) return -1; if( src[1] != 0x40 ) return -1; for( i = 0; i < 30; i++ ) calc_sum += src[i]; calc_sum ^= 0xFFFF; ori_sum = src[30] + (src[31]<<8); // printf( "calc_sum: %04x %04x\n", (unsigned)calc_sum, (unsigned)ori_sum ); if( calc_sum != ori_sum ) return -1; #define IBUS_PARSE_CH1_14(x) msg->ch[x] = src[(x)*2+2] + ((src[(x)*2+3]&0xF)<<8) IBUS_PARSE_CH1_14(0); IBUS_PARSE_CH1_14(1); IBUS_PARSE_CH1_14(2); IBUS_PARSE_CH1_14(3); IBUS_PARSE_CH1_14(4); IBUS_PARSE_CH1_14(5); IBUS_PARSE_CH1_14(6); IBUS_PARSE_CH1_14(7); IBUS_PARSE_CH1_14(8); IBUS_PARSE_CH1_14(9); IBUS_PARSE_CH1_14(10); IBUS_PARSE_CH1_14(11); IBUS_PARSE_CH1_14(12); IBUS_PARSE_CH1_14(13); #define IBUS_PARSE_CH15_18(x) msg->ch[x] = ((src[(x-14)*6+3+0]&0xF0)>>4) | (src[(x-14)*6+3+2]&0xF0) | ((src[(x-14)*6+3+4]&0xF0)<<4) IBUS_PARSE_CH15_18(14); IBUS_PARSE_CH15_18(15); IBUS_PARSE_CH15_18(16); IBUS_PARSE_CH15_18(17); return 0; } void ibus_show( ibus_msg *msg ){ uint8_t i; for( i = 0; i < 14; i++ ){ printf( "ch%d(%hu) ", i, (int)msg->ch[i] ); } printf( "\r\n" ); }
1. ibus 每个通道传输哦值范围在 0-4095, 而一般遥控器传输过来的摇杆过来的数据设计为操作的舵机的。 比如我在使用的 T-Lite 这款遥控器,1-4 通道分别对应油门,旋转,左右,前后四个方面的数据,而传输过来的值域范围在 1000 - 2000, 中值为 1500, 这与舵机的 15ms 代表中间位置, 10ms, 20ms 分别代表 +- 45 度的位置相对应。 当然如果你会设置遥控器这边发出的数据,那可能传输过来的数据不一样,但最好事先测试一下。
2. 接收机上面 SENS 通道其实就是上行通道(上传给遥控器的), 接收机 SERVU 则代表下行通道。 一般是你需要对遥控器过来的数据做特殊处理的时候需要用到下行通道。 当你需要安装一些传感器的时候用到上行通道(比如电压监控,气压监控等。)
3. 这两个通道的波特率是 115200, 且电平是 5V, 在某些场景你可能需要设计隔离电路。