一、项目介绍
二、项目设计思路
由于是以芯片为核心进行开发设计,因此需要先对芯片有所了解,例如最小系统的原理,芯片数据手册,硬件设计手册等等。
然后在最小系统的基础上,根据最终需求以及参考现有案例的原理图,进行外围电路的拓展设计,以满足最终需求的电路。
2.1 设计框图
2.2 器件选型
2.2.1 供电
恩智浦官方的开发板供电电路略显复杂,根据芯片手册可得知只需要给芯片供电3.3v即可。考虑供电可以直接从USB或DAP-LINK进行供电,因此供电电压考虑使用5V。因此电源芯片选用简单的AMS1117-3.3。只需要搭配两个电容即可实现电压从5V到3.3V的转换,需要注意的是输出端最好选用坦电容,这点在数据手册中有相应说明。
2.2.2 传感器
温湿度传感器的选择就比较随意了,使用了上个项目买的器件 DHT11。这里有些失算,在RT1021的基础上完全不知道该如何读取数据,后面在做软件调试的时候浪费了挺长时间。
2.2.3 灯光
灯光部分使用了两种,一种是普通GPIO驱动的LED灯,高电平亮,低电平灭。这一步在后续程序调试的时候实现了闪烁。第二种是WS2812B LED灯,这种是单线制支持多个串连也只占用一个GPIO口。遗憾的是后续软件部分未能调试成功。
2.2.4 Flash
2.2.5 显示屏
基于想学习SPI驱动的目标,显示屏的选择是淘宝上很容易买到的基于ST7735S驱动芯片的0.96寸TFT LCD屏幕,这款屏幕使用的是插接式,使用FPC座进行安装。
三、搜集素材的思路
- 从恩智浦官网查找 i.MX RT1020 系列芯片的 硬件设计手册 和 芯片数据手册
- 根据硬件设计手册以及官方评估板案例进行外围电路设计选型。
- 通过项目设计思路章节 2.2 的器件选型,获取各芯片、器件的数据手册和封装规格书。
- 通过封装网站查找选型器件的封装。
四、成果展示
硬件实物展示
五、关键代码及说明
LED闪烁
...
while (1)
{
/* Delay 1000 ms */
SysTick_DelayTicks(1000U);
if (g_pinSet)
{
GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U);
GPIO_PinWrite(EXAMPLE_LED2_GPIO, EXAMPLE_LED2_GPIO_PIN, 1U);
g_pinSet = false;
}
else
{
GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
GPIO_PinWrite(EXAMPLE_LED2_GPIO, EXAMPLE_LED2_GPIO_PIN, 0U);
g_pinSet = true;
}
}
...
六、心得体会
原理图设计
这次的芯片引脚数量比较多,因此在使用 KiCad 进行原理图绘制的时候使用了分页功能。这样从原理图第一页来看,会有一个概览的效果。使用分页绘制原理图的过程中也遇到了很多的问题,好在使用的人比较多,基本都能解决。但有一个仿真相关的检测错误一直未能解决,最后只能通过忽略的方式跳过检查。其次是任务使用的芯片 MIMXRT1021DAF5B 能找到的参考资料均为 LQFP144 封装的,在进行原理图绘制时供电部分设计犹豫了很久,最终找到了一份 LQFP100 封装的原理图才最终定型。
PCB设计
在使用 KiCad 进行PCB绘制的时候,这次有几个芯片是从 UltraLibrarian 网站下载的封装文件。但还是有一些接插件不知道如何查找现成的封装,只能在基本库中使用相近的封装。
PCB焊接
打板回来第一次进行焊接时,由于粗心大意把 WS2812B 供电的两个电阻都焊接上了,导致芯片的 BOOT_CFG_5 对 VCC短路(这个问题在编写程序测试的时候折磨了我好久)。去掉一个电阻之后,芯片暂时工作正常(供电,DCDC1.1v,晶振起振,DAP-LINK能识别到芯片)。
当查到 BOOT_CFG_5 与 芯片 VCC 短路之后,更换芯片之后,出现的现象是 DCDC1.1V 没有输出, 24M晶振不起振(原因不明,群里有一个小伙伴也遇到同样现象)。无奈只能重新焊接一块板子,好在最后一块板子硬件工作正常。
程序编写与调试
当看到该任务时,纠结了好久要不要参加。原因是从未学习过 NXP,STM32 这类单片机的相关知识,在小伙伴及工作人员的鼓励下勇跃报名了。果然在搭建开发环境时遇到挺多的问题。在小伙伴都很乐于帮助与耐心解答下才把开发环境安装好。
根据 MCUXPresso IDE 的示例,修改了一个 GPIO 引脚后,编译正常通过。但烧录过程简直是一种折磨,一开始真是完全不懂,对于一个从未用过JLink、STLink、这类工具的我来说完全不知所措。最终经群友的指导下使用USB将点灯程序烧录进去,并成功点亮板载LED灯和示例中的LED灯。由于示例自带的LED灯管脚我未焊接,所以通过外接的形式也成功点亮。
非常遗憾的是原本设计的功能未能实现,总的来说 NXP 芯片的开发难度是我目前遇到的门槛最高的。对于我这种从 Arduino 入门电子的人来说要学习的东西还很多。
七、芯片的优势与局限
通过这次制作,我对该芯片的优势与局限总结如下,仅代表个人观点。
优点:
- 性能强劲,外设丰富
- 官方IDE支持图形化管脚配置,Keil工程生成
- LQFP100封装方便手工焊接
缺点或局限:
- MCUPrsso IDE 调试设备限制多,调试麻烦(也可能是我不懂配置吧)
- 入门门槛较高
- 资料相对较少
八、原理图与PCB图
8.1 原理图概览
8.2 PCB
8.3 3D效果图预览
九、总结
NXP i.MX RT1021 这款单片机性能强大,外设丰富。但入门难度也比较大,原理图的绘制参考了很多的案例才完成。
之前未接触过MTK、Keil这类单片机开发,此次任务的难度对于我来说还是比较有挑战的,这么多引脚的芯片也是第一次焊接。高速芯片的PCB绘制也从示未有过,总之这次任务收获巨大。
最后感谢电子森林推出的 《WeDesign》 系列活动,对于我们这些新手是个很好的学习机会,理论结合实践。我们下期活动再见!