极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12908|回复: 1

请教测量电压和关于Timer2的有关内容

[复制链接]
发表于 2012-5-20 23:51:00 | 显示全部楼层 |阅读模式
一、关于测量电压的问题
    我想用来监控12V电池的电压值,监控显示的值应该是在arduinor的读取值范围内(0-1023)。 目前看到二种方案:  
1、使用电阻分压方法测量的话。查了一些资料,应该是按这个电阻分压理论R1:R2=U1:U2来用。根据网上资料,知道Arduino的大多数板子,各脚引入电流极限值100ma,同时测量电压在0-5V,用analogRead(pin),读取值0-1023。那,我测量12V的电池,应该配置电阻分压的R1,R2为多少呢?
2、另外一种方案是想参照国外论坛上找到的一段代码(如下)。使用ADC7引脚(arduino定义脚名,atmel 328p是pin22)接330K的电阻后连接电池(二颗AAA电池,3V)的VCC。那,我测量12V电池,我配了电阻1.5M,读取的值为啥一直是1023呢?这个电阻应该是多少?      国外的这段代码如下:
   void checkBattery() {
     ADCSRA |= (1<<ADEN); // enable ADC
     an_battery = analogRead(A7);
    ADCSRA &= ~(1<<ADEN); // disable ADC
    Serial.print("Battery: ");
    Serial.println(an_battery);
}

二、在于timer2的设置
     学习到这一段代码,见如下。请问我自己搭的板子用了atmel mega 328p 用了16mhz晶振,也就是做成了5V的arduino兼容板,已经成功写入bootloader。那么,如果我在程序中需要用到时钟2进行计数的话,这里的OCR2A=125,需要改为多少? 网上查询了一些资料,感觉还是没有完全懂,需要改吗?改多少?
// configure timer 2
  TIMSK2 = 0; // Reset Timer/Counter2 Interrupt Mask Register
  TCCR2A = 0; // Reset control registers
  TCCR2B = 0;
  TCCR2A |= (1 << WGM21); // Clear Timer on Compare Match (CTC) Mode
  TCCR2B |= (1 << CS22); // Prescaler x64
  OCR2A = 125; // roll over every 125/125,000 = 1 millisecond (with 8Mhz oscillator)
  ASSR &= ~(1 << AS2); // Use system clock for Timer/Counter2

希望能得到高手的指点。谢谢!
回复

使用道具 举报

发表于 2012-5-21 09:10:17 | 显示全部楼层
电阻分压的方式最常见了,近似7:5阻值串联就行,比如15M和22M的,大的接正极,小的接地和负极。准确度不是很高,主要是电池的内阻差异比较大,而且还带漂移的(温度、寿命)。再有一般碳膜电阻也有5%的误差。不过一般电池检测本来也不用精度太高,如果希望准确一些的话建议对照电压表测量值做一个修正。

至于第二个方法……俺没看懂{:soso_e106:}
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 01:26 , Processed in 0.041629 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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