Micropython——关于使用PWM信号来对LED灯进行控制

笔者手中恰好有一款树莓派PICO的板子,正好也想学习和使用,所以今天就来写写

以单片机为例,我们知道,单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平

假设高电平为5V,低电平则为0V,那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。

我们知道,电压是以一种连接1或断开0的重复脉冲序列被夹到模拟负载上去的(例如LED灯,直流电机等),连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值(即0~5V之间任意大小)的模拟电压

比方说 占空比为50% 那就是高电平时间一半,低电平时间一半,在一定的频率下,就可以得到模拟的2.5V输出电压,那么75%的占空比,得到的电压就是3.75V。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FzNDgwMTMzOTM3,size_16,color_FFFFFF,t_70


machine.PWM(Pin)  #指定GPIO重新初始化

PWM。init(channel,freq,duty)     #根据输入的参数初始化PWM对象

PWM.deinit()     #用于关闭PWM对象,对对象deinit之后需要重新init才能使用

PWM.freq([value])    #用于获取或者设置 PWM 对象的频率,频率的范围为 [1, 156250]。

PWM.duty_u16([value])     #用于设置占空比,数值应在0-65536之间

PWM.duty_ns([value])         #用于设置高电平的时间



#该示例效果为LED灯逐渐点亮和熄灭
from machine import Pin,PWM
import utime
LED = PWM(Pin(25))
LED.freq(1000)

LED_duty = 0

LED_direction = 1

while True:
    LED_duty += LED_direction
    if LED_duty >= 100:
        LED_duty = 100
        LED_direction = -1
    elif LED_duty <= 0:
        LED_duty = 0
        LED_direction = 1
    LED.duty_u16(int(LED_duty * 655.36))   #使得LED灯点亮的关键参数,如果未设置LED的占空比,则无法点亮LED灯
    if LED_duty%5 == 0:
        print(LED_duty)
    utime.sleep(0.1)

Thonny绘图器所展示的效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

 

#该示例效果为每秒点亮和熄灭LED灯

from machine import Pin,PWM
import utime

led = PWM(Pin(25))

led.freq(1000)
led_duty = 0

while True:
    if led_duty >= 1:
        led_duty = 0
        led.duty_u16(65536)          #设置为高电平
        utime.sleep(1)
        print(led_duty)
    elif led_duty <= 0:
        led_duty = 1
        led.duty_u16(0)              #设置为低电平
        utime.sleep(1)
        print(led_duty)       
    utime.sleep(0.5)

Thonny绘图器所展示的效果图: 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xa_L

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

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

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

打赏作者

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

抵扣说明:

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

余额充值