• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【后羿DIY】低功耗远距离无线通信模块开发(结贴)

方案名称:915MHZ中远距离无线通信模块

设计简要说明:

利用MCU+RF实现中心频率915MHZ的无线收发系统,具体参数规格如下:

通信距离:1000-2000m

通信速率:0~57600kbs

接口类型:Micro USB/TTL串口

供电方式:USB/外部电源供电

供电范围:DC5-18V

申请物料:

HY0320  10颗

HY0620 10颗

全部回复(61)
正序查看
倒序查看
694844985
LV.4
2
2017-10-19 20:59

重新编辑下

0
回复
694844985
LV.4
3
2017-10-22 21:07
@694844985
重新编辑下

重新编辑调整下顺序

0
回复
694844985
LV.4
4
2017-10-23 13:34


方案设计

方案采用MCU+RF的结构,MCU采用STM2F042F6P6作为主控,RF收发器采用siliconlabs的高性能Sub1G芯片SI4463,两个主芯片均工作在低功耗模式下,保证系统在性能可靠的前提下,降低系统功耗,通过经过优化算法的数传无线收发算法,保证数据能考可靠稳定的进行传输。

下面开始上电路图

电源电路,输入电压范围DC5V-24V,增加了可恢复保险丝,由于空间问题没有在输入端增加TVS做保护

TTL串口电路,为了增加系统稳定性和可靠性,串联了电阻,另外为做好接口兼容性,保证5V TTL串口电平,中间使用了后羿电子提供的MOSFET HY0320作为电平转换,保证3.3V和5V电平相互转换。

MCU主控电路,主控电路与RF芯片之间通过SPI接口进行通信,完成数据的收发以及控制。

.

RF射频电路,该电路需要通过大量测试进行参数匹配,保证系统信号完整性。其中为了降低系统功耗,使用后羿电子提供的HY0620 进行电源的供电与断开的控制。

0
回复
694844985
LV.4
5
2017-10-23 13:35
@694844985
方案设计方案采用MCU+RF的结构,MCU采用STM2F042F6P6作为主控,RF收发器采用siliconlabs的高性能Sub1G芯片SI4463,两个主芯片均工作在低功耗模式下,保证系统在性能可靠的前提下,降低系统功耗,通过经过优化算法的数传无线收发算法,保证数据能考可靠稳定的进行传输。下面开始上电路图电源电路,输入电压范围DC5V-24V,增加了可恢复保险丝,由于空间问题没有在输入端增加TVS做保护[图片]TTL串口电路,为了增加系统稳定性和可靠性,串联了电阻,另外为做好接口兼容性,保证5VTTL串口电平,中间使用了后羿电子提供的MOSFET HY0320作为电平转换,保证3.3V和5V电平相互转换。[图片]MCU主控电路,主控电路与RF芯片之间通过SPI接口进行通信,完成数据的收发以及控制。[图片].RF射频电路,该电路需要通过大量测试进行参数匹配,保证系统信号完整性。其中为了降低系统功耗,使用后羿电子提供的HY0620进行电源的供电与断开的控制。[图片]

本来打算等样片到了再继续搞,过一段时间会比较忙,所以不等样片了,先搞起来了,本来可以做2层板的,但是由于体积限制,板子空间太小,被迫做了4层PCB,好在目前的4层PCB的成本也不高,上PCB图,板子尺寸:30*15mm

PCB布局图(顶层)

PCB布局图(底层)

顶层布线,射频进行了50欧姆阻抗控制,保证信号的完整性。对射频电路进行了合理的规划布局。

中间层

中间层(电源层)

底层布线

0
回复
694844985
LV.4
6
2017-10-24 20:37
@694844985
本来打算等样片到了再继续搞,过一段时间会比较忙,所以不等样片了,先搞起来了,本来可以做2层板的,但是由于体积限制,板子空间太小,被迫做了4层PCB,好在目前的4层PCB的成本也不高,上PCB图,板子尺寸:30*15mm[图片]PCB布局图(顶层)[图片]PCB布局图(底层)[图片]顶层布线,射频进行了50欧姆阻抗控制,保证信号的完整性。对射频电路进行了合理的规划布局。[图片]中间层[图片]中间层(电源层)[图片]底层布线[图片]
PCB进行阻抗匹配,通过控制线间距、线宽、对地距离保证50欧姆阻抗匹配
0
回复
694844985
LV.4
7
2017-10-29 15:07
@694844985
PCB进行阻抗匹配,通过控制线间距、线宽、对地距离保证50欧姆阻抗匹配
PCB打样归来,多做了一些,反正价格也不贵,板子正面

反面

0
回复
694844985
LV.4
8
2017-11-02 09:46
@694844985
PCB打样归来,多做了一些,反正价格也不贵,板子正面[图片]反面[图片]
焊接备料中......
0
回复
694844985
LV.4
9
2017-11-04 19:47
@694844985
焊接备料中......
焊接完成,上样机

产品符合小型化要求,适合集成,样机大小只有硬币大小

0
回复
694844985
LV.4
10
2017-11-04 19:47
@694844985
焊接完成,上样机[图片]产品符合小型化要求,适合集成,样机大小只有硬币大小[图片]
软件源码在制版期间已经完成,待测试中......
0
回复
694844985
LV.4
11
2017-11-05 07:48
@694844985
软件源码在制版期间已经完成,待测试中......
上代码,完整工程图,基于Keil5开发

0
回复
694844985
LV.4
12
2017-11-05 07:50
@694844985
上代码,完整工程图,基于Keil5开发[图片]
主程序结构如下:
/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
	 HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_IWDG_Init();
  MX_SPI1_Init();
 // MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
 //GetLockCode();
 //rev_ID_write(Lock_Code1);
 //Lock_Code=0;
 //Lock_Code=rev_ID_read();
 //	if(Lock_Code != Lock_Code1) 
	//	return 0; //??0x123456789ABC??????ID
  RF_init();
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
    RF_TX_RX_CTRL();
    RF_Process();
    HAL_IWDG_Refresh(&hiwdg);//watch dog
    
	}
  /* USER CODE END 3 */

}
0
回复
694844985
LV.4
13
2017-11-05 07:52
@694844985
主程序结构如下:/*USERCODEEND0*/intmain(void){/*USERCODEBEGIN1*//*USERCODEEND1*//*MCUConfiguration----------------------------------------------------------*//*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/HAL_Init();/*Configurethesystemclock*/SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_DMA_Init();MX_IWDG_Init();MX_SPI1_Init();//MX_USART1_UART_Init();/*USERCODEBEGIN2*///GetLockCode();//rev_ID_write(Lock_Code1);//Lock_Code=0;//Lock_Code=rev_ID_read();//if(Lock_Code!=Lock_Code1)//return0;//??0x123456789ABC??????IDRF_init();/*USERCODEEND2*//*Infiniteloop*//*USERCODEBEGINWHILE*/while(1){/*USERCODEENDWHILE*//*USERCODEBEGIN3*/RF_TX_RX_CTRL();RF_Process();HAL_IWDG_Refresh(&hiwdg);//watchdog}/*USERCODEEND3*/}

产品设计中涉及用到的外设包括SPI、USART、DMA、定时器以及看门狗。

其中SPI用来与RF射频收发器进行数据传输以及参数配置,USART作为用户数据的收发,DMA与USART配合提高数据收发效率

0
回复
694844985
LV.4
14
2017-11-05 07:55
@694844985
产品设计中涉及用到的外设包括SPI、USART、DMA、定时器以及看门狗。其中SPI用来与RF射频收发器进行数据传输以及参数配置,USART作为用户数据的收发,DMA与USART配合提高数据收发效率

RF收发器调试,首先通过SPI接口读取RF收发器的ID,如果ID为4463,那么可以证明通信接口通信没问题,对RF收发芯片的初始化配置操作在工程中void RF_init()函数中实现,下面上具体参数配置源码

void RF_init()
{
	Si4463_GpioInt();
	HAL_DMA_Abort_IT(&hdma_usart1_tx);
	HAL_DMA_Abort_IT(&hdma_usart1_rx);	


	RF_parameters_init();
	RF_parameters_read();	
	
    MX_USART1_UART_Init();
	HAL_UART_Receive_DMA(&huart1,tx_ph_data,buffer_size);
	__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);    //??????
	
	sdn_reset();// reset RF
	SI4463_init();  // RF INIT
	delay_us(200);
	spi_read_info();
	delay_us(200);


	HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
	HAL_NVIC_ClearPendingIRQ(EXTI2_3_IRQn);
	HAL_NVIC_SetPriority(EXTI2_3_IRQn, 1, 0);

	delay_us(200);
	nIRQ=1;
	recv_end_flag=0;
	uart_rx_len=0;
	rx_len_tmp=0;
	len_var=0;
	rx_init();
	__HAL_UART_CLEAR_IDLEFLAG(&huart1);
  HAL_IWDG_Start(&hiwdg);//start iwdg
}

0
回复
694844985
LV.4
15
2017-11-05 07:56
@694844985
RF收发器调试,首先通过SPI接口读取RF收发器的ID,如果ID为4463,那么可以证明通信接口通信没问题,对RF收发芯片的初始化配置操作在工程中voidRF_init()函数中实现,下面上具体参数配置源码voidRF_init(){Si4463_GpioInt();HAL_DMA_Abort_IT(&hdma_usart1_tx);HAL_DMA_Abort_IT(&hdma_usart1_rx);RF_parameters_init();RF_parameters_read();MX_USART1_UART_Init();HAL_UART_Receive_DMA(&huart1,tx_ph_data,buffer_size);__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//??????sdn_reset();//resetRFSI4463_init();//RFINITdelay_us(200);spi_read_info();delay_us(200);HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);HAL_NVIC_ClearPendingIRQ(EXTI2_3_IRQn);HAL_NVIC_SetPriority(EXTI2_3_IRQn,1,0);delay_us(200);nIRQ=1;recv_end_flag=0;uart_rx_len=0;rx_len_tmp=0;len_var=0;rx_init();__HAL_UART_CLEAR_IDLEFLAG(&huart1);HAL_IWDG_Start(&hiwdg);//startiwdg}
spi_read_info();为读取id函数,返回值为4463,证明通信接口正常工作。
0
回复
694844985
LV.4
16
2017-11-05 07:57
@694844985
spi_read_info();为读取id函数,返回值为4463,证明通信接口正常工作。
下面为大家展现RF具体寄存器参数配置函数,该RF芯片有各类配置寄存器一百多个,需要配置大量的参数:
void SI4463_init(void)
{	
	U8 app_command_buf[20];

	//spi_write(0x07, RF_GPIO_PIN_CFG_data);   
	app_command_buf[0] = 0x13;			// SET GPIO PORT
	app_command_buf[1]  = 0x14; 		// gpio 0 ,Rx data
	app_command_buf[2]  = 0x02;    		// gpio1, output 0
	app_command_buf[3]  = 0x21;  		// gpio2, hign while in receive mode
	app_command_buf[4]  = 0x20; 		// gpio3, hign while in transmit mode 
	app_command_buf[5]  = 0x27;   		// nIRQ
	app_command_buf[6]  = 0x0b;  		// sdo
	spi_write(7, app_command_buf); 

	// spi_write(0x05, RF_GLOBAL_XO_TUNE_1_data); 
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x00;    
	app_command_buf[2]  = 0x01;    
	app_command_buf[3]  = 0x00;  
	app_command_buf[4]  = 125;  			// freq  adjustment
	spi_write(5, app_command_buf);

	// spi_write(0x05, RF_GLOBAL_CONFIG_1_data);
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x00;
	app_command_buf[2]  = 0x01; 
	app_command_buf[3]  = 0x03; 
	app_command_buf[4]  = 0x40;  		// tx = rx = 64 byte,PH,high performance mode
	spi_write(5, app_command_buf); 

	spi_write(0x08, (unsigned char *)RF_FRR_CTL_A_MODE_4_data);    // disable all fast response register

	// spi_write(0x0D, RF_PREAMBLE_TX_LENGTH_9_data); // set Preamble
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x10;    
	app_command_buf[2]  = 0x09;    
	app_command_buf[3]  = 0x00;   
	app_command_buf[4]  = 0x08;							//  8 bytes Preamble
	app_command_buf[5]  = 0x14;							//  detect 20 bits
	app_command_buf[6]  = 0x00;						
	app_command_buf[7]  = 0x0f;
	app_command_buf[8]  = 0x31;  						//  no manchest.1010.??
	app_command_buf[9]  = 0x00;
	app_command_buf[10]  = 0x00;
	app_command_buf[11]  = 0x00;
	app_command_buf[12]  = 0x00;
	spi_write(13, app_command_buf);	

	//  RF_SYNC_CONFIG_5_data,							// set sync
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x11;
	app_command_buf[2]  = 0x05;
	app_command_buf[3]  = 0x00;
	app_command_buf[4]  = 0x01;   						// no manchest , 2 bytes
	app_command_buf[5]  = 0x2d;   						// sync byte3
	app_command_buf[6]  = 0xd4;							// sync byte2
	app_command_buf[7]  = 0x00;							// sync byte1
	app_command_buf[8]  = 0x00;							// sync byte0
	spi_write(9, app_command_buf);


	//  packet crc         
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x12; 
	app_command_buf[2]  = 0x01; 
	app_command_buf[3]  = 0x00;
	app_command_buf[4]  = 0x81;							// CRC = itu-c, enable crc
	spi_write(5, app_command_buf);  

	// packet   gernale configuration        
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x12;
	app_command_buf[2]  = 0x01;
	app_command_buf[3]  = 0x06;
	app_command_buf[4]  = 0x02;							// CRC MSB, data MSB
	spi_write(5, app_command_buf);

	// spi_write(0x07, RF_PKT_LEN_3_data);   
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x12;
	app_command_buf[2]  = 0x03;
	app_command_buf[3]  = 0x08;
	app_command_buf[4]  = 0x0a;
	app_command_buf[5]  = 0x01;
	app_command_buf[6]  = 0x00;						 
	spi_write(7, app_command_buf);         

	app_command_buf[0]  = 0x11;  
	app_command_buf[1]  = 0x12;
	app_command_buf[2]  = 0x0c;
	app_command_buf[3]  = 0x0d;
	app_command_buf[4]  = 0x00;
	app_command_buf[5]  = 0x05;
	app_command_buf[6]  = 0x04;
	app_command_buf[7]  = 0xaa;
	app_command_buf[8]  = 0x00;
	app_command_buf[9]  = payload_length;
	app_command_buf[10]  = 0x00;
	app_command_buf[11]  = 0xaa;
	app_command_buf[12]  = 0x00; 
	app_command_buf[13]  = 0x00;
	app_command_buf[14]  = 0x00;
	app_command_buf[15]  = 0x00;
	spi_write(16, app_command_buf);					// set length of Field 1 -- 4

	// spi_write(0x0C, RF_PKT_FIELD_4_LENGTH_12_8_8_data);
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x12; 
	app_command_buf[2]  = 0x08;
	app_command_buf[3]  = 0x19;
	app_command_buf[4]  = 0x00;
	app_command_buf[5]  = 0x00;
	app_command_buf[6]  = 0x00;
	app_command_buf[7]  = 0x00;
	app_command_buf[8]  = 0x00;
	app_command_buf[9]  = 0x00;
	app_command_buf[10]  = 0x00;
	app_command_buf[11]  = 0x00;
	spi_write(12, app_command_buf);

	spi_write(0x10, (unsigned char *)RF_MODEM_MOD_TYPE_12_data);        
	spi_write(0x05, (unsigned char *)RF_MODEM_FREQ_DEV_0_1_data);

	spi_write(0x10, (unsigned char *)RF_MODEM_TX_RAMP_DELAY_12_data);    	
	spi_write(0x10, (unsigned char *)BCR_NCO_OFFSET_2_12_data);
	spi_write(0x10, (unsigned char *)RF_MODEM_TX_RAMP_DELAY_12_data);			
	spi_write(0x07, (unsigned char *)RF_MODEM_AFC_LIMITER_1_3_data);	
	//spi_write(0x10, BCR_NCO_OFFSET_2_12_data);

	spi_write(0x05, (unsigned char *)RF_MODEM_AGC_CONTROL_1_data);		
	spi_write(0x10, (unsigned char *)AGC_WINDOW_SIZE_12_data);	
	spi_write(0x0c, (unsigned char *)RF_MODEM_RAW_CONTROL_8_data);
	//	spi_write(0x10, (unsigned char *)AGC_WINDOW_SIZE_12_data);

	// spi_write(0x05, RF_MODEM_RSSI_COMP_1_data);
	app_command_buf[0] = 0x11;  
	app_command_buf[1] = 0x20;                                                     
	app_command_buf[2] = 0x01;                                                   
	app_command_buf[3] = 0x4e;             
	app_command_buf[4]  = 0x40;
	spi_write(5, app_command_buf);            	     

	spi_write(0x10, (unsigned char *)COE13_7_0_12_data);
	spi_write(0x10, (unsigned char *)COE1_7_0_12_data);
	spi_write(0x10, (unsigned char *)COE7_7_0_12_data);       

	// RF_PA
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x22;                                                    
	app_command_buf[2]  = 0x04;                                               
	app_command_buf[3]  = 0x00;                                                     
	app_command_buf[4]  = 0x08;
	app_command_buf[5]  = POWER;							// set max power
	app_command_buf[6]  =0x00;
	app_command_buf[7]  = 0x3d;
	spi_write(8, app_command_buf);        

	spi_write(0x0B, (unsigned char *)RF_SYNTH_PFDCP_CPFF_7_data);

	// header match
	app_command_buf[0] = 0x11;  
	app_command_buf[1]  = 0x30;                                                     
	app_command_buf[2]  = 0x0c;                                                   
	app_command_buf[3]  = 0x00;                                                       
	app_command_buf[4]  = rf_id[0];
	app_command_buf[5]  = 0xff;
	app_command_buf[6]  = 0x40;
	app_command_buf[7]  = rf_id[1];                                      
	app_command_buf[8]  = 0xff;                                       
	app_command_buf[9]  = 0x01; 
	app_command_buf[10] = rf_id[2];                                   
	app_command_buf[11]  =0xff;                                       
	app_command_buf[12]  =0x02;
	app_command_buf[13]  = rf_id[3];                                  
	app_command_buf[14]  = 0xff;
	app_command_buf[15]  =0x03;
	spi_write(16, app_command_buf); 					// ????í·??

	spi_write(6, (unsigned char *)RF_MODEM_RAW_SEARCH2_2_data);
	
	
//	RF_FREQ_CONTROL_INTE_8_data[5] =uRF_FREQ_CONTROL[0];
// 	RF_FREQ_CONTROL_INTE_8_data[6] =uRF_FREQ_CONTROL[1];
// 	RF_FREQ_CONTROL_INTE_8_data[7] =uRF_FREQ_CONTROL[2];
	spi_write(12, (unsigned char *)RF_FREQ_CONTROL_INTE_8_data); 	    // set frequency    	
} 
0
回复
694844985
LV.4
17
2017-11-05 08:03
@694844985
下面为大家展现RF具体寄存器参数配置函数,该RF芯片有各类配置寄存器一百多个,需要配置大量的参数:voidSI4463_init(void){U8app_command_buf[20];//spi_write(0x07,RF_GPIO_PIN_CFG_data);app_command_buf[0]=0x13;//SETGPIOPORTapp_command_buf[1]=0x14;//gpio0,Rxdataapp_command_buf[2]=0x02;//gpio1,output0app_command_buf[3]=0x21;//gpio2,hignwhileinreceivemodeapp_command_buf[4]=0x20;//gpio3,hignwhileintransmitmodeapp_command_buf[5]=0x27;//nIRQapp_command_buf[6]=0x0b;//sdospi_write(7,app_command_buf);//spi_write(0x05,RF_GLOBAL_XO_TUNE_1_data);app_command_buf[0]=0x11;app_command_buf[1]=0x00;app_command_buf[2]=0x01;app_command_buf[3]=0x00;app_command_buf[4]=125;//freqadjustmentspi_write(5,app_command_buf);//spi_write(0x05,RF_GLOBAL_CONFIG_1_data);app_command_buf[0]=0x11;app_command_buf[1]=0x00;app_command_buf[2]=0x01;app_command_buf[3]=0x03;app_command_buf[4]=0x40;//tx=rx=64byte,PH,highperformancemodespi_write(5,app_command_buf);spi_write(0x08,(unsignedchar*)RF_FRR_CTL_A_MODE_4_data);//disableallfastresponseregister//spi_write(0x0D,RF_PREAMBLE_TX_LENGTH_9_data);//setPreambleapp_command_buf[0]=0x11;app_command_buf[1]=0x10;app_command_buf[2]=0x09;app_command_buf[3]=0x00;app_command_buf[4]=0x08;//8bytesPreambleapp_command_buf[5]=0x14;//detect20bitsapp_command_buf[6]=0x00;app_command_buf[7]=0x0f;app_command_buf[8]=0x31;//nomanchest.1010.??app_command_buf[9]=0x00;app_command_buf[10]=0x00;app_command_buf[11]=0x00;app_command_buf[12]=0x00;spi_write(13,app_command_buf);//RF_SYNC_CONFIG_5_data,//setsyncapp_command_buf[0]=0x11;app_command_buf[1]=0x11;app_command_buf[2]=0x05;app_command_buf[3]=0x00;app_command_buf[4]=0x01;//nomanchest,2bytesapp_command_buf[5]=0x2d;//syncbyte3app_command_buf[6]=0xd4;//syncbyte2app_command_buf[7]=0x00;//syncbyte1app_command_buf[8]=0x00;//syncbyte0spi_write(9,app_command_buf);//packetcrcapp_command_buf[0]=0x11;app_command_buf[1]=0x12;app_command_buf[2]=0x01;app_command_buf[3]=0x00;app_command_buf[4]=0x81;//CRC=itu-c,enablecrcspi_write(5,app_command_buf);//packetgernaleconfigurationapp_command_buf[0]=0x11;app_command_buf[1]=0x12;app_command_buf[2]=0x01;app_command_buf[3]=0x06;app_command_buf[4]=0x02;//CRCMSB,dataMSBspi_write(5,app_command_buf);//spi_write(0x07,RF_PKT_LEN_3_data);app_command_buf[0]=0x11;app_command_buf[1]=0x12;app_command_buf[2]=0x03;app_command_buf[3]=0x08;app_command_buf[4]=0x0a;app_command_buf[5]=0x01;app_command_buf[6]=0x00;spi_write(7,app_command_buf);app_command_buf[0]=0x11;app_command_buf[1]=0x12;app_command_buf[2]=0x0c;app_command_buf[3]=0x0d;app_command_buf[4]=0x00;app_command_buf[5]=0x05;app_command_buf[6]=0x04;app_command_buf[7]=0xaa;app_command_buf[8]=0x00;app_command_buf[9]=payload_length;app_command_buf[10]=0x00;app_command_buf[11]=0xaa;app_command_buf[12]=0x00;app_command_buf[13]=0x00;app_command_buf[14]=0x00;app_command_buf[15]=0x00;spi_write(16,app_command_buf);//setlengthofField1--4//spi_write(0x0C,RF_PKT_FIELD_4_LENGTH_12_8_8_data);app_command_buf[0]=0x11;app_command_buf[1]=0x12;app_command_buf[2]=0x08;app_command_buf[3]=0x19;app_command_buf[4]=0x00;app_command_buf[5]=0x00;app_command_buf[6]=0x00;app_command_buf[7]=0x00;app_command_buf[8]=0x00;app_command_buf[9]=0x00;app_command_buf[10]=0x00;app_command_buf[11]=0x00;spi_write(12,app_command_buf);spi_write(0x10,(unsignedchar*)RF_MODEM_MOD_TYPE_12_data);spi_write(0x05,(unsignedchar*)RF_MODEM_FREQ_DEV_0_1_data);spi_write(0x10,(unsignedchar*)RF_MODEM_TX_RAMP_DELAY_12_data);spi_write(0x10,(unsignedchar*)BCR_NCO_OFFSET_2_12_data);spi_write(0x10,(unsignedchar*)RF_MODEM_TX_RAMP_DELAY_12_data);spi_write(0x07,(unsignedchar*)RF_MODEM_AFC_LIMITER_1_3_data);//spi_write(0x10,BCR_NCO_OFFSET_2_12_data);spi_write(0x05,(unsignedchar*)RF_MODEM_AGC_CONTROL_1_data);spi_write(0x10,(unsignedchar*)AGC_WINDOW_SIZE_12_data);spi_write(0x0c,(unsignedchar*)RF_MODEM_RAW_CONTROL_8_data);//spi_write(0x10,(unsignedchar*)AGC_WINDOW_SIZE_12_data);//spi_write(0x05,RF_MODEM_RSSI_COMP_1_data);app_command_buf[0]=0x11;app_command_buf[1]=0x20;app_command_buf[2]=0x01;app_command_buf[3]=0x4e;app_command_buf[4]=0x40;spi_write(5,app_command_buf);spi_write(0x10,(unsignedchar*)COE13_7_0_12_data);spi_write(0x10,(unsignedchar*)COE1_7_0_12_data);spi_write(0x10,(unsignedchar*)COE7_7_0_12_data);//RF_PAapp_command_buf[0]=0x11;app_command_buf[1]=0x22;app_command_buf[2]=0x04;app_command_buf[3]=0x00;app_command_buf[4]=0x08;app_command_buf[5]=POWER;//setmaxpowerapp_command_buf[6]=0x00;app_command_buf[7]=0x3d;spi_write(8,app_command_buf);spi_write(0x0B,(unsignedchar*)RF_SYNTH_PFDCP_CPFF_7_data);//headermatchapp_command_buf[0]=0x11;app_command_buf[1]=0x30;app_command_buf[2]=0x0c;app_command_buf[3]=0x00;app_command_buf[4]=rf_id[0];app_command_buf[5]=0xff;app_command_buf[6]=0x40;app_command_buf[7]=rf_id[1];app_command_buf[8]=0xff;app_command_buf[9]=0x01;app_command_buf[10]=rf_id[2];app_command_buf[11]=0xff;app_command_buf[12]=0x02;app_command_buf[13]=rf_id[3];app_command_buf[14]=0xff;app_command_buf[15]=0x03;spi_write(16,app_command_buf);//????í·??spi_write(6,(unsignedchar*)RF_MODEM_RAW_SEARCH2_2_data);//RF_FREQ_CONTROL_INTE_8_data[5]=uRF_FREQ_CONTROL[0];//RF_FREQ_CONTROL_INTE_8_data[6]=uRF_FREQ_CONTROL[1];//RF_FREQ_CONTROL_INTE_8_data[7]=uRF_FREQ_CONTROL[2];spi_write(12,(unsignedchar*)RF_FREQ_CONTROL_INTE_8_data);//setfrequency}

系统整个工作流程大概如下:

首先配置好RF收发器,使其可以正常收发数据,这包括寄存器参数配置,设备ID、中心频率、空中传输速度、中断等等配置

然后用户通过串口发送数据时,系统在DMA的控制下直接将数据存入指定发送缓冲区,并且将发送标志位置位,此时无线收发系统RF检测到有数据要发送,便会启动发送数据,当RF发送数据完成后,通过中断通知CPU数据发送完成。需要注意的是RF每次最多发送64字节 数据,当待发送数据超过64字节时,系统会自动拆包处理,接收数据过程与发送数据类似,只是方向相反。

0
回复
694844985
LV.4
18
2017-11-05 08:10
@694844985
系统整个工作流程大概如下:首先配置好RF收发器,使其可以正常收发数据,这包括寄存器参数配置,设备ID、中心频率、空中传输速度、中断等等配置然后用户通过串口发送数据时,系统在DMA的控制下直接将数据存入指定发送缓冲区,并且将发送标志位置位,此时无线收发系统RF检测到有数据要发送,便会启动发送数据,当RF发送数据完成后,通过中断通知CPU数据发送完成。需要注意的是RF每次最多发送64字节数据,当待发送数据超过64字节时,系统会自动拆包处理,接收数据过程与发送数据类似,只是方向相反。
下面上一个完整的测试工程源码RF_0913_F042F6P6_ID.rar,有兴趣的可以研究一下
0
回复
694844985
LV.4
19
2017-11-05 08:12
@694844985
下面上一个完整的测试工程源码RF_0913_F042F6P6_ID.rar,有兴趣的可以研究一下

展现实测结果的时间到了:

测试条件:

串口波特率:57600kps

空中传输速度:150kps

室外环境:市区道路

在如此高速的情况,测试稳定通讯距离达到了991米

0
回复
694844985
LV.4
20
2017-11-05 08:13
@694844985
展现实测结果的时间到了:测试条件:串口波特率:57600kps空中传输速度:150kps室外环境:市区道路在如此高速的情况,测试稳定通讯距离达到了991米[图片]
**此帖已被管理员删除**
0
回复
2017-11-05 19:11
@694844985
**此帖已被管理员删除**
稳定性如何,如果稳定性没问题,这个距离已经很厉害了
0
回复
2017-11-07 20:32
@1372570085zm
稳定性如何,如果稳定性没问题,这个距离已经很厉害了[图片]
这个模块能提供完整的方案么
0
回复
2017-11-08 10:44
@1372570085zm
这个模块能提供完整的方案么

各种模式下的功耗是多少?

0
回复
2017-11-08 21:41
@三峡土老帽
各种模式下的功耗是多少?
发送功耗在20ma左右,接收在15ma左右,待机功耗10ua
0
回复
694844985
LV.4
25
2017-11-10 17:47
@1372570085zm
发送功耗在20ma左右,接收在15ma左右,待机功耗10ua
对于软件流程有疑问的朋友可以相互交流,这个透传算法我是搞了好一段时间
0
回复
2017-11-12 14:17
@694844985
对于软件流程有疑问的朋友可以相互交流,这个透传算法我是搞了好一段时间
CC1101的程序有没参考参考
0
回复
694844985
LV.4
27
2017-11-12 19:51
@三峡土老帽
CC1101的程序有没参考参考
cc1101直接去ti官网找就行了,很多
0
回复
694844985
LV.4
28
2017-11-14 16:21
@694844985
cc1101直接去ti官网找就行了,很多
透传算法将会在活动结束后找时间共享出来供大家参考使用。
0
回复
694844985
LV.4
29
2017-11-16 11:25
@694844985
本来打算等样片到了再继续搞,过一段时间会比较忙,所以不等样片了,先搞起来了,本来可以做2层板的,但是由于体积限制,板子空间太小,被迫做了4层PCB,好在目前的4层PCB的成本也不高,上PCB图,板子尺寸:30*15mm[图片]PCB布局图(顶层)[图片]PCB布局图(底层)[图片]顶层布线,射频进行了50欧姆阻抗控制,保证信号的完整性。对射频电路进行了合理的规划布局。[图片]中间层[图片]中间层(电源层)[图片]底层布线[图片]
这部分的参数匹配很重要,很多设计距离达不到都是这个参数没有匹配好
0
回复
694844985
LV.4
30
2017-11-19 14:22
@694844985
透传算法将会在活动结束后找时间共享出来供大家参考使用。
目前透传算法经过优化,疲劳测试一周,丢包率为0%
0
回复
694844985
LV.4
31
2017-11-21 09:28
@694844985
这部分的参数匹配很重要,很多设计距离达不到都是这个参数没有匹配好
参数匹配涉及到阻抗控制,天线滤波参数匹配等等
0
回复