图表表达规范

在技术博客中,为了清晰表达电路和架构,我们采用以下规范:


1. 简单电路用表格

❌ 不好的方式(ASCII 图会乱)

VDD100.u1FuFGNGDND

✅ 推荐方式(表格清晰)

电源电容连接作用
VDD10uF→ GND低频滤波
VDD0.1uF→ GND高频去耦
I2C SDA4.7kΩ→ 3.3V上拉电阻
I2C SCL4.7kΩ→ 3.3V上拉电阻

2. 系统架构用 SVG 图片

❌ 复杂的 ASCII 框图(会乱码)

MCUSensor

✅ 推荐方式(SVG 矢量图)

系统架构图示例

架构说明

  1. 传感器层:MPU6050 提供 6 轴 IMU 数据(I2C 接口)
  2. 主控层:STM32F4 运行 FreeRTOS,168MHz Cortex-M4
  3. 执行层:TB6612 双 H 桥驱动,PWM 控制
  4. 反馈层:AS5047 磁编码器提供位置反馈(SPI 接口)

FreeRTOS 任务划分

  • 控制任务 (1kHz):串级 PID 控制(直立环 + 速度环)
  • 通信任务:蓝牙遥控、状态显示
  • 传感器任务:IMU 数据采集、编码器读取

3. 代码示例用代码块

✅ 正确方式

// PID 控制示例
float pid_calc(PID_TypeDef *pid, float target, float measure) {
    float error = target - measure;
    
    // 比例项
    float p_term = pid->Kp * error;
    
    // 积分项(带限幅)
    pid->integral += error;
    pid->integral = constrain(pid->integral, -100, 100);
    float i_term = pid->Ki * pid->integral;
    
    // 微分项
    float d_term = pid->Kd * (error - pid->last_error);
    
    return p_term + i_term + d_term;
}

4. 数学公式用 LaTeX

✅ 推荐方式

PID 计算公式:

$$ u(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt} $$

离散化:

$$ u[k] = K_p e[k] + K_i \sum_{i=0}^{k} e[i] + K_d (e[k] - e[k-1]) $$


5. 时序用 SVG 图片 + 列表

❌ ASCII 时序图(会乱码)

CDLAKTA

✅ 推荐方式(SVG 时序图 + 列表)

I2C 时序图

I2C 读取时序说明

  1. 起始条件: SDA 高→低(SCL 高电平)
  2. 发送地址: 7 位从机地址 + 读位
  3. 等待应答: 第 9 周期采样 ACK
  4. 读取数据: 8 位数据,MSB 在前
  5. 发送 NACK: 最后一个字节后
  6. 停止条件: SDA 低→高(SCL 高电平)

6. PCB 布局用文字说明

✅ 推荐格式

关键器件布局原则

器件位置注意事项
MCU板子中心靠近去耦电容
晶振靠近 MCU OSC 引脚下方不走线
LDO靠近电源入口输入输出电容就近
连接器板边固定孔附近

布线规则

  • 电源线宽: ≥0.8mm (1A)
  • 信号线宽: 0.2-0.3mm
  • 地平面: 完整,避免分割
  • 差分对: 等长,间距 3W

总结

技术文档的图表表达原则:

  1. 简单电路 → 表格
  2. 系统架构 → 文字 + 表格
  3. 代码示例 → 代码块
  4. 数学公式 → LaTeX
  5. 时序关系 → 列表
  6. PCB 布局 → 表格 + 文字

这样即使在纯文本环境下,也能清晰表达技术内容!


本文档规范适用于技术博客、数据手册、应用笔记等场景