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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |