最近,我们收到了一些来自教育工作者的请求。他们正在寻求指导,以帮助为他们的课堂选择完美的微控制器。
这不是一个简单的问题,因为有这么多低成本的高性能选项可供选择。有经典的8位微控制器,如 8051、MSP430、Z8、AVR 和 PIC。有现代发电机,如 ARM 和许多制造商提供的其他32位产品。还有片上系统(SoC)和现场可编程门阵列(FPGA)选项。这些先进的微控制器选项提供灵活的模拟和高速加并行数字处理能力。
从哪里开始?
我们应该承认,没有一个完美的微控制器。相反,有各种各样的微控制器允许设计人员针对给定的设计进行优化。既然没有单一的完美微控制器,我们就不应该期望有单一的课堂解决方案。
请允许我在课堂上分享我关于微控制器的经验和观点。在加入 DigiKey 团队之前,我确实向各种各样的学生教授微控制器课程,从绝对的初学者到具有独立抱负的顶点EE课程。我也教过以各种微控制器为特色的课程。虽然我远不是最有经验的教授,但你可能会在这篇笔记中发现一些瑰宝。
本笔记的内容适用于第一学期和第二学期的微控制器课程。这些思想适用于进入技术或电气工程专业的高级高中生和大学生。我们将尝试通过将微控制器连接到外部电路来平衡编程与原型设计的需要。
编程基础
教育工作者必须解决的首要问题之一是学生的编程技能。必须快速学习类型、分支、循环和函数等概念,以释放微控制器的潜力。
-
困难的方法 :在将硬件连接到微控制器的同时,同时尝试教授编程、外设操作、解释寄存器的数据手册描述。
-
最简单的方法:假设你的学术课程没有编程入门课程。我认为有两种选择。首先,你可以花一个月的时间在微控制器之外的课堂上,专注于使用在线工具(如 GDB 在线调试器)进行 C 编程。另一种选择是利用 Arduino 社区。使用简单的硬件,如三色 LED 和压电蜂鸣器,探索分支,循环和功能。
技术贴士: Arduino 这个术语有多个维度。一种观点是关注位于 Arduino 公司。另一种观点认为,Arduino 是一个拥有大量活跃社区基础的开源平台。这是所有学生都应该利用的宝贵资源。
同时,我们需要认识到与 Arduino 相关的教育矛盾。虽然它的设计初衷是让编程变得更容易,但它并不是一个简单的程序。例如,考虑“简单”的 digitalWrite()函数。你会发现,将此功能无缝集成到所有Arduino 家族成员中的 Arduino 代码一点也不简单。
面包板友好器件
假设我们教授的是电气技术或电气工程课程,学生应该会想到面包板电路。这将帮助他们理解微控制器的用途,并加强之前的电子学课程。
关于面包板,有一些可行的形式因素,包括:
-
双内联封装(DIP)微控制器:绝大多数微控制器采用表面贴装配置生产。一个例外是Microchip,它继续生产DIP封装的微控制器。
-
表面贴装器件(SMD)到DIP适配器:适配器板允许大多数低成本微控制器与面包板一起使用。
-
面包板友好设备:有大量的微控制器评估板,其特征是目标微控制器以及程序员,甚至是在线调试器。代表性的例子包括 Silicon Lab 的 Busy Bee、意法半导体的 Nucleo、Microchip 的 Curiosity纳米和Arduino 的纳米系列产品。还有任意数量的盾牌、帽子、斗篷或其他命名的扩展板,允许微控制器开发套件与面包板接口。
建议你专注于3.3VDC组件,以遵循较低电压的趋势,从而允许更大的未来灵活性。
优选选项 Microchip 的 PIC 和 AVR 脱颖而出。这些产品大多以 DIP 形式提供,包括8,14,20,28和40引脚替代方案。
技术贴士: 有许多独特的 SMD 封装的趋势是越来越小的足迹。在较大的 SMD 器件中,我们经常发现SOIC选项。可以使用诸如此SOIC-16之类的适配器。这些设备属于一年级技术和工程专业学生的焊接技能。在废弃PCB上进行少量练习,他们将能够使用热空气或小型传统烙铁焊接 SOIC。
调试技术
必须培养快速调试程序的能力。这将包括编译和运行时错误。大多数ide对编译错误提供了很好的支持,通常使用的工具会把我们带到有问题的代码行。运行时错误则没有这样的支持。
学生的调试技术包括使用:
-
断点和观察点:如果支持的话,这些工具允许程序员“查看”微控制器以检查甚至更改与微控制器外设相关的变量和寄存器。
-
I/O 引脚:这可以像外部 LED 或示波器一样简单,以查看占空比。一个更复杂的例子可能会使用多比特逻辑分析仪。
-
打印语句:这种简单的技术允许程序员在串行监视器或串行图形显示器上显示值。虽然这是一项功能强大的技术,但它消耗微控制器资源,并可能干扰高速进程的时序。
-
仿真:如果可用,该工具可以提供类似于断点和观察点的洞察力。
学生将花费大量时间学习并部署调试技术。作为教育工作者,选择一个微控制器、IDE和相关的调试工具来支持学生的学习是很重要的。考虑到所有的事情,我认为断点和观察窗口是这个过程的一个重要方面。
如果你还没有这样做,现在是考虑杰伊卡尔森在评估1美元微控制器中的工作的好时机。该文档对各种适合教育环境的低成本微控制器进行了深入的探索。并排比较探讨了微控制器和配套基础设施的多个方面,从而全面了解整个微控制器生态系统。
首选选项 :任何支持低成本在线调试器的平台。根据卡尔森的建议和我自己的经验,对8位微控制器有偏见,包括Silicon Labs 8051和较小的PIC16家族成员。在新的MPLAB支持下,ATtiny也是一个竞争者。
解锁外围设备
图形化外设配置工具是程序员工作流程的重要组成部分。今天,几乎每个集成开发环境(IDE)都具有这些自动化工具的特性。这是有充分理由的。随着微控制器外设的尺寸和复杂性急剧增加,相关数据手册的尺寸和复杂性也在急剧增加。
作为教育工作者,我们需要退后一步,问问这些工具是否合适。关于需要关注最新的200 MHz 32位ARM和使用配置工具的行业标准实践,有一个很好的论点。然而,有一个更有力的论点是教学生基本原理;教他们与外围配置相关的基础和思维过程。
将实践与原则分开是很重要的。
避免将经验丰富的微控制器程序员的行为与他们如何思考以及如何成为经验丰富的专业人员混为一谈。当自动化工具执行意外操作时,而不是如果,学生必须能够定位和解释数据手册。
话虽如此,我建议在选择过程中考虑数据手册页面长度。页面长度与微控制器外设的复杂性直接相关。我想设定一个100页的限制,但这几乎排除了所有现代微控制器。300页的页数比较合适。这为新手提供了一套合理但易于管理的外设。
一个合理的批评是,学生将耗尽资源。很好。学生可能确实会用完内存和I/O引脚。然而,这可能是设备优化方面的一个学习机会。学生可以探索整数数学课程,以最小化程序大小。他们可以探索PIN多路复用,就像在4 x 4按钮矩阵中使用一小块LCD驱动器引脚作为列选择器一样。还有我个人最喜欢的扩展I/O的解决方案。双缓冲的 SN74HC595N 很好地介绍了串行操作。MCP23017-E/SP 是你实验室的另一个坚实补充。这个特定的I2C器件继续串行通信的课程,同时加强I/O引脚方向的概念。
首选方案 :越小越简单越好。偏好仍然是8051、PIC16和ATtiny。
中断服务例程,堆栈,上下文保存和睡眠
中断服务程序(ISR)以及相关的硬件和编程技术是微控制器编程中最重要的方面。它们定义了微控制器,是高效实时处理的关键。掌握了这一点,学生就可以继续学习更高层次的概念,如实时操作系统(RTOS)和高级外设,如直接内存访问(DMA)。不幸的是,这些抽象的概念很复杂,对新手来说并不容易理解。我们可以说,复杂性与微控制器的配置选项是一致的。
让我们考虑一下RTOS。这是一个功能强大的基于微控制器的编程工具,值得研究。关于RTOS的一个有意义的讨论涉及上下文切换和计时器的概念。一种简单的方法将RTOS视为微控制器软件,它定期在任务之间切换。其结果是一个微控制器似乎同时执行任务。RTOS通过一个编排好的协议来处理上下文切换和协调的后台任务,该协议定义了每个元素操作的内容、时间和方式。
前面我们说过,没有一个完美的微控制器。相反,选择微控制器是为了优化给定产品的设计。对于大多数产品,我们需要像多任务处理功能这样的RTOS,但不需要或不想要与RTOS相关的开销。这个问题的解决方案与微控制器本身一样古老,并以ISR的形式出现。
ISR允许微控制器使用前台-后台调度程序进行操作。前景为ISR,背景为main()中的内容。一个简单的例子是多段七段显示(SSD)多路复用器,如4段数字时钟显示。main()中的程序可能会计算出要显示的值。然后使用基于ISR的定时器来激活特定的段。在后台,微控制器可能大部分时间处于睡眠状态。同时,ISR将尽职尽责地更新每个SSD段,以保持视觉的持久性。
其他适合学生第一次探索的ISR例子包括:
-
提供相对精确的时间延迟的非阻塞计时器
-
读取高速正交编码器,其位置周期性地报告给串行监视器或串行绘图器
-
频率测量
-
脉冲宽度测量
-
播放一首歌(一个计时器用于音符,另一个计时器用于音符持续时间)
-
具有确定性定时的比例或比例导数控制器(PID)。
这些经典的基于ISR的想法都不简单。在前台和后台进程之间传输多字节信息存在重大挑战,更不用说故障排除挑战了。当学生学习诸如flag和mailbox之类的解决方案时,他们将为与RTOS相关的信号量和锁等概念做好准备。
与此相关的是,上课时间是一种宝贵的资源。我们应该尽一切努力使重要的课程从嘈杂中脱颖而出。最好的方法之一就是选择一个相对简单的微控制器。更小的功能集和更小的相应数据手册可以让学生快速识别实现细节。他们不需要费力地浏览几十页,探索与这个想法相关的各种配置选项。目标是使想法清晰,然后通过实现一个可行的解决方案来学习。
首选选项 :更小更简单更好。现在,我不会一直退回到6针PIC10。相反,更简单的PIC16系列,8051或atiny可能更合适。
技术贴士: 在结束本节之前,我们应该仔细看看8051。在我看来,8051拥有最优雅的上下文切换解决方案之一。回想一下,PIC有一个工作寄存器(W), AVR有32个与ALU密切相关的8位寄存器。8051也有32个8位寄存器,但是,它在任何给定时间只能访问8个寄存器。两个银行选择位决定哪个八位元是可用的。这允许程序员用单周期指令在不同任务之间切换上下文。这种智能的解决方案对于前景-背景处理等情况是有利的。
成本
最近的世界事件改变了许多学校管理电子实验室的方式。在线课程或混合课程已成为常态。学生通常需要购买自己的组件和测试设备。因此,我们应该仔细考虑成本,不仅是单片机,还有配套的硬件。
评估套件无疑是前进的方向,因为许多小型PCB具有编程功能,有些具有集成的电路调试器。前面提到的Nucleo、Curiosity和Busy Bee都是代表性的例子。这些都很好用,但都是一劳永逸的产品。
作为替代方案,学生可以购买一个功能齐全的外部调试器。对于2或3个评估板的大约成本,他们可以购买调试器和一些备用微控制器。例子包括 SiLabs 的USB调试适配器或MPLAB编程器。这两种设备具有相似的成本和功能。Microchip可能有一个优势,它可以编程PIC和AVR设备。
从教育的角度来看,对于学生来说,物理地将微控制器直接连接到调试器是有道理的。这使他们能够更好地理解相关的编程I/O引脚可能与其他设备共享,也可能不共享。这种说法延伸到为微控制器供电。一起吸取的教训将使学生能够从头开始构建具有微控制器,调试器头和适当电源的PCB。
首选方案 :没有变化,我们仍然倾向于小型PIC16家族,8051和ATtiny。
技术贴士: 选择ATtiny成员可以使用Arduino作为程序员进行编程。虽然从成本的角度来看,这是可取的,但该系统缺乏在线调试功能。
教科书和论坛资源
本文支持使用微控制器,如8051和PIC和AVR家族的较小成员。这些设备并不新鲜。8051及其衍生产品可以追溯到1980年,而PIC可以追溯到1976年。AVR是一个相对较新的产品,可以追溯到1996年。这些设备很可能比你更老,当然也比你的大多数学生都老。这是好消息也是坏消息,这取决于你如何看待这种情况。
首先,我们需要认识到这些8位微控制器的持久寿命。它们已经并且很可能会伴随我们几十年。这是另一种说法,它们仍然是相关的,值得研究。以8051为例,当我访问Keil处理器的支持设备页面时,我总是印象深刻。Keil支持的芯片列表。8051衍生品名单展示每一款新品。
接下来,我们需要认识到,几十年来已经产生了丰富的相关材料。其中很大一部分仍然与今天的8位产品相关。有各种各样的论坛,比如活跃了二十多年的AVRFreaks。以下是相关论坛的简短列表:
这里有一些坏消息。这部分源于将实践与原则分离的问题。
指出微控制器教育的解决方案是在结构老化、功能有限的50年前的部件中找到的,这是有风险的。虽然我愿意相信这个论点是令人信服的,但它并不是一个受欢迎的解决方案。相反,我们发现大量的注意力集中在Arduino等平台和32位ARM、RTOS和Python等高性能解决方案上。这确实使教科书的选择成为一项挑战。然而,快速搜索一下就会发现,即使出版日期是10到20年前,也有很多选择。
教科书的可用性通常会因制造商而有所降低。Microchip University就是这样的资源之一。我们已经提到了各种技术论坛。视频是可用的。很多都是由知识教授制作的高质量视频。如果学生认真认真地学习,人工智能可以成为一个有用的工具。
一些想法
在我们离开之际,我鼓励大家就这个话题分享自己的想法。你是否同意近50年历史的微控制器架构是高级主题的基础?动手制作原型的平衡合适吗?有没有更好的方法?我们忽略了什么?