在无法从电网获得交流电源的地方,通常需要使用逆变器电路。逆变器电路用于将直流电转换为交流电,它可以分为两种类型,即纯正弦波逆变器或变型方波逆变器。这些纯正弦波逆变器非常昂贵,而改进的方波逆变器很便宜。在此处了解有关不同类型逆变器的更多信息。
在上一篇文章中,我已经向您展示了如何通过解决与之相关的问题而不制造改进的方波逆变器。因此,在本文中,我将使用Arduino制造一个简单的纯正弦波逆变器,并解释电路的工作原理。
如果要制作此电路,请注意,该电路没有反馈,没有过流保护,没有短路保护和没有温度保护。因此,仅出于教学目的而构建和演示该电路,并且绝对不建议为商用设备构建和使用这种类型的电路。但是,您可以根据需要将它们添加到电路中,常用的保护电路例如
已经讨论过电压保护,过电流保护,反极性保护,短路保护,热插拔控制器等。
注意:如果要制作这种类型的电路,请格外小心输入到开关信号所产生的高压和尖峰电压。
什么是SPWM(正弦脉冲宽度调制)?
正如其名,SPWM代表小号inusoidal P ulse W¯¯ IDþ中号odulation。您可能已经知道,PWM信号是一种信号,我们可以在其中改变脉冲的频率以及接通时间和断开时间,也称为占空比。如果您想了解有关PWM的更多信息,可以在这里阅读。因此,通过改变占空比,我们可以改变脉冲的平均电压。下图显示-
如果我们考虑在0-5V之间切换,占空比为100%的PWM信号,我们将获得5V的平均输出电压,如果我们考虑占空比为50%的相同信号,我们将获得得到2.5V的输出电压,占空比为25%时,它的一半。总结了PWM信号的基本原理,我们可以继续了解SPWM信号的基本原理。
甲正弦电压主要是一种类比电压改变其随时间幅度,并且我们可以通过再现正弦波的这种行为不断改变PWM波的占空比,下面的图像示出了这一点。
如果您看下面的示意图,将会看到在变压器的输出端连接了一个电容器。该电容器负责使载波信号中的交流信号平滑。
利用的输入信号将根据输入信号 和负载对电容器充电和放电。由于我们使用的是非常高频的SPWM信号,它将具有非常小的占空比,例如1%,此1%的占空比将为电容器充电一点,下一个占空比为5%,这将再次充电电容器多一点,随后的脉冲将具有10%的占空比,电容器将多一点电荷,我们将施加信号,直到达到100%的占空比,然后再回落至1%。这将在输出处创建非常平滑的曲线,如正弦波。因此,通过在输入端提供适当的占空比值,我们将在输出端产生非常正弦波。
SPWM逆变器如何工作
上述图像显示主的SPWM逆变器的驱动部,并且如可以看到,我们已经使用了两个N沟道MOSFET在半桥配置来驱动该电路的变压器,以减少不必要的开关噪声,并保护MOSFET ,我们使用了与MOSFET并联的1N5819二极管。为了减少在栅极部分产生的任何有害尖峰,我们使用了与1N4148二极管并联的4.7欧姆电阻器。最后,BD139和BD 140晶体管配置为推挽 配置以驱动MOSFET的栅极,因为该MOSFET具有很高的栅极电容,并且需要至少10V的基极电压才能正常导通。在此处了解有关推挽放大器工作的更多信息。
为了更好地理解电路的工作原理,我们将其简化为MOSFET的该部分导通的位置。当MOSFET接通电流时,首先流经变压器,然后由MOSFET接地,因此也会在电流流动的方向上感应出磁通量,并且变压器的磁芯会通过磁通量在次级绕组中,我们将在输出端获得正弦信号的正半个周期。
在下一个周期中,电路的底部在电路的顶部关闭,这就是为什么我移除了顶部的原因,现在电流沿相反的方向流动并在该方向上产生磁通量,因此反向磁芯中的磁通方向。在此处了解有关MOSFET工作的更多信息。
现在,我们都知道变压器是通过磁通量变化来工作的。因此,同时打开和关闭MOSFET,一次又一次地将其导通和关断,并在一秒钟内进行50次,这将在变压器铁芯内部产生良好的振荡磁通量,并且变化的磁通量将在次级线圈中感应出电压,如下所示:根据法拉第定律我们知道。这就是基本逆变器的工作方式。
下面给出了本项目中使用的完整SPWM逆变器电路。
构建SPWM逆变器所需的组件
编号 |
部分 |
类型 |
数量 |
1个 |
Atmega328P |
我知道了 |
1个 |
2 |
IRFZ44N |
莫斯费 |
2 |
3 |
BD139 |
晶体管 |
2 |
4 |
BD140 |
晶体管 |
2 |
5 |
22pF |
电容器类 |
2 |
6 |
10K,1% |
电阻器 |
1个 |
7 |
16兆赫 |
水晶 |
1个 |
8 |
0.1uF的 |
电容器类 |
3 |
9 |
4.7R |
电阻器 |
2 |
10 |
1N4148 |
二极管 |
2 |
11 |
LM7805 |
调压器 |
1个 |
12 |
200uF,16V |
电容器类 |
1个 |
13 |
47uF,16V |
电容器类 |
1个 |
14 |
2.2uF,400V |
电容器类 |
1个 |
SPWM逆变器电路构造
对于本演示,该电路是在Veroboard上构建的,并借助原理图在变压器的输出端,连接中将流过大量电流,因此连接跳线必须尽可能厚。
适用于SPWM逆变器的Arduino程序
在开始理解代码之前,让我们先弄清楚基础知识。根据上述工作原理,您已经了解了PWM信号在输出端的外观,现在的问题仍然是如何在Arduino的输出引脚上产生这样一个变化的波形。
为了产生变化的PWM信号,我们将使用预分频器设置为1的16位timer1,如果考虑正弦波的单个半周期,则每个计数将为我们提供1600/16000000 = 0.1ms的时间,在半个周期内恰好适合100次。简单来说,我们将能够采样200次正弦波。
接下来,我们必须将正弦波划分为200个,并使用振幅的相关性来计算它们的值。接下来,我们必须通过将其乘以计数器限制将这些值转换为计时器计数器值。最后,我们必须将这些值放入查找表中,以将其馈送到计数器,然后得到正弦波。
为了使事情更简单,我使用了Kurt Hutten编写的,来自GitHub的写得很好的SPWM代码。
代码很简单,我们通过添加所需的头文件开始我们的程序
#include #include
接下来,我们有两个查询表,将从中获取计时器计数器值。
int lookUp1 = {50,100,151,201,250,300,349,398,446,494,542,589,635,681,726,771,814,857,899,940,981,1020,1058, 1095,1131,1166,1200,1233,1264,1294,1323,1351,1377,1402,1426,1448,1468,1488,1505,1522,1536,1550,1561,1572,1580,1587,1593,1597, 1599,1600,1599,1597,1593,1587,1580,1572,1561,1550,1536,1522,1505,1488,1468,1448,1426,1402,1377,1351,1323,1294,1264,1233,1200, 1166,1131,1095,1058,1020,981,940,899,857,814,771,726,681,635,589,542,494,446,398,349,300,250,201,151,100, 50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int lookUp2 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,50,100,151,201,250,300,349,398,446,494,542,589,635,681,726,771,814,857,899,940,981,1020,1058, 1095,1131,1166,1200,1233,1264,1294,1323,1351,1377,1402,1426,1448,1468,1488,1505,1522,1536,1550,1561,1572,1580,1587,1593,1597, 1599,1600,1599,1597,1593,1587,1580,1572,1561,1550,1536,1522,1505,1488,1468,1448,1426,1402,1377,1351,1323,1294,1264,1233,1200, 1166,1131,1095,1058,1020,981,940,899,857,814,771,726,681,635,589,542,494,446,398,349,300,250,201,151,100,50,0};
接下来,在 设置 部分,我们初始化计时器计数器控制寄存器,以清除每个寄存器。有关更多信息,您需要浏览atmega328 IC的数据表。
TCCR1A = 0b10100010; / * 10匹配时清除,在底部为compA设置。比赛时10净,设定为compB的BOTTOM。00 10 WGM1 1:0代表波形15 * / TCCR1B = 0b00011001; / * 000 11 WGM1 3:2,用于波形15。001计数器上没有预分频。* / TIMSK1 = 0b00000001; / * 0000000 1 TOV1标志中断使能。* /
之后,我们使用预定义的值16000初始化输入捕获寄存器,因为这将帮助我们精确地生成200个样本。
ICR1 = 1600;// 16MHz晶体的周期,对于每50Hz正弦波周期200个细分,开关频率为100KHz。
接下来,我们通过调用函数来启用全局中断,
sei();
最后,我们将Arduino引脚9和10设置为输出
DDRB = 0b00000110; //将PB1和PB2设置为输出。
这标志着设置功能的结束。
该代码的循环部分保持为空,因为它是计时器计数器中断驱动的程序。
无效loop(){; /*没做什么 。。。。永远!*/}
接下来,我们定义了timer1溢出向量,一旦timer1溢出并产生中断,此中断函数就会调用。
ISR(TIMER1_OVF_vect){
接下来,我们将一些局部变量声明为静态变量,并开始将这些值馈送到捕获和比较电阻。
静态整数 静态字符触发 //每个周期更改占空比。OCR1A = lookUp1; OCR1B = lookUp2;
最后,我们将计数器预递增以将下一个值馈送到捕获和比较电阻,这标志着该代码的结束。
if(++ num> = 200){//预递增num,然后检查它是否小于200。num = 0; //重置数字 trig = trig ^ 0b00000001; digitalWrite(13,trig); }
测试TL494 PWM逆变器电路
为了测试电路,使用以下设置。
- 12V铅酸电池。
- 具有6-0-6抽头和12-0-12抽头的变压器
- 100W白炽灯泡作为负载
- Meco 108B + TRMS万用表
- Meco 450B + TRMS万用表
Arduino的输出信号:
一旦我上传了代码。我测量了Arduino两个引脚的输出SPWM信号,如下图所示,
如果放大一点,我们可以看到PWM波的占空比不断变化。
接下来,下图显示了变压器的输出信号。
理想状态下的SPWM逆变器电路:
从上图可以看出,该电路在理想状态下的功耗约为13W
空载输出电压:
逆变器电路的输出电压如上所示,这是在没有任何负载的情况下在输出端输出的电压。
输入功率消耗:
上图显示了连接40W负载时ic消耗的输入功率。
输出功率消耗:
上图显示了此电路消耗的输出功率(负载为40W白炽灯泡)
这样,我们得出了电路的测试部分。您可以查看下面的视频进行演示。希望您喜欢这篇文章,并且对SPWM及其实现技术有所了解。继续阅读,继续学习,继续建设,我将在下一个项目中与您会面。