gpio 扩展能扩展为开光量输入输出吗

开关量信号,最全面的开关量信号文章 - 电子工程世界网
开关量信号
在电子工程世界为您找到如下关于“开关量信号”的新闻
开关量信号资料下载
&示波器的使用实验1.了解示波器的主要结构和显示波形的基本原理。2.学会使用示波器和信号发生器。3.用示波器观察李萨如图形以及利用李萨如图形测量正弦信号的频率。实验器材通用示波器,低频信号发生器、连接线等。实验原理电子示波器(简称示波器)能够简便地显示各种电信号的波形,一切可以转化为电压的电学量和非电学量及它们随时间作周期性变化的过程都可以用示波器来观测,示波器是一种用途十分广泛...
单元的衰减步进量不断缩小,精度相应提高。大频率范围的高精度衰减器和高精度信号输出属于高科技技术,这也是国内很少有企业能制造高端信号发生器的原因之一。信号发生器的信号输出范围和输出电平的精度和准确度也是标志信号发生器性能的重要指标。
  信号发生器的分类与用途
  信号发生器按传统工作频段分类,有超低频信号发生器、低频信号发生器、高频信号发生器、微波信号发生器。
  超低频信号发生器一般是指工作频率...
将8 位数据字移入或移出Neuron 芯片,并通过定义网络变量实现与其他节点通讯。节点设计简单,常规芯片与先进技术结合实现开关量的处理。关键字:LONWORKS;开关量;神经元芯片在一个控制系统的设计中,往往要采集很多开关量设备的状态信息或要控制开关量设备的启停等,这就要对大量的开关量信号进行处理。对开关量的处理可采取不同的方法。一是早期的采用按钮开关及继电器处理,这种方法自动化程度低;二是采用专用...
了软件流程图以及设计中应该注意的地方。整个系统由DSP板和ADC板组成。DSP板完成PWM生成、PID运算、环境开关量检测、环境开关量生成以及本地控制。ADC板主要完成前馈电压信号采集、负载电压信号采集、负载电流信号采集、以及对信号的一阶数字低通滤波。由于整个系统是闭环控制系统,要求采样速率相当高。本系统采用FPGA来控制ADC,这样就避免了高速采样占用系统资源的问题,减轻了DSP的负担。DSP...
了软件流程图以及设计中应该注意的地方。整个系统由DSP板和ADC板组成。DSP板完成PWM生成、PID运算、环境开关量检测、环境开关量生成以及本地控制。ADC板主要完成前馈电压信号采集、负载电压信号采集、负载电流信号采集、以及对信号的一阶数字低通滤波。由于整个系统是闭环控制系统,要求采样速率相当高。本系统采用FPGA来控制ADC,这样就避免了高速采样占用系统资源的问题,减轻了DSP的负担。DSP...
)。膺数字传感器——将被测量的信号量转换成频率信号或短周期信号的输出(包括直接或间接转换)。开关传感器——当一个被测量的信号达到某个特定的阈值时,传感器相应地输出一个设定的低电平或高电平信号。...
在单片机应用系统中,有时需要采集大量的开关信号,由于信号多且接入方式不同,使得电路较复杂,占用了单片机大量资源,数据采集软件的开发量也较大。笔者用纯数字电路设计了一个特别适合于远程大数据量采集的电路(最大可采集1024个开关量,附图所示电路可采集192个开关量)。电路由双二进制加法计数器CD4520、译码器74LS138、缓冲驱动器74LS244等组成。NE555产生的脉冲加到计数器D1的CP1...
/O电路和装置PLC (Programmable Logic Controller):用于完成与逻辑运算有关顺序动作的I/O控制,它由硬件和软件组成;机床I/O电路和装置:实现I/O控制的执行部件(由继电器、电磁阀、行程开关、接触器等组成的逻辑电路;功能:接受CNC的M、S、T指令,对其进行译码并转换成对应的控制信号,控制辅助装置完成机床相应的开关动作接受操作面板和机床侧的I/O信号,送给CNC装置...
: 直流电压过低会造成断路器保护动作不可靠及自动装置动作不准确等现象产生。直流电压过高会使长期带电的电气设备过热损坏。处理:1.运行中的直流系统,若出现直流母线电压过低的信号时,值班人员应设法检查并消除,检查浮充电流是否正常?直流负荷突然增大时,应迅速调整放电调压器或分压开关,使母线电压保持在正常规定。2.当出现母线电压过高的信号时,应降低浮充电电流使母线电压恢复正常。(中、5)27.变压器有那几...
作。  CPU速度和内存容量是PLC的重要参数,它们决定着PLC的工作速度,IO数量及软件容量等,因此限制着控制规模。    四、I/O模块    PLC与电气回路的接口,是通过输入输出部分(I/O)完成的。I/O模块集成了PLC的I/O电路,其输入暂存器反映输入信号状态,输出点反映输出锁存器状态。输入模块将电信号变换成数字信号进入PLC系统,输出模块相反。I/O分为开关量输入(DI),开关量输出(DO...
开关量信号相关帖子
模式开关,也可以通过手机远程选择模式。
自动报警:当任何一台电机故障时,或当水质数据不在设定区间持续5分钟以上。
报警方式:警示灯闪烁,同时蜂鸣器启动,液晶屏和后台都报告相应信息。
通过传感器采集水质指标数据:池塘一定深度的溶氧量、水温、酸碱度pH值,
自控组件的液晶屏上实时显示水质数据等,同时传回后台服务器。
地图定位信息传回后台服务器。一台增氧机对应的鱼塘水域...
组件上配有模式开关,也可以通过手机远程选择模式。
自动报警:当任何一台电机故障时,或当水质数据不在设定区间持续5分钟以上。
报警方式:警示灯闪烁,同时蜂鸣器启动,液晶屏和后台都报告相应信息。
通过传感器采集水质指标数据:池塘一定深度的溶氧量、水温、酸碱度pH值,
自控组件的液晶屏上实时显示水质数据等,同时传回后台服务器。
地图定位信息传回后台服务器。一台增氧机对应...
有同步信号输出接口。(5)其他a 除电源总开关外,加入一个电池开关,用于保护与控制更保险。b 电池可以单独拆卸选加。c 吸烟过滤扇,可以单独拆卸外加。d 电源适配器功率为200W,可以单独拆卸.出差时可不带,使电池供电。e 电池为24节V锂电池。各个电池用电池盒方式组装,所以单个电芯可以单独拆卸,有均充功能。2200MA/3.7V,24节电池的充电时间为4.5小时左右。使用时间...
一、工控电路板电容损坏的故障特点及维修
电容损坏引发的故障在电子设备中是最高的,其中尤其以电解电容的损坏最为常见。
电容损坏表现为:1.容量变小;2.完全失去容量;3.漏电;4.短路。
电容在电路中所起的作用不同,引起的故障也各有特点。在工控电路板中,数字电路占绝大多数,电容多用做电源滤波,用做信号耦合和振荡电路的电容较少。用在开关电源中的电解电容如果损坏,则开关电源可能不起振,没有电压...
异步电动机的数学模型,计算与控制异步电动机的磁链和转矩,采用离散的两点式调节器(Band-Band控制),把转矩检测值与转矩给定值作比较,使转矩波动限制在一定的容差范围内,容差的大小由频率调节器来控制,并产生PWM脉宽调制信号,直接对逆变器的开关状态进行控制,以获得高动态性能的转矩输出。它的控制效果不取决于异步电动机的数学模型是否能够简化,而是取决于转矩的实际状况。它不需要将交流电动机与直流电动机...
的冷地, 如果开通时MOS的dv/dt大于关断时的dv/dt, 则Y电容连接到初级的地; 反之连接到V+。
三、共模电感的作用
抑制共模杂讯,电感量越大,抑制低频杂讯效果越好。增加共模电流部分的阻抗,减小共模电流。
四、差模电感的作用
抑制差模杂讯,电感量越大,抑制低频杂讯效果越好。
※开关电源设计前的一般应对策略
一、采用交流输入EMI滤波器
通常干扰电流在导线上传输时有两种方式...
视频图像。本系统配合视频监控、智能IC卡识别、智能语音提示、红外车辆定位、车辆行驶信号指示灯、自动栏杆机等智能测控模块,有效防止人为作弊,实现称重全过程的智能化、无人值守管理。
销售单位和收货单位可以通过手机衡器宝APP或者衡器宝网页交易明细和电子钱包余额。
如企业内地磅计量终端比较多,且位置布局分散,本称重系统支持称重记录进行同一平台汇总管理。
一、特色、
◆可以根据含水量自动计算扣减...
同时被耦合到两条线上,而接收端关心的只是两信号的差值,所以外界的共模噪声可以被完全抵消。
b.能有效抑制EMI,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
c.时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号...
电气设备是指电力系统中发电机、变压器、断路器、电力线路等一系列的总称,根据传感器及不同测量方式可以对电气设备运行状态的物理量和化学量进行反映的一种方式,即电气设备的状态监测。这种电气设备状态监测方式和故障诊断技术是一种新型交叉学科,目前我国电气行业对这方面的应用研究还处于初级水平,随着科学技术的不断发展,信号技术、计算机网络技术、传感技术与电子技术等在人们生活及工业生产中的广泛应用,从一定程度...
•6路独立的IEC (FT3)规范的采样值输出口
•6路模拟采集器输出IEC 60044-8串行报文,可用于测试MU装置
•12路独立可配置的弱信号模拟量输出端子,可用于测试弱信号输入的保护
•自动解析保护模型文件(SCD、ICD、CID、NPI),实现对采样值、采样通道信息、GOOSE信息的自动配置...
开关量信号视频
你可能感兴趣的标签
热门资源推荐查看: 7482|回复: 13
威望1784 金钱2694 贡献1760 买家信用卖家信用最后登录精华0积分9032阅读权限100注册时间帖子
贡献1760 金钱2694 威望1784 买家信用卖家信用积分9032
本帖最后由 tll 于
13:18 编辑
Cubieboard的GPIO能控制电压,不再是单纯的开关了!
以前看过我帖子()的人都知道,以前我说GPIO的输出只能有0,1(虽然是完美驱动),输入也只能判断是否&3.22v,所以控制东西只有开关,不能调电压,但是现在不同,我成功控制了GPIO的电压,用的是软PWM,很简单(硬PWM暂时没找到使用方法,据说也很方便)
我是用php来弄
sudo apt-get install php5 php5-cli -y
安装PHP5和命令
then,nano /gpio.php
输入:&?php
echo &GPIO writer on cubieboard by TLL&;
echo &\n&;
echo &Please make sure your PHP server can edit /sys directory&;
echo &\n&;
$a=0;
while($a&1000){
if($a & 300){
if($a%3==0){
`echo 1 & /sys/class/gpio/gpio2_pd2/value`;
}else{
`echo 0 & /sys/class/gpio/gpio2_pd2/value`;
}
}else if($a & 600){
if($a%3!=0){
`echo 1 & /sys/class/gpio/gpio2_pd2/value`;
}else{
`echo 0 & /sys/class/gpio/gpio2_pd2/value`;
}
}else{
`echo 1 & /sys/class/gpio/gpio2_pd2/value`;
}
$a++;
}
`echo 0 & /sys/class/gpio/gpio2_pd2/value`;
echo &finish!&;
echo &\n&;
?&复制代码确认你按我以前帖子(上面)的步骤弄好了GPIO的驱动【需要配置gpio2为pd2】,将pd2与GND间连个LED,正负极记得别反了,然后运行php /gpio.php,看看LED的亮度是否有变化,一般会从灭到低到中到高再到灭,不是吗?
注释[PS]:
1 视频里的程序,用的是老版本的程序,只有0,低,中,没有高。
2 变化时会闪说明你cb的GPIO处理速度有点慢
我可能一年内都无法再登录这个论坛了
威望305 金钱815 贡献344 买家信用卖家信用最后登录精华2积分1979阅读权限200注册时间帖子
贡献344 金钱815 威望305 买家信用卖家信用积分1979
哥们,有你的。软pwm。哈哈,支持。
威望385 金钱1056 贡献389 买家信用卖家信用最后登录精华5积分2486阅读权限100注册时间帖子
贡献389 金钱1056 威望385 买家信用卖家信用积分2486
好样的~ 继续探索下硬PWM?。
很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
威望1784 金钱2694 贡献1760 买家信用卖家信用最后登录精华0积分9032阅读权限100注册时间帖子
贡献1760 金钱2694 威望1784 买家信用卖家信用积分9032
WindLand 发表于
好样的~ 继续探索下硬PWM?。
正在想办法
我可能一年内都无法再登录这个论坛了
威望1398 金钱3266 贡献1398 买家信用卖家信用最后登录精华0积分7707阅读权限100注册时间帖子
贡献1398 金钱3266 威望1398 买家信用卖家信用积分7707
软件模拟PWM耗资源,虽然这个板子硬件资源够强,但是硬件PWM更加稳定,加油!顶你
俺的小站:
欢迎来访!
不要一味的索取,饮水要思源,回报社区
威望1784 金钱2694 贡献1760 买家信用卖家信用最后登录精华0积分9032阅读权限100注册时间帖子
贡献1760 金钱2694 威望1784 买家信用卖家信用积分9032
SUNROC1 发表于
软件模拟PWM耗资源,虽然这个板子硬件资源够强,但是硬件PWM更加稳定,加油!顶你 ...
没驱动,所以只能软PWM
我可能一年内都无法再登录这个论坛了
威望152 金钱373 贡献152 买家信用卖家信用最后登录精华0积分862阅读权限100注册时间帖子
贡献152 金钱373 威望152 买家信用卖家信用积分862
不要标题党。这是什么PWM. 会把CPU耗光的。 这种方法就算你写到内核里都无实用价值。
威望1784 金钱2694 贡献1760 买家信用卖家信用最后登录精华0积分9032阅读权限100注册时间帖子
贡献1760 金钱2694 威望1784 买家信用卖家信用积分9032
jarry 发表于
不要标题党。这是什么PWM. 会把CPU耗光的。 这种方法就算你写到内核里都无实用价值。 ...
现在没驱动,等硬PWM出来了就不会了,现在只能用软PWM,等等吧
我可能一年内都无法再登录这个论坛了
威望12 金钱102 贡献12 买家信用卖家信用最后登录精华0积分155阅读权限20注册时间帖子
注册会员, 积分 155, 距离下一级还需 45 积分
贡献12 金钱102 威望12 买家信用卖家信用积分155
datasheet第9章不就是pwm吗?
威望1784 金钱2694 贡献1760 买家信用卖家信用最后登录精华0积分9032阅读权限100注册时间帖子
贡献1760 金钱2694 威望1784 买家信用卖家信用积分9032
chopin1998 发表于
datasheet第9章不就是pwm吗?
那个讲的是硬件原理和方案,我们现在没法直接在shell里面控制
我可能一年内都无法再登录这个论坛了
Powered by
| Style by【图片】基于树莓派网络服务器(LAMP)+GPIO实现远程控制电器开关的实验_树莓派吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:43,338贴子:
基于树莓派网络服务器(LAMP)+GPIO实现远程控制电器开关的实验收藏
楼主入手Pi 快一年了,其中各种折腾。后来突发奇想,可以做做远程控制,于是开始动手了,用了几天时间,完成了一项简单的远程控制实验,二楼先贴实验成果视频(实验目前止步于控制GPIO输出,我认为如果不是想要在家实现远程控制电器这个功能的话已经不必再去接继电器和220v电压和灯泡什么的了,到这一步已经证明可行度了)。
承办方:丽江市体育局 丽江斐瑞康网络科技有限公司
视频地址:由于是用树莓派在家搭的服务器和使用花生壳免费域名解析的地址,所以可能会在某些时候访问不了以及观看视频效果会不好。稍后我将视频放到土豆,再贴链接。基本做法如网页上所描述:通过php写mysql数据库,再在服务器上使用C++循环查询最新值,从而改变GPIO状态...不过这样做的话最明显的问题就是树莓派上运行的那个程序会一直不停地查询数据库,消耗资源。。。如果控制点多了的话,不知道会不会出问题。只是想到此办法简单。。。但或许能抛砖引玉,大神们若有更好的思路,可以交流交流。。。
再贴一个我的树莓派服务器主页:
实验成果视频by土豆- -视频来自:
讲一下我的实验过程:1.在树莓派上搭建LAMP(Linux,Apache,Mysql,PHP)环境:参考网上教程:2.建站详细请参考 吧友
的帖子,传送门:(特别鸣谢哦)
3.好了,接下来你的网站已经搭建好了,开始写PHP:&!DOCTYPE html&&?phpsession_start();if (empty($_SESSION['views'])){header(&location:login.php&);}?&//这一部分代码是做了一个session的判断,如果访问者没有经过login页面登录的话,让他回去登录一下下,我可不想让任何人都能控制我的led灯→_→&html&&body&&div align=&center&&&?php$con = mysql_connect(&localhost:3306&/*mysql服务器地址*/,&xxxxx&/*mysql服务器用户名*/,&xxxxx&/*mysql服务器密码*/);if (!$con)//连接状态的判断
{die('Could not connect: ' . mysql_error());
$sql = &SELECT max(ID)from my_db.Contrltable&;
//这里是做了一个查询最后(新)一行的数据编号$result=mysql_query($sql,$con);$Max_ID=mysql_result($result,0);//然后把查询到的最新数据放到变量Max_ID中$sql = &SELECT * from my_db.Contrltable where ID=$Max_ID&;//然后去查询这个最新的编号中的数据$result=mysql_query($sql,$con);$CtrlStatus=mysql_result($result,0,CtrlStatus);//然后将这个数据存放到CtrlStatus变量中mysql_select_db(&xxxx&/*数据库名字*/,$con);//选择数据库
if(!empty($_POST['turnon'])) //点击按钮后才执行
if ($CtrlStatus&1)
$CtrlStatus=1;
else if ($CtrlStatus&0)
$CtrlStatus=0; }//以上是做一个按一下开再按一下关的按钮= = $User=$_SESSION['views'];//从login页面会存储一个$_SESSION['views']的相当于是PHP全局变量的值,把他传给User,待会儿再把这个User插入到数据库中,用来查看当时是谁操作了我的GPIO echo &&br&&/br&&;
$sql = &INSERT INTO Contrltable (CtrlStatus,user)
VALUES($CtrlStatus,'{$User}')&;
//数据库insert语句
if (mysql_query($sql,$con))//执行,并判断是否执行成功
if($CtrlStatus&1)//若成功,给出相应的反馈(这里CtrlStatus=0为开启输出)
echo &Turn on completed!&br&&/br&&;
else if ($CtrlStatus&0)
echo &Turn off completed!&br&&/br&&;
echo &Failed!&;
}mysql_close($con);//关闭连接?&&form action=&& method=&post&&&input type=&hidden& id=&1& name=&turnon& value=&& /&//定义一个隐藏的输入框,用来做按钮触发(POST)&input type=&submit& name=&button& value=&On/Off& /&//按钮&/form&&script type=&text/javascript&&//这个js是为了避免一登入这个页面就会执行- -反正挺乱的,管他呢,反正我又不是专业写网页的哈哈哈function f1(){num=123;document.getElementById('1').value=}function f2(){num=NULL;document.getElementById('1').value=}f1();&/script&&/div&&/body&&/html&
对了,还要讲一下数据库表- -,我的如下图:其中ID列是自增,ExTime列是读取服务器当前时间
4.OK,现在我得到了一个如下图的网页,看看是否点一下数据库中就会增加一条数据,如果OK,好的,那么可以进行下一步了。在树莓派上写一个查询不停地查询数据库看控制状态是否改变。
我这边使用的是C++,不知道Python可不可以连接mysql,没试过- -,有兴趣的你们可以研究研究。代码如下://sql.cc --connect mysql to get some data and control the GPIO,for RspberryPi#include &iostream&#include &mysql.h&#include &string&#include &stdlib.h&#include &sstream&#include &wiringPi.h&int status_temp=1;int main(void){MYSQL//MYSQL对象mysqlMYSQL_RES *//查询结果集结构体 resultMYSQL_ROW sql_//每行的数据集结构sql_rowint max_ID=0;int status=1;for(;;){mysql_init(&mysql);//初始化mysql_real_connect(&mysql, &localhost&, &root&, &123456&, &my_db&, 3306, NULL, 0);//连接数据库//获取最大ID值:string sql = &select max(ID) from Contrltable&;//sql语句//(mysql_query(&mysql, sql.c_str()))?(cout&&&query1&&&endl):(cout&&&query1 complete&&&endl);//是否执行成功,(返回0成功)mysql_query(&mysql, sql.c_str());result =mysql_store_result(&mysql);//结果集赋值if(result)//判断结果集是否为空{sql_row=mysql_fetch_row(result);max_ID=atoi(*sql_row);}//else//cout&&&Query the max of ID faule&&&mysql_free_result(result);//获取max_ID的CtrlStatus//select * from Contrltable where ID = max_ID:sout&&max_ID;string s1;s1=sout.str();sql = &select Ctrlstatus from Contrltable where ID=&;sql=sql+s1;//(mysql_query(&mysql, sql.c_str()))?(cout&&&query2&&&endl):(cout&&&query2 complete&&&endl);mysql_query(&mysql, sql.c_str());result =mysql_store_result(&mysql);if (result){sql_row = mysql_fetch_row(result);status=atoi(*sql_row);//cout&&&Status : &&&status&&&\t&;}//else//cout&&&Query the maxID's Ctrlstatus value faule&&&//cout&&mysql_free_result(result);mysql_close(&mysql);//操作GPIOif (status_temp==status)else{cout&&status&&&\t&&&status_temp&&status_temp=wiringPiSetup();pinMode (3, OUTPUT);if (status==0){digitalWrite(3,HIGH);cout&&&Turn on&&&}else{cout&&&Turn off&&&digitalWrite(3,
LOW);}}}return 0;}
OK,保存,加上wiringPi执行编译命令 g++ -o sql sql.cc -lwiringPi;卧槽,怎么报错了,一看,找不到头文件mydql.h....那么Mysql.h在哪儿呢- -,百度一下,找了半天发现,原来还要安装一个mysql的devel..坑爹啊,赶紧的,sudo apt-get install mysql-devel并且接下来编译要加上mysql的库:g++ -o sql sql.cc -lmysqlclient -I/usr/include/mysql/ -L/usr/lib/mysql -lwiringPi
学特色小吃哪家好? 找苏味轩 包教包会 一费到底 学2送2 自己创业做老板!
5.OK,编译通过后运行试试,sudo ./sql接上led,在任何可以上网的设备打开
http://域名/sql.php 摁一下按钮,看看led是否亮了!Congratulations!!!
想玩树莓派,不知道该怎么玩。一点基础都没有。
你直接用php的system函数调用编译好的C程序不就完了吗……
登录名填 jeremy' xor '1'='1密码随便,直接就登录进去了顺便帮你开了灯,不谢
顶一个!我准备买回来三代后用filemaker数据库来试试,比较简单一点!
可以使用nodejs部署站点,nodejs有支持wiring-pi的库,可以在同一个程序中操作GPIO,这样就不需要用C++反复查询数据库了
lz这个比较耗费资源,可以看看我做的
能分享一下经验吗? 我也想弄这个 我的名字和你差不多
也是基于树莓派的只能开关控制设计
能加你扣扣吗?
能加我扣扣吗
我现在想弄这个但是不懂 希望大师指点一二
登录百度帐号推荐应用问题补充&&
本页链接:
猜你感兴趣对通用输入输出GPIO的深入理解 - CSDN博客
对通用输入输出GPIO的深入理解
/blog-83.html
GPIO的各种模式
& & GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出
& & 1. 高阻输入(Input)
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
图1.1 GPIO高阻输入模式结构示意图
& &为减少信息传输线的数目,大多数计算机中的信息传输线采用总线形式,即凡要传输的同类信息都在同一组传输线,且信息是分时传送的。在计算机中一般有三组总线,即数据总线、地址总线和控制总线。为防止信息相互干扰,要求凡挂到总线上的寄存器或存储器等,它的输入输出端不仅能呈现0、1两个信息状态,而且还应能呈现第三个状态----高阻抗状态,即此时好像它们的输出被开关断开,对总线状态不起作用,此时总线可由其他器件占用。三态缓冲器即可实现上述功能,它除具有输入输出端之外,还有一控制端。
& &如图1.1所示,为GPIO管脚在高阻输入模式下的等效结构示意图。这是一个管脚的情况,其它管脚的结构也是同样的。输入模式的结构比较简单,就是一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的输入等效阻抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。执行GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。
& & 2. 推挽输出(Output)
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
图1.2 GPIO推挽输出模式结构示意图
& &&&推挽输出原理:在功率放大器电路中大量采用推挽放大器电路,这种电路中用两只三极管构成一级放大器电路,两只三极管分别放大输入信号的正半周和负半周,即用一只三极管放大信号的正半周,用另一只三极管放大信号的负半周,两只三极管输出的半周信号在放大器负载上合并后得到一个完整周期的输出信号。&
  推挽放大器电路中,一只三极管工作在导通、放大状态时,另一只三极管处于截止状态,当输入信号变化到另一个半周后,原先导通、放大的三极管进入截止,而原先截止的三极管进入导通、放大状态,两只三极管在不断地交替导通放大和截止变化,所以称为推挽放大器()。&
& && & 如图1.2所示,为GPIO管脚在推挽输出模式下的等效结构示意图。U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时关闭,最后形成的是推挽输出。在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门U2。注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚Pin的状态。
& & 3. 开漏输出(OutputOD)
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&
图1.3 GPIO开漏输出结构示意图
& &&&如图1.3所示,为GPIO管脚在开漏输出模式下的等效结构示意图。开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到GND(有一定内阻)。回读功能:读到的仍是输出锁存器的状态,而不是外部管脚Pin的状态。因此开漏输出模式是不能用来输入的。
& & 开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.7~10kΩ)。开漏输出能够方便地实现“线与”逻辑功能,即多个开漏的管脚可以直接并在一起(不需要缓冲隔离)使用,并统一外接一个合适的上拉电阻,就自然形成“逻辑与”关系。开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额外的转换电路。典型的应用例子就是基于开漏电气连接的I2C总线。
& & 4. 钳位二极管
& & GPIO内部具有钳位保护二极管,如图1.4所示。其作用是防止从外部管脚Pin输入的电压过高或者过低。VDD正常供电是3.3V,如果从Pin输入的信号(假设任何输入信号都有一定的内阻)电压超过VDD加上二极管D1的导通压降(假定在0.6V左右),则二极管D1导通,会把多于的电流引到VDD,而真正输入到内部的信号电压不会超过3.9V。同理,如果从Pin输入的信号电压比GND还低,则由于二极管D2的作用,会把实际输入内部的信号电压钳制在-0.6V左右。
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
图1.4 GPIO钳位二极管示意图
& & 假设VDD=3.3V,GPIO设置在开漏模式下,外接10kΩ上拉电阻连接到5V电源,在输出“1”时,我们通过测量发现:GPIO管脚上的电压并不会达到5V,而是在4V上下,这正是内部钳位二极管在起作用。虽然输出电压达不到满幅的5V,但对于实际的数字逻辑通常3.5V以上就算是高电平了()。
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
图1.5 解决开漏模式上拉电压不足的方法
& &&&如果确实想进一步提高输出电压,一种简单的做法是先在GPIO管脚上串联一只二极管(如1N4148),然后再接上拉电阻。参见图1.5,框内是芯片内部电路。向管脚写“1”时,T1关闭,在Pin处得到的电压是3.3+VD1+VD3=4.5V,电压提升效果明显;向管脚写“0”时,T1导通,在Pin处得到的电压是VD3=0.6V,仍属低电平
漏极开路的分析
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
电力场效应管又名电力场效应晶体管分为结型和绝缘栅型,通常主要指绝缘栅型中的型(),简称电力(),结型电力场效应晶体管一般称作静电感应晶体管()。
& &A:我们先来说说集电极开路输出的结构。集电极开路输出的结构如图所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“”时,输出也为“”)。对于图,当左端的输入为“”时,前面的三极管截止(即集电极跟发射极之间相当于断开),所以电源通过电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。
我们将图简化成图的样子。图中的开关受软件控制,“”时断开,“”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。
再看图三。图三中那个的电阻即是上拉电阻。如果开关闭合,则有电流从电阻及开关上流过,但由于开关闭和时电阻为(方便我们的讨论,实际情况中开关电阻不为,另外对于三极管还存在饱和压降),所以在开关上的电压为,即输出电平为。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为,因此在电阻上的压降也为,所以输出端的电压就是了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即Ω),如果接一个电阻为的负载,通过分压计算,就可以算得最后的输出电压为伏,即伏。所以,如果要达到一定的电压的话,就不能太小。如果真的太小,而导致输出电压不够的话,那我们只有通过减小那个的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。
如果我们将一个读数据用的输入端接在输出端,这样就是一个口了(的口就是这样的结构,其中口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为即可,这样就相当于那个开关断开,而对于口来说,就是高阻态了。
对于漏极开路()输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,就变成了,原理分析是一样的。
另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起或者来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的或输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态,单片机的一些口就是这种结构。
在平时的电路设计时我们会遇到开漏()和开集()的概念,可能大家在念书时就知道其基本的用法,而且在设计中也并未遇到过问题。但是我忽然觉得自己也对这个概念了解的并不系统。于是进行了以下总结:&所谓开漏电路的概念里提到的“漏”就是指的漏极,同理,开集电路中的“集”就是指三极管的集电极,开漏电路就是指以的漏极为输出的电路。一般的常规用法是会在漏极外部的电路添加一个上拉电阻。完整的开漏电路应该由开漏器件和开漏的上拉电阻组成。如下图中所示:
组成开漏形式的电路有以下几个特点:
1.&利用外部电路的驱动能力,减少内部的驱动。当内部导通时,驱动电流是从外部的流经,到。内部仅需很下的栅极驱动电流。如图。
2.&可以将多个开漏输出的,连接到一条线上。形成“与逻辑”关系。如图,当、、任意一个变低后,开漏线上的逻辑就为了。这也是,等总线判断总线占用状态的原理。
3.&可以利用改变上拉电源的电压,改变传输电平。如图的逻辑电平由电源决定,而输出高电平则由决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。
4.&开漏不连接外部的上拉电阻,则只能输出低电平。
5.&标准的开漏脚一般只有输出的能力。添加其它的判断电路,才能具备双向输入、输出的能力。
应用中需注意:
1.&开漏和开集的原理类似,在许多应用中我们利用开集电路代替开漏电路。例如,某输入要求由开漏电路驱动。则我们常见的驱动方式是利用一个三极管组成开集电路来驱动它,即方便又节省成本。如图。
2.&上拉电阻的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然!
(1)GPIO_Mode_AIN&模拟输入&&
(2)GPIO_Mode_IN_FLOATING&浮空输入
(3)GPIO_Mode_IPD&下拉输入
(4)GPIO_Mode_IPU&上拉输入
这三种输入电路是用那一种,要根据外围电路来决定。
所谓高阻,可以简单理解为输出端处于浮空状态没有电流流动,其电平随外部电平高低而定,即门电路放弃对输出端电路的控制。而上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。下拉同理,只不过上拉是对器件注入电流,下拉是输出电流。至于弱上拉和强上拉,只是上拉电阻的阻值不同,没有什么严格区分。简言之,上拉就是在端口没有输入的情况下,将端口的电平稳定在高电平。
(5)GPIO_Mode_Out_OD&开漏输出
(6)GPIO_Mode_Out_PP&推挽输出
(7)GPIO_Mode_AF_OD&复用开漏输出
(8)GPIO_Mode_AF_PP&复用推挽输出
GPIO_Speed_10MHz 最高输出速率10MHz
GPIO_Speed_2MHz 最高输出速率2MHz
GPIO_Speed_50MHz 最高输出速率50MHz
1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声 控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。比如:
? 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
? 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
? 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
1.2 GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。
1.3在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。
1.4所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。
1.5GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。
2、推挽输出与开漏输出的区别
& && &&&推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
& & 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.
& & 要实现 线与 需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出既可以向负载灌电流,也可以从负载抽取电流
当端口配置为输出时:
& &&&开漏模式:输出&0&时,N-MOS&导通,P-MOS&不被激活,输出0。
& && && && && && && &&输出&1&时,N-MOS&高阻,&P-MOS&不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。
& &&推挽模式:输出&0&时,N-MOS&导通,P-MOS&高阻
& && && && && && && &输出&1&时,N-MOS&高阻,P-MOS&导通,输出1(不需要外部上拉电路)。
简单来说开漏是0的时候接GND 1的时候浮空 推挽是0的时候接GND 1的时候接VCC
3、在STM32中选用IO模式
(1) 浮空输入_IN_FLOATING —浮空输入,可以做KEY识别,RX1
& &(2)带上拉输入_IPU—IO内部上拉电阻输入
(3)带下拉输入_IPD—IO内部下拉电阻输入& && && &
(4) 模拟输入_AIN —应用ADC模拟输入,或者低功耗下省电。
(5)开漏输出_OUT_OD —IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变 。可以读IO输入电平变化,实现C51的IO双向功能。
&&(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的。
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
实例总结:
(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先
GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用
GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用
带上拉输入_IPU和浮空输入_IN_FLOATING和 开漏输出_OUT_OD;
4、IO低功耗:
关于模拟输入&低功耗,根据STM32的低功耗AN(AN2629)及其源文件,在STOP模式下,为了得到尽量低的功耗,确实把所有的IO(包括非A/D输入的GPIO)都设置为模拟输入
本文已收录于以下专栏:
相关文章推荐
关于GPIO的上电复位后默认输出电平的影响
如果需要GPIO对某个模块的控制,比如振动马达的震动使能控制,LCD的背光使能控制,闪光灯的使能控制,耳机和喇叭功率放大器的输出控制。这些模块都比较敏感。...
GPIO端口各种模式的区别
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GP...
上拉输入:若GPIO引脚配置为上拉输入模式,在默认情况下(GPIO引脚无输入),读取 得的GPIO引脚数据位1,高电平。
下拉输入:若GPIO引脚配置为下拉输入模式,在默认情况下(GPIO引...
一.GPIO简介
    I/O(Input/Output)接口是一个微控制器必须具备的最基本外设功能。通常在ARM里,所有I/O都是通用的,称为GPIO(...
对通用输入输出GPIO的深入理解ARM技术 10:14:39阅读1评论0  字号:大中小 订阅一.GPIO简介        I/O(Input/Output)接口是一颗微控制器必...
GPIO的各种模式
    GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出
    1. 高阻输入(Input)
之前把所有程序都跑了一次后,得到了导师下一步的安排。如下:
1.编写一个程序,实现在LCD上显示一个万年历,包括年月日 星期 还有室内的温度。2.编写一个程序,将原来的交通灯改为跑马灯。
期限是这...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 树莓派3 gpio接口扩展 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信