分享

STM32正弦波逆变器设计资料 含SPWM数据生成软件VB源码+PCB+原理图等

 共同成长888 2019-06-24

Altium Designer画的逆变控制板与逆变直流升压电路原理图和PCB图如下:(51hei附件中可下载工程文件)







逆变电源设计概要
大家知道, 市电或其他的交流电可以通过二极管或可控硅的单向导电性整流成直流电供给需要使用直流电的场合。这种把交流电变换成直流电的过程我们叫做整流,也叫做顺变。那么逆变呢?我们自然地就会想到,应该就是把直流电变换成交流电的过程。逆变电源就是相对于整流器而言通过半导体功率开关器件的开通和关断把直流电变换成交流电的这么一个装置。 逆变电源也叫做逆变器, 下面分单元地讲一下逆变器主要的单元电路。 主要内容为:  
一.电池输入电路
二.辅助电源电路
1. 12V 电池输入的辅助电源电路
2. 24V-48V电池输入的辅助电源电路
3. 多路隔离辅助电源电路
三.高频逆变器前级电路的设计
1. 闭环前级变压器匝数比的设计
2. 准开环前级变压器匝数比的设计
四.高频逆变器后级电路的设计
1. 米勒电容对高压 MOS 管安全的影响及其解决办法
2. IR2110应用中需要注意的问题
3. 正弦波逆变器 LC 滤波器的参数
五.逆变器的部分保护电路
1. 防反接保护电路
2. 电池欠压保护
3. 逆变器的过流短路保护电路的设计
4. IGBT 的驱动和短路保护


stm32单片机逆变器控制软件源程序如下:
  1. /****************************************************************

  2. * Copyright (c) 2010 ,

  3. * All rights reserved.

  4. *

  5. *

  6. *文件名称:

  7. *文件标示:

  8. *摘要         :

  9. *当前版本:v1.0

  10. *****************************************************************/


  11. #include "includes.h"

  12. #include "math.h"


  13. __align(8) static OS_STK         TaskStartStk[500];

  14. __align(8) static OS_STK        TaskLedStk[500];



  15. #define START_PRIO                1u

  16. #define LED_PRIO                        5u



  17. OS_EVENT        * spk;

  18. OS_EVENT        * lcd;

  19. OS_EVENT         * time_10;



  20. static void TaskStart( void *parg);

  21. static void TaskLed(void *parg);

  22. void MenusTask( void *parg);


  23. int main()


  24. {



  25.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  26.         OSInit();


  27.         spk=OSSemCreate( 1 );

  28.         lcd=OSSemCreate( 1 );

  29.         time_10=OSSemCreate( 1 );



  30.         OSTaskCreateExt( TaskStart,

  31.                                                                          (void *)0,

  32.                                                                          &TaskStartStk[500-1],

  33.                                                                          START_PRIO,

  34.                                                                          START_PRIO,

  35.                                                                          TaskStartStk,

  36.                                                                          500,

  37.                                                                          ( void *)0,

  38.                                                                          OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);       


  39.         OSStart();

  40.         return 0;

  41. }


  42. #include "math.h"

  43. static float x_est_last1 = 0;

  44. static float P_last1 = 0;

  45. /*/the noise in the system */

  46. static float Q1 = 0.1;

  47. static float R1 = 0.8;


  48. static float K1;

  49. static float P1;

  50. static float P_temp1;

  51. static float x_temp_est1;

  52. static float x_est1;

  53. static float z_measured1; /*/the 'noisy' value we measured  */

  54. //   float z_real = 0.5; /*/the ideal value we wish to measure */

  55. static float sum_error_kalman1 = 0;

  56. static float sum_error_measure1 = 0;


  57. static float kalman1(float z_real)

  58. {                

  59.         /*/do a prediction */

  60.         x_temp_est1 = x_est_last1;

  61.         P_temp1 = P_last1 + Q1;

  62.         /*/calculate the Kalman gain */

  63.         K1 = P_temp1 * (1.0/(P_temp1 + R1));

  64.         /*/measure*/

  65.         z_measured1 = z_real ;

  66.         x_est1 = x_temp_est1 + K1 * (z_measured1 - x_temp_est1);  

  67.         P1 = (1- K1) * P_temp1;


  68.         sum_error_kalman1 += fabs(z_real - x_est1);

  69.         sum_error_measure1 += fabs(z_real-z_measured1);


  70.         P_last1 = P1;

  71.         x_est_last1 = x_est1;


  72.         return x_est1;

  73. }



  74. void halfword(FP32 j);

  75. static void TaskStart( void *parg)

  76. {

  77.         INT16U i=0,j=0,l=0;

  78.         FP32 vbat=0,k=0,oldk=0,dianliu=0,wendu=0;

  79.         (void)parg;

  80.         OS_CPU_SysTickInit();

  81.         OSStatInit();


  82.         OSTaskCreateExt( TaskLed,         

  83.                                                                          (void *)0,

  84.                                                                          &TaskLedStk[500-1],       

  85.                                                                          LED_PRIO,

  86.                                                                          LED_PRIO,

  87.                                                                          TaskLedStk,

  88.                                                                          500,

  89.                                                                          ( void*)0,  

  90.                                                                          OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR );



  91.         LedInit();                //初始化LED指示灯灯

  92.         PWMTimer(25000);        //初始化PWM        

  93.         DCOut(ENABLE);


  94.         ADC1_Configuration();                //采样初始化

  95.         Getk_adc();

  96.         ReadCanShu();

  97.         OSTimeDlyHMSM( 0, 0, 1, 0 );

  98.         vbat=GetDC310();

  99.         gotoxy(0,0);

  100.         dprintf8("12");

  101.         k=310/vbat;

  102.         k=kalman1(k);

  103.         if(k<1)

  104.         {

  105.                         halfword(k);

  106.                         ban();

  107.         }

  108.         Time1Config();                        //SPWM

  109.         SPWMState(ENABLE );

  110.         //halfword();

  111.         while(1)

  112.         {

  113.                 OSTimeDlyHMSM( 0, 0, 0, 50 );

  114.                 vbat=GetBATE();


  115.                 if((vbat<10.5)||(vbat>14.5))

  116.                 {

  117.                         i++;

  118.                         if(i==60)

  119.                                 while(1)

  120.                                 {

  121.                                         LedGreen(0);

  122.                                         WenKong(0);

  123.                                         DCOut(DISABLE);

  124.                                         SPWMState(DISABLE );

  125.                                 }

  126.                 }

  127.                 else

  128.                         i=0;


  129.                 dianliu=GetElectric();

  130.                 if(dianliu>32)

  131.                 {

  132.                         j++;

  133.                         if(j==40)

  134.                                 while(1)

  135.                                 {

  136.                                         LedGreen(0);

  137.                                         WenKong(0);

  138.                                         DCOut(DISABLE);

  139.                                         SPWMState(DISABLE );

  140.                                 }

  141.                 }

  142.                 else

  143.                         j=0;

  144.                 if(dianliu>55)

  145.                 {

  146.                                 while(1)

  147.                                 {

  148.                                         LedGreen(0);

  149.                                         WenKong(0);

  150.                                         DCOut(DISABLE);

  151.                                         SPWMState(DISABLE );

  152.                                 }

  153.                 }

  154.                 if(dianliu>2)

  155.                         WenKong(1);

  156.                 if(dianliu<1.5)

  157.                         WenKong(0);


  158.                 vbat=GetDC310();

  159.                 vbat=kalman1(vbat);

  160.                 k=310/vbat;

  161.                 //k=kalman1(k);

  162.                 if(k<1)

  163.                 {

  164.                         halfword(k);

  165.                 }

  166.                 else

  167.                         halfword(1);


  168.         }

  169. }



  170. float k_dianya=0.14143920;        //电池电压比例


  171. extern volatile FP32 vref;

  172. static void TaskLed(void *parg)          //测试任务

  173. {       

  174.         INT32U j=0,b=0;

  175.         FP32 vbat=0,k=0;

  176.         //ADC_Config();

  177.         Init_ST7576();

  178.         //Usart1Init(9600);

  179.         DianLiuInit();

  180.         while(1)

  181.         {

  182.                 LedGreen(1);               

  183.                 OSTimeDlyHMSM( 0, 0, 0, 500 );               

  184.                 LedGreen(0);                 

  185.                 OSTimeDlyHMSM( 0, 0, 0, 500 );

  186.                 Getk_adc();

  187.                 vbat=GetBATE();

  188.                 gotoxy(0,0);

  189.                 dprintf("vbat=%0.2f ",vbat);

  190.                 vbat=GetDC310();

  191.                 gotoxy(0,2);

  192.                 dprintf("DC=%0.2f ",vbat);

  193.                 k=310/vbat;

  194.                 gotoxy(0,4);

  195.                 dprintf("k=%0.1f ",k);

  196.                 k=GetWenDu();

  197.                 gotoxy(0,6);

  198.                 dprintf("wen=%0.1f",k);

  199.                 k=GetElectric();

  200.                 dprintf(" %0.1f",k);


  201.                 if(GetAnJian()==0)

  202.                 {

  203.                         DCOut(DISABLE);

  204.                         SPWMState(DISABLE );

  205.                         OSTimeDlyHMSM( 0, 0, 3, 500 );

  206.                         Getele();

  207.                         SaveCanShu();

  208.                         DCOut(ENABLE);

  209.                         SPWMState(ENABLE );


  210.                 }

  211.         }

  212. }




复制代码

SPWM数据生成软件VB源程序如下:
  1. VERSION 5.00

  2. Begin VB.Form SPWM

  3.    Caption         =   "SPWM数据生成软件(Howe.Chen)"

  4.    ClientHeight    =   4560

  5.    ClientLeft      =   120

  6.    ClientTop       =   450

  7.    ClientWidth     =   8310

  8.    Icon            =   "SPWM.frx":0000

  9.    LinkTopic       =   "Form1"

  10.    ScaleHeight     =   4560

  11.    ScaleWidth      =   8310

  12.    StartUpPosition =   3  '窗口缺省

  13.    Begin VB.CommandButton Command1

  14.       Caption         =   "清空结果"

  15.       Height          =   615

  16.       Left            =   7320

  17.       TabIndex        =   18

  18.       Top             =   3600

  19.       Width           =   855

  20.    End

  21.    Begin VB.TextBox Text7

  22.       Height          =   1695

  23.       Left            =   240

  24.       MultiLine       =   -1  'True

  25.       ScrollBars      =   2  'Vertical

  26.       TabIndex        =   17

  27.       Top             =   2520

  28.       Width           =   6855

  29.    End

  30.    Begin VB.TextBox Text4

  31.       Height          =   375

  32.       Left            =   6720

  33.       TabIndex        =   9

  34.       Top             =   1560

  35.       Width           =   975

  36.    End

  37.    Begin VB.Frame Frame1

  38.       Caption         =   "参数设置"

  39.       Height          =   2055

  40.       Left            =   360

  41.       TabIndex        =   1

  42.       Top             =   120

  43.       Width           =   6015

  44.       Begin VB.TextBox Text6

  45.          Height          =   390

  46.          Left            =   1560

  47.          TabIndex        =   16

  48.          Top             =   1440

  49.          Width           =   1455

  50.       End

  51.       Begin VB.TextBox Text5

  52.          Height          =   375

  53.          Left            =   4320

  54.          TabIndex        =   13

  55.          Top             =   840

  56.          Width           =   1335

  57.       End

  58.       Begin VB.TextBox Text3

  59.          Height          =   375

  60.          Left            =   1560

  61.          TabIndex        =   7

  62.          Top             =   840

  63.          Width           =   735

  64.       End

  65.       Begin VB.TextBox Text2

  66.          BeginProperty Font

  67.             Name            =   "宋体"

  68.             Size            =   12

  69.             Charset         =   134

  70.             Weight          =   400

  71.             Underline       =   0   'False

  72.             Italic          =   0   'False

  73.             Strikethrough   =   0   'False

  74.          EndProperty

  75.          Height          =   375

  76.          Left            =   4800

  77.          TabIndex        =   6

  78.          Top             =   240

  79.          Width           =   855

  80.       End

  81.       Begin VB.TextBox Text1

  82.          BeginProperty Font

  83.             Name            =   "宋体"

  84.             Size            =   12

  85.             Charset         =   134

  86.             Weight          =   400

  87.             Underline       =   0   'False

  88.             Italic          =   0   'False

  89.             Strikethrough   =   0   'False

  90.          EndProperty

  91.          Height          =   375

  92.          Left            =   1080

  93.          TabIndex        =   3

  94.          Top             =   240

  95.          Width           =   735

  96.       End

  97.       Begin VB.Label Label9

  98.          Caption         =   "调制度(M)"

  99.          BeginProperty Font

  100.             Name            =   "宋体"

  101.             Size            =   12

  102.             Charset         =   134

  103.             Weight          =   400

  104.             Underline       =   0   'False

  105.             Italic          =   0   'False

  106.             Strikethrough   =   0   'False

  107.          EndProperty

  108.          Height          =   255

  109.          Left            =   120

  110.          TabIndex        =   15

  111.          Top             =   1560

  112.          Width           =   1335

  113.       End

  114.       Begin VB.Label Label8

  115.          Caption         =   "V"

  116.          BeginProperty Font

  117.             Name            =   "宋体"

  118.             Size            =   12

  119.             Charset         =   134

  120.             Weight          =   400

  121.             Underline       =   0   'False

  122.             Italic          =   0   'False

  123.             Strikethrough   =   0   'False

  124.          EndProperty

  125.          Height          =   255

  126.          Left            =   5760

  127.          TabIndex        =   14

  128.          Top             =   960

  129.          Width           =   255

  130.       End

  131.       Begin VB.Label Label7

  132.          Caption         =   "交流峰值电压(Vsin)"

  133.          BeginProperty Font

  134.             Name            =   "宋体"

  135.             Size            =   12

  136.             Charset         =   134

  137.             Weight          =   400

  138.             Underline       =   0   'False

  139.             Italic          =   0   'False

  140.             Strikethrough   =   0   'False

  141.          EndProperty

  142.          Height          =   495

  143.          Left            =   2760

  144.          TabIndex        =   12

  145.          Top             =   840

  146.          Width           =   1575

  147.       End

  148.       Begin VB.Label Label6

  149.          Caption         =   "V"

  150.          BeginProperty Font

  151.             Name            =   "宋体"

  152.             Size            =   12

  153.             Charset         =   134

  154.             Weight          =   400

  155.             Underline       =   0   'False

  156.             Italic          =   0   'False

  157.             Strikethrough   =   0   'False

  158.          EndProperty

  159.          Height          =   255

  160.          Left            =   2400

  161.          TabIndex        =   11

  162.          Top             =   960

  163.          Width           =   375

  164.       End

  165.       Begin VB.Label Label5

  166.          Caption         =   "直流BUS电压(Vbus)"

  167.          BeginProperty Font

  168.             Name            =   "宋体"

  169.             Size            =   12

  170.             Charset         =   134

  171.             Weight          =   400

  172.             Underline       =   0   'False

  173.             Italic          =   0   'False

  174.             Strikethrough   =   0   'False

  175.          EndProperty

  176.          Height          =   495

  177.          Left            =   120

  178.          TabIndex        =   10

  179.          Top             =   840

  180.          Width           =   1335

  181.       End

  182.       Begin VB.Label Label3

  183.          Caption         =   "半周期取样点数(N)"

  184.          BeginProperty Font

  185.             Name            =   "宋体"

  186.             Size            =   12

  187.             Charset         =   134

  188.             Weight          =   400

  189.             Underline       =   0   'False

  190.             Italic          =   0   'False

  191.             Strikethrough   =   0   'False

  192.          EndProperty

  193.          Height          =   375

  194.          Left            =   2640

  195.          TabIndex        =   5

  196.          Top             =   360

  197.          Width           =   2295

  198.       End

  199.       Begin VB.Label Label1

  200.          Caption         =   "频率(F)"

  201.          BeginProperty Font

  202.             Name            =   "宋体"

  203.             Size            =   12

  204.             Charset         =   134

  205.             Weight          =   400

  206.             Underline       =   0   'False

  207.             Italic          =   0   'False

  208.             Strikethrough   =   0   'False

  209.          EndProperty

  210.          Height          =   375

  211.          Left            =   120

  212.          TabIndex        =   4

  213.          Top             =   360

  214.          Width           =   855

  215.       End

  216.       Begin VB.Label Label2

  217.          Caption         =   "Hz"

  218.          BeginProperty Font

  219.             Name            =   "宋体"

  220.             Size            =   12

  221.             Charset         =   134

  222.             Weight          =   400

  223.             Underline       =   0   'False

  224.             Italic          =   0   'False

  225.             Strikethrough   =   0   'False

  226.          EndProperty

  227.          Height          =   255

  228.          Left            =   1920

  229.          TabIndex        =   2

  230.          Top             =   360

  231.          Width           =   375

  232.       End

  233.    End

  234.    Begin VB.CommandButton CmdOutPut

  235.       Caption         =   "生成(CREATE)"

  236.       BeginProperty Font

  237.          Name            =   "宋体"

  238.          Size            =   12

  239.          Charset         =   134

  240.          Weight          =   400

  241.          Underline       =   0   'False

  242.          Italic          =   0   'False

  243.          Strikethrough   =   0   'False

  244.       EndProperty

  245.       Height          =   615

  246.       Left            =   6600

  247.       TabIndex        =   0

  248.       Top             =   240

  249.       Width           =   1575

  250.    End

  251.    Begin VB.Label Label4

  252.       Caption         =   "PWM幅值"

  253.       BeginProperty Font

  254.          Name            =   "宋体"

  255.          Size            =   12

  256.          Charset         =   134

  257.          Weight          =   400

  258.          Underline       =   0   'False

  259.          Italic          =   0   'False

  260.          Strikethrough   =   0   'False

  261.       EndProperty

  262.       Height          =   255

  263.       Left            =   6720

  264.       TabIndex        =   8

  265.       Top             =   1200

  266.       Width           =   1095

  267.    End

  268. End

  269. Attribute VB_Name = "SPWM"

  270. Attribute VB_GlobalNameSpace = False

  271. Attribute VB_Creatable = False

  272. Attribute VB_PredeclaredId = True

  273. Attribute VB_Exposed = False

  274. Dim Freq As Double

  275. Dim Vbus As Double

  276. Dim Vsin As Double

  277. Dim M As Double

  278. Dim N As Double

  279. Dim PwmPeriod As Double

  280. Dim K As Double

  281. Const PI As Double = 3.1415926

  282. Dim Out() As Double

  283. Dim SpwmOut() As Integer



  284. Private Sub CmdOutPut_Click()

  285.     On Error GoTo endsub

  286.     Dim i As Double

  287.     Dim w As Double

  288.     Dim temp1 As Double

  289.     Dim temp2 As Double

  290.     w = Freq * 2 * PI


  291.     temp1 = Cos(((1 - 1) * PI) / N)

  292.     temp2 = Cos((1 * PI) / N)

  293.     Out(1) = (M / w * (temp1 - temp2)) * 1000000


  294.     For i = 2 To N Step 1

  295.         temp1 = Cos(((i - 1) * PI) / N)

  296.         temp2 = Cos((i * PI) / N)

  297.         Out(i) = (M / w * (temp1 - temp2)) * 1000000 - Out(1)

  298.     Next i

  299.     Out(1) = 0


  300.     For i = 1 To N Step 1

  301.         SpwmOut(i) = CInt(PwmPeriod / (Out(N / 2 + 1)) * Out(i))

  302.     Next i


  303.     Text7.Text = ""

  304.     For i = 1 To N / 2 Step 1

  305.         Text7.Text = Text7.Text & "0x" & CStr(Hex(SpwmOut(i))) & ","

  306.     Next i

  307.     Text7.Text = Text7.Text & vbCrLf


  308.     For i = N / 2 + 1 To N - 1 Step 1

  309.         Text7.Text = Text7.Text & "0x" & CStr(Hex(SpwmOut(i))) & ","

  310.     Next i

  311.     Text7.Text = Text7.Text & "0x" & CStr(Hex(SpwmOut(N)))

  312. Exit Sub

  313. endsub:

  314.     MsgBox "Error", vbOKOnly, Error

  315. End Sub


  316. Private Sub Command1_Click()

  317.     Text7.Text = ""

  318. End Sub


  319. Private Sub Form_Load()

  320.     Text1.Text = 50

  321.     Text2.Text = 66

  322.     Text3.Text = 380

  323.     Text4.Text = 255

  324.     Text5.Text = 311

  325. End Sub


  326. Private Sub Text1_Change()

  327.     Freq = Val(Text1.Text)

  328. End Sub


  329. Private Sub Text2_Change()

  330.     N = Val(Text2.Text)

  331.     ReDim Out(N)

  332.     ReDim SpwmOut(N)

  333. End Sub


  334. Private Sub Text3_Change()

  335.     On Error Resume Next

  336.     Vbus = Val(Text3.Text)

  337.     M = Vsin / Vbus

  338.     Text6.Text = CStr(M)

  339. End Sub


  340. Private Sub Text4_Change()

  341.     PwmPeriod = Val(Text4.Text)

  342. End Sub


  343. Private Sub Text5_Change()

  344.     On Error GoTo endsub

  345.     If (Val(Text5.Text) > Vbus) Then

  346.         MsgBox "Vsin must be below Vbus", vbOKOnly, "Error"

  347.         Text5.Text = CStr(311)

  348.     Else

  349.         Vsin = Val(Text5.Text)

  350.         M = Vsin / Vbus

  351.         Text6.Text = CStr(CSng(M))

  352.     End If

  353. endsub:

  354. End Sub


  355. Private Sub Text6_Change()

  356.     On Error GoTo endsub

  357.     If (Val(Text6.Text) > 1) Then

  358.         MsgBox "M must be Between 0 to 1", vbOKOnly, "Error"

  359.         Text6.Text = CStr(0.818421052631579)

  360.     Else

  361.         M = Val(Text6.Text)

  362.         Vsin = Vbus * M

  363.         Text5.Text = CStr(CSng(Vsin))

  364.     End If

  365. endsub:

  366. End Sub

  367. 复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多