This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/1.Software/STM32_AD7606/Drivers/BSP/AD7606/ControlCommandReceive.c

347 lines
8.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}