【赚周年币】技术帖Week3-Day5——LPC824之18、模拟比较器
#线上活动
2872 人阅读
|
0 人回复
|
2017-01-19
TA的每日心情 | 开心 2 小时前 |
|---|
签到天数: 4273 天 连续签到: 2 天 [LV.Master]伴坛终老
司徒
- 积分
- 49099
    

|
|
本帖最后由 toofree 于 2017-1-19 03:24 编辑
【赚周年币】技术帖Week3-Day5——LPC824之18、模拟比较器
LPC824内部集成了模拟比较器,好像其它cortex-m0系列的也有模拟比较器,知道有,但是从来没用过,那么今天就来试试。
今天以工程“LPC824_Example_Code_Bundle_Keil_r1.0\Keil_Projects\Example_Analog_Comparator\Example_Analog_Comparator.uvoptx”模板来学习。
本测试不用任何连线,因为是在模拟比较器内部模拟梯度与内部电压的比较。
样例程序中,主要用到两个文件“Example_Analog_Comparator.c”和“Example_Analog_Comparator_ISR.c”,其它文件在别的工程要类似,这里不必做解释。其中两个文件中,又各一个函数,主函数main()和中断处理函数CMP_IRQHandler()。
主函数,初始化调试串口,开启模拟比较器上电,并开比较器和IO时钟,复位比较器。
这两句是最关键的。设置模拟比较器负极为BANDGAP(即内部0.9V参考电源),正极为模拟梯度输出(即LADDER OUT),检测方式为双沿(即大于和小于的瞬间都检测)。模拟梯度参考电压为电源电压(3.3V),梯度初始值为0,使能梯度。
那么比较用户手册“UM10800.pdf”,以上设置实质就是下图。
清除沿检测状态,模拟比较器开中断。初始化LED,并点亮红灯。
从调试串口输入不大于1F的16进制数,把读取的数赋更新到模拟梯度寄存器。因为模拟梯度是5位的,避免出现大于1F的数,做了位与0x1f操作。
中断处理函数中,判断比较结果,结果为1,点亮绿灯;结果为0点亮红灯。那么怎么判断呢,3.3V分为31份,那么每一份步进值为0.10645V,步进值乘以梯度,即为比较器正极电压;比较器负极电压为0.9V。0.10645*8=0.851V, 0.10645*9=0.958V,那么显然,梯度小于等于8的时候,比较器结果输出为0;梯度大于等于9的时候,比较器结果输出为1。
实际可比较的源有很多,可以为ICMP_I1、ICMP_I2、ICMP_I3、ICMP_I4、bandgap、ADC0、VSS、LADDER OUT,其中任意两者的组合,也就是8x7 = 56种。
最后一天,收工。
|
评分
-
查看全部评分
|
|
|
|
|
|
|
|