单片机采样处理恒流的问题

[复制链接]
2762|4
 楼主| szjgjg 发表于 2008-8-12 16:20 | 显示全部楼层 |阅读模式
高手哇,现身吧!<br />我用PIC处理横流的问题脉宽不调整,帮忙看看程序吧:<br />org&nbsp;&nbsp;&nbsp;&nbsp;0x1ff<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x1e<br />org&nbsp;0x00<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;OSCCAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;时钟校准同时GP2设为数字IO<br />main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;主程序由此开始<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;&nbsp;&nbsp;&nbsp;0x00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;初始化IO<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;&nbsp;&nbsp;&nbsp;GPIO<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设置禁止弱上拉,禁止引脚电平变化唤醒,预分频器指向WDT,1:128倍分频,看门狗周期2.3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;OPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;GP2设为数字IO<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xc5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;配置ADCON0为GP0模拟输入,GP1为数字IO,模拟输入通道为GP0,使能AD转换<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;ADCON0<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;0x0b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设置I/O方向,GP0、GP3输入,GP1、GP2输出<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS&nbsp;&nbsp;&nbsp;&nbsp;GPIO<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;buffer_old&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;把模数转换结果寄存器清零<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;buffer_new<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;比较次数计数器送初值<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;comp_count<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;起始充电时间循环次数寄存器送初值60次<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;tim_5min&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;low_level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;相关变量送初值&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;var_4<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;电池数量计算初值<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;bat_no_<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;起始充电时连续检测到8次(约16秒)电压无变化<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;var_equ_tim<br />;-------------------电池检测阶段,无电池或电池电压过低则在此等候,电池完好充电开始------------------------------<br />movlw&nbsp;&nbsp;&nbsp;&nbsp;0x55<br />movwf&nbsp;&nbsp;&nbsp;&nbsp;low_level<br />goto&nbsp;&nbsp;&nbsp;&nbsp;circle<br />org&nbsp;&nbsp;0x70<br />circle<br />&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,CHS0<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;&nbsp;&nbsp;&nbsp;0X04<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;&nbsp;&nbsp;&nbsp;GPIO<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;samp_flit<br />&nbsp;&nbsp;&nbsp;&nbsp;;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;启动AD转换<br />&nbsp;&nbsp;&nbsp;&nbsp;;call&nbsp;&nbsp;&nbsp;&nbsp;ad_simp_dela<br />&nbsp;&nbsp;&nbsp;&nbsp;;btfsc&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;测试转换是否完成,完成则取值比较,否则继续等待<br />&nbsp;&nbsp;&nbsp;&nbsp;;goto&nbsp;&nbsp;&nbsp;&nbsp;$-1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x19<br />&nbsp;&nbsp;&nbsp;&nbsp;subwf&nbsp;&nbsp;&nbsp;&nbsp;buffer_new,0<br />&nbsp;&nbsp;&nbsp;&nbsp;btfsc&nbsp;&nbsp;&nbsp;&nbsp;STATUS,Z<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;_low<br />&nbsp;&nbsp;&nbsp;&nbsp;btfss&nbsp;&nbsp;&nbsp;&nbsp;STATUS,C<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;$+2<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;$+3<br />&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;low_level,1<br />&nbsp;&nbsp;&nbsp;&nbsp;GOTO&nbsp;&nbsp;&nbsp;&nbsp;_low<br />&nbsp;&nbsp;&nbsp;&nbsp;decf&nbsp;&nbsp;&nbsp;&nbsp;low_level,1<br />&nbsp;&nbsp;&nbsp;&nbsp;GOTO&nbsp;&nbsp;&nbsp;&nbsp;_low<br />&nbsp;&nbsp;&nbsp;&nbsp;clrwdt<br />_low<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;&nbsp;&nbsp;&nbsp;0X00<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;&nbsp;&nbsp;&nbsp;GPIO<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;low_level,0<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;var_2<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;var_2,1<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;$-1<br />&nbsp;&nbsp;&nbsp;&nbsp;clrwdt<br />&nbsp;&nbsp;&nbsp;&nbsp;;decfsz&nbsp;&nbsp;&nbsp;&nbsp;var_1,1<br />&nbsp;&nbsp;&nbsp;&nbsp;GOTO&nbsp;&nbsp;&nbsp;&nbsp;circle<br />&nbsp;&nbsp;&nbsp;&nbsp;return<br />org&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8f<br />;------------------电池电压采样,数字滤波程序段-----------------------------------------------------<br />samp_flit<br />&nbsp;&nbsp;&nbsp;&nbsp;;BCF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,CHS0<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x4<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;ad_count<br />ad_sigle<br />&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;启动AD转换<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;ad_simp_dela<br />&nbsp;&nbsp;&nbsp;&nbsp;btfsc&nbsp;&nbsp;&nbsp;&nbsp;ADCON0,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;测试转换是否完成,完成则取值比较,否则继续等待<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;$-1<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;ADRES,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;取本次转换结果<br />&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_l,1<br />&nbsp;&nbsp;&nbsp;&nbsp;btfsc&nbsp;&nbsp;&nbsp;&nbsp;STATUS,C<br />&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_h<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;ad_count,1<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;ad_sigle<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,C<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x03<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;div_count<br />div_sigle<br />&nbsp;&nbsp;&nbsp;&nbsp;btfss&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_h,0<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;$+3<br />&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,C<br />&nbsp;&nbsp;&nbsp;&nbsp;GOTO&nbsp;&nbsp;&nbsp;&nbsp;$+2<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,C<br />&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_l,1<br />&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_h,1<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;div_count,1<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;div_sigle<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;ad_temp_l,0<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;buffer_new<br />&nbsp;&nbsp;&nbsp;&nbsp;clrwdt<br />&nbsp;&nbsp;&nbsp;&nbsp;return<br />&nbsp;&nbsp;&nbsp;&nbsp;end
 楼主| szjgjg 发表于 2008-8-12 16:21 | 显示全部楼层

re

采样电压和数字滤波一段程序没有问题的,已经调通了
兰天白云 发表于 2008-8-12 21:16 | 显示全部楼层

用什么单片机?电路图来个

  
 楼主| szjgjg 发表于 2008-8-13 09:48 | 显示全部楼层

re

单片机采用10F222/220,图上没有划出采样的滤波电容,实际电路已经加了。
兰天白云 发表于 2008-8-14 13:10 | 显示全部楼层

你用PWM控制充电电流?<br />在程序里没看到PWM调整
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部