Uart、Usart、SPI、I2C通信
Uart(通用异步收发器):
特点:
仅需TX、RX两根线
异步通信
全双工通信
数据帧:起始位+数据位+可选校验位 + 停止位
使用场景:低成本、近距离通信,如mcu与传感器、计算机串口调试
优缺点:
简单易用,无需时钟线,抗干扰能力强
速率慢,不支持多设备
Usart(通用同步/异步收发器):
特点:
支持同步/异步,异步时和uart相同,同步时增加SCLK时钟线
支持更高速率
应用场景:
需要同步通信的高性能场景,如智能卡、IrDA红外通信
优缺点:
灵活,支持多种协议
硬件复杂度高于uart
SPI(串行外设接口):
特点:
四线制:SCLK,MOSI,MISO,CS
同步通信
全双工
速率高(可达10Mbps)
支持一主多从
应用场景:
高速短距离通信,如Flash存储器、ADC模块、LCD驱动器
优缺点:
全双工、高速、硬件简单
占用引脚多
I2C(集成电路总线):
特点:
两线制:SCL 时钟线,SDA数据线
同步通信
半双工通信
支持多主多从
应用场景:
短距离低速设备,如EEPROM、温度传感器、RTC时钟
优缺点:
引脚少,支持多设备总线
速率低,数据帧长度受限
对比总结
特性 | UART | USART | SPI | I2C -- | -- | -- | -- | -- 同步/异步 | 异步 | 同步/异步 | 同步 | 同步 双工模式 | 全双工 | 全双工 | 全双工 | 半双工 线数 | 2线(TX/RX) | 3线(+SCLK) | 4线 | 2线(SDA/SCL) 速率 | ≤1Mbps | ≤4.5Mbps | 可达数十Mbps | ≤3.4Mbps 寻址方式 | 无 | 无 | 片选线 | 设备地址 典型应用 | 调试终端 | 智能卡 | Flash存储器 | 传感器pid算法
基础原理
PID(Proportional-Integral-Derivative)是一种基于误差反馈的闭环控制算法
核心思想:
当前偏差P:快速响应当前误差
历史补偿I:消除稳态误差
未来预测D:抑制超调和震荡
理解:现在水温30度,目标水温40度,比例P会迅速增大加热功率,但是存在稳态误差;如果水温卡在38度,积分I会缓慢增加热量直到误差为0;当水温快速从30到40度时,微分D会提前减小加热功率防止过热
离散形式
位置式pid:输出值为全量
常用于舵机
增量式pid:输出值为变化量
常用于电机
//代码实现(c语言)typedef struct { float Kp, Ki, Kd; // PID参数 float integral; // 积分累积量 float last_error; // 上次误差} PID_Controller;float PID_Calculate(PID_Controller *pid, float setpoint, float feedback) { float error = setpoint - feedback; //目标-反馈值 pid->integral += error; //积分 float d_error = error - pid->last_error; //误差-上次误差 // 计算输出(带限幅) float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * d_error; output = (output > MAX_OUTPUT) ? MAX_OUTPUT : (output < -MAX_OUTPUT) ? -MAX_OUTPUT : output; pid->last_error = error; return output;}