ESP8266_MicroPython——ADC_PWM

MicroPython


前言

这一节简单学习一下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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我与nano

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值