当前课程知识点:ARM微控制器与嵌入式系统 > 第六章 嵌入式系统设计 > 6.1 嵌入式系统的接口与设计 > 6.1 嵌入式系统的接口与设计
各位同学大家好
我是清华大学工程物理系的曾鸣老师
欢迎大家继续回到我们
ARM微控制器与嵌入式系统的MOOC课堂
那么短短一个学期的课程
我们从最最开始对于嵌入式的计算机系统
从0和1逻辑门开始建立初步的概念
捋清若干个对于计算机的基本认识
到一点点的上手
熟悉一个嵌入式的
这样一种计算机系统内部的
工作原理机制
从它的编程模型到中断
再到实际的这样一种
嵌入式系统的开发方法
软硬件的协同开发
一直到我们一类一类学习典型的外设
又贯穿在外设当中我们学习了
基本的IO 中断 通讯
乃至ADC、DAC数据转换
这样很多很多重要的基本概念
那么在这个章节
我们进入了我们这门课程的最后一个章节
那么在这个章节里
我来给大家讲一讲我们的
系统的接口与系统的设计
在这个章节里不再像前面一个章节
一类一类的外设给大家讲述
很多知识性的内容
我更愿意像走马观花一样
带着大家去看一看嵌入式系统更加丰富的
更加无限的各种各样的接口和扩充功能
最后我们回过头来
贯穿一个学期的课程
站在系统设计的角度来看待一下
什么是嵌入式系统
我们日后可以如何去做嵌入式系统
来设计嵌入式系统
来实现我们自己一个又一个很棒的想法
那么在这个单元里
我们看一看
我们其实学习了微控制器
但是我们会牢牢的记住一件事情
或者深刻地感受到一件事情
微控制器虽然麻雀虽小 五腑俱全
但它远远不够做所有的事情
我们当要做越来越丰富功能的时候
我们总要把它的外设用好 用足之外
还要扩充一些元件和电路
来让我们功能变得完善
比如就在这门课的范畴里头
或者在这门课我们提到的范畴里
大家可以理解
作为输出 我们点过灯
点过LED 点过彩色的LED
点过七段的数码管
但是此外我们的输出设备
还可以有很多有蜂鸣器
有点阵式的液晶屏 OLED 有扬声器
然后甚至还有做机电控制会有电机 舵机
然后红外线的通讯等等
而作为输入设备呢
我们可能会有按键
会有开关 会有键盘
还会有我们在模拟领域讲到的
各种各样的传感器
特别是对外的通讯接口
我们单拎出来讲又有UART异步串行通讯
SPI同步串行通讯
I2C同步串行通讯
以及日后我们还会学习的USB通讯
以太网通讯等等
所以一个嵌入式系统虽然能做很多事情
但是它的外围还有无限的可能性
我们再回过头来
一类一类的看我们所接触过的
这些扩展电路和它的功能
比如说LED
形形色色的LED我们已经学会了如何点亮
如何闪烁 如何做出呼吸灯
如何做出颜色
LED的排列我们学过了数码管
我们可以用它来表示数字
表示字母
也有同学可能会尝试拿它写游戏
那么我们还接触过了开关 按键
这样一些机械的通断器件
来实现电路的开关
或者是我们采集到一次按键的人的操作
实现人机的交互
那么更复杂的
我们有的同学可能已经开始尝试的
或者已经感觉到的
比如说我们的按键在做人机交互的时候
防抖的操作
从软件从硬件如何做
然后在更广泛的意义上来讲
小到一个银行的柜员机
大到一个我们用的计算机键盘
这样的多键的东西
我们往往还不是一个按键一个IO
大家日后有兴趣可以去学
可能我们会用这样阵列的方式读出
用2N个IO读出
N方个按键
那么除了输入设备
输出设备我们接触了数码管显示屏
然后大家喜欢这个嵌入式系统
喜欢做一些酷炫的系统同学
会很喜欢点阵式的LCD、OLED
以及甚至彩色 真彩色的
各种各样的显示器件
而如果追求低功耗的同学
你可能仍然会调回头去使用字段式的液晶
使用OLED低功耗的显示屏等等
来实现恰如其分的应用
那么在做这些液晶屏和显示屏的时候呢
我们有可能使用的是SPI、I2C这样的通讯方式
有可能使用的是专用的同步的
这种数据总线
然后作为声光电的人机交互
我们用过这个蜂鸣器
把电变成声音
也可以用过这种调制的这种
产生不同音高音乐这样的蜂鸣器
此外我们还可以做扬声器
而如果我们嵌入式系统
不仅仅直接跟人打交道
有跟更多更复杂的电路包括强电的
大功率的电路
来进行混合的控制设计的时候
我们还用到各种各样的隔离器件
比如很著名的继电器 对吧
一个磁铁吸和一个开关
在我们电子学系统 嵌入式系统
用的非常非常多
我们可以用一个嵌入式系统
用一个低电压
比如5伏 3.3伏控制一个继电器
而在一个完全独立的回路里
去控制一个强电设备
一个灯或者一个电机的开关
来实现这样的控制功能
而对于强电的输入信号
或者来自于更加敏感的传感器的信号
我们又会使用一类比如叫光耦
或者叫磁耦这样的隔离器件
通过光或者磁信号的隔离
把一个电路回路里的信号
耦合到我们的微控制器系统
但同时又避免他们在电路上的互相干扰
所以除了人机的交互
除了隔离
嵌入式系统在上一个章节的最后的ADC部分
大家能够感觉到最最最丰富的
是我们一个嵌入式系统如果要真正工作起来
一定会跟物理世界跟外界的信息发生关联
所以我们会有丰富多彩的
各种各样的传感器
来帮我们把外界的信号转变成电信号
而这样的传感器往往是一些电子的机械的
这种高精度的装置
所以借助各种各样传感器
我们嵌入式系统本领就更大了
我们可以测量温度 湿度 压力
我们想到一切物理量
人类当代科技的发展
一个最重要的标志
就是我们生活在电子时代
在过去几十上百年里
人类已经积攒了无数的经验
来把各种各样的物理量变成电信号
而一旦变成电信号
我们的嵌入式系统 我们的电子学系统
就能发挥作用
比如说我们大家接触过的
初步用热电阻实现了温度的测量
而一个温度传感器
可能是一个简单的热敏电阻
也可能是一个高精度的铂电极
然后我们可以使用非常简单的
测量电压的ADC变换
也可能需要多线的带有补偿的方式
来进行读取
然而如果我们要测湿度
可能更多使用烧结型半导体器件
通过它对于湿度的敏感
来测量环境中湿度的变化
我们不仅能买到原始的电阻
这样的温湿度器件
还能买到这样一体化的
具有数字读出接口的温湿度一体传感器
那么有不同精度的
有不同这个灵敏度这样的器件
可以供我们选择
那么我们前面学过最小的芯片级的
加速度传感器
其实在更多的工业应用里头还有各种量程
各种精度的加速度和运动传感器
可以被嵌入式系统所采用
除了加速度传感器
还有非常重要的一类传感器
是压力传感器
他们从几十千帕到上百千帕
有不同的动态范围
可以实现单电源的供电
我们一旦测到了气压
我们既可以用来测量
一个压力容器内压力的大小
也可以把它转换成对于海拔和高度的测量
所以我们今天穿戴设备里头
有很多腕表
有很多穿戴设备
可以记录人一天有没有爬楼
这都是通过压力传感器来实现的
那么大家还有很多很感兴趣的应用
比如说我们看到交警会查有人有没有喝酒
那么这样一类的传感器
就使用了半导体的微晶离子烧结以后的这种
界面态对于电子的灵敏
来测量不同的有机介质
有对酒精敏感的
有对二氧化碳或者是这个甲烷
这样各种特殊气体敏感的传感器
选择合适的传感器
合适的模拟电路
以及ADC读出
我们的微控制器就可以获得
对于这样一些物理介质的测量和探测
然后玩智能车的同学
除了这些传感器还会有很多自制的传感器
比如说我们会用一个光电编码盘
来不停的测量
一个光电信号被编码盘遮挡产生的脉冲数
来知道一个轮子的转速
来推算我们车子的车速
那么当然还有同学用霍尔元件
的霍尔效应来测这个车速
这也是一种办法
那么在智能车的领域还有很多同学
会用到超声波传感器
超声波传感器可以用来通过反射波
测量是否有障碍物
是否有接近
或者来感应是否有人接近 对不对
那么在更多的工业领域里
我们对于气体的流量 液体的流量
也都可以有形形色色的传感器
包括光的强弱
光的颜色 种类 能量等等
都可以有各种各样光电传感器
那么做智能车同学特别做光电组的同学
可能对光电传感器就会很熟
因为最早最早的智能车
历史最悠久那个组别
就是简简单单通过打到白色赛道
和黑色遮挡线上的反射光的强弱
来判断车自身的车头位置和姿态的
再形成一个反馈控制
作用到电机和舵机上
那么我们除了交直流的各种电机
那么要做高精度的控制的时候
要做一个步骤一个步骤控制的时候
往往还会用到步进电机
等等这样一系列的效应器加上还有
当然这里没有提到的舵机
我们又可以实现一个对于机械动作和姿态的
各种各样的复杂控制
包括用几十个舵机来组成一个完成的结构
大家使用嵌入式的微控制器
自己做一个在电视上看到的
跳舞的机器人也是完全可以的
那么讲了这么多的接口
好像开酱油铺一样
有很多很多的东西
想表达的意思是什么呢
是说我们嵌入式系统已经学过的外设
已经学过的内容
我们更多的掌握的是一类方法
和各种各样的关于通讯ADC这样基础知识
而它外延的扩充
我们称为Interface
称为接口是没有界限的
嵌入不同的领域
我们就可以做出不同的应用
那还有更多吗
其实只要你想得到
都能有更多
比如有同学说老师我上了这个课
我能自己做一个嵌入式系统测一测PM2.5吗
可以
你可以查一查发现有这样PM2.5传感器模块
它会有指定的供电
指定输出信号的通讯协议
有的模块输出模拟电压值
你可以通过ADC去采
来得到空气中PM2.5的浓度
那如果有的同学说
老师这个传感器的原理是什么
我能自己做一个吗
如果你学好了光电传感器
学好了模拟电路 你可以自己做
他就是一束光线
测量打在PM2.5颗粒上散射出来的
光子数目的多少
这样高精度的模拟电路
如果对电子学的基础足够扎实同学
你可以不用买现成的传感器
你也可以自己做
那与之类似的
烟雾的传感器
二氧化碳传感器
刚才提到的
都会看到形形色色模块
那我在这里展示它的意义是什么呢
是我们有无限的可能性
更多是大家通过网络的搜索
通过淘宝的搜索
找到你想用的
适合你用的器件如果有
我们学会看它的芯片手册
看它的供电要求
看它的接口要求
它是产生一个对外输出的
数据的通讯接口
还是产生一个模拟的电压电流值
如果是通讯的接口
我们的微控制器应该用什么接口与它通讯
如果是模拟的电压电流值
我们应该如何配置我们的模拟电路
和设置我们的ADC 正确把它采集下来
如果大家走通了这样一点
你会发现没有事情能够难得倒你
任何你看得到东西
你都有能力自己去尝试动手把它做出来
所以归根结底千奇百怪的传感器
应该用什么电路
我怎么知道有这些传感器呢
走到这一步大家才会发现
一个个嵌入式系统的学习
学到我们最后一个章节
它并不是一个结束
我们才刚刚开始
当我们学习嵌入式系统的时候
不是说了然于胸
让你失去了对于其它知识的求知欲
而是你会发现
而今迈步从头越
周边的很多的知识都等着你去探索
比方说我们想知道千奇百怪的传感器
应该用什么样的电路
我们应该学好模拟电路
比如说我们发现这个模拟电路
无法解释或者无法解决这样问题
因为我们信号太快了
我们信号太弱了
我们要的信躁比太难了
我想做一个全人类都测不好的东西
或者我想做一个仪器
指标比别人都高怎么办
你可能除了学好模拟电路
还要再学一学微弱信号的测量
或者在曾老师领域
我们要学一学核电子学处理随机信号
那如果说这些都掌握了
没有商业传感器来实现我要的目标
比方说市面上的PM2.5测量传感器都太大了
我有没有可能有朝一日
自己做一个指甲盖那么大小传感器呢
有可能
大家可以从学习一些基本的传感器知识
辅助探测知识入手
借鉴已有传感器知识
把各种各样物理量
用巧妙的思维转换成电学量
有朝一日做出自己的嵌入式系统
比如说我们前面说到的
指甲盖那么大小的芯片的加速度传感器
就是一个很好的例子
所以嵌入式系统我们走到今天我们会发现
我们一步一步从最小系统
一个迷你的计算机运行起来
走向了一个完整功能的设计的思维
我们一步一步的从学习和掌握
一个微控制器的
各种内部外设 内部模块
走向了结合外围电路
来一起完整的看待这个设计
我们一步一步的从一个软件的编程
理解了寄存器写写Main函数
走向了硬件的设计
乃至软硬件的协同设计
应该说能够实现完整的功能
有完善的外围电路
软硬件协同设计
把一个功能的性能指标 或者是功耗
发挥到极致这样的东西
我们称为是真正高层次的
嵌入式的系统设计
而从这个意义上来讲
我们这门课程才刚刚上路
所以说我们学习到现在
才可以说是初窥嵌入式系统设计的门径
所以在最后下面一个单元
我再会带着大家用嵌入式系统设计的思路
再来看看我们最早看过的一些例子
看看大家是否能有更多的感悟
-1.1 课程概览
--1.1 课程概览
-1.2 如何学好嵌入式系统
-2.1 计算机的基本概念、发展历史
-2.2 从晶体管到CPU
-2.3 概念CPU、微控制器MCU和嵌入式系统
-2.4 八卦计算机史
-2.5 不同领域、不同系列的嵌入式系统
-2.6 ARM历史与MKL25Z128 MCU
--2.6 ARM历史与MKL25Z128 MCU【习题】
-3.1 CPU的基本结构和运行机制
-3.2.1 堆栈的概念
--3.2.1 堆栈的概念【习题】
-3.2.2 堆栈的概念-头脑体操
-3.3.1 ARM的体系结构
--3.3.1 ARM的体系结构【习题】
-3.3.2 ARM的体系结构-头脑体操
-3.4.1 中断的概念和机制
-3.4.2 中断子程的概念和编程
-3.5 复位、时钟、存储器和总线
--3.5 复位、时钟、存储器和总线【习题】
-3.6 小结:MCU的总体结构和程序运行机制
--3.6 小结:MCU的总体结构和程序运行机制【习题】
-4.1 第一种外设:IO
-4.2 IO外设的编程实操-点亮LED
-4.3 IO外设的进阶知识
-4.4 嵌入式开发的基本概念与工具链
-4.5 嵌入式开发的进阶知识
-4.6 嵌入式开发中的C语言(上)
--4.6 嵌入式开发中的C语言(上)【习题】
-4.7 嵌入式开发中的C语言(下)
--4.7 嵌入式开发中的C语言(下)【习题】
-E0.1 实验零 开发板的初步认识与工具链的安装
-E0.2 实验零 体验一个例程的编译与下载
-E0.3 实验零 编写第一个程序:点亮核心板LED
-E1 实验一 点灯秘籍
-5.1 ARM微控制器外设学习概述
-5.2.1 ARM微控制器外设:通讯
-5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)
--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)【习题】
-5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器的外设:异步串行通讯UART的原理(下)
--5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)【习题】
-5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
--5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口
-5.2.5 ARM微控制器外设:UART的寄存器编程(上)
--5.2.5 ARM微控制器外设:UART的寄存器编程(上)
-5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)
--5.2.6 ARM微控制器外设:UART的寄存器编程(下)【习题】
-E2 实验二 UART编程实操
-5.3.1 ARM微控制器外设:IO的中断编程(上)
-5.3.2 ARM微控制器外设:IO的中断编程(下)
-5.4.1 ARM微控制器外设:定时器的原理
-5.4.2 ARM微控制器外设:定时器的编程
--5.4.2 ARM微控制器外设:定时器的编程【习题】
-E3 实验三 定时器中断编程实操
-5.5.1 ARM微控制器外设:PWM的原理
-5.5.2 ARM微控制器外设:PWM寄存器与编程
-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
-E4 实验四 数码管显示编程实操
-5.6.1 ARM微控制器外设:SPI通讯简介
--5.6.1 ARM微控制器外设:SPI通讯简介【习题】
-5.6.2 ARM微控制器外设:SPI寄存器与编程
-5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
--5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动
-5.7.1 ARM微控制器外设:I2C通讯简介
-5.7.2 ARM微控制器外设:I2C的通讯协议
-5.7.3 ARM微控制器外设:I2C寄存器与编程
--5.7.3 ARM微控制器外设:I2C寄存器与编程【习题】
-5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
--5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器
-5.8.1 ARM微控制器外设:ADC简介
-5.8.2 ARM微控制器外设:ADC基础
-5.8.3 ARM微控制器外设:ADC寄存器与编程
-E5 实验五 ADC编程实操
-E6 挑战实验
--E6 挑战实验
-6.1 嵌入式系统的接口与设计
-6.2 嵌入式系统的实例