[原创]M8+LCD1602+LM35的电池容量测试仪----原理图+源程序
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104426.JPGhttp://cache.amobbs.com/bbs_upload782111/files_5/armok01104427.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104428.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104429.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104430.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104431.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104432.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104433.JPG
http://cache.amobbs.com/bbs_upload782111/files_5/armok01104434.jpg
点击此处下载armok01104435.rar
-----此内容被shusheng于2006-02-28,01:27:18编辑过 楼主强,顶!! 强! 谢谢了哦,又是一份宝贵的学习资料 红色的是第一次放电的曲线
粉红色的是充电的曲线
黄色的是充完电后放电的曲线
当然这个放电器不具备充电功能 不建议两节电池串联放电。
单节电池独立放电才行。可以做多路。 LZ有德劲的1102还是1103?呵呵,看见你的电池就有很亲切的感觉!! 楼主,好人啊~~~~!
终于等到了. 呵呵
收藏了1102+1103*2+1105
所以有大量的DEGEN1300mAh的电池 楼主,源程序是 ICCAVR ?GCC ?还是什么? ICCAVR 6.31A 楼主:
你好,你写的程序确实很厉害,能否将确定容量的程序思路讲的详细点,我有点笨笨的,还不能理解里面的数据为何如此? 楼上的过奖了
容量的计算是通过对放电电流进行积分而得到的 接触电子时间不长,能解释一下程序中的电压、电流转化和这部分电路图么?
http://cache.amobbs.com/bbs_upload782111/files_5/armok01112959.JPG pwm输出经三阶低通滤波器后变成平滑的直流电压,该电压经运放构成的射极跟随器去驱动2SD882对电池进行放电,只要调节PWM的占空比,就能调节运放的输出电压的大小,从而实现对放电电流大小的控制。
R5、R6组成电流采样电路,R11、R12和LM358-2组成一个同相输入的十倍放大电路,对电流信号进行放大。
R8、R9、R10和C4组成电池电压采样电路。 顶!不错 收藏 好好学习 shusheng 书生:
你好,能否给出(放电电流进行积分)容量公式.为何不每秒采样电流,然后折算成1mah等于多少个字,来累加计算容量.
例如: 采样电流2000mA,每个字代表1024/2000=0.512mA
则每秒采样一次,每个字代表0.512/3600mAh,进而可知
每mAh代表3600/0.512个字∶每mAh代表7031.25即1b77, 容量公式的公式就是这么简单:
if(sc_bt1==0)
{BT1_mAh+=BT1_I;sc_bt1=450;}//容量统计,每3.6秒计一次
每3.6秒把采样到的电流加上到BT1_mAh这个变量里就可以了
这样的优点:
程序精简、不用浮点运算、容易看得明、CPU占用率低、而且BT1_mAh里的数除以1000就是容量。
我自己是这样想的,不知合不合理,希各位DX指教。
另:楼上的意思是不是说,当最大采样电流为2000mAh时,每7031.25代表1mAh? 是这样的 等有空再做个4通道单节电池放电的,取消恒流,用定阻加场效应管放电,这样会简单一点,也更实用 好东西.收藏. shusheng 书生:
你好,请教一个关于容量的问题。
对电池有充电还有放电,放电不恒流。放电电流400A,浮充5A。测电流用互感器,互感器出来红、蓝、黑三根线,正向红黑为0~5v蓝黑为0v,反向时红黑为0v蓝黑为0~5v。红、蓝分别接ADC0、ADC1,
测容量,如何判断是充电还是放电?容量如何计算? 顶! 强一个! 回22楼
不好意思,互感器没有用过,不是很明白。 楼主:
请问最后那个绘图的软件是什么软件来的?能否共享?谢谢! 楼主是玩收音机的朋友,电池是德劲收音机带的。
我买1103时带了4节。 回26楼:
那是用EXECL绘出来的图 手头上有13节德劲的1300mAh的电池!
有几节还未破_处,等有空测测它。 顶,楼主! 很好! 能加上测量电池内阻功能就更好了 确实不错 楼主顶!厉害!! 果然厉害 我很羡慕模电厉害的高手 学习中! 好,收藏学习! 楼上看懂了的,请说一下本例的测量原理。
还有程序好象是用了时间调度操作系统,能说下它的框架吗?
各位大虾弄上的范例能不能多加点注释,我们虾米看着困难,但是东西又太好,不看不行 谢谢
强人!!! 相当于 安时计 + 核对性放电 楼主厉害,羡慕中 强悍 顶!不错 收藏 强
能否移植到GCC上?ICC不会用,呵呵 强,但是ICC编译出错,pageuppagdown没定义 临时学用ICC,但怎么编译还是出错啊?我是菜鸟,希望前辈们帮帮忙!!!!
D:\ICC\icc\bin\imakew -f 电池放电器V2.0.mak
iccavr -c -ID:\ICC\icc\include\ -e-l -g -Wa-WD:\毕业设计\AVR官方设计的充电器\液晶\AVR\电池放电器\软件V2.0\main.c
!W D:电池放电器\软件V2.0\main.c(55): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(73): calling function without prototype may cause errors
!W D:电池放电器\软件V2.0\main.c(109): declaration of `taskmgr' does not match previous declaration at D:AVR\电池放电器\软件V2.0\main.c(55)
!W D:电池放电器\软件V2.0\main.c(166): declaration of `welcome' does not match previous declaration at D:电池放电器\软件V2.0\main.c(73)
!W D:电池放电器\软件V2.0\main.c(284): declaration of `desktop2' does not match previous declaration at D:电池放电器\软件V2.0\main.c(71)
!E D:电池放电器\软件V2.0\main.c(288): insufficient number of arguments to `LCD_write_time'
!W D:电池放电器\软件V2.0\main.c(296): declaration of `desktop1' does not match previous declaration at D:电池放电器\软件V2.0\main.c(71)
!W D:电池放电器\软件V2.0\main.c(326): declaration of `desktop3' does not match previous declaration at D:电池放电器\软件V2.0\main.c(71)
!W D:电池放电器\软件V2.0\main.c(378): declaration of `desktop4' does not match previous declaration at D:电池放电器\软件V2.0\main.c(71)
!E D:电池放电器\软件V2.0\main.c(402): insufficient number of arguments to `LCD_write_time'
D:\ICC\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1 编译出错,有些错误不会改,谁能把编译通过的源码上传上来啊! 点击此处下载armok01149780.rar 点击此处下载armok01149780.rar 刚才上串的是在我的ICC6.31下编译通过的程序 顶一下 to:lizq
谢了 to:lizq
你是不是上传错了?
怎么我编译时跟原来楼主上传的一样?
刚开始就有pageup pagdown没定义和insufficient number of arguments to `LCD_write_time' 没有呀,让你看看我是不是错了
http://cache.amobbs.com/bbs_upload782111/files_7/armok01149940.JPG 晕哦,怎么这么多多重定义multiple definition of `X'累死我了,终于成功编译出来了,哈哈 好怀念那张陪我渡过几年大学生活的桌子啊
桌面上的孔孔就是钻板的时候钻出来的
桌子呀,您在学校还好吗? 呵呵,正在考虑如果把它加在充电器电路上~~~~ 楼主好,能不能提供点写程序的思路,比如流程图,这样比较方便我们初学者看明白程序!还有想问一下,显示的电压是不是两节电池实际的电压之和!谢谢 楼主,方便的话留个email联系方式,还有很多问题想请教你! 楼主画的PCB板画得不好,元件编号跟原理图的不符,有些参数不符,有些地方的连接也不符。 不是一般的强 而是很强 呵呵 留个名,强人 请问那个串口用了两个三极管,买的USB转串口要以用吗? 1r5,r6是放电电流这部分,解释一下电流流向!
2放电电压监控部分也会有电流,是否精确考虑。2.8/60k 放电电流可以改变,但感觉变化范围有限,望解释! 呵呵,原程序好像有问题……刚试过了,好像不行,得找找问题
C:\icc\bin\imakew -f 电池放电器V2.0.mak
iccavr -c -IC:\icc\include\ -e -DATMega8-l -g -Mavr_enhanced_small -Wa-WD:\我的文件\软件V2.0\main.c
!W D:\我的文件\软件V2.0\main.c(55): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(71): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(73): calling function without prototype may cause errors
!W D:\我的文件\软件V2.0\main.c(109): declaration of `taskmgr' does not match previous declaration at D:\我的文件\软件V2.0\main.c(55)
!E D:\我的文件\软件V2.0\main.c(110): undeclared identifier `pageup'
!E D:\我的文件\软件V2.0\main.c(114): undeclared identifier `pagedown'
!W D:\我的文件\软件V2.0\main.c(166): declaration of `welcome' does not match previous declaration at D:\我的文件\软件V2.0\main.c(73)
!E D:\我的文件\软件V2.0\main.c(200): undeclared identifier `pagedown'
!E D:\我的文件\软件V2.0\main.c(228): undeclared identifier `pagedown'
!W D:\我的文件\软件V2.0\main.c(284): declaration of `desktop2' does not match previous declaration at D:\我的文件\软件V2.0\main.c(71)
!E D:\我的文件\软件V2.0\main.c(288): insufficient number of arguments to `LCD_write_time'
!W D:\我的文件\软件V2.0\main.c(296): declaration of `desktop1' does not match previous declaration at D:\我的文件\软件V2.0\main.c(71)
!W D:\我的文件\软件V2.0\main.c(326): declaration of `desktop3' does not match previous declaration at D:\我的文件\软件V2.0\main.c(71)
!W D:\我的文件\软件V2.0\main.c(378): declaration of `desktop4' does not match previous declaration at D:\我的文件\软件V2.0\main.c(71)
!E D:\我的文件\软件V2.0\main.c(402): insufficient number of arguments to `LCD_write_time'
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1 问题真多……
解决一个又出现下面这样的问题
C:\icc\bin\imakew -f 电池放电器V2.0.mak
iccavr -c -IC:\icc\include\ -e -DATMega8-l -g -Mavr_enhanced_small -Wa-WD:\我的文件\软件V2.0\discharger.c
iccavr -o 电池放电器V2.0 -LC:\icc\lib\ -g -Wl-W -bfunc_lit:0x26.0x2000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @电池放电器V2.0.lk
!E main.o(543): multiple define: '_main'
!E main.o(544): multiple define: '_system'
!E main.o(545): multiple define: '_Capacitance_setting'
!E main.o(546): multiple define: '_discharge'
!E main.o(547): multiple define: '_timer2_ovf_isr'
!E main.o(548): multiple define: '_bt1_v_record'
!E main.o(549): multiple define: '_discharge_init'
!E main.o(550): multiple define: '_discharge_stop'
!E main.o(551): multiple define: '_record_setting'
!E main.o(554): multiple define: '_system_clock'
!E main.o(555): multiple define: '_discharge_speed'
!E main.o(556): multiple define: '_timer'
!E main.o(561): multiple define: '_BT1_I_Ctrl'
!E main.o(570): multiple define: '_hour'
!E main.o(571): multiple define: '_mAh_set'
!E main.o(572): multiple define: '_speed'
!E main.o(573): multiple define: '_sec'
!E main.o(574): multiple define: '_min'
!E main.o(575): multiple define: '_RunTab'
!E main.o(610): multiple define: '_BT1_I_SET'
!E main.o(611): multiple define: '_sc_eeprom'
!E main.o(612): multiple define: '_BT1_time'
!E main.o(613): multiple define: '_sc_discharge'
!E main.o(614): multiple define: '_RunTab_old'
!E main.o(615): multiple define: '_sc_key_delay'
!E main.o(616): multiple define: '_bt1_v_temp'
!E main.o(617): multiple define: '_sc_lcd_write'
!E main.o(618): multiple define: '_PWM'
!E main.o(619): multiple define: '_mAh'
!E main.o(620): multiple define: '_sc_bt1_record'
!E main.o(621): multiple define: '_sc_bt_ctrl'
!E main.o(622): multiple define: '_sc_bt1_v_temp'
!E main.o(623): multiple define: '_BT1_V_num'
!E main.o(624): multiple define: '_sc_bt1'
!E main.o(625): multiple define: '_BT1_mAh'
!E main.o(626): multiple define: '_BT1_V_num_temp'
!E main.o(627): multiple define: '_BT1_state'
!E main.o(628): multiple define: '_keyboard'
!E main.o(630): multiple define: '_BT1_I'
!E main.o(631): multiple define: '_BT1_P'
!E main.o(632): multiple define: '_BT1_T'
!E main.o(633): multiple define: '_BT1_V'
!E main.o(635): multiple define: '_bt1_v_temp_1'
!E main.o(637): multiple define: '_D882_P'
!E system_init.o(127): multiple define: '_delay_nms'
!E system_init.o(128): multiple define: '_delay_nus'
want size 4250
lo 7000 hi 8192 size 1193
!E <library>(257): area 'text' not large enough
want size 30
lo 8176 hi 8192 size 17
!E <library>(257): area 'text' not large enough
want size 66
lo 8176 hi 8192 size 17
!E <library>(257): area 'text' not large enough
want size 66
lo 8176 hi 8192 size 17
!E <library>(257): area 'text' not large enough
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1 收藏 主要是看算法,我觉得用哪个编译器到是没所谓的,同样的意思在不同的编译器里实现是不一样的。谢谢楼主,顶。 牛人! 太晚了,未能细看,应该不错,作个记号 谢谢楼主哈~ 谢谢楼主。顶一个!!! 马上收下…… 非常好 感谢~~~~~~~~~ 学习硬件。 迟点有空再做一个电池容量测试仪,正在研究VC,希望做到可以连接电脑。 收藏 不错! 好东西!lz很厉害呀! 学习,,,
牛人!! 強人 不错啊 电池的容量计算还要添加进电池本身的泄漏电流对电池容量的损耗,这在大部分的电池里面是会存在这个电流的.
如果能把这个功能加进去,那就很完美了.
很多笔记本电脑里面用的电池电量的测量芯片是非常复杂而又昂贵的.并且测量出来的效果也并不好,往往看指示还有很多电,其实已经快没有了. 如何算毫安时 收藏^_^ 顶一下! 能测试蓄电池就好了 不错啊 做的很不错哦 LZ 厉害 好资料。
顶一下~~~~~~~· mark mark 佩服,学习中 楼主厉害,学生能单独设计出来,算是比较NB的学生了。 学习 好东西 谢谢楼主 学习