zoukankan      html  css  js  c++  java
  • 1.3. 硬件篇之IO口(视频连接)

    视频连接

    Input/Output简写为IO,有些地方也称为GPIO(General purpose Input Output),是单片机输入数据和输出数据的引脚或者叫接口。虽然IO口可以用作输入和输出,但在输入和输出时使用的底层电路是不一样的,比如用作输入的引脚往往配置为高阻态减少电流输入,这也是使用IO口前必须配置工作状态的原因。

    有些单片机的引脚不能用作输出,但仍延续IO的叫法,如esp32的IO34、IO35、IO36、IO39。

    wps1

    wps2

    如上图中,每个排针都有编号,如D2、D4等,这些排针的编号对应着单片机引脚的编号,控制软件通过编号控制排针的电平,这就是IO口。

    宏观上讲,程序中通过编号(如2对应D2口)实例化IO口,然后对IO口的赋值操作直接映射到IO口的电平上,如下例:

    from machine import Pin           #导入模块

    Led = Pin(2,Pin.OUT)               #编号2对应D2口

    Led.on()                         #D2输出高电平

    Led.off()                         #D2输出低电平

    对单片机控制,实际上就是对单片机的IO口控制,分为三种:

    1.3.1. 开关量控制

    单片机系统是数字系统,本质上IO口有且只有高电平、低电平两个状态,对应于于开关的ON、OFF状态,所以称为开关量。

    在3.3v的单片机系统中,IO口为1对应着引脚输出高电平3.3V,IO口为0对应着引脚输出低电平0V。(严格讲:这个说法并不准确,因为高低电平是满足TTL电平的区间值,如在3.3v系统中,大于3v的都是高电平,低于0.3v的都是低电平)。

    同理在5v的单片机系统中,IO口为1对应着引脚输出高电平5.0V,IO口为0对应着引脚输出低电平0V。

    其他类似,不一一列举。

    下图是单片机系统中LED的2种接法示意图,LED通过限流电阻接上电源,则可以点亮。LED的亮度与流经LED的电流成非线性正比,电流越大亮度越大。估算时,LED的压降按2.0v,如下式:

    wps3

    如,vcc=5v/R=1k时,i≈3MA。

    做为指示灯,LED一般工作在1MA左右(亮度适中)。

    wps4

    上图中LED的两种接法,对应两种控制方式:

    方式1,LED负极经由限流电阻接地,单片机IO接LED正极,IO=1时输出高电平,LED上电点亮,IO=0时输出低电平,LED两端均为低电平熄灭。LED点亮时,电流是从单片机流出的,称为拉电流。

    方式2,LED负极经由限流电阻单片机IO,LED正极端接电源,IO=1时输出高电平,LED两端均为高电平熄灭,IO=0时输出低电平,LED上电点亮。LED点亮时,电流是从电源流出的,最终流向单片机,称为灌电流。

    单片机对灌电流的耐受度高于拉电流,所以一般采用第二种模式。

    单片机IO口能承受拉电流、灌电流的能力是有限的,过大电流会造成单片机烧毁,这个承受能力称为单片机IO口的驱动能力。

    一般用于驱动LED等小功率器件没有问题,但驱动不了继电器等大功率器件。要驱动大功率器件,需要用到转换电路,如图是常用的功率转换器件--光耦的工作原理:

    wps5wps6wps7

    1.3.2. PWM模式

    PWM全称脉冲宽度调制(Pulse width modulation,PWM)技术,通过调整特定频率的矩形波占空比,达到控制的目的。

    PWM有两个主要参数,频率和占空比。频率反映的是IO口切换一次高、低电平的时间间隔。占空比反映的是在一次切换周期内,高、低电平的占比。

    占空比的小数范围是0~1。但单片机系统对小数运算会占用更多的资源,所以往往用整形替代,比如micropython中使用0~1023的整形对应0~1的小数,相当于把0~1分成1024份,并一一对应。

    直接影响是占空比的计算方式随取整区间变化,如下图所示的案例中,时间间隔t=1S对应的是频率f,f=1/t。0.75s对应的是占空比duty,在这个实验条件下duty=((0.75*1024/t)-1)=767。

    wps8

    备注:占空比duty在不同的技术平台下可用赋值区间不同。

    1.3.3. 模拟量控制

    更进一步,在PMW输出的方波尾端增加低通滤波器,经过低通滤波后将输出一个恒定的电压值,该电压值与占空比成线性关系,这就是DAC转换。

    在现有实验条件下,相当于把3.3v的高电平分成1024小段,每一段对应这一个电平。

    有些单片机的特定IO口集成了DAC转换功能,设定指定的值会自动转换为对应的模拟量输出。

    1.3.4. IO口编号

    不同的单片机采用不同的IO口编号模式,如stm32单片机有GPIOA、GPIOB...,Esp32单片机有IO0、IO1...。

    不同的编程环境也有不同的编号方式,如micropython中采用顺序编号,arduino对应stm32单片机时则采用pa0、pa1...等类似编号。

    根据单片机及编程环境,选择适用的编号,则可以直接操控单片机对应的IO口。

    ----*----*----*----*----*----*----*----*----*----*----*----
    史久超 email:shijiuchao1983@163.com tel:15999550975 qq:157185173
  • 相关阅读:
    Jeesite 自定义api接口 404 访问不到页面
    Eclipse中项目Project Explorer视图与Package Explorer视图
    PHP linux ZendGuardLoader.so: undefined symbol: executor_globals
    Linux block(1k) block(4k) 换算 gb
    Gogs 部署安装(Linux)
    搭建gogs常见问题
    Gogs 部署安装(windows)
    Long polling failed, will retry in 16 seconds. appId: zeus-guard, cluster: default, namespaces: application, long polling url: null, reason: Get config services failed from···
    Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    top命令详析及排查问题使用演示
  • 原文地址:https://www.cnblogs.com/horal/p/15526750.html
Copyright © 2011-2022 走看看