打印
[资料分享]

CC2640之修改发射功率

[复制链接]
825|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
drer|  楼主 | 2019-7-10 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
drer|  楼主 | 2019-7-10 10:13 | 只看该作者
实验步骤
1、添加测试代码1(simpleBLEPeripheral.c的SimpleBLEPeripheral_init中)
  //设置发射功率
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);   
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);
由上述代码的形参可知CC2640一共有13个档。
我们可以每次使用其中一条代码进行测试。

使用特权

评论回复
板凳
drer|  楼主 | 2019-7-10 10:13 | 只看该作者
2、添加测试代码2(替换simpleBLEPeripheral.c的GUA_HandleKeys)
static uint8 sTxPowerStatus = 0;

#define sTxPowerStatus_MINUS_21_DBM             0
#define sTxPowerStatus_MINUS_18_DBM             1
#define sTxPowerStatus_MINUS_15_DBM             2
#define sTxPowerStatus_MINUS_12_DBM             3
#define sTxPowerStatus_MINUS_9_DBM              4
#define sTxPowerStatus_MINUS_6_DBM              5
#define sTxPowerStatus_MINUS_3_DBM              6
#define sTxPowerStatus_0_DBM                    7
#define sTxPowerStatus_1_DBM                    8
#define sTxPowerStatus_2_DBM                    9
#define sTxPowerStatus_3_DBM                    10
#define sTxPowerStatus_4_DBM                    11
#define sTxPowerStatus_5_DBM                    12

static void GUA_HandleKeys(uint8 keys)  
{  
  //SELECT键
  if ( keys & KEY_SELECT )
  {   
    switch(sTxPowerStatus)
    {
      case sTxPowerStatus_MINUS_21_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);   //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_18_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);   //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }      
      
      case sTxPowerStatus_MINUS_15_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);   //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_12_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);   //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }     

      case sTxPowerStatus_MINUS_9_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);    //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_MINUS_6_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);    //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }     

      case sTxPowerStatus_MINUS_3_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);    //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_0_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }           

      case sTxPowerStatus_1_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_2_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }
      
      case sTxPowerStatus_3_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }

      case sTxPowerStatus_4_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus++;                                       //指向下一个发射功率
        break;
      }      
      
      case sTxPowerStatus_5_DBM:
      {
        HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);          //设置发射功率
        GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_TOGGLE);            //LED1反转一次
        sTxPowerStatus = 0;                                     //指向下一个发射功率,回首位重复
        break;
      }      

      default:break;
    }
  }  
}  


香瓜在这里添加了按键修改发射功率的测试代码,进行测试发射功率的进一步测试。

使用特权

评论回复
地板
drer|  楼主 | 2019-7-10 10:13 | 只看该作者
实验结果
1、测试代码1的实验结果
由于RSSI是一直在变化过程中,香瓜选择“每个发射功率观察10S、取其最大最小值、设备与手机相距约1米”,得到如下数据:
  //设置发射功率(默认-54~-56dB)
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_21_DBM);       //-75~-78dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_18_DBM);       //-74~-79dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_15_DBM);       //-72~-76dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_12_DBM);       //-71~-76dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_9_DBM);        //-62~-70dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_6_DBM);        //-62~-64dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_3_DBM);        //-59~-61dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);              //-55~-61dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_1_DBM);              //-54~-58dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_2_DBM);              //-51~-55dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_3_DBM);              //-52~-56dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_4_DBM);              //-48~-52dB
  //HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);              //-48~-52dB

使用特权

评论回复
5
drer|  楼主 | 2019-7-10 10:13 | 只看该作者
2、测试代码2的实验结果
无论按键按几下,RSSI几乎都不变,因此使用按键起不到随时调整发射功率的作用。

香瓜在函数的注释中发现了这句话:


香瓜的理解是必须在空闲阶段才能执行修改发射功率的操作,而空闲阶段也就是指初始化阶段,因此导致测试2的按键方式无法修改发射功率。

使用特权

评论回复
6
drer|  楼主 | 2019-7-10 10:14 | 只看该作者
3、香瓜总结
CC2640虽然可调的发射功率比CC254x多了许多档次,但可调的发射功率太密集,导致许多档次其实是**肋式的存在。
大家自行选择合适的发射功率即可。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

3316

帖子

4

粉丝