[TPYBoard - Micropython之会python就能做硬件 5] 学习使用重力传感器及PWM

简介: 转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604   一、实验器材 1、TPYboard V102板  一块 2、LED灯   一个 3、1602 屏 一块   二、重力传感器         TPYboard与pyboard一样,本身带一个重力传感器。

转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604

 

一、实验器材

1TPYboard V102板  一块

2LED灯   一个

31602 屏 一块

 

二、重力传感器

        TPYboardpyboard一样,本身带一个重力传感器。该传感器能够感知到加速的变化加速力就是当物体在加速过程中作用在物体上的力,比如晃动、跌落、上升、下降等各种移动变化都能被转化为电信号

       TPYBoard使用的是MMA7660重力传感器,主要用于检测XYZ三个轴所受到的加速度大小。检测范围是-1.5g ~ 1.5g,其中,g为一个重力加速度。

 

 

 

 

 

三、重力传感器的使用

 这里,我们做一个简单的实验,利用重力传感器,来判断tpyboard板子的旋转方向。当tpyboard向右转动时,亮led2(板载),灭led3,当向左转动时,亮led3(板载),灭led2

具体代码如下:

# main.py -- put your code here!
import pyb

accel = pyb.Accel()
while 1:
    x = accel.x()
    y = accel.y()
    z = accel.z()
    print(x,y,z)
    if x==4 :
        pyb.LED(2).off()
        pyb.LED(3).off()
    if x>4 :
        pyb.LED(2).on()
        pyb.LED(3).off()
    if x<4:
        pyb.LED(3).on()
        pyb.LED(2).off()

实现效果:

 

四、利用重力传感器控制LED亮度

1、什么是PWM

   PWM:脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM基本原理是控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

  例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于 ∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。

2、利用PWM调节LED灯亮度

   Tpyboard板子与pyboard是一致的,其pwmTimer的一种工作模式,它需要使用到TimerPin两个库。这里来看一下如何控制LED3(板载)的亮度。

代码:

from pyb import Pin, Timer

tm2=Timer(2, freq=100)
led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15)
led3.pulse_width_percent(10)

此时LED3的亮度较暗,见图:

将上面代码中的pulse_width_percent=10改为100,再来看一下效果,会发现LED3亮度明显增强。

代码:

from pyb import Pin, Timer

tm2=Timer(2, freq=100)
led3=tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15)
led3.pulse_width_percent(100)

当然,也可以尝试改一下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-712-14最高频率是84MHz,定时器18-11是   >168MHz

 (5)peroid,周期值(ARR)。定时器1/3/4/6-15[0-0xffff],定时器25[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.PWMPWM模式(高电平方式)

          -Timer.PWM_INVERTEDPWM模式(反相方式)

          -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() 方法读取编码值

          .只在CH1CH2上工作(CH1NCH2N不工作)

          .编码模式时忽略通道号

 

 (16) timer.counter([value]): 设置或获取定时器计数值

 (17) timer.freq([value]):设置或获取定时器频率

 (18) timer.period([value]):设置或获取定时器周期

 (19) timer.prescaler([value]):设置或获取定时器预分频

 (20) timer.source_freq(): 获取定时器源频率(无预分频)

 

4、利用重力传感器控制LED亮度

 

  这里我们选用非板载LED,将一个LED接到X1A0)引脚,然后当板子向右倾斜时,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)

 

  实际效果:

 

 

 

目录
相关文章
|
1月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
301 0
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
169 1
|
1月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
259 1
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
145 4
|
2月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
4月前
|
算法 IDE 测试技术
python学习需要注意的事项
python学习需要注意的事项
268 57
|
4月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
4月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
4月前
|
监控 数据安全/隐私保护 Python
微信自动抢红包免费版,2025微信抢红包神器,微信红包挂苹果版【python仅供学习】
这个模拟项目包含5个模块:核心监控逻辑、用户界面、配置管理、实用工具和主程序入口