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

一、实验器材

1、TPYboard V102板  一块

2、LED灯   一个

3、1602 屏 一块

二、重力传感器

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

TPYBoard使用的是MMA7660重力传感器,主要用于检测X、Y、Z三个轴所受到的加速度大小。检测范围是-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是一致的,其pwm是Timer的一种工作模式,它需要使用到Timer和Pin两个库。这里来看一下如何控制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-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)

  实际效果:








[TPYBoard-Micropython之会python就能做硬件 5] 学习使用重力传感器及PWM的更多相关文章

  1. [TPYBoard - Micropython之会python就能做硬件 8] 学习使用蓝牙模块及舵机

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

  2. [TPYBoard - Micropython之会python就能做硬件 8] 学习使用超声波模块制作避障小车

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

  3. [TPYBoard - Micropython之会python就能做硬件 6] 学习使用OLED显示屏

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604 一.实验器材 1.TPYBoard板子一块 2.数据线一条 ...

  4. [TPYBoard - Micropython之会python就能做硬件 1] 运行第一个脚本——点亮LED

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 一.TPYBoard V102开发板 TPYBoard V102 ...

  5. [TPYBoard - Micropython之会python就能做硬件 开篇]会python就能做硬件!

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 在写这套教程之前,首先感觉山东萝卜电子科技有限公司(turnip ...

  6. [TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 感谢山东萝卜电子科技公司授权   一.实验器材 1.TPYboard V102板 ...

  7. [TPYBoard-Micropython之会python就能做硬件 4] 学习使用电位器和1602显示屏

    一.实验器材 1.TPYboard V102板  一块 2.电位器   一个 3.1602 屏 一块 4.杜邦线:若干 二.电位器的使用 电位器 (英文:Potentiometer)是可变电阻器的一种 ...

  8. [TPYBoard-Micropython之会python就能做硬件 7] 学习使用蓝牙模块及舵机

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604 一.实验器材 1.TPYboard V102板  一块 2 ...

  9. [TPYBoard-Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板  一块 2.DS3231 ...

随机推荐

  1. s3c2440的GPIO驱动

    多个通用的GPIO,同时这些端口也拥有一些复用功能(如ADC输入),有部分端口只能输入,有部分端口只能输出,今天我们来看看如何设置一个GPIO的输出电平以及如何获取一个端口的GPIO电平 对GPIO进 ...

  2. iOS开发UITableView基本使用方法总结 分类: ios技术 2015-04-03 17:51 68人阅读 评论(0) 收藏

    本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDa ...

  3. ios 自定义NSError

    from:[object-c错误处理]http://www.androiddev.net/objective-c%E5%AD%A6%E4%B9%A0%E4%B9%8B%E9%94%99%E8%AF%A ...

  4. mysql server的安装和配置

    YSQL-5.7.9.1解压版 例如我的在D:\Program Files\MySQL\MySQL Server 5.7(解压时名字mysql-installer-community-5.7.9.1可 ...

  5. IOS中单例NSUserDefaults的使用(转)

    一.了解NSUserDefaults以及它可以直接存储的类型 http://my.oschina.net/u/1245365/blog/294449 NSUserDefaults是一个单例,在整个程序 ...

  6. 今天学习了下,如何破解wifi

    破解了隔壁的wif,得罪了,哥哥要蹭网一段时间. 主要思路:安装linux环境.这里我选择了虚拟机加cdlinux .运行里面的min抓得握手包,然后淘宝花10元跑下包,因为自己的电脑不行,跑费时间太 ...

  7. asp.net实现断点续传

    C# 断点续传原理与实现 在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是 一种基于tcp的简单协议,分为请求和回复两种.请求协议是由 客户机(浏览器)向服务器(WEB ...

  8. Nodejs之发送邮件nodemailer

    nodejs邮件模块nodemailer的使用说明 1.介绍 nodemailer是node的一个发送邮件的组件,其功能相当强大,普通邮件,传送附件,邮件加密等等都能实现,而且操作也十分方便. nod ...

  9. javascript 备忘录

    JS语法 javascript 对象: var cars=new Array("Audi","BMW","Volvo"); 声明变量类型 当 ...

  10. Bonferroni校正法

    Bonferroni校正:如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个假设时的显著水平的1/n http://baike.baidu.com/view/12 ...