7—基于FPGA(ZYNQ-Z2)的多功能小车—软件设计—红外遥控

红外遥控的实现由于时间有限,并且协议的难度也比较大,因此我们借助于Arduino对信息进行解码,再通过自己编码实现红外遥控。

如果想使用FPGA实现红外遥控,具体实现方式可以参考:FPGA之红外遥控


目录

1. 红外模块介绍

2. 自制的编码解码方式

3. Arduino代码

4.Verilog代码


1. 红外模块介绍

红外遥控系统由红外发射部分和红外接收部分组成。发射部分由遥控案件、编码以及调制电路、红外发光二极管等组成。接收部分由光敏二极管、解调电路等组成,最后将解调的信号输入FPGA内进行解码输出。

我们使用的是NEC编码协议。NEC协议使用的是PPM(脉冲位置调制)进行编码,当按下遥控器的一个按键时,会发送一帧的数据,一帧数据由引导码、地址码、地址反码、数据码、数据反码以及一位结束位组成。


2. 自制的编码解码方式

编码方式如下:

  FPGA只能0-1信号,因此可以用n个IO口进行编码,总共有2^{n}个信号,拿两个IO举例:

IO电平值信息
00停止
01前进
10左转
11右转

  即使用两个IO便可实现2^{2}=4个信息的编码,在Vivado中进行解码,便可实现通信。

  这种方式的优点是设计十分简单粗暴,同时能实现通信,但是缺点也十分明显。需要占用大量的IO口,并且需要外置单片机进行解码。其实就相当于脱裤子放屁,不过因为时间与水平有限,这也是一种折中的实现方法。

具体流程如下:


3. Arduino代码

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String str;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();
  pinMode(2, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) 
  {
    str = String(results.value); // 将结果转换为十六进制字符串
      switch (results.value) {
      case 16718055:
        Serial.println("Forward");
        digitalWrite(2, HIGH);
        break;
      case 16730805:
        Serial.println("Back");
        digitalWrite(7, HIGH);
        break;
      case 16716015:
        Serial.println("Left");
        digitalWrite(3, HIGH);
        break;
      case 16734885:
        Serial.println("Right");
        digitalWrite(5, HIGH);
        break;
      case 16726215:
        Serial.println("Stop");
        digitalWrite(2, LOW);
        digitalWrite(7, LOW);
        digitalWrite(3, LOW);
        digitalWrite(5, LOW);
        break;
    }
    irrecv.resume();
  }

}

str的值需要根据实际测试。


4.Verilog代码

    //红外遥控指令
   if(Mode_Control==1)//如果遥控模式标志符置高
   begin
      if(signal==5'b0000)//停止
         mode<=0;
      if(signal==5'b0001)//前进
         mode<=2;
      if(signal==5'b0010)//后退
         mode<=1;
      if(signal==5'b0100)//左转
         mode<=3;
      if(signal==5'b1000)//右转
         mode<=4;
    end

  简单的解码,判断mode的值。电机控制代码在之前已经给出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贡橙小白鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值