• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

利用单片机的PWM做充电器的问题.

我是新手,现在想用单片机PWM功能作一个锂电池的充电器.现在的主要问题是充电管理这里.想做成CC/CV的充电方式,电路的结构采用降压BUCK方式,回路里面串联小电阻的方法来检测电流.但现在的问题是我怎么控制PWM的输出,非要用PID的算法来控制吗?现在的问题是单片机还没有乘法功能.能有其他的简单的控制方法吗?算法怎么处理?还请高手指点了阿!谢谢了先!
全部回复(6)
正序查看
倒序查看
sdjufeng
LV.6
2
2006-05-05 14:06
很简单.
充电器与稳压电源的不同点就在于输出电流不是一个常数.你可以做一个表,就是电压与电流的对应表,到了什么样的电压(ADC电压采样值),查表得到一个特定的脉宽值送入PWM,输出后的PWM信号滤波后与充电电流相比较,比较后的误差用于控制充电器的输出电压即可.程序采用定时中断方式,每隔一定的时间间隔,比如1秒钟处理一次即可.不需要PID控制.
0
回复
xjh203
LV.5
3
2006-05-06 09:42
@sdjufeng
很简单.充电器与稳压电源的不同点就在于输出电流不是一个常数.你可以做一个表,就是电压与电流的对应表,到了什么样的电压(ADC电压采样值),查表得到一个特定的脉宽值送入PWM,输出后的PWM信号滤波后与充电电流相比较,比较后的误差用于控制充电器的输出电压即可.程序采用定时中断方式,每隔一定的时间间隔,比如1秒钟处理一次即可.不需要PID控制.
谢谢,先试试了,有问题再请教了.
0
回复
2006-09-19 19:24
@sdjufeng
很简单.充电器与稳压电源的不同点就在于输出电流不是一个常数.你可以做一个表,就是电压与电流的对应表,到了什么样的电压(ADC电压采样值),查表得到一个特定的脉宽值送入PWM,输出后的PWM信号滤波后与充电电流相比较,比较后的误差用于控制充电器的输出电压即可.程序采用定时中断方式,每隔一定的时间间隔,比如1秒钟处理一次即可.不需要PID控制.
你好,我也在正有PWM方式控制电流,可以就是不稳,AD口的值也是老出错,可以和你请教相关问题吗?谢谢   
0
回复
2006-09-20 10:09
@xjh203
谢谢,先试试了,有问题再请教了.
如果是用CC MODE的方式,那么电流是否能稳定???
0
回复
dip-44
LV.3
6
2006-09-20 15:46
@sdjufeng
很简单.充电器与稳压电源的不同点就在于输出电流不是一个常数.你可以做一个表,就是电压与电流的对应表,到了什么样的电压(ADC电压采样值),查表得到一个特定的脉宽值送入PWM,输出后的PWM信号滤波后与充电电流相比较,比较后的误差用于控制充电器的输出电压即可.程序采用定时中断方式,每隔一定的时间间隔,比如1秒钟处理一次即可.不需要PID控制.
你的方法效果真不错.
0
回复
sdjufeng
LV.6
7
2006-09-21 23:11
@bestwish131
你好,我也在正有PWM方式控制电流,可以就是不稳,AD口的值也是老出错,可以和你请教相关问题吗?谢谢  
如果不稳的话,你可以加入一个数字滤波,方法也不复杂,其原理和RC电路类似,我们知道,当一个电源通过电阻R给电容C充电的时候,充电电流与电源和电容两端的电压差是成正比的,即I=(E-Uc)/R.
我们已经知道,在由硬电路构成的系统中,RC网络可以让系统稳定,同样的道理,我们也可以得到在程序中加入类似的功能可以让系统稳定.
这种方法我在多个系统中使用,证明效果是不错的,下面简单的介绍一下:
假设我们根据当前的电瓶电压查表得到一个理论脉宽值W,在假设上一次输出的脉宽值为D,那么本次输出的脉宽值就是D+(W-D)/N,N是一个系数,输出调节的周期T*N就是类似于RC的充电时间常数.比如在本例中,我们取这个时间常数为16秒,由于T=1秒,那么N=16,这个系数最好取2的整数次方,这样做的好处是可以用移位来实现这个除法运算,速度特快.D+(W-D)/N这个过程的最终结果是D=W.当然应该考虑到由于(W-D)/N较小,应该采用两字节运算,另外还应考虑到(W-D)有可能为正,也可能为负,所以有关计算应该采用补码运算.
0
回复