当然,也可以尝试改一下freq来试试,这样看是什么 效果?
3、micropython的标准库Timer (1)class pyb.Timer(id, ...):创建定时器对象,id范围是[1..14]
(2)timer.init(*, freq, prescaler, period):定时器初始化。
(3)freq:频率。
(4)prescaler,预分频,[0-0xffff],定时器频率是系统时钟除以(prescaler + 1)。定时器2-7和12-14最高频率是84MHz,定时器1、8-11是 >168MHz
(5)peroid,周期值(ARR)。定时器1/3/4/6-15是 [0-0xffff],定时器2和5是[0-0x3fffffff]。
(6)mode,计数模式
(7) Timer.UP - 从 0 到 ARR (默认)
(8) Timer.DOWN - 从 ARR 到 0.
(9)Timer.CENTER - 从 0 到 ARR,然后到 0.
(10)div,用于数值滤波器采样时钟,范围是1/2/4。
(11)callback,定义回调函数,和Timer.callback()功能相同
(12)deadtime,死区时间,通道切换时的停止时间(两个通道都不会工作)。范围是[0..1008],它有如下限制:
0-128 in steps of 1.
128-256 in steps of 2,
256-512 in steps of 8,
512-1008 in steps of 16
deadtime的测量是用source_freq 除以 div,它只对定时器1-8有效。
(13) timer.deinit(): 禁止定时器,禁用回调函数,禁用任何定时器通道
(14) timer.callback(fun): 设置定时器回调函数
(15) timer.channel(channel, mode, ...):设置定时器通道
-channel,定时器通道号
-mode,模式
-Timer.PWM,PWM模式(高电平方式)
-Timer.PWM_INVERTED,PWM模式(反相方式)
-Timer.OC_TIMING,不驱动GPIO
-Timer.OC_ACTIVE,比较匹配,高电平输出
-Timer.OC_INACTIVE,比较匹配,低电平输出
-Timer.OC_TOGGLE,比较匹配,翻转输出
-Timer.OC_FORCED_ACTIVE,强制高,忽略比较匹配
-Timer.OC_FORCED_INACTIVE,强制低,忽略比较匹配
-Timer.IC,输入扑捉模式
-Timer.ENC_A,编码模式,仅在CH1改变时修改计数器
-Timer.ENC_B,编码模式,仅在CH2改变时修改计数器
-callback,每个通道的回调函数
-pin,驱动GPIO,可以是None
在 Timer.PWM 模式下的参数
-pulse_width,脉冲宽度
-pulse_width_percent,百分比计算的占空比
在 Timer.OC 模式下的参数
-compare,比较匹配寄存器初始值
-polarity,极性
-Timer.HIGH,输出高
-Timer.LOW,输出低
在 Timer.IC 模式下的参数(捕捉模式只有在主通道有效)
-polarity
-Timer.RISING,上升沿捕捉
-Timer.FALLING,下降沿捕捉
-Timer.BOTH,上升下降沿同时捕捉
Timer.ENC 模式:
-需要配置两个Pin
.使用 timer.counter() 方法读取编码值
.只在CH1或CH2上工作(CH1N和CH2N不工作)
.编码模式时忽略通道号
(16) timer.counter([value]): 设置或获取定时器计数值
(17) timer.freq([value]):设置或获取定时器频率
(18) timer.period([value]):设置或获取定时器周期
(19) timer.prescaler([value]):设置或获取定时器预分频
(20) timer.source_freq(): 获取定时器源频率(无预分频)
4、利用重力传感器控制LED亮度
这里我们选用非板载LED,将一个LED接到X1(A0)引脚,然后当板子向右倾斜时,LED越来越亮,当板子向左倾斜时,LED越来越暗。
LED接在了A0口,具体代码如下:
- # main.py -- put your code here!
- from pyb import Pin, Timer
-
- tm2=Timer(2, freq=200)
- led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A0)
- accel = pyb.Accel()
- while 1:
- x = accel.x()
- print(x)
- led3.pulse_width_percent(x*5)
复制代码
实现效果: