创客神器NanoPi
直播中

辉哥的歌

9年用户 235经验值
擅长:电源/新能源 MEMS/传感技术 嵌入式技术 连接器 存储技术 处理器/DSP 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【NanoPi M2试用体验】我的"潘多拉魔盒" 7——遥控器按键电平检测威廉希尔官方网站 改进设计

本帖最后由 辉哥的歌 于 2016-5-31 15:09 编辑

1      电平检测问题
在第5讲“我的‘潘多拉魔盒’5— 简易遥控器开发中,完成了项目的简易遥控器的硬件连接和按键控制的软件程序开发。然而在进一步测试的时候,出现了输入电平跳变的问题。按键在不按的时候,对应引脚的电平发生间隔性跳变,如图1所示。GPIO31 (pin63) 在按键不按时发生高低电平跳动现象,如画红线的部分就是检测到的由高电平跳到低电平的情况。
这种现象将直接影响小车的控制质量,会发生小车在不控制时出现步进行驶情况。因此,必须要解决这个问题。原本以为是NanoPi M2的引脚驱动没写好有bug,但检查几遍发现貌似不是软件程序问题。经过返查威廉希尔官方网站 和思考,我发现我的按键威廉希尔官方网站 设计出现了一个Bug:
按键状态:(1)低电平;(2)空。因为按键不按时,对应引脚悬空,按下时给低电平。
7-1
1 按键不按时输入引脚电平间隔性跳变
按键引脚连接如图2所示:

7-2

图2 按键不按时对应引脚悬空无输入
为了解决这个问题,需要进行按键威廉希尔官方网站 改进设计,达到如下目的:
  
序号
  
操作
引脚状态
1
按键松开
低电平
2
按键按下
高电平
2      按键改进威廉希尔官方网站
要改进威廉希尔官方网站 设计首先得明白什么是高电平和低电平,由于NanoPi采用的是TTL电平定义方式,如下所示:
  
输入输出类型
  
高电平
低电平
输出
>2.4V
<0.4V
输入
>=2.0V
<=0.8V

按键操作为输入操作,只要输入电压低于0.8V就是低电平,输入电压高于2.0V就是高电平。因此,采用电阻分压的方式,让按键松开时依然形成通路,而不是悬空状态,只要将输入NanoPi对应引脚的电压低于0.8V即可,对应原理如图3所示。当按键按下时,将电阻部分短路,而直接将3.3V引入GPIO32引脚;当按键松开时,接GPIO的引脚电压为R2两端的电压,只要选择合理的电阻就能实现低电平输入,R1选择一个大电阻,R2选择一个小电阻,只要满足如下表达式即可:
7-11
由于我手头电阻有限,这里R1选择了470kΩ的色环电阻,R2选择了10Ω的色环电阻,显然是满足要求的。
7-3
图3 按键改进设计原理
改进之后的局部连接威廉希尔官方网站 如图4所示:
7-4
图4 改进后连接示意图
改进后硬件连接情况如图5所示:
7-5
5  改进后硬件连接测试图

3      设计改进后测试
完成威廉希尔官方网站 设计改进后,连接NanoPi M2进行测试,选用GPIO31为按键输入引脚,GPIO30为LED灯输入引脚,要求:GPIO31为高电平时,LED灯点亮;GPIO31为低电平时,LED灯熄灭。并测试按键松开时LED灯是否闪烁,若不闪烁说明改进成功。
试验结果如图6-8所示:
7-6
6  按键不按时输入电平不再发生跳变
7-7
7  按键按下时灯亮输入电平无跳变
按键不按时:LED灯不亮,GPIO3130电平都为0,且不再发生跳变;
按键按下时:LED灯点亮,GPIO3130电平都为1,也没有发生跳变;
所以,遥控器的设计改进很成功。
7-8
8  改进后按下按键点亮LED
试验过程所采用的开发环境为Geany,采用的语言为Python语言,如图9所示。程序代码如图10所示。
7-9
9 Geany开发环境下用Python语言

7-10
10  试验测试Python程序
4      总结
至此第7讲结束,完成了遥控器按键电平检测威廉希尔官方网站 改进设计,使得按键能够实现稳定的控制。下一节将正式进行无线通信的开发,通过NanoPi M2与小车控制器进行无线通信从而控制小车的运动。

回帖(3)

1158189985

2016-7-5 20:17:01
你好,请问你有遇到cleanup不好用的情况么
代码如下
#!/usr/bin/env python3
# -*- coding:UTF-8 -*-   
mport gpio
gpio.setup(62,'out')
gpio.set(62,1)
print('See you!')
gpio.cleanup(62)
举报

辉哥的歌

2016-7-5 20:23:24
引用: 1158189985 发表于 2016-7-5 20:17
你好,请问你有遇到cleanup不好用的情况么
代码如下
#!/usr/bin/env python3

这个库的确有这个问题,我也遇到过,有时这个引脚释放不掉
举报

1158189985

2016-7-5 21:40:21
引用: 辉哥的歌 发表于 2016-7-5 20:23
这个库的确有这个问题,我也遇到过,有时这个引脚释放不掉

好的,谢谢
请问你是怎么解决的呢?
而且我的代码在cleanup那里会报错,但是释放别的引脚就不了,比如gpio.cleanup(63)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分