MicroPython
文章目录
- MicroPython
- 前言
- 一、ADC
- 二、PWM
前言
这一节简单学习一下ACD和PWM
一、ADC
ADC(analog to digital conversion) 模拟数字转换。意思就是将模拟信号转化成数字信号,由于单片机只能识别二级=进制数字,所以外界模拟信号常常会通过 ADC转换成其可以识别的数字信息。常见的应用就是将变化的电压转成数字信号。
ESP8266 的 ADC 输入引脚只能测量 0-1V 的量程。这个大家要注意,和单片机的0到3.3V是不一样。
我们来看看 ADC 模块的构造函数和使用方法。
adc=machine.ADC(0)
构建 ADC 对象。0:ESP8266 只有 1 个 ADC
adc.read()
获取 ADC 值。测量精度是 10 位,返回 0-1024(表示 0-1V)。
你没看错,就这么简单。两句函数就可以获得 ADC 数值
先导入相关模块,然后初始化模块。在循环中不断读取 ADC 的值,转化成电压值后在 OLED 上面显示,每隔 100 毫秒读取一次
#导入相关模块
from machine import Pin,I2C,ADC,Timer
from ssd1306 import SSD1306_I2C
#初始化相关模块
i2c = I2C(sda=Pin(13), scl=Pin(14)) #I2C初始化:sda-->13, scl --> 14
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
adc = ADC(0) #Pin='AD'
def ADC_Test(tim):
oled.fill(0) # 清屏显示黑色背景
oled.text('ADC', 0, 15) # 次行显示实验名称
#获取ADC数值
oled.text(str(adc.read()),0,40)
oled.text('(1024)',40,40)
#计算电压值,获得的数据0-1024相当于0-1V,('%.2f'%)表示保留2位小数
oled.text(str('%.2f'%(adc.read()/1024)),0,55)
oled.text('V',40,55)
oled.show()
#开启RTOS定时器
tim = Timer(-1)
tim.init(period=100, mode=Timer.PERIODIC, callback=ADC_Test) #周期300ms
二、PWM
PWM 就是一个信号输出。PWM(脉冲宽度调制),主要用于输出不同频率、占空比(一个周期内高电平出现时间占总时间比例)的方波。以实现固定频率或平均电压输出。概念就不详细介绍了,详细的可以看主页文章。
通过PWM可以驱动蜂鸣器以不同的频率发声,无源蜂鸣器,需要给定指定的频率,才能发声的,而且可以通过改变频率来改变蜂鸣器的发声音色。
PWM 可以通过 ESP8266 所有引脚输出除了 Pin(16). 所有通道都有 1 个特定的频率,从 1 到 1000 之间(单位是 Hz)。占空比的值为 0 至 1023 之间。
先看看 PWM 模块对象:
pwm15=machine.PWM(machine.Pin(id),freq,duty)
构建 PWM 对象。id:引脚编号;freq:频率值;duty:占空比;配置完后 PWM 自动生效
pwm15.freq(freq)
设置频率。freq:频率值在 1-1000 之间,freq 为空时表示获取当前频率值。
pwm15.duty(duty)
设置占空比。duty:占空比在 0-1023 之间,duty 为空时表示获取当前占空比值。
pwm15.deinit()
关闭 PWM。
无源蜂鸣器我们可以用特定频率的方波来驱动,方波的原理很简单,就是一定频率的高低电平转换,可以简单理解成占空比为 50%的 PWM 输出。
from machine import Pin, PWM
import time
Beep = PWM(Pin(15), freq=0, duty=512) # 在同一语句下创建和配置 PWM
#蜂鸣器发出频率200Hz响声
Beep.freq(200)
time.sleep_ms(1000)
#蜂鸣器发出频率400Hz响声
Beep.freq(400)
time.sleep_ms(1000)
#蜂鸣器发出频率600Hz响声
Beep.freq(600)
time.sleep_ms(1000)
#蜂鸣器发出频率800Hz响声
Beep.freq(800)
time.sleep_ms(1000)
#蜂鸣器发出频率1000Hz响声
Beep.freq(1000)
time.sleep_ms(1000)
#停止
Beep.deinit()
下载程序后可以听到蜂鸣器依次发出不同频率的响声。
可以用示波器看一下(1k频率和200HZ频率)
比如说你要控制舵机就可以这么写
这样写舵机就可以动(注意占空比范围就可以了(0-1023))
from machine import Pin, PWM
pwm0 = PWM(Pin(15)) # create PWM object from a pin
pwm0.freq(1000) # set frequency
pwm0.duty(300) # set duty cycle
可以看一下1K频率下300的占空比和800占空比的波形
300
800