写在前面
最近请教了一位前辈,终于搞明白用AD做按键扫描转换值的计算方法,这里写一篇博客加深下印象顺便给大伙儿分享一下。
总的来说,无论是用AD扫描按键还是用AD检测温度,湿度,亮度……原理都是利用电阻值不同来使转换出来的AD值不同,然后在程序中对这些值做判断从而识别出是哪一个按键按下或是温度等数值。
还是用上篇博客的按键扫描来做举例,电路图如下:
CN7这边,每条线都是通过串联一个10K的电阻到VCC,以一个AD扫描口做分析,四个按键通过导线或电阻连接到单片机IO口,同时还通过一个10K的电阻连接到VCC,这样按键这条路与10K的电阻就会分压,然后单片机IO口通过检测电压的大小来转换成一个相应的AD值,计算的式子为Vout=VCC*[Rx/(Rx+10K)],其中Rx代表的是与按键串联的分压电阻+按键内阻(忽略不计)。
这样假设我们什么键也没有按下,相当于IO口直接接了一个上拉电阻到VCC上,单片机IO口被置为高电平,电压理论上为5V,AD转换出来的值也为最大值255(这段是我自己的理解,如果有误,希望大神能别嫌麻烦,一定要在评论区指出)。
如果按下了10K的按键,这时候Rx大约为1/2VCC,单片机IO口检测出来的电压也大约只有1/2VCC,所以按照比例,转换出来的八位数据为256*1/2=128。
同理39K则为(39/(39+10))*256=203……如果按下了没有串联分压电阻的那一路按键,那么转换出来的值就直接为0,因为单片机IO口直接被地线拉低(这里不确定,是个人猜想)
其他的类似热敏,光敏……都是根据不同的温度,亮度……阻值不一样来给单片机IO口送入不同大小的电压,使值区分从而对应到温度或是其他我们需要得到的值。
下面是一个热敏电阻接到单片机IO口做AD检测电路,这个电路以后等请教过前辈之后会再写一篇博客作解析,原理应该都是跟上面说的那种方法类似,如果有大神能在评论区写下分析,我将不胜感激。