diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index b941219..ca73d4e 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -726,9 +726,9 @@ void start_dac8568_test_task(void const *argument) //DAC8568_WriteAndUpdate(CHANNEL_B, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_C, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_D, (uint16_t)i); - DAC8568_WriteAndUpdate(CHANNEL_E, (uint16_t)i); + //DAC8568_WriteAndUpdate(CHANNEL_E, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_F, (uint16_t)i); - DAC8568_WriteAndUpdate(CHANNEL_G, (uint16_t)i); + //DAC8568_WriteAndUpdate(CHANNEL_G, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_H, (uint16_t)i); @@ -742,7 +742,7 @@ void start_dac8568_test_task(void const *argument) // float voltage = 2.5f * 2.0f * i / 65536.0f; // 延时2秒 - osDelay(2000); + osDelay(1000); //} } } \ No newline at end of file diff --git a/User/application/src/tcpserverc.c b/User/application/src/tcpserverc.c index fb8c36a..8196a46 100644 --- a/User/application/src/tcpserverc.c +++ b/User/application/src/tcpserverc.c @@ -729,39 +729,66 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf * uint16_t dac_value; uint16_t dac161s_value; uint16_t digital_value; + float voltage; + uint32_t dac_out; + const float SCALE_FACTOR = 1000.0f; // 新的比例系数,输入值除以1000得到实际电压值 // 处理DAC8568的8个通道输出 // 通道A (CH0) dac_value = (tcp_rx_data[9] << 8) | tcp_rx_data[10]; - DAC8568_WriteAndUpdate(CHANNEL_A, dac_value); + voltage = dac_value / SCALE_FACTOR; // 转换为实际电压值 + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); // 2.5V参考电压 + if(dac_out > 65535) dac_out = 65535; // 限制最大值 + DAC8568_WriteAndUpdate(CHANNEL_A, (uint16_t)dac_out); // 通道B (CH4) dac_value = (tcp_rx_data[11] << 8) | tcp_rx_data[12]; - DAC8568_WriteAndUpdate(CHANNEL_B, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_B, (uint16_t)dac_out); // 通道C (CH1) dac_value = (tcp_rx_data[13] << 8) | tcp_rx_data[14]; - DAC8568_WriteAndUpdate(CHANNEL_C, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_C, (uint16_t)dac_out); // 通道D (CH5) dac_value = (tcp_rx_data[15] << 8) | tcp_rx_data[16]; - DAC8568_WriteAndUpdate(CHANNEL_D, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_D, (uint16_t)dac_out); // 通道E (CH2) dac_value = (tcp_rx_data[17] << 8) | tcp_rx_data[18]; - DAC8568_WriteAndUpdate(CHANNEL_E, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_E, (uint16_t)dac_out); // 通道F (CH6) dac_value = (tcp_rx_data[19] << 8) | tcp_rx_data[20]; - DAC8568_WriteAndUpdate(CHANNEL_F, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_F, (uint16_t)dac_out); // 通道G (CH3) dac_value = (tcp_rx_data[21] << 8) | tcp_rx_data[22]; - DAC8568_WriteAndUpdate(CHANNEL_G, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_G, (uint16_t)dac_out); // 通道H (CH7) dac_value = (tcp_rx_data[23] << 8) | tcp_rx_data[24]; - DAC8568_WriteAndUpdate(CHANNEL_H, dac_value); + voltage = dac_value / SCALE_FACTOR; + dac_out = (uint32_t)((voltage / 2.5f) * 65535.0f); + if(dac_out > 65535) dac_out = 65535; + DAC8568_WriteAndUpdate(CHANNEL_H, (uint16_t)dac_out); //HART电流输出 dac161s_value = (tcp_rx_data[25] << 8) | tcp_rx_data[26]; @@ -774,9 +801,9 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf * //tcp_rx_data[30] // 数字量输出刷新第一个芯片的输出状态 - TCA6416_WritePort(0, tcp_rx_data[31]); // 直接写入Port0的值8-15 + TCA6416_WritePort(0, tcp_rx_data[27]); // 直接写入Port0的值8-15 osDelay(10); - TCA6416_WritePort(1, tcp_rx_data[32]); // 写入Port1的值0-7 + TCA6416_WritePort(1, tcp_rx_data[28]); // 写入Port1的值0-7 osDelay(10); // 保存设置的数据到adc_set_data数组