MicroPython内核开发笔记书内软件用例 :ADC 相关实验

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython内核开发笔记书内软件用例 :ADC 相关实验相关的知识,希望对你有一定的参考价值。

简 介: 本文给出了 MicroPython内核开发笔记:书内嵌入实验任务 中的ADC软件用例部分内容。

关键词 MicroPythonMM32F3277

书稿内容 目 录
Contents
基础实验 ADC,DAC联合实验 总 结 存在问题

 

软件用例:
这部分书稿内容包括有:
1.
2.

  • 书稿内位置:

 

§01 稿内容


MM32F3277中 ADC总共 有16 个通道,对应外部端口分别是:

ADC通道对应的端口:
CH0~7:PA0 ~ PA7
CH8,CH9: PB0, PB1
CH10~CH13:PC0 ~ PC3
CH14,CH15:NULL

一、基础实验

1、读取ADC0电压

下面代码是读取 ADC0 通道,对应 PA0 管脚上的电压。 请注意,第一个 ADC 初始化的时候,需要将 init=True 参数代入。

读取 ADC 转换数值是通过 read_u16() 函数,它返回 0 ~ 0xffff 之间的数值,对应 ADC 输入电压 从 0V 到 参考电压(3.3V) 之间的数值。

from machine                import Pin,ADC,DAC
import utime

adc0 = ADC(0, init=True)

while True:
    print(adc0.read_u16())
    utime.sleep_ms(200)

通过电位器,手工调节 PA0 管脚的电压,观察程序输出的数值,可以查看到随着输入电压增加, ADC 转换数值从 0 到 0xffff 变化。

2、ADC转换速率

在应用中,ADC转换速率是一个关键参数。下面代码通过读取 1024 个 ADC 转换值,测量总共所需要的时间,可以确定 ADC 最大转换速率。

from machine                import ADC
import time

adc0 = ADC(0, init=True)

BUF_LENGTH = 1024
buf = [0] * BUF_LENGTH

startc = time.ticks_cpu()
for i in range(BUF_LENGTH):
    buf[i] = adc0.read_u16()

endc = time.ticks_cpu()
print(endc - startc)

while True:
    pass

程序运行,输出结果为 25。 这表明通过 MicroPython 采集 1024 个 ADC数值 大约花费 25ms。 因此,最高的采样频率可以达到 40kHz 左右。

二、ADC,DAC联合实验

下面代码演示了从ADC读取数据之后,然后通过DAC通道将信号输出。

from machine                import DAC,ADC
import time

adc = ADC(0, init=True)
dac = DAC(0)

print("ADC to DAC .")

nowtime = time.ticks_ms()
while True:
    dac.write_u16(adc.read_u16())

    while True:
        if time.ticks_ms() != nowtime:
            nowtime = time.ticks_ms()
            break

代码中应用了 time 读取系统时间,控制采样频率为 1kHz。

使用信号源,在 PA0 管脚输入 频率为 100Hz, 峰峰值为 1V,均值为 1.5V 的正弦波信号。下面显示了输入信号ADC信号与输出DAC信号。

▲ 图1.2.1 输入ADC采集信号与输出DAC信号

通过上述波形,可以看到在正弦波 一个周期(10ms)内完成了 8 次 AD,DA转换,这个实验结果也是验证了,当前MicroPython内核中 time 延时存在系统误差。实际延时时间需要乘以 1.25 倍。

 

  结 ※


  文给出了 MicroPython内核开发笔记:书内嵌入实验任务 中的ADC软件用例部分内容。

一、存在问题

  第二个实验中,由于需要使用到 time 读取系统时间,会发现,现在这个版本中的 time 读取的时间存在着系统误差。 与实际的时间之间相差 1.25倍,估计还是在内核实现中,对于CPU 内部基准频率常量没有设置正确所引起的。


■ 相关文献链接:

● 相关图表链接:

以上是关于MicroPython内核开发笔记书内软件用例 :ADC 相关实验的主要内容,如果未能解决你的问题,请参考以下文章

MicroPython内核开发笔记书内软件用例 :MEM相关实验用例

MicroPython内核开发笔记书内软件用例 :浮点数相关实验

MicroPython内核开发笔记书内软件用例 :DAC相关实验

MicroPython内核开发笔记书内软件用例 :Timer相关实验

MicroPython内核开发笔记书内软件用例 :UART相关实验

MicroPython内核开发笔记书内软件用例 :ADC 相关实验