数码之家

 找回密码
 立即注册
搜索
查看: 2905|回复: 12

[C51] AD_KEY的检测问题。很怪异的问题和现象。

[复制链接]
发表于 2019-3-11 10:18:27 | 显示全部楼层 |阅读模式
请教高人们一个问题。AD_KEY的时候,碰上这么一种情况。                                                                 
用一个DA芯片当输出(面板上有10个按键,用DA输出10个按键的键值),用MCU的ADC来检测,判断是哪10个按键。结果发现,输出的时候,总是会有一个遍历的过程。                                                              
比如,AD值最大的是KEY-10,按下面板KEY-10,MCU这边检测到是KEY-10一直到KEY-1。按下KEY-3,这边就是KEY-3,KEY-2,KEY-1。以此类推。请问这是怎么回事?
用下面的机械按键,就没有这个现象,就是按一个KEY,MCU就检测到一个值。而不是从高到低的遍历。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2019-3-11 10:26:17 | 显示全部楼层
用示波器查看一下DA输出的波形
回复 支持 反对

使用道具 举报

发表于 2019-3-11 10:48:30 | 显示全部楼层
估计是按下Key_10时,电压最大,所以能捡测对应的按键动作。当松开Key_10时,DA输出电压慢慢变小,AD检测到这变压的电压都能满足KEY-9~KEY-1按键的电压值。

程序没有看到,不知是如何判断窗口电压的?看样子,好象没有窗口电压判断,估计只用了小于判断逻辑。
回复 支持 反对

使用道具 举报

发表于 2019-3-11 15:27:44 来自手机浏览器 | 显示全部楼层
估计是递减符合所有信号输出,
回复 支持 反对

使用道具 举报

发表于 2019-3-11 16:58:40 | 显示全部楼层
本帖最后由 简燕 于 2019-3-11 17:06 编辑

DA的输出阻抗高.例如,STM32的DAC模块,输出阻抗是1.5M.

如果负载的电容偏大,导致本应陡峭的边沿,变成缓慢的斜坡.当这个边沿时间远大于AD采样时间,AD就会采样到一系列变化的电压.

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-12 14:48:52 | 显示全部楼层
简燕 发表于 2019-3-11 16:58
DA的输出阻抗高.例如,STM32的DAC模块,输出阻抗是1.5M.

如果负载的电容偏大,导致本应陡峭的边沿,变成缓慢的 ...

靠。就是这个样子,但是也没大电容呀?碰到这种情况,程序要怎么处理呢?有思路吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-12 14:51:26 | 显示全部楼层
温力口 发表于 2019-3-11 10:48
估计是按下Key_10时,电压最大,所以能捡测对应的按键动作。当松开Key_10时,DA输出电压慢慢变小,AD检测到 ...

你好,请问这个窗口判断是什么样式的?能否给写个简要的框架呢?我现在的程序是,用<>大于号和小于号来判断的。
回复 支持 反对

使用道具 举报

发表于 2019-3-12 22:21:21 | 显示全部楼层
本帖最后由 简燕 于 2019-3-12 22:22 编辑
tianqi2001 发表于 2019-3-12 14:48
靠。就是这个样子,但是也没大电容呀?碰到这种情况,程序要怎么处理呢?有思路吗? ...

DAC这种高输出阻抗的器件,驱动能力得查芯片手册.一般来说,只能驱动几十pf的电容.如果DA与AD间的导线太长,其分布电容有可能超出DAC的驱动能力.

软件上的解决办法是,持续采集数据过程中,先判断是否为稳态数据,如果是稳态数据,解码键值,如果是暂态数据,继续采集,直至超时报错.
判断稳态数据的办法,是将当前值与上次历史值相减,误差绝对值小于设定的门限值,且多次采集计算(比如100次),误差都小于门限值,就可以认定为稳态数据.

或者用个更简单的办法,设定一个有数据/无数据的AD采样门限值,比如0.5V,高于0.5V认为有数据,直接延时一段时间(超过线路上电压稳定的时间),再去采集.
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-13 12:26:56 | 显示全部楼层
AD值变化小于一定值的时候,类似KEY类型的消抖,再去判断绝对AD值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-13 16:25:07 | 显示全部楼层
简燕 发表于 2019-3-12 22:21
DAC这种高输出阻抗的器件,驱动能力得查芯片手册.一般来说,只能驱动几十pf的电容.如果DA与AD间的导线太长, ...

非常感谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-13 16:27:10 | 显示全部楼层
qd0426 发表于 2019-3-13 12:26
AD值变化小于一定值的时候,类似KEY类型的消抖,再去判断绝对AD值

谢谢。不过不想加延时。
回复 支持 反对

使用道具 举报

发表于 2019-3-13 22:38:09 | 显示全部楼层
多采样几次求平均值,然后用SWITCH语句去判断采样值,不知这样行不行:lol:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-14 10:31:49 | 显示全部楼层
有大佬用过类似DA输出做AD按键的吗?头大了。只用过机械按键分压的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 17:19 , Processed in 0.124800 second(s), 8 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表