为 了 实 现 PID 控 制 所 需 要 的 等 间 隔 采 样 , 我 们 使 用 了 一 个 定 时 中 断 , 每 2ms 进 行 一 次 数 据采 样 和 PID 计 算 。 与 此 并 行 , 系 统 中 还 设 计 了 一 个 转 速 脉 冲 检 测 中 断 , 从 而 实 现 了 转 速 检 测 。为 了 调 试 的 需 要 , 程 序 中 还 在main{}函 数 中 加 入 了 相 关 的 调 试 代 码 , 这 部 分 代 码 有 最 低 的 优先 级 , 可 以 在 保 证 不 影 响 控 制 策 略 的 情 况 下 实 现 发 送 调 试 数 据 等 功 能 。 检 测 环 节 对 整 个 控 制 系统 的 质 量 起 到 至 关 重 要 的 作 用 4.3.2 PID 控 制 调 整 速 度 本 系 统 采 用 的 是 增 量 式 数 字 PID 控 制 , 通 过 每 一 控 制 周 期 ( 10ms) 读 入 脉 冲 数 间 接 测 得 小车 当 前 转 速vi_FeedBack, 将vi_FeedBack 与 模 糊 推 理 得 到 的 小 车 期 望 速 度 vi_Ref 比 较 , 由以 下 公 式 求得 速 度 偏差error1 与 速 度 偏差率d_error。 error1 = vi_Ref– vi_FeedBack; ( 公 式 3) d_error = error1 –vi_PreError; ( 公 式 4) 公 式4 中 , vi_PreError 为 上次 的 速 度 偏差。 考虑到 控 制 周 期 较 长, 假设 按2.5m/s 的 平均速度 计 算 , 则一 个 控 制 周 期 小 车 大概可 以 跑过 2.5cm, 如果按这 种周 期 用 上述PID 调 节 速 度 , 则会导致加 速 减速 均过 长的 后果, 严重 的 影 响 小 车 的 快速 性和 稳定 性。 为 了 解决这 个 问 题 , 可 以在 PID 调 速 控 制 中 加 入BANG-BANG 控 制 思 想 : 根 据error1 的 大小 , 如果正 大, 则正 转 给 全 额占 空 比 ; 如果负 大, 则自 由 停 车 或 给 一 个 反 转 占 空 比 ; 否 则就 采 用PID 计 算 的 占 空 比 。 PID 控制算法 为了使赛车平滑得保持在黑线中央,即使赛车的偏移量平滑地保持在0,实用了PID 控制算法。 P 为比例参数,D 为微分参数。基准值为0,PID 输入为水平偏移量X0,PID 输出为转角,转角方向...