shaunwang 发表于 2012-9-13 10:11:00

新手求教关于ATTiny的ADC

{:tongue:}
各位前辈好, 小第玩手电筒的, 俗称桶友. 本职工作搞Java开发的, 爱好玩单片机, 但毕竟不是专业, 也没专门学过, 所以可能有些地方比较RZ, 还请各位前辈体谅.

因为爱好最近正在做一个手电的驱动板, 用ATTiny的pwm驱动一个MOSFet点亮灯泡, 以期实现灯泡软启动(慢慢变亮)的功能.
当然软启动很容易的就实现了, 现在我想使用ADC来检测电池电压, 然后根据电池电压计算出pwm的频率, 使灯泡的功率恒定.
另外还可以判断当电压低于某一设定值的时候终止点亮灯泡, 保护电池.
很不幸.. 我遇到了问题~~
当灯泡点亮时我无法检测出准确的电池电压! 具体问题描述如下:

原理图

电池使用6节镍镉, 充满电电压约为7.8v
分压电阻120k和27k, 理论ADC电压在0v~7.8/(120+27)*27=1.432653061v

因为是PWM(频率490Hz)驱动, 所以我使用了两个中断函数, 以2Hz的频率分别在波形周期的开始和进入波谷时测量两次电池电压. 如下图:
----------               -A--------
         |               |         |
         |               |         |
         |               |         |
         |               |         |
         -------------------         -B-----------------
ISR(TIM0_COMPA_vect) 取B点电池电压
ISR(TIM0_OVF_vect)   取A点电池电压

理论上, A点电压是灯泡点亮时, 即电池接入负载时的电压定义为Vload,
         B点电压是灯泡熄灭时, 即电池空闲时的电压(此时电池仍对单片机, 采样电阻, 稳压管供电)定义为Vidle

实际测量我发现下面的情况:
档位        Vidle        Vload        占空比
1        7062        7062        91
1        6718        6638        103
1        7009        6612        104
1        7088        6533        107
1        7088        6533        107
1        7062        6506        108
1        7009        6506        108
1        7009        6533        107
1        7035        6533        107
1        7035        6506        108
1        7088        6533        107
1        6638        6533        107
1        6533        6533        107
1        6533        6533        107
1        6533        6453        109
1        6533        6533        107
1        6480        6559        106
1        6533        6506        108
1        6533        6506        108
1        6559        6533        107
1        6533        6506        108
1        6506        6559        106
1        6506        6506        108
1        6533        6533        107
1        6480        6506        108
2        6718        6506        172
2        6903        6506        172
2        7009        6533        171
2        7035        6533        171
2        7009        6533        171
2        7009        6559        170
2        6982        6533        171
2        6982        6506        172
2        6982        6559        170
2        6929        6559        170
2        6929        6559        170
2        6956        6559        170
2        6956        6506        172
2        7035        6506        172
2        7009        6533        171
2        6956        6506        172
2        6956        6533        171
2        6956        6533        171
2        7009        6480        174
2        6956        6533        171
2        6956        6533        171
3        6982        6533        214
3        6982        6533        214
3        6956        6506        216
3        6929        6533        214
3        6877        6506        216
3        6903        6506        216
3        6929        6480        217
3        6929        6506        216
3        6929        6559        212
3        6956        6506        216
3        6929        6453        219
3        6929        6480        217
3        6903        6506        216
3        6877        6533        214
3        6877        6506        216
3        6956        6453        219
3        6956        6480        217
3        6956        6480        217
3        6929        6533        214
3        6903        6533        214
3        6877        6453        219
3        6877        6453        219

对于Vload列, 数据走势还是符合实际情况的, 随着占空比的增大Vload减小, 而Vidle列的数据就有点跟我想象的不一样了, 我认为Vidle应该保持恒定, 不随占空比的变化而变化. 实际上Vidle的总体趋势却随着占空比的增大而增大...

难道说电池在接入负载的一瞬间电压迅速降低, 然后慢慢升高, 在负载断开后电压慢慢恢复, 而不是一下子恢复到无负载状态?
还请各位前辈赐教!

shaunwang 发表于 2012-9-13 11:01:56

{:cry:}前辈们, 帮帮忙啊, 顶上去.

shaunwang 发表于 2012-9-13 14:11:51

{:dizzy:}再顶上去啊..
页: [1]
查看完整版本: 新手求教关于ATTiny的ADC