# analog-sensor-design-based-on-fpga **Repository Path**: tinyhang1/analog-sensor-design-based-on-fpga ## Basic Information - **Project Name**: analog-sensor-design-based-on-fpga - **Description**: 基于fpga的模拟敏感器设计,接受pc上位机的数据,整理成敏感器的数据格式并模拟其通讯方式进行输出 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-05 - **Last Updated**: 2024-02-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # analog-sensor-design-based-on-fpga ## 介绍 基于fpga的模拟敏感器设计,接受pc上位机的数据,整理成敏感器的数据格式并模拟其通讯方式进行输出 ## 软件架构 ### 数据接收端 #### 数据帧 数据帧格式暂定包含帧头(2 Byte,用于存储信息帧数量)、信息帧(变长,多 敏感器数据拼接格式详见后文)、校验帧(4 Byte,求和校验)、帧尾(5 Byte,自定义特殊字)。 ##### 信息帧 ##### 普通传感器 即输出值为float类型的传感器 这里包括模拟太敏 红外低敏 磁强计 星敏数据这边不做接收 数据帧定义如下 ``` ====================================== -type 4 -index 1 -data [0.9820 0.1091 -0.1091 0.1091] -availability 1 ====================================== -type 1 -index 1 -data [0.4218 0.9157 0.7922] -availability 1 ====================================== -type 1 -index 2 -data [0.9595 0.6557 0.0357] -availability 0 ``` 实例值的对应字节码为 ``` 03 01 3F 7B 64 5A 3D DF 6F D2 BD DF 6F D2 3D DF 6F D2 01 01 01 3E D7 F6 2B 3F 6A 6B 50 3F 4A CD 9E 00 00 00 00 01 01 02 3F 75 A1 CA 3F 27 DB F4 3D 12 3A 29 00 00 00 00 00 ``` ##### 陀螺仪 陀螺仪用三位数据表示小数 | Bit23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | :---: | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ------ | ------ | ------ | ------ | ------ | | 2^9 | 2^8^ | 2^7^ | 2^6^ | 2^5^ | 2^4^ | 2^3^ | 2^2^ | 2^1^ | 2^0^ | 2^-1^ | 2^-2^ | 2^-3^ | 2^-4^ | 2^-5^ | 2^-6^ | 2^-7^ | 2^-8^ | 2^-9^ | 2^-10^ | 2^-11^ | 2^-12^ | 2^-13^ | 2^-14^ | 0000 0000 0000 0100 1110 1111 例1:实际字节为 00 04 EF 计算原码:X’=0x 00 04 EF =-1023.9 计算:X=-1023.9/2^14=-0.0625 °/S 如果这里使用低地址高位发送,则实际发送的字节数据如下 ``` 05 01 EF 04 00 00 64 01 00 00 BA FF FF 00 00 00 00 00 01 ``` ##### 帧头 上述共有4个数据帧 故,对应帧头为 ``` 00 04 ``` ##### 校验帧 四个字节的求和校验 ##### 帧尾 ``` 78 79 7a 7b 7c ``` #### 数据接收程序设计 从接收到数据帧的帧尾 即 ``` 78 79 7a 7b 7c ``` 后开始解析数据 帧长度为俩个字节 00 04 datalen 跳过第一个字节 将第二个字节赋值在低位 即 data_len = 16'h00_04 然后就开始解析数据帧的值 即数据发送为大端 接收到之后以小端存储了 3F 7B 64 5A data1[1] = 5a 64 7b 3f EF 04 00 00 data1[4] = 00 00 04 ef 在实际发送的过程中,由于 Digital_solar_sensor Simulated_solar_sensor earth_sensor Magnet 都是以小端模式发送的 所以在给下层模块的输入赋值的时候要注意字节的存储方式 ```verilog D_solar_sensor_data_dx <= {data_1[i][7:0],data_1[i][15:8],data_1[i][23:16],data_1[i][31:24]}; D_solar_sensor_data_dy <= {data_2[i][7:0],data_2[i][15:8],data_2[i][23:16],data_2[i][31:24]}; D_solar_sensor_data_dz <= {data_3[i][7:0],data_3[i][15:8],data_3[i][23:16],data_3[i][31:24]}; ``` 测试vscode 测试成功 aa