DAC有输出电压

This commit is contained in:
qiuxin 2025-05-30 20:40:47 +08:00
parent 44ac1747c0
commit 7271283f9e
2 changed files with 40 additions and 13 deletions

View File

@ -726,9 +726,9 @@ void start_dac8568_test_task(void const *argument)
//DAC8568_WriteAndUpdate(CHANNEL_B, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_B, (uint16_t)i);
//DAC8568_WriteAndUpdate(CHANNEL_C, (uint16_t)i); //DAC8568_WriteAndUpdate(CHANNEL_C, (uint16_t)i);
//DAC8568_WriteAndUpdate(CHANNEL_D, (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_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); //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; // float voltage = 2.5f * 2.0f * i / 65536.0f;
// 延时2秒 // 延时2秒
osDelay(2000); osDelay(1000);
//} //}
} }
} }

View File

@ -729,39 +729,66 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf *
uint16_t dac_value; uint16_t dac_value;
uint16_t dac161s_value; uint16_t dac161s_value;
uint16_t digital_value; uint16_t digital_value;
float voltage;
uint32_t dac_out;
const float SCALE_FACTOR = 1000.0f; // 新的比例系数输入值除以1000得到实际电压值
// 处理DAC8568的8个通道输出 // 处理DAC8568的8个通道输出
// 通道A (CH0) // 通道A (CH0)
dac_value = (tcp_rx_data[9] << 8) | tcp_rx_data[10]; 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) // 通道B (CH4)
dac_value = (tcp_rx_data[11] << 8) | tcp_rx_data[12]; 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) // 通道C (CH1)
dac_value = (tcp_rx_data[13] << 8) | tcp_rx_data[14]; 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) // 通道D (CH5)
dac_value = (tcp_rx_data[15] << 8) | tcp_rx_data[16]; 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) // 通道E (CH2)
dac_value = (tcp_rx_data[17] << 8) | tcp_rx_data[18]; 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) // 通道F (CH6)
dac_value = (tcp_rx_data[19] << 8) | tcp_rx_data[20]; 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) // 通道G (CH3)
dac_value = (tcp_rx_data[21] << 8) | tcp_rx_data[22]; 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) // 通道H (CH7)
dac_value = (tcp_rx_data[23] << 8) | tcp_rx_data[24]; 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电流输出 //HART电流输出
dac161s_value = (tcp_rx_data[25] << 8) | tcp_rx_data[26]; 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] //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); osDelay(10);
TCA6416_WritePort(1, tcp_rx_data[32]); // 写入Port1的值0-7 TCA6416_WritePort(1, tcp_rx_data[28]); // 写入Port1的值0-7
osDelay(10); osDelay(10);
// 保存设置的数据到adc_set_data数组 // 保存设置的数据到adc_set_data数组