亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 解码遥控接收机 PPM 信号——分步指南

组件与材料

软件与在线服务

项目简介

遥控发射机因具备加密链路与良好通讯距离,非常适合需要无线链路的项目。所有遥控接收机设计用于驱动舵机,每通道有地、VCC、信号三根线。信号为周期性脉冲:1.5ms 对应舵机 90°,1–2ms 对应最小/最大角度(上图展示 6 通道接收机及 PPM 引脚)。

直接测量各通道脉宽再映射虽可行,但存在两个问题:

  1. 每通道需单独接线至 Arduino,占用大量引脚。
  2. Arduino 仅有 2 个外部中断引脚,超 2 通道读取需轮询,引入延迟,影响实时性。

许多接收机提供 PPM 引脚,将所有通道数据复用在单一信号中传输,解决上述问题。

PPM 信号构成

Arduino 解码遥控接收机 PPM 信号——分步指南

Arduino 解码遥控接收机 PPM 信号——分步指南

信号由数据包与空白间隔组成。峰值间的间隔代表通道值。图中为 6 通道接收机,故有 7 个脉冲。编码思路:先检测分隔空白(约 11500μs),随后记录后续 6 个脉冲宽度作为各通道值。

代码使用说明

Arduino 解码遥控接收机 PPM 信号——分步指南

read_me() 在中断引脚(Pin 2 或 3)下降沿触发,记录 15 个时间间隔值存入临时数组。

a = micros();
c = a - b;
b = a;
x[i] = c;
i = i + 1;
if (i == 15) {
  for (int j = 0; j < 15; j++) ch1[j] = x[j];
  i = 0;
}

read_rc() 在主循环调用,扫描临时数组寻找 >10000μs 的分隔空白,定位到 6 个通道值,减去 1000 后存入 ch[1]..ch[6]。


void read_rc() {
  int i, j, k = 0;
  for (k = 14; k > -1; k--) if (ch1[k] > 10000) j = k;
  for (i = 1; i <= 6; i++) ch[i] = (ch1[i + j] - 1000);
}

完整代码

unsigned long int a, b, c;
int x[15], ch1[15], ch[7], i;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING);
}

void loop() {
  read_rc();
  Serial.print(ch[1]); Serial.print("\t");
  Serial.print(ch[2]); Serial.print("\t");
  Serial.print(ch[3]); Serial.print("\t");
  Serial.print(ch[4]); Serial.print("\t");
  Serial.print(ch[5]); Serial.print("\t");
  Serial.print(ch[6]); Serial.print("\n");
  delay(100);
}

void read_me() {
  a = micros();
  c = a - b;
  b = a;
  x[i] = c;
  i = i + 1;
  if (i == 15) {
    for (int j = 0; j < 15; j++) ch1[j] = x[j];
    i = 0;
  }
}

void read_rc() {
  int i, j, k = 0;
  for (k = 14; k > -1; k--) if (ch1[k] > 10000) j = k;
  for (i = 1; i <= 6; i++) ch[i] = (ch1[i + j] - 1000);
}

制造工艺

  1. 树莓派家庭温度监测仪表盘:实时图表展示
  2. 仅用 Arduino 构建 DTMF 解码器 – 无需额外 IC
  3. 用 Arduino 打造绚丽显示器 Ambilight 系统
  4. 用 Arduino 制作超声波悬浮装置:分步指南
  5. 使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南
  6. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  7. 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
  8. Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
  9. 智能停车计数系统:Arduino + Processing + PHP 实时车位追踪上云
  10. 实时心跳 LED 可视化:基于 uECG 与 Arduino Nano 的心率光环
  11. Arduino 自动化 Chrome 恐龙游戏 - LDR 光敏电阻 + Python 实现全自动跳跃
  12. 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机