其实电路板设计工作在考试周之前就已经完成了,当时一个 Demo 出来后,不少朋友就和我预定,但我个人一方面也是刚刚开始接触关于硬件“硬核的”开发工作,因而这个 Demo 也就当作自己做着玩玩看的东西了。
总体而言,PCB 设计并不是很难,为了快速实现,使用了 ATmega328P 作为主控,说的直白一点就是:Arduino Nano。既然使用 Arduino,那么硬件部分很多就可以采取模块化,右侧部分就是可以直接插入一个 Arduino Nano 开发板的 15*2P 插槽。
刚拿到制版成品,我对制板结果总体还是很满意的,这里就不放细节的高清照片了,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 洗了之后,依旧不好使,还是建议用高品质的。
本文标题:应答机面板—模拟飞行游戏外设制作①
本文连接:https://blog.dextercai.com/archives/4.html
除另行说明,本站文字内容采用创作共用版权 CC-BY-NC-ND 4.0 许可协议,版权归本人所有。
除另行说明,本站图片内容版权归本人所有,未经许可前,严禁以任何形式的使用。
即日起视情况关闭全站评论区,您可以通过关于页面的电邮地址和我取得联系,谢谢