rb_sama作者
10年5个月前修改于 10年5个月前IP:湖北
823148
5楼
谈一谈灭弧电路部分。
因为是理论论证,为了节约开发周期和成本。
我把灭弧电路与BUCK驱动电路做在一起。
所以这块PCB是有独立调制功能的,也可以从远端通过光纤进行控制。
这些功能的选择通过跳线帽来实现。
原理图如下
QQ截图20160721140947.jpg
清晰原理图PDF下载:
attachment icon Qbuck_control.pdf 209.76KB PDF 588次下载 预览
这张原理图的BUCK部分与新加坡的Gaoguangyan提供的原理相同。
buckdriver1.png
同为使用TL3016高速比较器对输入电压与反馈电压进行比较跟随。
通过乒乓控制的方式,使电流波形在一定程度上保持稳定。
实际工作的过程中,我观察到波形的形状与电弧长度与形状关系很大。
闭环能够有效解决电容电压下降,带来的波形失真。
当然还有一种方法是实现同步整流,这样要多出一个死区发生电路与低端驱动。
从最简化设计的角度来看,我选择了比较器方案。
-
aaaa.jpg
而驱动部分,则由于并管数量较多。
并且考虑到未来可能把BUCK功率管拓展为功率模块。
驱动的负载大约在20-40nF大小。
为保险起见,使用了来自大M设计的单供电,正负电压输出IGBT驱动。
实测驱动30nF的负载,上升下降时间能够有效控制在200/150nS。
驱动电压的幅度为-9~+15V。能够有效满足IGBT驱动的需求。
这部分电路优秀的性能确定了,在脉冲功率高达20KW时,以1BPS的频率工作。
BUCK桥整体冰凉,为增加稳定性创造了一个良好的先决条件。
-
QQ截图20160721142000.jpg
MCU部分则是使用了STM8S105K4系列的单片机。
我选择STM8S单片机作为智能灭弧的控制方案的原因有三个
1:我喜欢用这个单片机
2:资源数量刚好足够
3:电源允许变化范围较大
从电路设计的角度上讲,3.0~5.5V的供电电压,完全可以使用锂电池对单片机直接供电。
但是出于保险考虑,TOSHIBA的光纤头DLT1150/DLR1150的供电电压必须是5V。
所以最终选用的电源电压由一个升压模块提供。
升压模块的型号为UMT3608。输入电压范围为0.8V-VCC。
所以这套灭弧系统可以使用一节、两节、三节干电池进行供电。
实际上我是使用一块手机锂电池进行供电。
为了防止过放和电量检测,我在STM8上分出一路ADC对电池电压进行采集。
而基准电压可以由VCC和内部1.8V电压基准进行对比,精度对于保护过放足够。
另一路ADC资源分配给了NTC电阻,这个电阻可以用来指示工作温度。
或者在整板使用的时候,贴在散热器上,对BUCK桥工作温度进行监测保护。
代码灵活性非常大,可以拓展的用途也许会很多。。。
灭弧实际使用的资源为TIM1 旋转编码器 TIM2 TIM3产生调制PWM&灭弧方波
TIM4则负责辅助以上定时器完成系统节拍,与全局变量更新获取。

实际上数字灭弧的好处是发生脉宽准确且易于调节。
QCW的调制波形是一段有台阶的上升波形。
影响电弧的因素包括初始台阶的高度、上升斜率、下降斜率、最大电平高度。
重复频率的影响则不是很大,这一点与工作在S路线的DR有着很大区别。
而模拟电路使用触发器+RC电路的方式,也能够实现锯齿波发生。
相对来说是不需要写代码,简单,缺点则是参数较为固定单一。
-
而代码的核心部分在于一个波形发生函数。
贴在下面仅供参考:

typedef struct {
  
  uint  S_ontime;   //per100us 10-250(1ms-25ms)<*100> 
  uint  S_offtime;   //pr100ms  2-50(0.2s-5s) 
  uint  S_top;      //top(%)10~200(5%-100%)
  uint  S_scale;    //scale = rise/rise+fall time 10~190(5%-95%)
  
}Slope_param_info;
/*global struct info*/
Slope_param_info SPARAMINFO ={100,2,200,180};
/* CUT LINE */
void Reload_Slope_Table(Slope_param_info SPF_info)
{
  static uint S_risetime,S_falltime;
  static float Ua,Fa;
    S_risetime=(uint)(SPF_info.S_ontime*SPF_info.S_scale/200);//(100uS)
    S_falltime =(uint)(SPF_info.S_ontime-S_risetime);//(100uS)
    Ua=(float)(SPF_info.S_top/S_risetime);//bit
    Fa=(float)(SPF_info.S_top/S_falltime);//bit
  for(uint i=1;i<250;i++)     {        if(i<s_risetime)         {            if((spf_info.s_top-slope_table[i-1])<ua)             {               slope_table[i]="SPF_info.S_top;"             } else         } if(i>=S_risetime)
        {
           if(Slope_Table[i-1]<fa)             {               slope_table[i]="0;"               goto end_table;             }            else         }     }     end_table:     return ; } < code></fa)></250;i++)></*100>

代码非常简洁易懂。
主体控制思想来自于使用一个名为Slope_param_info的结构体。
来把锯齿波进行抽象化。
其中
Ontime成员对应锯齿波宽度
top成员对应锯齿波最高电平
scale成员则是对应锯齿波上升与下降时间占比
这样就把锯齿波通过程序抽象控制,任何一个锯齿波可以视为结构体的例化。
而
void Reload_Slope_Table(Slope_param_info SPF_info)
函数则描述了一个可以将这个抽象变量重载入一个名为Slope_Table[250]的一位数组的方法。
具体控制原理也非常简单,浮点精确计算出斜率。
并且由for循环控制,把需要产生的锯齿波形载入表格,从而完成调制PWM。
来看看程序仿真结果
QQ截图20160721145206.jpg
这是产生的表格文件导出
attachment icon Watch1.log 8.03KB LOG 173次下载 点击下载波形文件
可以看到,按照结构体设定的变化,产生了一个从0-高从高-0的波形文件。
这个文件按照一定时间载入PWM发生器中,就可以实现调制。
用ST-LINK V2的Data Graph功能能够观察到数据的变化趋势。

这段代码来自V1.3.A版本。
现在的Reload函数与贴出来的部分有一点小小的区别。
针对波形顶端和精度有一定程度的优化,等最终定版会再做修改。
有兴趣可以保持关注。
QQ截图20160721150315.jpg
这是灭弧器的内部,由于还是实验版本接线比较乱。
但是已经实现了插入充电自动断电,以及低电量报警保护等功能。
待进一步完善吧。
评论
文号 / 823148

千古风流
名片发私信
学术分 5
总主题 53 帖总回复 1732 楼拥有证书:进士 老干部 学者 机友 笔友
注册于 2010/05/02 13:32:44最后登录 2025/02/26 11:20:29
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

曾是化学爱好者转到火箭爱好者最后变成电子爱好者的科创爱好者。

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的