MENU

应答机面板—模拟飞行游戏外设制作①

June 16, 2019 • 折腾

其实电路板设计工作在考试周之前就已经完成了,当时一个 Demo 出来后,不少朋友就和我预定,但我个人一方面也是刚刚开始接触关于硬件“硬核的”开发工作,因而这个 Demo 也就当作自己做着玩玩看的东西了。

总体而言,PCB 设计并不是很难,为了快速实现,使用了 ATmega328P 作为主控,说的直白一点就是:Arduino Nano。既然使用 Arduino,那么硬件部分很多就可以采取模块化,右侧部分就是可以直接插入一个 Arduino Nano 开发板的 15*2P 插槽。

review.webp

刚拿到制版成品,我对制板结果总体还是很满意的,这里就不放细节的高清照片了,1.8 的玻纤板,丝印都很清晰,但据朋友说这个绿油还是太薄了。其实我是后悔用 1.8 的,散热太快了,焊台温度也不敢调太高,SOP 封装的芯片用风枪吹下来调试的时候也比较费事儿。买的最便宜的 EC11 规格的编码器,手感非常差劲,而双调编码器又太贵了。

使用了 14 个 GPIO 口,4 个编码器各 3 个,两个用于数码管的数据口。

上下位机的通信架构还是很简单的,用串口通信即可,上位机下传应答机编码值,下位机接受显示;下位机上传应答机编码变化,上位机接受并调用 SimConnect 进行控制,总体而言代码实现起来没有什么难度。象征性的放一段编码器的代码,留作归档,这段相对其他来说理解起来还是有点区别的。

int getEncoderTurnScanMode(int CLK, int DIO, int &oldA, int &oldB)
{
  int result = 0;
  int newA = digitalRead(CLK);
  int newB = digitalRead(DIO);
  if (newA != oldA || newB != oldB) 
  {
    delay(50);
    if (oldA == HIGH && newA == LOW)
    {
      result = (oldB * 2 - 1);
    }
  }
  oldA = newA;
  oldB = newB;
  return result;
}

如果要做最终产品,可以自己定义一套字节码通信协议,或者,强烈建议不要使用 ATmega328P 作为主控。原因倒不在于他是不是 Arduino,而是他真的满足不了仿真。在我写的第一版代码中,配合着这块 0.21 版的电路板,由于 382P 的硬件中断口实在是太少了,所以,只能在代码中做一个类似于扫描按键的逻辑,而如果使用足够的硬件中断,例如 Mega2560(有 6 路中断),相对而言表现会好很多,可以解决一部分虚位的问题,其次 EC11 编码器据几个朋友说不如带有阻尼的 EC16,我买的几块钱一个的 EC11 拿 WD40 洗了之后,依旧不好使,还是建议用高品质的。

Last Modified: January 28, 2021
Archives QR Code
QR Code for this page
Tipping QR Code