一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1116|回复: 26
收起左侧

请教关于avr内部模拟比较器的使用

[复制链接]
发表于 2017-4-21 12:29 来自手机 | 显示全部楼层 |阅读模式
我有这么一个需求,mcu检测外部电压,当电压值超过某个阈值的时候,mcu就输出控制电平。
这里面有两点考虑,一是比较阈值可以调整。二是反应尽可能的快,所以我想是不是用中断处理会比较快。
查到AVR里有个模拟比较器,同相端接待检测电压,反相端接比较基准,比较器翻转可触发中断。但是好像它要么配置成内部1.23v的基准,要么接外部基准。接内部基准没办法调整比较的阈值,接外部基准也没法用软件修改比较阈值。
请教,有其他较好的办法吗?
发表于 2017-4-21 12:45 | 显示全部楼层
接内部基准没办法调整比较的阈值

当局者迷啊

内部基准不能调,可以调外部电压的采样电路嘛。比如串一个可调电阻在外部电路里面作为分压器,调整可调电阻改变外部电压到MCU的监测端,再和内部基准比较,这样可以吗?

 楼主| 发表于 2017-4-21 12:52 来自手机 | 显示全部楼层
dgpower 发表于 2017-4-21 12:45
接内部基准没办法调整比较的阈值

当局者迷啊

这样就不能实现我讲的第二条了,不能软件设置比较阈值
 楼主| 发表于 2017-4-21 12:59 来自手机 | 显示全部楼层
其实我想了一下,假设8兆晶振,所有代码循环一遍用时还是ms级别,所以用adc采集再和基准数据比较,反应速度也是够的。
有些概念不是很清楚,如果主程序里放了一条delay 1s的代码,是否两次adc采集至少间隔1s以上了?如果是这样的话,速度那就不行了。
那可不可以用定时中断去调用adc,这样就不会受主程序里其他delay的影响了吧?
 楼主| 发表于 2017-4-21 13:06 来自手机 | 显示全部楼层
dgpower 发表于 2017-4-21 12:45
接内部基准没办法调整比较的阈值

当局者迷啊

你那是硬件上调电位器实现的,我需要的是软件菜单里调整
发表于 2017-4-21 13:08 | 显示全部楼层
是的,我说的确实不能实现软件调整
确实如你所说,用delay()语句是不行的。用定时中断是个好方法。定时到了就自动执行你指定的读取ADC,比较,如果没有问题就返回正常程序。

不知道你要的反应尽可能的快,要快到啥程度。比如,如果是要做电压质量监测仪(谐波测量),这种是要求挺高的,因为可能要测量到7次谐波(7*50=350Hz,根据采样定律就至少2倍采样到700Hz,实际要做到1KHz才保险)
发表于 2017-4-21 13:17 | 显示全部楼层
还有 ,如果MCU有PWM输出,也可以利用控制PWM输出(滤波成直流电压)来与输入电压做比较,这样也行
发表于 2017-4-21 13:18 | 显示全部楼层
写程序需要delay 代码吗?
需要设计多快的响应,“尽量要快"?有这种需求吗?这个可以量化吗?每个人心中的尽量快具体值是多少。
不是什么都要用中断那么稀缺的资源来做吧。
发表于 2017-4-21 14:14 | 显示全部楼层
第一种方案:可以考虑用数字电位器的可调端作为参考电压,这样参考电位是可调的,而且受单片机控制。
第二种方案:单片机产生PWM信号,滤波后作为参考电压,这样程序稍复杂点。
 楼主| 发表于 2017-4-21 15:27 来自手机 | 显示全部楼层
dgpower 发表于 2017-4-21 13:17
还有 ,如果MCU有PWM输出,也可以利用控制PWM输出(滤波成直流电压)来与输入电压做比较,这样也行

这种方法也考虑过,但需要多占用一个io

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-19 06:21 , Processed in 0.063783 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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