MicroPython内核开发笔记书内软件用例 :ADC 相关实验
简 介: 本文给出了 MicroPython内核开发笔记:书内嵌入实验任务 中的ADC软件用例部分内容。
关键词
: MicroPython,MM32F3277
- 本书稿内容隶属于 MicroPython内核开发笔记:书内嵌入实验任务 中的内容。
软件用例:
这部分书稿内容包括有:
1.
2.
- 书稿内位置:
§01 书稿内容
在MM32F3277中 ADC总共 有16 个通道,MicroPython中使用了前14个 ADC通道,它们对应的单片机端口如下:
-
ADC通道对应的端口:
-
CH0~7
:PA0 ~ PA7
CH8,CH9
: PB0, PB1
CH10~CH13
:PC0 ~ PC3
在 MicroPython 交互窗口内,输入以下指令,可以查看 ADC通道占用的管脚以及可以被调用的函数。
from machine import ADC
for i in range(14):
print(ADC(i))
dir(ADC(0))
命令执行结果为:
ADC(0):1, on Pin(PA0)
ADC(1):1, on Pin(PA1)
ADC(2):1, on Pin(PA2)
ADC(3):1, on Pin(PA3)
ADC(4):1, on Pin(PA4)
ADC(5):1, on Pin(PA5)
ADC(6):1, on Pin(PA6)
ADC(7):1, on Pin(PA7)
ADC(8):1, on Pin(PB0)
ADC(9):1, on Pin(PB1)
ADC(10):1, on Pin(PC0)
ADC(11):1, on Pin(PC1)
ADC(12):1, on Pin(PC2)
ADC(13):1, on Pin(PC3)
['init', 'read_u16']
从命令执行结果可以看出, ADC 是通过 read_u16 来读取 ADC转换结果的。
一、基础实验
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
- 测试MM32F3277中的MicroPython的Signal功能
- 为什么在MM32中的MicroPython中无法打开二进制文件呢?
- 测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本
- 测试MM32F3277-MicroPython 2021-11-17 版本
- 设计带有SD卡的 MM32F3277 MicroPython 实验板
- MM32F3277 MicroPython 实验板设计和软件测试
- 调试来自于逐飞的MM32F3277移植有MicroPython开发板
- i.MX RT1021核心板的Micropython移植的相关文档
- MicroPython内核开发笔记书内软件用例 :基于 print的程序调试
- MicroPython内核开发笔记书内软件用例 :文件系统实验
- 使用MM32 MicroPython产生双音频信号的局限性
- 利用mem数组在MM32 MicroPython中实现COMP的功能
- MM32F3277 MicroPython 的定时器功能
- 将动画装入MicroPython I2C OLED
- 测试在MicroPython中对于main.py进行修改
- ESP-12F模块转接板测试版调试说明,下载MicroPython程序。ESP8266-12F