Solution: toy_car¶
1 功能概述¶
1.1 遥控器端功能¶
1、支持4路按键;
2、支持1路LED灯;
3、支持对码提示功能,对码闪灯,对上后灭灯;
4、工作模式下,按键按下灯亮,松开灯灭;
5、支持断电,回连功能;
6、工作模式下,私有的调频表,支持一场景下多车同完功能;
7、支持跳频功能
8、支持双向对码功能;
9、支持低功耗,对码时间如果超过2分钟,遥控器则进入休眠模式,对码后100ms后,无按键按 下,芯片则进入休眠模式;
10、支持所有按键唤醒功能;
1.2 小车端功能¶
1、支持前进,后退,左转,右转四个功能;
2、支持双向对码功能;
3、支持断电,回连功能;
4、工作模式下,私有的调频表,支持一场景下多车同完功能;
5、支持跳频功能;
6、支持1路LED灯,用于指示对码的状态;
2 环境要求¶
遥控器板
小车板
PANCHIP RISC IDE
3 编译和烧录¶
遥控器例程位置:PAN221x_DK_Public\01_SDK\c_demo\solution\toy_car\toy_car_tx
打开toy_car_tx目录下toy_car_tx.cproj工程,编译整个代码工程。
小车例程位置:PAN221x_DK_Public\01_SDK\c_demo\solution\toy_car\toy_car_rx
打开toy_car_rx目录下toy_car_rx.cproj工程,编译整个代码工程。
4 软件说明¶
4.1 资源分配¶
4.1.1 遥控器IO资源分配¶
引脚号 |
名称 |
管脚状态 |
说明 |
---|---|---|---|
VPP/P04 |
LED |
开漏输出 |
无线通讯指示灯,低电平有效 |
P10 |
KEY0 |
上拉输入 |
按键输入端,低电平有效 |
P11 |
KEY1 |
上拉输入 |
按键输入端,低电平有效 |
P16 |
KEY2 |
上拉输入 |
按键输入端,低电平有效 |
P13 |
KEY3 |
上拉输入 |
按键输入端,低电平有效 |
4.1.2 小车IO资源分配¶
引脚号 |
名称 |
管脚状态 |
说明 |
---|---|---|---|
VPP/P04 |
LED |
开漏输出 |
无线通讯指示灯,低电平有效 |
P10 |
Motor0_A |
推挽输出 |
电机0输出端A |
P11 |
Motor0_B |
推挽输出 |
电机0输出端A |
P16 |
Motor1_A |
推挽输出 |
电机1输出端A |
P13 |
Motor1_B |
推挽输出 |
电机1输出端A |
4.2 主要功能实现介绍¶
4.2.1 通讯地址¶
1、对码公共地址:0xc0、0xc1、0xc2、0xc3(固定的)
2、通讯工作地址:tx_id0, tx_id1, tx_id2, tx_id3(根据遥控端的rolling code得到的)
备注:小车端rx地址采用多pipe通道
rx pipe0地址为:对码公共地址0xc0、0xc1、0xc2、0xc3;
rx pipe1地址为:通讯工作地址tx_id0, tx_id1, tx_id2, tx_id3。
4.2.2 通信频点¶
1、对码频点:2420
2、通讯频点:24xx、24xx、24xx、24xx、2420(通讯过程中,共5个频点,频点是通过发送端的rolling code计算得出,其中2420为固定频点)
4.2.3 数据包格式¶
1、数据包组成如下所示:
tx_id(4) |
rx_id(4) |
key |
cmd |
---|---|---|---|
4 bytes |
4 bytes |
1 bytes |
1 bytes |
(1)、tx_id(4):4bytes,为tx_id0、tx_id1、tx_id2、tx_id3,由遥控器端的rolling code值得到;
(2)、rx_id(4):4bytes,为rx_id0、rx_id1、rx_id2、rx_id3,由小车端的rolling code值得到;
(3)、key:按键数据;
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
前进
后退
保留
保留
保留
保留
右转
左转
注意:上述可根据实际硬件设计,进行修改;
(4)、cmd操作命令:
0xa5:对码包,遥控器发送给小车
0x5a:应答包,小车发送给遥控器
0x55:数据包,遥控器发送给小车
2、对码包:遥控器发送给小车
tx_id(4) |
0x00 |
0x00 |
0x00 |
0x00 |
key |
0xa5 |
---|---|---|---|---|---|---|
遥控器id |
固定值 |
固定值 |
固定值 |
固定值 |
按键值 |
对码包命令 |
tx_id(4):固化在遥控器端的身份识别码,由遥控器端的rolling code值得到
3、应答包:小车发送给遥控器
tx_id(4) |
rx_id(4) |
key |
0x5a |
---|---|---|---|
遥控器id |
小车id |
按键值 |
应答包命令 |
tx_id(4):从对码复制而来;
rx_id(4):固化在小车端的身份识别码,由小车端的rolling code值得到;
4、遥控包:遥控器发送给小车
tx_id(4) |
rx_id(4) |
key |
0x55 |
---|---|---|---|
遥控器id |
小车id |
按键值 |
应答包命令 |
tx_id(4):固化在遥控器端的身份识别码;
rx_id(4):固化在小车端的身份识别码;
key:按键值,一个bit代表一个按键,1表示按下,0表示松开;
4.2.5 遥控器对码过程¶
4.2.6 小车对码过程¶
1、小车端采用rx 多pipe技术,其中pipe0的地址设置为公共地址:0xc0、0xc1、0xc2、0xc3;pipe1的地址设置为通讯工作地址:tx_id0、tx_id1、tx_id2、tx_id3;
2、在上图对码过程中,在收到对码包后,将pipe1的地址设置为tx_id(4);
4.2.7 小车正常工作过程¶
4.2.8 跳频原理¶
1、跳频频点共5个,其中24xx、24xx、24xx、24xx根据遥控器端rolling_code计算而来,2420为公共频点;
调频频点计算方法:
(1)、选择四个基础频点,如下图所示:
(2)、然后根据以下算法,计算出频点:
hf = (tx_id0 + tx_id1 + tx_id2 + tx_id3) & 0x0f;
hf0 = HF0_BASE_CHANNEL + hf;
hf1 = HF1_BASE_CHANNEL + hf;
hf2 = HF2_BASE_CHANNEL + hf;
hf3 = HF3_BASE_CHANNEL + hf;
2、调频策略:遥控包的工作周期为4ms;
遥控端:每发送一个遥控包,则跳到下一个频点;
小车端:每接收一个遥控包,则跳到下一个频点;如果一直没有收到遥控包,则在一个跳频周期后跳到下一个频点;
注意: 当遥控器在公共频点发送数据时,其发送地址也要切换到公共地址;
4.2.9 遥控器断电重连¶
1、遥控器断电重启后会进入对码状态;
2、小车收到对应的对码包后,并判断发送过来的tx_id(4)与自身的tx_id(4)是否相同,如果相同,即回复应答包,重新进行对码,实现遥控器断电重连功能;
4.2.10小车断电重连¶
1、遥控器端跳频到公共频点后,同时会切换到tx地址到公共地址,并发送一次遥控包;
2、小车断电重启后会进入对码状态,如果小车收到对应的遥控包,并判断发送过来的rx_id(4)与自身的rx_id(4)是否相同,如果相同,则视为遥控器和小车之前有过对码,则认为对码成功,小车直接进入工作模式,接收数据,同时设置pipe1的地址为tx_id(4);