// 零点校准 void rms_zero_calibration(void) { // 输入端短路或接地 printf("请将输入端短路\n"); delay_ms(2000); // 等待输出稳定 float settle_time = get_settle_time(); delay_ms((int)(settle_time * 1000 * 5)); // 等待5个时间常数 // 读取零点输出 float zero_output = read_rms_output(); printf("零点输出: %.4f V\n", zero_output); // 调整零点电位器 if(fabs(zero_output) > 0.001) { printf("调整零点电位器至接近0V\n"); } zero_offset = zero_output; } // 满度校准 void rms_fullscale_calibration(float input_rms) { // 输入标准正弦波信号 printf("请输入%.3f V RMS标准正弦波\n", input_rms); delay_ms(2000); // 等待输出稳定 float settle_time = get_settle_time(); delay_ms((int)(settle_time * 1000 * 5)); // 读取输出电压 float output_voltage = read_rms_output() - zero_offset; printf("理论输出: %.3f V\n", input_rms); printf("实际输出: %.3f V\n", output_voltage); // 计算校准误差 float error = (output_voltage - input_rms) / input_rms * 100; printf("校准误差: %.2f%%\n", error); if(fabs(error) > 0.5) { printf("调整满度电位器进行校准\n"); } }