当前课程知识点:ARM微控制器与嵌入式系统 >  第五章 ARM微控制器的各种外设 >  E5 实验五 ADC编程实操 >  E5 实验五 ADC编程实操

返回《ARM微控制器与嵌入式系统》慕课在线视频课程列表

E5 实验五 ADC编程实操在线视频

E5 实验五 ADC编程实操

下一节:E6 挑战实验

返回《ARM微控制器与嵌入式系统》慕课在线视频列表

E5 实验五 ADC编程实操课程教案、知识点、字幕

各位同学大家好

我是清华大学工程物理系的曾鸣老师

欢迎大家继续回到我们

ARM微控制器与嵌入式系统的MOOC课程

那么这个单元呢

是我们的第五次实验

那么我们前面做了很多次实验

在这一次的实验里

我们要把我们学习的

ADC模数变换这个模块

给灵活的用起来和玩起来

那么跟我们的前面的要求一样

我们做每一次实验

做每一次实践操作

我鼓励大家一定学会找对应的内容

在芯片手册上哪里

特别是ADC这个模块

在芯片手册的第28章

因为ADC模块相对来讲

是一个非常非常重要

又相当复杂的模块

所以这个章节的信息量

远远比老师讲的内容要多

我们ADC模块

可以有各种各样的速度 工作模式

有十几个通道几十个引脚

所以日后大家要做一个

高性能的高精度的或者特别低功耗的

特殊的系统的时候

这个模块我觉得大家

还有很多需要吃透的东西

所以推荐大家一定要学会阅读芯片手册

那么在我们这门课前面讲过的

知识内容的情况下

我们来看一看

我们这一个实验的基本的思想 概念

和以及编程怎么把一个一个的任务完成

我们都建立了

我们的ADC系统是帮助我们微控制器

对一个连续变化的自然的物理量

或者我们称为模拟量

按一定的时间间隔和精度进行采样

得到一组数据的序列

从而能够被我们的微控制器计算机系统

进行处理这样一种思想

那么我们同时也建立了我们ADC模块

可能有很多个通道

但是每一个通道

它都可以在一定的速率和精度下得到平衡

来进行设置和采样

所以在我们前面例程里

给了大家一些范例的代码

给大家一个推荐工作模式

希望大家在这个实验过程当中

如果你觉得结果不理想

精度不理想

往这些方面自己多做尝试和探索

那么第一个任务就是我们课上面

最后一个思考题

我们有这么一个电位器

跟一个固定值的电阻构成了一个分压电路

当我们调整定位器的时候

也就改变组织的时候

中间这个节点上的电压会发生变化

而我们的微控制器的PortC0这个引脚

对应的是ADC的单端第14号通道

它会采集这个点的电压值

那么我们的问题是

能不能采集这个电压值

使我们LED小灯闪烁的速度

可以被电位器的旋钮来加以调节

那么在这样一个第五次实验里

我不会再给出大家这些代码

我能够提示大家是两件事

第一呢跟着我们之前讲过的课间回忆

这样一个把ADC用起来的这三个步骤

看一看老师给的ADC的Init

这样一个初始化函数

以及ADC这个READ_DATA

这样一个读取数据的函数

如何把它用起来

但是光有这么两个函数封装是不够的

我们作为编程

作为第五次实验的这种任务

开始要考验大家把不同的模块

不同的量用C语言的编程关联起来

你会拿到一个ADC读出的寄存器的值

这个值又是与ADC模块的电压值是关联的

对不对

与旋钮转的角度是关联的

那么这个值我们怎么用

能够影响LED的闪烁速度呢

其实大家稍微动动脑筋

如果我们用的是轮询方式来阐述LED

是不是我们应该把这个变量的值

通过加减乘除的一些运算

最后体现到改变我们那个

delay函数的延迟时间长短的

这样我们的闪烁速度就变了

如果我们是用的前面学过的

这个SysTick的时钟来驱动LED的闪烁

我们是不是应该通过反复的调用

这个ADC采样的值

然后在一个机制下

不断把这个值

来更新我们这个时钟的

中断的时间间隔

或者是固定时间间隔里

每多少次来让灯闪一次这个变量

所以我们要把两个不同的量关联起来

用程序的语言

用数学的关系把它们表达出来

来实现编程

那么如果这个任务大家胜任

理清了编程的思想

第二个任务就与它有点类似

调一调我们电位器的旋钮

来改变一下我们前面玩过的音乐

PWM放音乐的那个蜂鸣器

声音的频率

也就是音高 对不对

那么同样还是PTC0

还是通道14这个引脚得到的电压值

反映了旋钮的位置

那么我们是要通过C语言的编程

把拿到的这个值来改变什么

来改变PWM模块的频率

PWM模块的频率被什么设置

是被PWM模块里头的Modulo

那个寄存器的值大家记得吧

它数数数到多少

是一个周期

那个周期的值

就是那个计数器的目标值 对不对

我们要把这两个量关联起来

而如果ADC采样到的量

是个12比特的数

这个数对于那个周期值大了或者小了

我们是不是对它进行一些成熟运算

让它缩放到这个范围里 对吧

这是大家感觉到的

那么第三个任务呢

第三个任务

不再是读刚才这一个旋钮的通道了

是我给大家提到的

我们在这个板子上面是有光线传感器

我们的光线传感器是一个光敏二极管

那么这个光敏二极管串联了一个电阻

那么在这个电阻这个端点上的电压值

又经过了运算放大器的放大

最后我们得到了一个可以测量的电压

这个时候我们使用了另外一个引脚

PTC2的这个引脚

对应的是ADC的通道11

来采集这个点的电压值

那么我们如何编程改改我们的代码

是读这个通道11的电压值

并且如何把这个电压值

跟这个光敏传感器测到光线的大小

关联起来呢

这可能有点难度 对不对

那么大家需要读懂这个电路

读懂这个模拟电路

读懂这个器件

然后读懂你测到的电压值

与光线之间的关系

然后再把它通过编程反映出来

那么任务三是要根据环境光线的强弱

来改变你的LED这个小灯的亮度

大家想想这个东西怎么变

我们什么时候能让LED感觉是常亮

就它闪的非常快

那么什么时候能改变这个LED的亮度呢

其实我们可以改变它闪烁的占空比

我不知道前面我给大家说过

做呼吸灯做各种任务

大家有没有去多尝试一步

如果多尝试一步

在这个地方 你应该想办法

用你测到的环境的光线的亮度

这样一个模数转换以后得到的数字值

来作为变量

去改变你这个LED灯闪烁的占空比

大家想想是是不这么一个关系

那么很多同学对这个电路读不懂

运算的放大电路那个部分我不再重复讲

我只讲讲这个器件

当我们读不懂的时候学会看芯片手册

如果我们把电路图上

看到这样光敏二极管的型号

谷歌一下 百度一下

或者用bing搜索一下

都能找到这样一个(06:52)公司的

光敏二极管的芯片手册

那么这个芯片手册有若干页

很多同学一看满目英文

头就晕了就开始躲

不是的 我们要找到它有用信息

比如说在这个课范畴里

我非常简单给大家看两张图

大家就能理解这张电路

那么这张图一张是光线的这个叫流明

这个亮度

与这个二极管上流过的电流的关系

而这个参数在图里头写着是二极管

加着5伏偏压的时候

那么另外一张图是这个二极管

在不同的偏压下它这个饱和曲线的关系

所以大家会发现这个二极管

在不同的亮度不同的环境光下面

偏压只要在一个0点几伏到1伏以上

就基本饱和了

流过的电流就基本上是一个定值不再变

而流过的这样一个定值

不再变的这个稳定电流呢

又与环境的光是有一个很好的线性的

所以电流与光线的强度

有一个很好的线性关系

而电流流进下面电阻在电阻上

形成的电压值压降

就与电流是线性的关系

所以这样一种电路上的转化我们最终知道

我们从这个节点上测到的电压值

是环境光线这个亮度的反映

而如果大家精确的刻度和定标你的ADC

知道你测到电压值除了那个数字量以外

究竟对应几伏

你其实可以反算这个电流究竟是多少

然后你再来估一估

你甚至可以做一个带有一定精度的

这个流明计 这个亮度计

那么这一点提示就讲到这儿

更多的原理大家自己来加以理解

用编程把它实现

然后最后一个任务实验5

又往前进一步

是我们用这个板子上加的温度传感器

来测一测环境的温度值

这一次呢要求大家把这个值

刻度一下算一算

然后用我们之前做实验做过的

不管是数码管也好

还是OLED显示屏也好

在你这个板子的小屏幕上把温度显示出来

那么如果要做这件事

我们会发现我们的参考电路

实际上在板子上

是有一个比较高精度的参考电压源

然后使热敏电阻一个标准的

千分之一电阻之间形成一个分压

然后我们可以不停的测这两个电阻之间

这个分压点的电压值的变化

知道了这个点的电压值

我们就可以反算

当前这个热敏电阻的电阻值是多少

对不对

而这个点接的是PTC3

也就是我们的ADC0的通道15

所以我们还要改改我们代码

去读通道15上的电压值

一旦我们读到了这个电压值

算出了这个电阻值怎么算温度呢

问题又来了

根据我们所使用这个10K的热敏电阻

我们可以在网上搜一下它的型号

10K的NTC

你会发现电阻与温度

有一个可以查表的对应关系

而这个关系还不是简单线性的

大家可能要分段查表

或者想办法用数组

用编程来加以实现

所以有很多同学会把这张表用Excle画出来

看看它的变化趋势

尝试用若干段直线来近似它

来做 拟合出一些计算公式

这都是有良好的

数学概念和物理概念的同学

会去做的事

那么我鼓励大家也尝试尝试

于是你可以用你的微控制器

测到这样一个模拟电压值

算出电阻值

再用电阻值算出温度值

在你的屏幕上显示出来

所以这一次实验的内容都不是那么的难

但是有两个非常有意思的特点

就是首先大家开始跟物理世界打交道了

你可以测量身边的温度也好

光线也好

这些物理量

不再是局限在计算机的领域里头

你给我个0 我给你个1

此外呢

因为与周围的物理量发生了关系

大家可以拿这些量算一算了

可以决策一下这些量用来以后干嘛

比如说我们简简单单一个光线的测量

来调LED的亮度

这难道不是一个自适应光线的LED的原形吗

那么还有好多同学做智能车

你有考虑过让你的车有更好的温度适应性

更好的环境光线适应性吗

那么一旦你有了这些想法

你独特的嵌入式系统

就可以上手一点点往前做了

所以希望这一次实验

能够让大家体会到我所说的那句话

ADC和DAC是微控制器嵌入式系统

与物理世界发生关联的

最最重要的两个桥梁和纽带

那么大家自己把它玩起来吧

ARM微控制器与嵌入式系统课程列表:

第一章 概览

-1.1 课程概览

--1.1 课程概览

-1.2 如何学好嵌入式系统

--1.2 如何学好嵌入式系统

第二章 绪论

-2.1 计算机的基本概念、发展历史

--2.1 计算机的基本概念、发展历史

-2.2 从晶体管到CPU

--2.2 从晶体管到CPU

-2.3 概念CPU、微控制器MCU和嵌入式系统

--2.3 概念CPU、微控制器MCU和嵌入式系统

-2.4 八卦计算机史

--2.4 八卦计算机史与创新

-2.5 不同领域、不同系列的嵌入式系统

--2.5 不同领域、不同系列的嵌入式系统

-2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU【习题】

--2.6 ARM历史与MKL25Z128 MCU【讨论】

第三章 MCU基础

-3.1 CPU的基本结构和运行机制

--3.1 CPU的基本结构和运行机制

-3.2.1 堆栈的概念

--3.2.1 堆栈的概念

--3.2.1 堆栈的概念【习题】

-3.2.2 堆栈的概念-头脑体操

--3.2.2 头脑体操

-3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构【习题】

-3.3.2 ARM的体系结构-头脑体操

--3.3.2 ARM的体系结构-头脑体操

-3.4.1 中断的概念和机制

--3.4.1 中断的概念和机制

-3.4.2 中断子程的概念和编程

--3.4.2 中断子程的概念和编程

-3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线【习题】

-3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制【习题】

第四章 ARM微控制器的开发

-4.1 第一种外设:IO

--4.1 第一种外设:IO

-4.2 IO外设的编程实操-点亮LED

--4.2 IO外设的编程实操-点亮LED

-4.3 IO外设的进阶知识

--4.3 IO外设的进阶知识

-4.4 嵌入式开发的基本概念与工具链

--4.4 嵌入式开发的基本概念与工具链

-4.5 嵌入式开发的进阶知识

--4.5 嵌入式开发的进阶知识

-4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)【习题】

-4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)【习题】

-E0.1 实验零 开发板的初步认识与工具链的安装

--E0.1 实验零 开发板的初步认识与工具链的安装

-E0.2 实验零 体验一个例程的编译与下载

--E0.2 实验零 体验一个例程的编译与下载

-E0.3 实验零 编写第一个程序:点亮核心板LED

--E0.3 实验零 编写第一个程序:点亮核心板LED

-E1 实验一 点灯秘籍

--E1 实验一 点灯秘籍

第五章 ARM微控制器的各种外设

-5.1 ARM微控制器外设学习概述

--5.1 ARM微控制器外设学习概述

-5.2.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编程实操

--E2 实验二 UART编程实操

-5.3.1 ARM微控制器外设:IO的中断编程(上)

--5.3.1 ARM微控制器外设:IO的中断编程(上)

-5.3.2 ARM微控制器外设:IO的中断编程(下)

--5.3.2 ARM微控制器外设:IO的中断编程(下)

-5.4.1 ARM微控制器外设:定时器的原理

--5.4.1 ARM微控制器外设:定时器的原理

-5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程【习题】

-E3 实验三 定时器中断编程实操

--E3 实验三 定时器中断编程实操

-5.5.1 ARM微控制器外设:PWM的原理

--5.5.1 ARM微控制器外设:PWM的原理

-5.5.2 ARM微控制器外设:PWM寄存器与编程

--5.5.2 ARM微控制器外设:PWM寄存器与编程

-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

-E4 实验四 数码管显示编程实操

--E4 实验四 数码管显示编程实操

-5.6.1 ARM微控制器外设:SPI通讯简介

-- 5.6.1 ARM微控制器外设:SPI通讯简介

--5.6.1 ARM微控制器外设:SPI通讯简介【习题】

-5.6.2 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.1 ARM微控制器外设:I2C通讯简介

-5.7.2 ARM微控制器外设:I2C的通讯协议

--5.7.2 ARM微控制器外设:I2C的通讯协议

-5.7.3 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.1 ARM微控制器外设:ADC简介

-5.8.2 ARM微控制器外设:ADC基础

--5.8.2 ARM微控制器外设:ADC基础

-5.8.3 ARM微控制器外设:ADC寄存器与编程

--5.8.3 ARM微控制器外设:ADC寄存器与编程

-E5 实验五 ADC编程实操

--E5 实验五 ADC编程实操

-E6 挑战实验

--E6 挑战实验

第六章 嵌入式系统设计

-6.1 嵌入式系统的接口与设计

--6.1 嵌入式系统的接口与设计

-6.2 嵌入式系统的实例

--6.2 嵌入式系统的实例

E5 实验五 ADC编程实操笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。