尧图精选

最少拍控制系统设计与89C51嵌入式实现

🕒 发布时间:2026/9/20 0:24:19 📁 来源:尧图网络
简介本资源是一份面向电气工程及其自动化专业本科生的《计算机控制技术》课程设计完整报告聚焦最少拍控制系统的设计与实现解决单闭环反馈控制系统中快速响应与无纹波跟踪的核心问题。资料以Word文档.doc形式呈现共1个文件大小472KB内容涵盖任务书、硬件电路设计含89C51最小系统、ADC0809模入与TLC7528模出双极性±5V接口、最少拍控制算法推导、C语言软件流程含中断、滤波、D/A输出等模块、实验结果分析及调试问题总结结构完整、图文结合、步骤详实。已有773人学习下载适合课程设计实践参考、控制算法落地复现及单片机模拟电路综合能力提升尤其对理解无纹波最少拍控制器设计逻辑、被控对象建模与采样周期整定具有直接指导价值。1. 最少拍控制系统不是“快就行”而是用数学约束换来的确定性响应在计算机控制课程设计中学生常把“最少拍”误解为“响应越快越好”结果调出超调严重、振荡不止的波形。但真实情况恰恰相反最少拍控制的本质是在给定输入类型阶跃/斜坡和被控对象结构是否含积分环节双重约束下唯一确定的、有限拍数内达到无静差的离散控制器设计方法。它不追求连续时间下的瞬时最优而是在采样点上强制实现“第 N 拍后误差恒为零”的数学契约。本课程设计以 89C51 单片机为平台通过 ADC0809 双通道同步采样、TLC7528 双极性 D/A 输出、运放搭建的典型惯性积分被控对象完整复现了从 z 域脉冲传递函数推导、D(z)控制器系数求解、到 C 语言定点/浮点混合实现的全链路。它面向电气工程及其自动化专业高年级学生要求同时掌握《自动控制原理》中的离散系统分析、《单片机原理》的中断与外设驱动、以及《计算机控制技术》中数字控制器的工程落地——不是仿真跑通就结束而是必须在真实运放电路负载下让示波器上出现清晰的“N 拍收敛”阶梯状响应曲线。这种硬约束下的确定性正是工业现场对定位、分拣、张力等短行程运动控制的核心诉求。2. 最小拍无纹波控制器的设计从被控对象结构决定输入类型选择2.1 被控对象结构决定控制器设计范式最少拍控制器能否实现“无纹波”根本取决于被控对象是否具备足够的积分能力。课程设计任务书明确要求“被控对象有积分环节的按斜坡输入信号设计控制器否则按阶跃输入信号设计控制器”。这一要求并非随意指定而是由 z 变换终值定理和系统稳态跟踪条件严格推导而来。以任务书中给出的典型被控对象 $G_c(s) \frac{4}{s(0.4s1)}$ 为例其传递函数包含一个纯积分环节$1/s$这意味着在连续域中它对斜坡输入 $r(t)t$ 具有零稳态误差能力。若强行按阶跃输入设计最少拍控制器则闭环系统在非采样时刻即 $t \neq kT$将出现纹波ripple表现为输出在采样点间剧烈波动无法满足“无纹波”要求。因此设计起点必须是辨识被控对象的极点结构检查其传递函数中 $s$ 的最低幂次。若存在 $s^0$即常数项则为无积分对象选阶跃输入若存在 $s^{-1}$ 则为一阶积分对象选斜坡输入若存在 $s^{-2}$ 则需按加速度输入设计。本设计中所有运放实现的被控对象电路均需通过电阻电容参数反推其 s 域模型确认积分环节存在性这是后续所有计算不可逾越的前提。2.2 广义对象脉冲传递函数 $G(z)$ 的精确建模控制器设计的物理基础是广义对象 $G(z)$它并非单纯被控对象 $G_c(s)$ 的 z 变换而是包含了零阶保持器ZOH和采样周期 $T$ 的完整离散化模型$G(z) Z\left{ \frac{1-e^{-sT}}{s} G_c(s) \right}$。忽略 ZOH 将导致设计严重失准。以 $G_c(s) \frac{4}{s(0.4s1)}$ 和 $T1s$ 为例其精确的 $G(z)$ 计算过程如下首先对 $G_c(s)$ 进行部分分式分解 $$ G_c(s) \frac{4}{s(0.4s1)} \frac{4}{s} - \frac{1.6}{0.4s1} \frac{4}{s} - \frac{4}{s2.5} $$然后应用 ZOH 离散化公式 $Z\left{ \frac{1-e^{-sT}}{s} \cdot \frac{1}{sa} \right} \frac{1-z^{-1}}{z} \cdot \frac{z}{(z-1)(z-e^{-aT})} \frac{1-e^{-aT}}{(z-1)(z-e^{-aT})}$可得 $$ G(z) Z\left{ \frac{1-e^{-s}}{s} \cdot \left( \frac{4}{s} - \frac{4}{s2.5} \right) \right} \frac{4(1-z^{-1})}{(z-1)^2} - \frac{4(1-e^{-2.5})}{(z-1)(z-e^{-2.5})} $$代入 $e^{-2.5} \approx 0.0821$经通分整理最终得到 $$ G(z) \frac{0.318z 0.236}{z^2 - 1.0821z 0.0821} $$注意此 $G(z)$ 是后续所有设计的基石。若直接使用 MATLABc2d函数必须指定zoh方法并核对采样周期任何近似如双线性变换都会破坏最少拍的精确性。2.3 无纹波最少拍控制器 $D(z)$ 的闭环脉冲传递函数推导无纹波设计的核心目标是使闭环系统对指定输入此处为斜坡 $R(z)\frac{Tz}{(z-1)^2}$在 $N$ 拍内完全跟踪且在 $k \geq N$ 后$u(k)$ 为常数保证输出平滑。这要求闭环脉冲传递函数 $\Phi(z)$ 必须满足两个条件稳定性与可实现性$\Phi(z)$ 的分子分母均为 $z^{-1}$ 的多项式且分母阶次不小于分子阶次无纹波约束$\Phi(z)$ 必须包含 $(1-z^{-1})^v$ 因子其中 $v$ 是输入类型的阶数斜坡对应 $v2$以确保对斜坡输入的稳态误差为零。根据最少拍理论$\Phi(z)$ 的标准形式为 $$ \Phi(z) (1-z^{-1})^v F(z) $$ 其中 $F(z)$ 是待定的、首项系数为 1 的多项式。对于斜坡输入$v2$和上述 $G(z)$分母为二阶$F(z)$ 应为一阶多项式$F(z) 1 f_1 z^{-1}$。同时开环脉冲传递函数 $\Phi_e(z) 1 - \Phi(z)$ 必须能被 $G(z)$ 的分母整除以保证 $D(z) \frac{\Phi(z)}{G(z)\Phi_e(z)}$ 为真分式。将 $\Phi(z) (1-z^{-1})^2 (1 f_1 z^{-1})$ 展开并令其满足 $\Phi_e(z)$ 的零点与 $G(z)$ 的极点重合可解得 $f_1 -0.0821$。最终得到 $$ \Phi(z) \frac{z^{-2} - 1.0821z^{-3} 0.0821z^{-4}}{1 - 1.0821z^{-1} 0.0821z^{-2}} $$2.4 控制器 $D(z)$ 的差分方程实现与系数验证由 $\Phi(z) \frac{C(z)}{R(z)}$ 和 $D(z) \frac{U(z)}{E(z)}$结合 $U(z) D(z)E(z), C(z) G(z)U(z), E(z) R(z) - C(z)$可推导出 $D(z)$ 的表达式 $$ D(z) \frac{\Phi(z)}{G(z)[1-\Phi(z)]} $$将前述 $\Phi(z)$ 和 $G(z)$ 代入经代数运算推荐使用 MATLAB Symbolic Toolbox 避免手算错误得到 $$ D(z) \frac{0.6294 - 0.4087z^{-1} 0.0293z^{-2}}{1 - 0.593z^{-1} - 0.407z^{-2}} $$此 $D(z)$ 对应的差分方程即为软件实现的核心 $$ u(k) 0.593u(k-1) 0.407u(k-2) 0.6294e(k) - 0.4087e(k-1) 0.0293e(k-2) $$提示该系数是针对 $T1s$ 且被控对象为 $G_c(s) \frac{4}{s(0.4s1)}$ 的精确解。若更换被控对象或调整采样周期必须重新执行 2.2 和 2.3 节的全部推导不可直接套用。系数的小数位数如 0.593是精度权衡的结果在 89C51 的 12MHz 主频下采用 float 类型计算已足够无需强求 double。3. 89C51 硬件平台上的双极性信号调理与实时控制实现3.1 ADC0809 双通道同步采样的硬件与软件协同设计ADC0809 的 0~5V 输入范围与系统要求的 -5V~5V 双极性输入存在根本矛盾。课程设计采用经典的“电平移位”方案在 IN6 和 IN7 通道前接入上拉电阻网络如图 3 所示将外部输入电压 $U_{out}$ 映射为 ADC 可接受的 $U_{in}$ $$ U_{in} \frac{U_{out} V_{cc}}{2}, \quad \text{其中 } V_{cc}5V $$ 这意味着当 $U_{out} -5V$ 时$U_{in} 0V$当 $U_{out} 5V$ 时$U_{in} 5V$。ADC0809 的 8 位输出值 $ADC_val$ 与 $U_{in}$ 的关系为 $U_{in} \frac{ADC_val}{255} \times 5$。联立两式即可反推出原始电压 $$ U_{out} 2 \times U_{in} - 5 2 \times \frac{ADC_val}{255} \times 5 - 5 \frac{10 \times ADC_val}{255} - 5 $$ 在 C 语言中为避免浮点运算拖慢实时性通常采用定点缩放。由于 $255 \approx 256 2^8$可近似为// 假设 ADC_val 为读取的 8 位值 int16_t U_out_mV (int16_t)ADC_val * 10000 / 255 - 5000; // 单位毫伏 // 或更高效的移位近似误差0.4% int16_t U_out_mV_approx ((int16_t)ADC_val 5) - 5000; // 相当于 *32关键操作双通道采样IN7 为输出 $c(t)$IN6 为给定 $r(t)$必须严格同步。软件流程为先启动 IN7 通道转换等待转换完成通过查询 EOC 引脚或使用中断读取ADC_7立即切换至 IN6 通道启动转换再等待并读取ADC_6。两次采样间隔必须远小于系统动态过程否则引入相位误差。任务书中要求“定时中断间隔 10-50ms”正是为此服务。3.2 TLC7528 双极性 D/A 输出的运放电路解析与调试要点TLC7528 是 8 位双通道电流输出型 DAC其输出为 $I_{OUT} \frac{V_{REF}}{R_{FB}} \times \frac{D}{256}$。要获得 -5V~5V 的电压输出必须设计一个能将单向电流转换为双向电压的运放电路如图 4 所示。该电路的核心是一个反相加法器其输出电压为 $$ V_{out} -R_f \left( \frac{I_{DAC}}{1} \frac{V_{bias}}{R_{bias}} \right) $$ 通过精心选择 $R_f$、$R_{bias}$ 和 $V_{bias}$通常取 $V_{cc}/2 2.5V$可使 $V_{out}$ 的范围覆盖 -5V 至 5V。例如若 $R_f 2k\Omega$, $R_{bias} 1k\Omega$, $V_{bias} 2.5V$则偏置电流为 $2.5V/1k\Omega 2.5mA$而 DAC 满量程电流$V_{REF}5V, R_{FB}5k\Omega$为 $1mA$两者叠加后运放输出范围恰好为 $-2k\Omega \times (1mA 2.5mA) -7V$ 至 $-2k\Omega \times (0 2.5mA) -5V$再通过后续放大/反相即可校准到目标范围。调试时最关键的一步是测量运放虚地端同相端电压必须严格为 0V。若存在偏差说明运放供电不对称或反馈电阻精度不足会导致输出零点漂移直接破坏最少拍的“无静差”特性。3.3 89C51 定时器与中断系统的精确配置整个控制环路的时序心脏是 89C51 的定时器。任务书要求“采样周期取采样中断间隔的整数倍可取 1000-2000ms”这意味着主循环周期即 $T$为 1s 或 2s而内部定时中断用于驱动 ADC 启动、状态轮询频率更高10-50ms。以 $T1s$ 和定时中断 10ms 为例需配置定时器产生 10ms 中断// 假设晶振频率为 12MHz机器周期为 1us // 定时器0工作在方式116位初值 65536 - 10000 55536 0xD8F0 void Timer0_Init(void) { TMOD 0xF0; // 清零低4位 TMOD | 0x01; // 方式1 TH0 0xD8; // 高8位 TL0 0xF0; // 低8位 ET0 1; // 开定时器0中断 EA 1; // 开总中断 TR0 1; // 启动定时器0 } // 定时器0中断服务程序 void Timer0_ISR(void) interrupt 1 { static uint16_t cnt 0; TH0 0xD8; // 重装初值 TL0 0xF0; cnt; if(cnt 100) { // 100 * 10ms 1s cnt 0; Sample_Flag 1; // 置位采样标志 } }注意Sample_Flag是主循环与中断服务程序之间的关键通信变量必须声明为volatile防止编译器优化掉其值。主循环中检测到该标志后立即执行双通道 ADC 采样、偏差计算、控制器更新、D/A 输出等一系列操作整个过程必须在下一个 10ms 中断到来前完成否则将丢失采样点。3.4 滑动平均滤波的嵌入式实现与效果对比传感器噪声会严重干扰最少拍控制器的性能因其对误差 $e(k)$ 的微小变化极为敏感。任务书允许选用“平均值法、中值法”而滑动平均Moving Average因其计算简单、延时固定成为 89C51 上的首选。其核心思想是用当前及前 $n-1$ 个采样值的平均代替当前值。以三阶滑动平均为例// 全局变量 int16_t M, M_1, M_2; // 存储输出通道IN7的最近3个ADC值 int16_t N, N_1, N_2; // 存储给定通道IN6的最近3个ADC值 // 在ADC采样完成后执行 void Apply_Filter(void) { // 更新输出通道滑动窗口 M_2 M_1; M_1 M; M ADC_7; // 假设ADC_7是刚读取的IN7值 int16_t cont_filtered (M M_1 M_2) / 3; // 更新给定通道滑动窗口 N_2 N_1; N_1 N; N ADC_6; // 假设ADC_6是刚读取的IN6值 int16_t set_filtered (N N_1 N_2) / 3; // 计算滤波后的偏差 int16_t EK cont_filtered - set_filtered; }效果对比未加滤波时示波器上可见明显的高频毛刺叠加在控制响应曲线上加入三阶滑动平均后毛刺被显著抑制响应曲线变得平滑且不引入额外的相位滞后这是与 IIR 滤波器的关键区别完美契合最少拍对时序确定性的苛刻要求。4. 最少拍控制算法的 C 语言实现与关键参数调试技巧4.1 浮点与定点混合编程的权衡策略89C51 的硬件资源极其有限其内置的浮点运算库如 Keil C51 的float.h效率低下一次float乘法耗时可达数百个机器周期。然而最少拍控制器的系数如 0.593是高度敏感的直接截断为整数如 593会导致严重失稳。本设计采用系数定点化、数据路径浮点化的混合策略控制器系数在 PC 端用高精度工具MATLAB计算出系数然后将其放大 $2^{15}32768$ 倍转为int16_t存储。例如0.593变为0.593 * 32768 ≈ 19440。运行时计算在单片机上将 ADC 读取的int16_t误差值EK也提升为int32_t与定点系数相乘再右移 15 位得到结果。// 定义定点系数放大32768倍 const int16_t KK0_Q15 20620; // 0.6294 * 32768 const int16_t KK1_Q15 -13390; // -0.4087 * 32768 const int16_t KK2_Q15 960; // 0.0293 * 32768 const int16_t PP1_Q15 19440; // 0.593 * 32768 const int16_t PP2_Q15 13330; // 0.407 * 32768 // 定义历史变量为避免溢出使用int32_t int32_t UK_1 0, UK_2 0; int32_t EK_1 0, EK_2 0; int32_t UK 0; // 在中断服务程序中执行 int32_t temp1 (int32_t)KK0_Q15 * EK; temp1 (int32_t)KK1_Q15 * EK_1; temp1 (int32_t)KK2_Q15 * EK_2; temp1 15; // 除以32768 int32_t temp2 (int32_t)PP1_Q15 * UK_1; temp2 (int32_t)PP2_Q15 * UK_2; temp2 15; UK temp1 temp2; // 更新历史变量注意顺序 EK_2 EK_1; EK_1 EK; UK_2 UK_1; UK_1 UK;优势此方法在保持系数精度的同时将核心计算控制在整数域速度比纯浮点快 5-10 倍完全满足 10ms 中断周期内的实时性要求。4.2 “N 拍收敛”的实验验证与波形判读方法最少拍设计的终极检验不是看超调率而是用示波器捕获并测量“N 拍收敛”的物理证据。具体步骤如下设置输入将给定信号 $r(t)$ 设置为一个干净的阶跃若对象无积分或斜坡若对象有积分信号。触发捕获将示波器通道 1 接 $r(t)$通道 2 接被控对象输出 $c(t)$触发源设为通道 1 的上升沿。测量拍数观察 $c(t)$ 波形找到其首次达到并稳定在 $r(t)$ 值或其斜率的时刻。记录从触发点到该稳定时刻之间$c(t)$ 波形上出现的“台阶”数量。每个台阶对应一个采样周期 $T$。对照理论将实测拍数 $N_{meas}$ 与理论设计值 $N_{theory}$ 对照。对于上述 $G_c(s) \frac{4}{s(0.4s1)}$ 和斜坡输入理论 $N4$。若 $N_{meas}4$则验证成功若 $N_{meas}4$说明控制器设计有误或存在未补偿的延迟若 $N_{meas}4$则违反了最少拍的数学定义必然是测量或计算错误。4.3 常见失效模式与快速排错指南在实际调试中以下三种失效模式最为典型可按此清单快速定位失效现象最可能原因快速验证与修复输出持续振荡永不收敛1. 控制器系数符号错误如PP1应为正却写成负2. 采样周期 $T$ 与硬件电路时间常数不匹配导致离散化失真用万用表测量 DAC 输出电压若其在正负值间大幅跳变立即检查PP1_Q15等系数的符号和数值。重新用 MATLAB 计算 $G(z)$确认其极点是否在单位圆内。输出缓慢爬升远超 $N$ 拍才接近给定1. 双极性调理电路零点漂移运放虚地不为 02. 滑动滤波窗口过大过度平滑了真实误差断开 DAC 输出用示波器直流耦合档直接测量运放输出端对地电压应为 0V±10mV。若偏差大调节 $W102$ 电位器。临时注释掉滤波代码观察原始响应。响应曲线有明显纹波非采样点处波动1. 被控对象不含积分环节却按斜坡输入设计了控制器2.D(z)实现中遗漏了“无纹波”所需的 $(1-z^{-1})^v$ 因子重新检查运放电路确认是否存在 $1/s$ 环节即电容是否跨接在运放输入与输出之间。用 MATLAB 重新计算 $\Phi(z)$确认其分子是否包含 $(z-1)^2$ 因子。终极技巧当所有软硬件检查无误但波形仍不理想时降低采样周期 $T$。例如将 $T$ 从 1s 改为 0.5s重新计算 $G(z)$ 和 $D(z)$。更小的 $T$ 会使离散模型更逼近连续模型往往能“掩盖”因硬件非理想性如运放带宽、ADC 转换延迟引入的微小误差是课程设计中快速获得成功波形的有效手段。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →