#include "./BSP/AD7606/ControlCommandReceive.h" #include "usbd_cdc_if.h" // 定义指令类型 typedef enum { HEARTBEAT_FRAME = 0, CONTROL_FRAME = 1 } InstructionType; // 定义采样频率 typedef enum { FREQ_10KHZ = 1, FREQ_20KHZ = 2, FREQ_30KHZ = 3, FREQ_40KHZ = 4, FREQ_50KHZ = 5, FREQ_60KHZ = 6 } SamplingFreq; // 指令存储buf和标志 uint8_t Control_Buf[8] = {3}; // 指令存储buf uint8_t Control_Ins_Flag = 0; // 指令接收标志 0:未接收; 1:已接收 // 采样控制器和PWM频率相关变量 uint8_t sampling_control = 0; // 采样控制器 0: 停止采样; 1: 开始采样 uint32_t PCS = 14; // 用于计算PWM频率 uint32_t ARR = 100; // 用于计算PWM频率 /* 定义一个超大数组用于存储数据 */ uint8_t DataArray[26728]; uint8_t DataArray_2[6458]; // 指令判断函数 void Instruct_Judgment(void) { InstructionType instructionType = (Control_Buf[0] == 0x00 && Control_Buf[1] == 0x00 && Control_Buf[2] == 0x00 && Control_Buf[3] == 0x00) ? HEARTBEAT_FRAME : CONTROL_FRAME; switch (instructionType) { case HEARTBEAT_FRAME: // 心跳帧处理代码(当前为空) break; case CONTROL_FRAME: // 启停采样判断 sampling_control = (Control_Buf[4] == 0 && Control_Buf[5] == 0) ? 0 : 1; if (Control_Buf[6]==Control_Buf[7]){ // 采样频率判断 switch ((SamplingFreq)(Control_Buf[6])) { case FREQ_10KHZ: ARR = 100; PCS = 84; break; case FREQ_20KHZ: ARR = 100; PCS = 42; break; case FREQ_30KHZ: ARR = 100; PCS = 28; break; case FREQ_40KHZ: ARR = 100; PCS = 21; break; case FREQ_50KHZ: ARR = 82; PCS = 21; break; case FREQ_60KHZ: ARR = 100; PCS = 14; break; default: // 未知采样频率,可以进行错误处理或保持原值 break; } break; } default: // 未知指令类型,可以进行错误处理 break; } } /* 初始化数组 每一段前4个字节作为标志帧 */ void Data_to_ADbuf(void){ /* 标志位=0000:作为通道0数据帧头 振动数据存在DataArray[4:1027] */ DataArray[1028*0 + 0] = 0; DataArray[1028*0 + 1] = 0; DataArray[1028*0 + 2] = 0; DataArray[1028*0 + 3] = 0; /* 标志位=1111:作为通道1数据帧头 振动数据存在DataArray[1032:2055 */ DataArray[1028*1 + 0] = 1; DataArray[1028*1 + 1] = 1; DataArray[1028*1 + 2] = 1; DataArray[1028*1 + 3] = 1; /* 标志位=2222:作为通道2数据帧头 振动数据存在DataArray[2060:3083] */ DataArray[1028*2 + 0] = 2; DataArray[1028*2 + 1] = 2; DataArray[1028*2 + 2] = 2; DataArray[1028*2 + 3] = 2; /* 标志位=3333:作为通道3数据帧头 振动数据存在DataArray[3088:4111] */ DataArray[1028*3 + 0] = 3; DataArray[1028*3 + 1] = 3; DataArray[1028*3 + 2] = 3; DataArray[1028*3 + 3] = 3; /* 标志位=4444:作为通道4数据帧头 振动数据存在DataArray[4116:5139] */ DataArray[1028*4 + 0] = 4; DataArray[1028*4 + 1] = 4; DataArray[1028*4 + 2] = 4; DataArray[1028*4 + 3] = 4; /* 标志位=5555:作为通道5数据帧头 振动数据存在DataArray[5144:6167] */ DataArray[1028*5 + 0] = 5; DataArray[1028*5 + 1] = 5; DataArray[1028*5 + 2] = 5; DataArray[1028*5 + 3] = 5; /* 标志位=6666:作为通道6数据帧头 振动数据存在DataArray[6172:7195] */ DataArray[1028*6 + 0] = 6; DataArray[1028*6 + 1] = 6; DataArray[1028*6 + 2] = 6; DataArray[1028*6 + 3] = 6; /* 标志位=7777:作为通道7数据帧头 振动数据存在DataArray[7200:8223] */ DataArray[1028*7 + 0] = 7; DataArray[1028*7 + 1] = 7; DataArray[1028*7 + 2] = 7; DataArray[1028*7 + 3] = 7; /* 标志位=8888:作为通道8数据帧头 振动数据存在DataArray[8228:9251] */ DataArray[1028*8 + 0] = 8; DataArray[1028*8 + 1] = 8; DataArray[1028*8 + 2] = 8; DataArray[1028*8 + 3] = 8; /* 标志位=9999:作为通道9数据帧头 振动数据存在DataArray[9256:10279] */ DataArray[1028*9 + 0] = 9; DataArray[1028*9 + 1] = 9; DataArray[1028*9 + 2] = 9; DataArray[1028*9 + 3] = 9; /* 标志位=AAAA:作为通道10数据帧头 振动数据存在DataArray[10284:11307] */ DataArray[1028*10 + 0] = 10; DataArray[1028*10 + 1] = 10; DataArray[1028*10 + 2] = 10; DataArray[1028*10 + 3] = 10; /* 标志位=BBBB:作为通道11数据帧头 振动数据存在DataArray[11312:12335] */ DataArray[1028*11 + 0] = 11; DataArray[1028*11 + 1] = 11; DataArray[1028*11 + 2] = 11; DataArray[1028*11 + 3] = 11; /* 标志位=CCCC:作为转速数据帧头 转速数据存在DataArray[12340:12852] */ DataArray[1028*12 + 0] = 12; DataArray[1028*12 + 1] = 12; DataArray[1028*12 + 2] = 12; DataArray[1028*12 + 3] = 12; /* 标志位=DDDD:作为断线检测数据帧头 断线检测数据存在DataArray[12856:12858]中 */ DataArray[12852] = 13; DataArray[12853] = 13; DataArray[12854] = 13; DataArray[12855] = 13; /* 标志位=0000:作为通道0数据帧头 振动数据存在DataArray[4:1027] */ DataArray[1028*13 + 0] = 0; DataArray[1028*13 + 1] = 0; DataArray[1028*13 + 2] = 0; DataArray[1028*13 + 3] = 0; /* 标志位=1111:作为通道1数据帧头 振动数据存在DataArray[1032:2055] */ DataArray[1028*14 + 0] = 1; DataArray[1028*14 + 1] = 1; DataArray[1028*14 + 2] = 1; DataArray[1028*14 + 3] = 1; /* 标志位=2222:作为通道2数据帧头 振动数据存在DataArray[2060:3083] */ DataArray[1028*15 + 0] = 2; DataArray[1028*15 + 1] = 2; DataArray[1028*15 + 2] = 2; DataArray[1028*15 + 3] = 2; /* 标志位=3333:作为通道3数据帧头 振动数据存在DataArray[3088:4111] */ DataArray[1028*16 + 0] = 3; DataArray[1028*16 + 1] = 3; DataArray[1028*16 + 2] = 3; DataArray[1028*16 + 3] = 3; /* 标志位=4444:作为通道4数据帧头 振动数据存在DataArray[4116:5139] */ DataArray[1028*17 + 0] = 4; DataArray[1028*17 + 1] = 4; DataArray[1028*17 + 2] = 4; DataArray[1028*17 + 3] = 4; /* 标志位=5555:作为通道5数据帧头 振动数据存在DataArray[5144:6167] */ DataArray[1028*18 + 0] = 5; DataArray[1028*18 + 1] = 5; DataArray[1028*18 + 2] = 5; DataArray[1028*18 + 3] = 5; /* 标志位=6666:作为通道6数据帧头 振动数据存在DataArray[6172:7195] */ DataArray[1028*19 + 0] = 6; DataArray[1028*19 + 1] = 6; DataArray[1028*19 + 2] = 6; DataArray[1028*19 + 3] = 6; /* 标志位=7777:作为通道7数据帧头 振动数据存在DataArray[7200:8223] */ DataArray[1028*20 + 0] = 7; DataArray[1028*20 + 1] = 7; DataArray[1028*20 + 2] = 7; DataArray[1028*20 + 3] = 7; /* 标志位=8888:作为通道8数据帧头 振动数据存在DataArray[8228:9251] */ DataArray[1028*21 + 0] = 8; DataArray[1028*21 + 1] = 8; DataArray[1028*21 + 2] = 8; DataArray[1028*21 + 3] = 8; /* 标志位=9999:作为通道9数据帧头 振动数据存在DataArray[9256:10279] */ DataArray[1028*22 + 0] = 9; DataArray[1028*22 + 1] = 9; DataArray[1028*22 + 2] = 9; DataArray[1028*22 + 3] = 9; /* 标志位=AAAA:作为通道10数据帧头 振动数据存在DataArray[10284:11307] */ DataArray[1028*23 + 0] = 10; DataArray[1028*23 + 1] = 10; DataArray[1028*23 + 2] = 10; DataArray[1028*23 + 3] = 10; /* 标志位=BBBB:作为通道11数据帧头 振动数据存在DataArray[11312:12335] */ DataArray[1028*24 + 0] = 11; DataArray[1028*24 + 1] = 11; DataArray[1028*24 + 2] = 11; DataArray[1028*24 + 3] = 11; /* 标志位=CCCC:作为转速数据帧头 转速数据存在DataArray[12340:12852] */ DataArray[1028*25 + 0] = 12; DataArray[1028*25 + 1] = 12; DataArray[1028*25 + 2] = 12; DataArray[1028*25 + 3] = 12; /* 标志位=DDDD:作为断线检测数据帧头 断线检测数据存在DataArray[26220:26222]中 */ DataArray[26216] = 13; DataArray[26217] = 13; DataArray[26218] = 13; DataArray[26219] = 13; }