制作一个自己的灭弧器
本帖最后由 薛定谔的猫 于 2014-8-27 15:37 编辑

在特斯拉线圈中一个很重要的部分就是灭弧器。

传统的555灭弧器普遍存在低ontime下不稳定,难以精确定量输出,数据不直观,RC设计繁琐,制作良品率低等问题。

而使用单片机的灭弧器又对玩家的技术水品要求比较高,但是单片机精确定量,直观显示的优势又是显而易见。

这里我们抛砖引玉,使用目前市面上非常常见的开源硬件arduino来制作一个简单易用的灭弧器。

(仅简单的介绍一个实例,不对单片机的技术细节问题作出介绍,有问题欢迎大家多多交流)


1、Hardware

225429
    225430



这里我们使用高压局前段时间开发的一款硬件,基于arduino UNO设计,MCU使用MEGA328,USB2TTL使用FT232,增加了光纤头,MIDI接口等外设。

shield上有USB2MIDI,I2C扩展并口(主要用来驱动1602 2004等并口显示屏)等芯片,附带了四个脉冲按键和两个E12编码器。

由于开发阶段仓促和前期考虑不周等原因,这俩板子现在有一打bug(图中可以看到大量跳线),所以暂不对大家开放

首先讲一下硬件的连接部分。

为了实现1602显示状态,两个编码器设定灭弧的频率和工作周期,并且用光纤头输出等功能,我们在硬件上做出如下设计:

1)减少IO使用,用I2C扩展芯片PCF8574T扩展出四线并口用于驱动LCD(具体接法和本文用到的arduino I2C1602库见附件);
                                                            

2)使用中断方式读取编码器状态,需要将编码器连接在mcu的外部中断脚上,mega328有PD2、PD3两个中断引脚,就是arduino UNO板子上的数字IO口 2、3
                                                            225431


3)我们随便找一个IO用于输出灭弧信号,这里使用的是PD5,arduino的IO5
                                                            225432



这样基本的硬件已经搭建完成了。


2、Software

1)首先我们介绍灭弧器的核心部分,就是如何产生并输出一个特定频率和脉宽的波形。
    
    这里我们用mega328的timer1,CTC模式来产生频率。
    arduino的晶振频率是16MHz,8分频产生500KHz的信号 ,每周期就是0.5us,可以基本达到我们需要的频率精度。
    再设置比较器的值,来输出我们需要的频率 。


    



   这里我们就得到默认的50HZ的灭弧信号了

   然后是输出


    


这时就能从我们定义的输出引脚输出灭弧信号了。



3)改变灭弧信号的值。

    这里可以用多种方法方法改变灭弧信号,我们用比较直观的数字编码器来改变频率和脉宽

    
    我们使用的旋转编码器接法时序为
                    ← CCW(逆时针)
A   -----------             --------------  HIGH
                   ----------                    LOW

                   → CW(顺时针)
B  --------             ------------------  HIGH
              ----------                         LOW
    225434


     ENA脚下降沿触发时查询B脚的电平,若为低电平时,由时序图可知为顺时针方向旋转(CW),位置增加1
    
     而ENA脚上升沿触发时查询B脚的电平,若为高电平时,由时序图可知为顺时针方向旋转(CW)。
    
     ENB脚下降沿触发时查询B脚的电平,若为高电平时,由时序图可知为逆时针方向旋转(CCW),位置减少1
    
     而ENA脚上升沿触发时查询B脚的电平,若为低电平时,由时序图可知为逆时针方向旋转(CCW)。


    使用中断读取编码器位置后  对bps和ontime重新赋值,再复位定时器,输出新的灭弧信号

    




于是,这个arduino灭弧器大部分的功能就已经完成了。


3)显示状态,


   把当前灭弧器的状态直接显示在LCD上,更加直观
   这里我们直接调用I2c 1602的库文件来简化代码,这个库文件在上面的附件中有。
   由于1602并不适合快速刷新,在中断里面又不能放太多操作,所以我们在主循环中检测到BPS或者ONTIME变化时再改变显示内容,以提升显示效果,
   内容很简单,直接看代码

    




    





以上就是整个灭弧器的功能了,非常简单,这只是目前基于这个硬件的一个初步功能,直接上传ino文件供大家交流




目前的效果


225437
  225436


这只是目前初步实现的一部分功能,一个试验,将来会基于这个硬件做更多的开发,加入midi灭弧  音色控制等等功能。

上学期C语言差点挂科,花了两天时间大致学习了一下arduino,凭着我个人的一知半解完成的整个程序的编写,内容肯定存在很多不足之处,还请大家指正。














+50  科创币    rudolf   2014-08-27   再接再励
+25  科创币    kcltxinshou   2014-08-27   赞扬
+100  科创币    ry7740kptv   2014-08-27   本期最佳作品奖
+500  科创币    1211   2014-08-28   赞扬
+100  科创币    sukeytang   2014-08-28   赞扬
来自 高电压技术
 
2014-8-27 07:29:08
薛定谔的猫(作者)
1楼
本帖最后由 薛定谔的猫 于 2014-8-27 07:30 编辑

精度测试,感谢奇侠侠用屌屌的示波器测了一堆数据,

首先是设定1234Hz  56uS



   225438
    225439



恩 频率差了1Hz


下面是测到的数据

225440



可以看出 在极小脉宽和比较高的频率时,灭弧器的输出误差比较大,但是在常用的灭弧信号范围中,输出的精度能够达到要求,基本上是可以使用的。
折叠评论
加载评论中,请稍候...
折叠评论
薛定谔的猫(作者)
2楼
本帖最后由 薛定谔的猫 于 2014-8-27 07:30 编辑

恩 存在一个开机显示有四个乱码的问题,转动编码器之后就消失,目前原因不明。

如图  

225441
折叠评论
加载评论中,请稍候...
折叠评论
3楼
是买的套件自己焊的吗
折叠评论
加载评论中,请稍候...
折叠评论
4楼
是买的套件自己焊的吗
折叠评论
加载评论中,请稍候...
折叠评论
薛定谔的猫(作者)
5楼
大帅哥 发表于 2014-8-27 07:39
是买的套件自己焊的吗


这个是高压局自己开发的
折叠评论
加载评论中,请稍候...
折叠评论
6楼
這有點複雜了。實現精準可以直接用高頻晶振進行分頻,用計數器來做。比較簡單
折叠评论
加载评论中,请稍候...
折叠评论
7楼
开源, 这是造福大家啊。。。
折叠评论
加载评论中,请稍候...
折叠评论
8楼
薛猫年会那个金属壳子灭弧器是用的usb协议么??
折叠评论
加载评论中,请稍候...
折叠评论
9楼
薛定谔的猫 发表于 2014-8-27 07:29
精度测试,感谢奇侠侠用屌屌的示波器测了一堆数据,

首先是设定1234Hz  56uS


这款示波器得多少钱啊
折叠评论
加载评论中,请稍候...
折叠评论
薛定谔的猫(作者)
10楼
魔羯司令在此 发表于 2014-8-27 10:46
這有點複雜了。實現精準可以直接用高頻晶振進行分頻,用計數器來做。比較簡單


这里用的定时器,原理一样的 加了一些婆婆妈妈的功能
折叠评论
加载评论中,请稍候...
折叠评论
薛定谔的猫(作者)
11楼
1176764177 发表于 2014-8-27 14:02
薛猫年会那个金属壳子灭弧器是用的usb协议么??


midi 内置了usb2midi
折叠评论
加载评论中,请稍候...
折叠评论
12楼
嗖嘎我以为用的avr做的usb协议
折叠评论
加载评论中,请稍候...
折叠评论
2014-8-28 08:21:51
13楼
能加个Audio Sampling就更好了~
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png