亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于树莓派的自制计算机系统

发布时间:2021-09-16
分享到:

基于树莓派的自制计算机系统

发布时间:2021-09-16
分享到:

这些年来我组装了许多台式电脑。很长一段时间以来,我想从头开始构建一台计算机,因为我发现当您尝试构建某些东西时,可以更好地了解它的内部工作原理。我以前使用 6502 处理器构建了自制计算机变体,但是这些系统对新手或中级制造商来说并不友好。我构建的这台简单的计算机基于运行 TinyBASIC 的 Arduino,之前已经完成,但我想用自制的 PCB、键盘接口、监视器/电视输出、声音和 SD 卡存储来完成构建。以下就是项目的内容。

我用ATMEGA1284P-PU 芯片做 8 位计算机。因为它具有 Arduino 兼容的 8 位微控制器的高规格,基本规格如下:

  • SRAM - 16kB
  • 最大时钟速度 = 20 Mhz
  • 引脚 = 40 DIP(32 个可编程 I/O)
  • 闪存 = 128kB
  • EEPROM = 4 kB

如果将此芯片与 Arduino Mega 和 Uno 进行比较,那么突出的功能是 SRAM。Mega 有 8kB 的 SRAM、4kB 的 EEPROM 和 256kB 的闪存,而 Uno 有 2kB 的 SRAM、1kB 的 EEPROM 和 32KB 的闪存。

第 1 步:工具、消耗品和零件清单

我使用的工具是:

  • 烙铁
  • 3D 打印机 - Ender 3 Pro
  • 激光切割机- Greyfin A2
  • 台钻和PCB钻头
  • 各种手工工具,如钳子、刀具、螺丝刀、刀具等
  • 盛放化学品和水的浴缸
  • 安全设备,如手套护目镜等
  • 带有以下软件的笔记本电脑

我使用的耗材是:

  • 氯化铁
  • 干净的水
  • 洗涤剂
  • 焊接
  • 按正剥离纸
  • 3D打印机耗材
  • 钢丝绒

我使用的组件是:

  • ATmega1284P-PU x 1
  • Arduino Nano x 1
  • 40 针 PCB 插座 x 1
  • 15 针母头针 x 2
  • 6 针母头针 x 2
  • 2 针母头针 x 9
  • 5V 稳压器
  • 跳线 x 8
  • SD 卡盾 x 1
  • 10 uF 电容器 x 2
  • 16 MHz 晶振 x 1
  • 22pF 电容 x 1
  • PS2 键盘插座 x 1
  • RCA 电视输出插座 x 1
  • 压电蜂鸣器 x 1
  • 边框中的蓝色 LED x 1
  • 9V 电池座 x 1
  • SPST 电源拨动开关 x1
  • DPST 程序切换开关 x 1
  • 1K 电阻 x 1
  • 470 欧姆电阻 x 1
  • 10k 电阻 x 1
  • 220 欧姆电阻 x 1

第 2 步:主板

对于这个构建,我想从头开始设计和构建主板。但是该项目是自制计算机。我使用 Fritzing 设计了 ​​pcb,并在蚀刻电路板之前在无焊面包板上构建了一个预原型。使用高速振荡器构建电路在无焊面包板上并不总是能完美工作,我发现 PS2 键盘不能很好地工作,但它足以进行概念验证。pcb 布局非常简单,可能比原理图更容易阅读。

我使用碳粉转印方法蚀刻 PCB,我发现使用 Press-n-Peel 转印纸最适合我。我用来制作PCB的过程如下:

  1. 从 Fritzing,使用激光打印机将 PCB 迹线的负像打印到 Press-n-Peel 纸上。尽管我以 1 比 1 的比例打印,但当我在打印件上放置 40 针芯片时,效果并不完全正确。我不得不将打印尺寸增加 2% 才能获得准确的尺寸。
  2. 将覆铜板切割成合适的尺寸,我只是使用了一把精美的钢锯,并用锉刀清理了边缘。
  3. 使用钢丝绒清洁铜板,然后用温肥皂水清洗。
  4. 根据 PCB 尺寸剪下 Press-n-Peel 印刷品,并将走线面朝下放在铜上。
  5. 剪下一张比 PCB 大 1" 的普通纸,将其包裹在 Press-n-Peel 上,然后用胶带粘在电路板的未涂层面上。这样可以将所有东西固定在一起并防止 Press-n-Peel 过热。
  6. 打开家用熨斗到大约 3/4 设置 - 这对我有用,但取决于熨斗。
  7. 准备一个装有约 25 毫米冷水的容器。
  8. 在 Press-n-Peel 上均匀熨烫约 4 分钟 - 这同样取决于您使用的熨斗和压力。
  9. 将PCB放入冷水中冷却。
  10. 取出普通纸并撕下 Press-n-Peel,这会留下蓝色痕迹。
  11. 将约 40 毫米的氯化铁放入容器中。
  12. 将 PCB 放入氯化铁中。
  13. 使用一些镊子或钳子在氯化铁中搅拌 PCB,直到暴露的铜溶解,这大约需要 10 分钟。
  14. 拆下 PCB 并用干净的冷水洗掉氯化铁。
  15. 用钢丝绒去除剩余的 Press-n-Peel 并再次清洁 PCB。
  16. 检查 PCB 并使用 PCB 笔修复任何痕迹,我只触及了几条痕迹。
  17. 当熨烫 Press-n-Peel 转印到铜上时,您需要均匀加热电路板,对于这么大(比熨斗大)的 PCB,这并不容易,可能需要反复试验。
  18. 在 PCB 的铜面完成后,我使用激光打印机打印的传统转移制作了一种“丝网”。有了丝印,就可以更容易地用元件填充电路板。

上述步骤给我留下了准备钻孔的空白 PCB。人们似乎担心钻孔 PCB 认为它既费时又困难,但我根本没有发现这种情况。我用标准台钻钻了 PCB。专业 PCB 钻头的优点是具有较大的柄部,可以使它们在钻夹头中保持稳定。我在 PCB 上钻了 1 毫米的通孔。我花了我的时间,钻孔过程花了大约 1 小时。

随着 PCB 的制造,我只需要将所有组件焊接到位。

第 3 步:外壳打印

外壳构建非常有趣,并使用了黑客空间中可用的许多技能和资源。外壳本身包括一个激光切割的 3 毫米楔形胶合板盒,带有激光切割的亚克力底座和铰链盖,以便可以查看 PCB。外壳的顶部平台由使用钣金制动器弯曲的铝板制成。

PCB 安装在由 PLA 制造的 3D 打印支架上。这是使用 Autodesk Fusion360 设计的,然后使用 Cura 切片,然后在 Ender 3 Pro 上打印。这张照片花了很长时间,大约 4 个小时。完成相同的过程来制作 SD 卡防护罩的支架。我发现 Fusion 360 非常用户友好,因为我过去专业地使用过 Autodesk Inventor,它也有类似的感觉。我 9 岁的儿子对 3D 打印着迷,所以他直接投入了 Fusion 360,他认为这就像玩 Minecraft!

15mm x 15mm 铝挤压件用于将外壳固定在一起。

第 4 步:软件

  1. 该软件是此版本中相当具有挑战性的领域,特别是如果您是新手,如果您还没有深入到这个级别的细节,请不要惊慌并坚持下去,您将到达那里!我想在这台 8 位计算机上运行一个 BASIC 编译器,并且在过去构建了其他自制计算机时,我想让它保持足够简单,让大多数人无需进入 eeprom 程序员和二进制文件的领域即可实现。查看了使用 Arduino 运行 TinyBASIC 编译器的其他项目,这看起来是一个不错的选择。TinyBASIC 是 BASIC 的精简版,适用于 Arduino。我将软件安装到芯片上的事件顺序如下:
  2. 在 ATmega1284p 上获取软件
  3. 下载 Mighty 1284P:ATmega1284P 的 Arduino 核心。
  4. 确保 Arduino IDE 已关闭并在 Arduino 文件夹的硬件文件夹中安装 Mighty-1284p 文件夹,然后重新启动 Arduino IDE。
  5. 在连接到 Arduino Uno 的无焊面包板上构建一个简单的引导加载程序电路。
  6. 上传引导加载程序草图。
  7. 将引导加载程序面包板转换为连接 FTDI 的“裸机”Arduino,并上传闪烁草图以测试 Atmega1284p。
  8. 下载 TinyBASIC Plus 并在您的 Arduino IDE 中打开。
  9. 连接 FDTI 后,将 TinyBASIC Plus 下载到 ATmega1284p。此时不要更改 TinyBASIC 中的任何设置。
  10. 此时,您应该可以在笔记本电脑或计算机上的串行监视器中试用 TinyBASIC。尝试一个简单的程序,例如:
  11. 10 打印“你好,世界”

此时您现在可以修改 TinyBASIC 草图,以便计算机可以使用 PS2 键盘、SD 卡读/写器和压电声音输出。
Arduino 核心是可以找到所有内置函数源文件的地方,我使用的 JChristensen Arduino 核心的链接在这里。https://github.com/JChristensen/mighty-1284p/tree/v1.6.3

Arduino ISP 是一个在系统编程器,用于对 AVR 微控制器进行编程。您可以使用 Arduino ISP 将草图直接上传到 Arduino 板。在这种情况下,ISP 被简单地用于上传使用 Arduino Uno 作为接口的引导加载程序。有关如何上传引导加载程序并对其进行测试的说明的一个很好的链接,以及有关如何连接 FTDI 的说明。Technoblogy.com - 使用 ATmega1284 和 Arduino IDE。使用 FTDI 时要小心,因为您需要检查是否安装了正确的驱动程序,这是一个要小心的“陷阱”!

我建议使用最新版本的 TinyBASIC Plus 作为另一个“问题”,我发现当使用旧版本之一时,输入功能不适用于外部键盘。下载 TinyBASIC Plus 的链接位于https://github.com/BleuLlama/TinyBasicPlus

修改 TinyBASIC Plus

为了获得 TinyBASIC 的功能,你需要修改许多代码段,下面是代码段的代码片段和起始行号,以帮助找到要修改的代码,随着 TinyBASIC 代码的更新,这会发生变化,所以这些行号仅供参考。我将代码复制到记事本++中,并使用搜索功能找出要修改的代码。我已按顺序显示了这些修改。

首先将键盘库添加到草图中并定义如下所示的数据和中断引脚(从第 135 行开始)。

第 5 步:最终测试和改进

当所有组件都构建完成并经过检查后,整个系统终于组装完成并进行了测试。为了测试系统,我用 BASIC 编写了一些程序。一个好的测试程序是我编写的一个程序,用于查找用户输入的所有质数。这是一个很棒的小程序,用于测试计算机的性能。它比普通的更具挑战性,因为 TinyBASIC 具有如此精简的指令集。它没有“mod”,它是一个函数,可以在两个数字相除时为您提供余数。这对于查找素数非常有用,在我们的例子中,它只需要更多的数学运算。我发现计算所有 1000 以内的质数大约需要 5 分钟。这个小程序被移植到黑客空间的其他几台复古计算机上。

另一个程序是一个简单的调子来测试压电蜂鸣器和音调功能。这很有趣,而且非常好。我已经包括了我为其他人编写的基本程序。

我要做的最大改进是电源。在测试该项目时,我使用了一个完全没有问题的手机移动电源。当我使用台式电源时,我怀疑是交流纹波引起的问题。这是一个很大的“问题”,可以通过使用 9v 电池作为电源轻松解决。虽然电源级有两个储存电容器来帮助消除交流纹波,但我认为包括一个低通滤波器级来消除任何剩余的交流纹波并提高负载条件下直流输出电压的稳定性也是有用的。我还会在 Arduino Nano 和 ATmega1284p 的电源输入中添加 0.1uF 去耦电容器。去耦是为了抑制电源信号中的高频噪声。

以上就是项目的全部内容了,希望您能喜欢!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论