ESP8266_MicroPython——ADC_PWM

宁睿  金牌会员 | 2024-9-15 06:17:51 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 687|帖子 687|积分 2071

MicroPython


  

前言

这一节简单学习一下ACD和PWM
一、ADC

ADC(analog to digital conversion) 模拟数字转换。意思就是将模拟信号转化成数字信号,由于单片机只能识别二级=进制数字,以是外界模拟信号经常会通过 ADC转换成其可以识别的数字信息。常见的应用就是将变革的电压转成数字信号。
ESP8266 的 ADC 输入引脚只能丈量 0-1V 的量程。这个大家要注意,和单片机的0到3.3V是不一样。
我们来看看 ADC 模块的构造函数和利用方法。
  1. adc=machine.ADC(0)
  2. 构建 ADC 对象。0:ESP8266 只有 1 个 ADC
复制代码
  1. adc.read()
  2. 获取 ADC 值。测量精度是 10 位,返回 0-1024(表示 0-1V)。
复制代码
你没看错,就这么简单。两句函数就可以得到 ADC 数值
先导入相关模块,然后初始化模块。在循环中不断读取 ADC 的值,转化成电压值后在 OLED 上面显示,每隔 100 毫秒读取一次

  1. #导入相关模块
  2. from machine import Pin,I2C,ADC,Timer
  3. from ssd1306 import SSD1306_I2C
  4. #初始化相关模块
  5. i2c = I2C(sda=Pin(13), scl=Pin(14))  #I2C初始化:sda-->13, scl --> 14
  6. oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
  7. adc = ADC(0) #Pin='AD'
  8. def ADC_Test(tim):
  9.         oled.fill(0)  # 清屏显示黑色背景
  10.         oled.text('ADC', 0, 15)      # 次行显示实验名称
  11.         #获取ADC数值
  12.         oled.text(str(adc.read()),0,40)
  13.         oled.text('(1024)',40,40)
  14.         #计算电压值,获得的数据0-1024相当于0-1V,('%.2f'%)表示保留2位小数
  15.         oled.text(str('%.2f'%(adc.read()/1024)),0,55)
  16.           oled.text('V',40,55)
  17.         oled.show()
  18. #开启RTOS定时器
  19. tim = Timer(-1)
  20. 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 模块对象:
  1. pwm15=machine.PWM(machine.Pin(id),freq,duty)
  2. 构建 PWM 对象。id:引脚编号;freq:频率值;duty:占空比;配置完后 PWM 自动生效
复制代码
  1. pwm15.freq(freq)
  2. 设置频率。freq:频率值在 1-1000 之间,freq 为空时表示获取当前频率值。
复制代码
  1. pwm15.duty(duty)
  2. 设置占空比。duty:占空比在 0-1023 之间,duty 为空时表示获取当前占空比值。
  3. pwm15.deinit()
  4. 关闭 PWM。
复制代码
无源蜂鸣器我们可以用特定频率的方波来驱动,方波的原理很简单,就是肯定频率的高低电平转换,可以简单理解成占空比为 50%的 PWM 输出。

  1. from machine import Pin, PWM
  2. import time
  3. Beep = PWM(Pin(15), freq=0, duty=512) # 在同一语句下创建和配置 PWM
  4. #蜂鸣器发出频率200Hz响声
  5. Beep.freq(200)
  6. time.sleep_ms(1000)
  7. #蜂鸣器发出频率400Hz响声
  8. Beep.freq(400)
  9. time.sleep_ms(1000)
  10. #蜂鸣器发出频率600Hz响声
  11. Beep.freq(600)
  12. time.sleep_ms(1000)
  13. #蜂鸣器发出频率800Hz响声
  14. Beep.freq(800)
  15. time.sleep_ms(1000)
  16. #蜂鸣器发出频率1000Hz响声
  17. Beep.freq(1000)
  18. time.sleep_ms(1000)
  19. #停止
  20. Beep.deinit()
复制代码
下载程序后可以听到蜂鸣器依次发出不同频率的响声。
可以用示波器看一下(1k频率和200HZ频率)


好比说你要控制舵机就可以这么写

这样写舵机就可以动(注意占空比范围就可以了(0-1023))
  1. from machine import Pin, PWM
  2. pwm0 = PWM(Pin(15))      # create PWM object from a pin
  3. pwm0.freq(1000)         # set frequency
  4. pwm0.duty(300)          # set duty cycle
复制代码
可以看一下1K频率下300的占空比和800占空比的波形
300

800


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表