最近入手了pico学习。
①视频参考 【微雪课堂】PICO系列教程3——PWM(脉冲宽度调制)
另附其github,课程中所用代码皆在其中。
②博文参考树莓派 PICO基础教程(基于MicroPython)
下面让我们开始PWM的学习吧!ε≡٩(๑>₃<)۶
machine.PWM(pin):
#PWM对象构造函数
#其作用是指定GPIO重新初始化,并设置为PWM输出
#参数pin即为之前学习中的Pin对象,用于指定GPIO,该对象会被重新初始化
PWM.deinit():
#PWM反初始化函数
#其作用为清空初始化,并停止PWM输出
PWM.freq([value]):
#PWM输出频率设置函数
#根据参数value自动计算分频器参数和TOP寄存器参数
#注意value数值应符合PWM频率计算公式,过大或过小都会导致分辨率变小
PWM.duty_u16([value]):
#PWM占空比设置函数
#value数值应在0-65536间
#根据参数value自动计算出相对应的数值并赋予CC寄存器
#当计数器数值小于CC寄存器时,PWM输出高电平,反之输出低电平
PWM.duty_ns([value]):
#设置一个周期输出高电平的时长
#参数value为高电平时间,单位为ns
pico,1个
PWM脉冲宽度调制主要参考【微雪课堂】PICO系列教程3——PWM(脉冲宽度调制)
代码:
#本程序实现了PWM初始输出占空比为0%增速至100%,然后开始递减,递减至0%开始递增,如此循环往复
from machine import Pin, PWM
#与之前相比,多导入了PWM类
import utime
LED = PWM(Pin(25))
#将GPIO25即板载LED,设置为PWM输出
LED.freq(10000)
#将PWM输出频率设置为1KHz
LED_duty = 0
LED_direction = 1
while True:
LED_duty += LED_direction
#即LED_duty = LED_duty + LED_direction
#将LED_duty加上LED_direction并重新赋予给LED_duty
if LED_duty >= 100:
#若LED_duty大于等于100
LED_duty = 100
#LED_duty被设置为100
LED_direction = -1
#LED_direction被设置为-1
elif LED_duty <= 0:
#若LED_duty小于等于0
LED_duty = 0
#LED_duty被设置为0
LED_direction = 1
#LED_direction被设置为1
LED.duty_u16(int(LED_duty * 655.36))
#使用duty_u16函数以一定比例将LED_duty设置为占空比
if LED_duty%5 == 0:
#并在LED_duty能被5整除时,输出LED_duty的数值
print(LED_duty)
#之所以输出LED_duty数值,是为了后面使用thonny的绘图器功能
utime.sleep(0.01)
实验现象:
①软件现象:在Thonny的Shell上可以看到,数值在不断变化:
右键,选择“显示绘图器”,可以看到图形的形象变化: