本帖最后由 薛定谔的猫 于 2014-8-27 15:37 编辑 在特斯拉线圈中一个很重要的部分就是灭弧器。
传统的555灭弧器普遍存在低ontime下不稳定,难以精确定量输出,数据不直观,RC设计繁琐,制作良品率低等问题。
而使用单片机的灭弧器又对玩家的技术水品要求比较高,但是单片机精确定量,直观显示的优势又是显而易见。
这里我们抛砖引玉,使用目前市面上非常常见的开源硬件arduino来制作一个简单易用的灭弧器。
(仅简单的介绍一个实例,不对单片机的技术细节问题作出介绍,有问题欢迎大家多多交流)
1、Hardware
这里我们使用高压局前段时间开发的一款硬件,基于arduino UNO设计,MCU使用MEGA328,USB2TTL使用FT232,增加了光纤头,MIDI接口等外设。
shield上有USB2MIDI,I2C扩展并口(主要用来驱动1602 2004等并口显示屏)等芯片,附带了四个脉冲按键和两个E12编码器。
由于开发阶段仓促和前期考虑不周等原因,这俩板子现在有一打bug(图中可以看到大量跳线),所以暂不对大家开放
首先讲一下硬件的连接部分。
为了实现1602显示状态,两个编码器设定灭弧的频率和工作周期,并且用光纤头输出等功能,我们在硬件上做出如下设计:
1)减少IO使用,用I2C扩展芯片PCF8574T扩展出四线并口用于驱动LCD(具体接法和本文用到的arduino I2C1602库见附件);
IIC模块资料.zip
1.19MB
ZIP
72次下载
2)使用中断方式读取编码器状态,需要将编码器连接在mcu的外部中断脚上,mega328有PD2、PD3两个中断引脚,就是arduino UNO板子上的数字IO口 2、3
3)我们随便找一个IO用于输出灭弧信号,这里使用的是PD5,arduino的IO5
这样基本的硬件已经搭建完成了。
2、Software
1)首先我们介绍灭弧器的核心部分,就是如何产生并输出一个特定频率和脉宽的波形。
这里我们用mega328的timer1,CTC模式来产生频率。
arduino的晶振频率是16MHz,8分频产生500KHz的信号 ,每周期就是0.5us,可以基本达到我们需要的频率精度。
再设置比较器的值,来输出我们需要的频率 。
这里我们就得到默认的50HZ的灭弧信号了
然后是输出
这时就能从我们定义的输出引脚输出灭弧信号了。
3)改变灭弧信号的值。
这里可以用多种方法方法改变灭弧信号,我们用比较直观的数字编码器来改变频率和脉宽
我们使用的旋转编码器接法时序为
← CCW(逆时针)
A ----------- -------------- HIGH
---------- LOW
→ CW(顺时针)
B -------- ------------------ HIGH
---------- LOW
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文件供大家交流
arduino interrupterV0.9.attach
3.65KB
ATTACH
60次下载
目前的效果
这只是目前初步实现的一部分功能,一个试验,将来会基于这个硬件做更多的开发,加入midi灭弧 音色控制等等功能。
上学期C语言差点挂科,花了两天时间大致学习了一下arduino,凭着我个人的一知半解完成的整个程序的编写,内容肯定存在很多不足之处,还请大家指正。
200字以内,仅用于支线交流,主线讨论请采用回复功能。