12431浏览
查看: 12431|回复: 7

DIY超声波清洗器 (完)-- 设计与实现

[复制链接]
  • 电路结构

   根据上一篇提出的参数预期(46KHz,100V,100W)和选定的参考文档,可以将驱动电路按如下结构进行设计。
DIY超声波清洗器 (完)-- 设计与实现图16
   之所以选择使用220V交流电是出于对功率的考虑。当功率较大时,如果选用小电压,那么必然会使电路中的电流变得很大;而选用较大电压时,电路中的电流就会相对减小很多,从而方便电路设计。
   15V降压整流电路是用来给MOS管驱动芯片提供工作电压和逻辑电压的。全桥MOS管逆变电路设计上简单,也容易控制。逆变后得到的300V方波需要通过高频变压器降压,得到合适的电压值,再经滤波匹配电路后得到最终的输出波形来驱动换能器工作。
   控制部分与参考文档上选用的UC3875芯片不同,这里用STM32控制器进行替代。一方面因为STM32芯片功能强大足以满足该系统的控制需求,另一方面便于后期给系统扩展更丰富的功能。
  • 电路设计与器件选型

整流滤波电路
   这部分属于比较常见的电路,电路图如下:
DIY超声波清洗器 (完)-- 设计与实现图15
   整流桥选用集成桥堆GBU4M,1000V整流电压,最大可提供4A电流。
   可能有些人会奇怪为什么整流滤波后电压“升高”到300V了,这是因为我们所使用的工频220V交流电实际上指的是它的有效值,而整流滤波之后,在没有后级负载时,电容两端就可以达到电压的峰值,约为有效值的1.414倍,大概是311V左右。因此滤波电容在选择时也一定要注意其耐压值。同时由于电容具有储能作用,在电路断电后,如果没有后级放电回路,那么电容两端将会保持300V左右电压,手动短路放电又会产生很大的火花,因此加一个指示灯电路作为放电回路。发光二极管工作电流在20mA以内,因此可以并联30KΩ的电阻,此时回路电流10mA,加在电阻上功率为3W左右,所以选择两个2W/15KΩ的电阻串联即可。
   15V稳压电路首先由变压器将220V降至15V,经整流滤波后通过7815稳压芯片稳压得到15V电压。与上面道理一样,滤波后的电压会“升高”至21V左右,满足7815对输入电压的要求。
DIY超声波清洗器 (完)-- 设计与实现图14
全桥逆变电路
   目前常用的有三种逆变电路,分别是推挽型,半桥型和全桥型。经对比分析后选用全桥型逆变电路。
DIY超声波清洗器 (完)-- 设计与实现图13
   在此电路中,开关管T1和T3轮流导通,各通 180度电角度,T4和,T2也是这样,但T1和T2不是同时导通,两者导通差一定的电角度,其中T1和T4分别先于T2和T3导通,通过移相可实现输出功率的大小调节。
   由于全桥电路工作在对称模式下,这就必然存在“死区时间”,所谓死区,指的是为避免上下两只开关管同时导通,所以在上路桥臂关断后要延迟一定的时间才能打开下桥臂。而在关断的瞬间,因电感的滞后性,电路中电流保持原方向,导致加在开关管上的电压应力特别高,此时必须对电流进行分流,即增加一个缓冲环节,这样开关管瞬间的电压应力可以得到明显减小,降低了故障率和对开关管的性能要求。
   在增加RC缓冲电路后,全桥驱动电路如下图所示:
DIY超声波清洗器 (完)-- 设计与实现图12
   开关管选用的是四个型号为IRFP460的N-MOS管。其参数如下,符合本电路的功率和速度要求:
DIY超声波清洗器 (完)-- 设计与实现图17
   因为MOS管在高速开关状态会产生较大的开关功耗,所以还需要给每个MOS管安装一个散热片。
   缓冲电路在工作时会有较大的瞬时电流通过,所以300Ω电阻需选用10W水泥电阻,考虑到横式体积较大,因此可以选用立式封装的水泥电阻。

MOS管驱动电路
   本次设计选用的驱动芯片为IR2110,该芯片为MOSFET和IGBT专用驱动集成电路,内部采用自举技术来实现同一集成电路可同时输出两个驱动逆变桥中高压侧与低压侧的通道信号,因此在桥式电路中具有节省隔离驱动电源的优势。其允许的工作电压范围是5~20V。芯片自身可对输入的两个通道信号产生合适的延时,保证了加到被驱动的逆变桥中同桥臂上的两个功率MOS器件的驱动信号之间有一定的互锁时间间隔。芯片最大可输出2A的驱动电流,而且开关速度较快。电路连接如下图:

降压与滤波电路
   300V电压经逆变桥之后,可以得到同幅值的46KHz方波信号,这个电压值较高,需要通过高频变压进行降压。之后还要对方波信号进行滤波以得到最终用来驱动换能器的正弦波信号。
依照参考文档,滤波电路选用LC低通滤波器,谐振频率计算公式:
DIY超声波清洗器 (完)-- 设计与实现图10
   频率为46KHz,C取1.2μF,得L为10μH。
   电路如下图:
DIY超声波清洗器 (完)-- 设计与实现图11
   由参考文档上提供的计算方法,可得到变压器的变比约为12:1。因为高频变压器通常需要定制,所以在淘宝上找到了一家提供变压器打样的店铺,价格还可以接受。把相关的参数发给对方,定制时间大约一周。
工作频率:46KHz
磁芯:EE55
原边:直径0.6mm漆包线3根并绕,68匝
副边:直径0.6mm漆包线20根并绕,6匝
   经过降压后电路的电流会变大,在画板设计时须要考虑大电流处理。
接口与隔离电路
   驱动电路使用的是220V强电,而控制部分使用的是低电压单片机,为降低控制信号的干扰同时也避免驱动电路出现故障后烧坏控制器及其它有电气连接的设备,因此需要设计电气隔离电路。
   控制信号是46KHz的高频信号,可选用高速光耦6N136进行隔离。电路大致如下图:
DIY超声波清洗器 (完)-- 设计与实现图9
   至此各部分电路的设计与选型就完成了。
整体原理图 如下图:
DIY超声波清洗器 (完)-- 设计与实现图8
  • 程序设计

   控制器要实现的功能非常简单,需要用到STM32外设中的串口和高级定时器1,前者用来和上位机进行通信,后者用来输出带有互补信号的PWM信号。
   串口的使用比较简单,可以参考官网提供的例程,这里唯一需要注意的是,串口功能需要进行IO映射,由原来的PA9和PA10映射到PB6和PB7,这是因为高级定时器的四路PWM信号输出占用了PA9。同时I2C1的IO也需要启用映射,因为要被串口1占用了。
   STM32高级定时器功能强大,可以输出带互补信号的PWM信号,同时可以设置死区时间以及默认极性。另外还可以启用外部刹车信号,用来锁死输出状态。功能看似复杂,但配置起来也是比较简单的。主要配置代码如下:
/******第一部分 时基初始化**********/
TIM_DeInit(TIM1); //重设为缺省值
/*TIM1时钟配置*/
TIM_TimeBaseStructure.TIM_Period = period;//装载值
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频(时钟分频)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;   //设置了时钟分割
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;    //周期计数器值
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);    //初始化TIMx的时间基数单位
TIM_ARRPreloadConfig(TIM1,ENABLE);      //使能重装载寄存器

/******第二部分 输出模式初始化**********/
/* Channel 1 Configuration in PWM mode 通道一的PWM */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;     //PWM模式1
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;        //占空时间,互补的输出相反
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;   //输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;  //使能该通道输出
//下面几个参数是高级定时器才会用到,通用定时器不需要配置
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;     //互补端的极性
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;     //互补端的极性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;  //空闲状态下的非工作状态
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;  //空闲状态下的非工作状态

TIM_OC1Init(TIM1,&TIM_OCInitStructure);       //初始化外设TIMx通道
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能预装载寄存器

TIM_OCInitStructure.TIM_Pulse = CCR2_Val;        //占空时间,互补的输出相反
TIM_OC2Init(TIM1,&TIM_OCInitStructure);       //数初始化外设TIMx通道
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能预装载寄存器

/******死区和刹车功能配置,高级定时器才有的,通用定时器不用配置******/
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;//运行模式下输出选择
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;//空闲模式下输出选择
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;    //锁定设置
TIM_BDTRInitStructure.TIM_DeadTime = 360;                  //死区时间设置
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;        //刹车功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;//自动输出使能

/* TIM1 counter enable开定时器 */
TIM_Cmd(TIM1,ENABLE);
TIM_CtrlPWMOutputs(TIM1, DISABLE);  //pwm输出使能,一定要记得打开
   在主main()函数中进行初始化,设置PWM频率并启用定时器,主循环中接收并处理串口收到的数据就可以了。
   至此,驱动板的硬件和软件设计就完成了。
   PCB板子做出来的效果是这样的:
DIY超声波清洗器 (完)-- 设计与实现图7
   经过一步步焊接和调试之后,最后的系统是这样的:
DIY超声波清洗器 (完)-- 设计与实现图6
   因为个人经验不足,在做设计和调试过程中出现了许多各种各样的问题,也付出了一定的“惨痛代价”,后面一篇我会和大家分享一下整个过程遇到的问题和一些收获到的经验。

DIY超声波清洗器 -- 问题与总结
   上一篇文章介绍了超声波换能器驱动电路的设计和实现过程,在这个过程中遇到了一些问题,很大一部分是因我个人经验不足而出现的失误,在此做个简单的记录。
DIY超声波清洗器 (完)-- 设计与实现图5
   首先从电源说起吧!
   逆变电路所需的300V直流电压是从220V交流电经整流滤波后得到的,滤波电容是一个几百微法的电解电容。在起初设计时,我并没有考虑到在系统断电后需要对电容进行放电,所以没有设计放电电路。而在板子做好要焊接元器件的时候我才注意到这问题。在没有放电回路的情况下,每次断电后都需要手动进行短路放电,要非常小心,而且放电时还会有像放炮一样的火花,那感觉就像拆炸弹一样。后来接了电阻和LED串联的放电回路解决了这个问题,但是在通电后电阻上的功耗就始终有3W左右,所以应该有更合适的放电方案。
DIY超声波清洗器 (完)-- 设计与实现图4
   有些失误是非常低级的,比如晶闸管的封装管脚就被我画反了。当时画图时直接调用库里的一个N-MOS管封装,并没有和选用的MOS数据手册进行对比,想当然地觉得同一种极性的MOS引脚顺序就是一样的,结果就是PCB上的走线出错,调试电路时烧了两个MOS管,用了很长世间才发现问题的原因,后来还不得不在板子上切线飞线。相当浪费时间。
DIY超声波清洗器 (完)-- 设计与实现图3
   在调试MOS管驱动电路IR2110时也遇到了问题,输出波形一直与预期不一致,芯片发热烧坏一块。后来在网上发现有人遇到过同样的问题,原因是二极管选用不合适。在刚开始我用的是1N4007这个比较常用的二极管,但是它用在这个电路上并不合适,因为响应速度相对40KHz来说太慢了,需要用UF4007这个管子进行替换。这是之前没有注意到的。
DIY超声波清洗器 (完)-- 设计与实现图2
   IR2110是DIP14封装,因为烧坏一个需要换掉,那时候才发现焊时容易拆时难!刚开始没考虑到这种芯片可能毁坏掉,所以没有用插座而是直接焊到电路板上了,这就导致更换时非常麻烦。
DIY超声波清洗器 (完)-- 设计与实现图1
   对于外部连线,最好能选个合适的接线端子进行连接,不然要么是线容易断,要么就是线很乱。两个变压器的连接在设计时就失误没有用接线端子,而是直接在板子上留焊接孔,所以调试时变压器的连线就断了好几次,不光麻烦,还存在一定危险。

   在涉及到电路的工作和使用安全时,一定要考虑控制电路及主电路在复位甚至是断电时的信号状态,而不仅仅只是考虑系统开始工作后的初始状态。这是一个惨痛的教训,设计时我只考虑了系统上电后初始化后要首先进入无输出状态,以为这样系统就是安全的。这里同时还存在另一个失误,就是在刚开始设计的电路上,并没有考虑到电气隔离的环节,控制器输出的PWM信号直接驱动IR2110芯片,电源由驱动板上的稳压芯片提供。因为没考虑到复位状态及掉电时的状态,所以在驱动电路接上220V电源后的瞬间,控制器还没有得到稳定的工作电压,仍处于掉电状态,而此时驱动电路的默认输出是上下桥臂全部导通,而此时300V电源已经产生,便直接对地短路了。当时烧坏了MOS管和驱动芯片,同时发生高电压倒灌,烧了控制器,由于控制器又通过USB串口模块连着电脑,所以烧了电脑的主板,不幸地连CPU也一起烧坏了。。。
   考虑不全面所付出的代价太大了。我想起了以前导师常对我说的话“脑子不好的人不适合做设计。”犹如响亮的一记耳光!
   另外在用示波器测试电路信号时出现了几次上电就短路现象,后来注意到原来示波器信号笔的地在默认状态下是和插座上的地线导通的,这时如果把信号笔的低接入整流后的电路,就会间接地导致火线或零线对地有电流,这样的情况会引起房间里的空气开关跳闸。这种情况下测量时就不需要接入地线,直接用信号端测量即可。
   超声波洗衣器的设计就此告一段落,后续可能还会再对它进行一些改进或是优化,因为确实还有很多可做的事。

liudaosixway

virtualwiz  中级技匠

发表于 2016-1-13 13:34:56

好帖Mark

期待LZ来个工作中的视频
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-1-13 14:24:05

少年,打板前要认真检查,不过这个一般也检查不出来
回复

使用道具 举报

hnyzcj  版主

发表于 2016-1-13 16:14:33

能自己打板子感觉很牛的。
回复

使用道具 举报

何处不江南  初级技匠
 楼主|

发表于 2016-1-13 17:18:20

hnyzcj 发表于 2016-1-13 16:14
能自己打板子感觉很牛的。

学学设计就好啦 哈哈
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2016-1-17 21:08:53

我也教学生,这个学期让他们焊接了一个声光控制的电路
回复

使用道具 举报

JoyceWu  见习技师

发表于 2017-3-30 13:26:56

请问你的微信公众号是?另外文章汇总的图片都看不了哦  
回复

使用道具 举报

5oliuLt0  学徒

发表于 2020-3-19 22:55:01

老兄,原理图共享的啦;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail