您好, 登录| 注册|
论坛导航
您好, 登录| 注册|
子站:
论坛首页    逆变/光伏/并网
  •  发帖
  • 收藏

STM8S完成正弦波逆变器DIY
阅读: 13695 |  回复: 48 楼层直达

2015/01/23 15:11:59
1
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

QQ截图20160321155901  玩大发了! 英飞凌最新无人机套件LARIX免费试用 招募中

QQ截图20160321155901  想学你就来!DSP学习板免费试用 限时申请


看论坛上有人用EG8010和TDS2285做逆变器,小弟现在再调试一款STM8S003的小板,感觉资源也够,只要有PWM和ADC应该就差不多,试着想自己编一个程序试试

该程序主要完成STM TIM1的1,2通道互补输出,20K的载波,50hz的基波

#include "IOSTM8S103K3.h"
#include "math.h"
#include<string.h> 
unsigned char pwm_duty[100];

#define LED PC_ODR_ODR4

#define IN PD_IDR_IDR3

unsigned char t,v;

unsigned char a,i,j,count;

unsigned long k,sum,l;

void math(void)
{  
   unsigned char i;
   for(i=0; i<100; i++)
    {
    //if(j<= 50) pwm_duty[i]=(unsigned char)(0+(float)254*sin(2*3.1415926*(float)i*0.2/(float)20));
    //if(j> 50) pwm_duty[i]=(unsigned char)(254-(float)254*sin(2*3.1415926*(float)i*0.2/(float)20));
    pwm_duty[i]=(unsigned char)(127+(float)127*sin(2*3.1415926*(float)i*0.2/(float)20));
    } 
}

void delay_ms(unsigned int ms)
{
       unsigned char i;
       while(ms!=0)
       {
              for(i=0;i<250;i++)
              {}
              for(i=0;i<75;i++)
              {}
              ms--;
       }
}

void delay_us(unsigned int us)
{
       unsigned char j;
       while(us!=0)
       {
              for(j=0;j<250;j++)
              {}
              us--;
       }
} 

void Init_Timer4(void)
{  
    asm("sim"); 
    TIM4_CR1=0x01;//使能计数器
    TIM4_IER=0x01;//更新中断使能
    TIM4_EGR=0x01;
    TIM4_CNTR=199;//计数器值
    TIM4_ARR=199;//自动重装的值
    TIM4_PSCR=0x04;//分频值128
    asm("rim");//开全局中断,延时16.32ms
}
#pragma vector=TIM4_OVR_UIF_vector//0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{
  //asm("JP 0x9060\n");
     
    TIM4_SR=0x00;
    
     if(k>= 100) k=0;
     TIM1_CCR1L = pwm_duty[k];   
    TIM1_CCR2L = pwm_duty[k]; 

   k++;

      //return;
}


void TIM1_CH1_PWM_INIT(void)
 {
  CLK_PCKENR1|=0x80;//开启定时器1外设时钟 
  TIM1_EGR=0x01;//重新初始化TIM1
  TIM1_EGR|=0x20;//重新初始化TIM1
  TIM1_ARRH=0x00;//设定重装载值
  TIM1_ARRL=255;
  
  TIM1_PSCRH=0;//预分频
  TIM1_PSCRL=0x04;
  TIM1_CR1=0;//边沿对齐,向上计数
  
  TIM1_CCER1=0x55;//高电平有效
  TIM1_CCMR1=0x60;//PWM模式1
  TIM1_CCMR2=0x60;//PWM模式1
    
  TIM1_DTR=0x04;
  TIM1_CCR1H=0;//占空比
  TIM1_CCR1L=254;
  TIM1_CCR2H=0;//占空比
  TIM1_CCR2L=254;
  TIM1_CR1|=0x01;//向上计数,无缓存,使能
  TIM1_BKR=0x80;//开启刹车
 }

void TIM2_CH1_PWM_INIT(void)
 {
TIM2_CCMR1 = TIM2_CCMR1 | 0x70;// Output mode PWM2.
TIM2_CCMR3 = TIM2_CCMR3 | 0x70;// Output mode PWM2. 
// 通道2 被设置成比较输出方式
// OC2M = 111,为PWM 模式2,
// 向上计数时,若计数器小于比较值,为无效电平
// 即当计数器在0 到比较值时,输出为1,否则为0
TIM2_CCER1 = TIM2_CCER1 | 0x03;// CC polarity low,enable PWM output */
TIM2_CCER2 = TIM2_CCER2 | 0x03;
// CC2P = 1,低电平为有效电平
// CC2E = 1,开启输出引脚
//初始化自动装载寄存器,决定PWM 方波的频率,Fpwm=4000000/256=15625HZ
TIM2_ARRH = 0;
TIM2_ARRL = 0xFF;
//初始化比较寄存器,决定PWM 方波的占空比
TIM2_CCR1H = 0;
TIM2_CCR1L = 0;
TIM2_CCR3H = 0;
TIM2_CCR3L = 0;
// 初始化时钟分频器为2,即计数器的时钟频率为Fmaster=8MHZ
TIM2_PSCR = 1;
// 启动计数
TIM2_CR1 = TIM2_CR1 | 0x01;
 }



void main( void )
{



          CLK_CKDIVR=0x00;
          math();   
          PA_DDR|=0x08;
	  PA_CR1|=0x08;
	  PA_CR2|=0x00;
          
          PA_ODR|=0x08;
          
          PC_DDR|=0x58;
	  PC_CR1|=0x58;
	  PC_CR2|=0x00;
          
       //   PC_ODR|=0x58;
          
          PD_DDR|=0x10;
	  PD_CR1|=0x10;
	  PD_CR2|=0x00;
          

        
        Init_Timer4();
        
        TIM1_CH1_PWM_INIT();
        
   //     TIM2_CH1_PWM_INIT();
        
        TIM2_CCR1L = 128;
        TIM2_CCR3L = 0;
        TIM1_CCR1L=128;
        TIM1_CCR2L=128;
             while(1)			
	{

 
 
}

}

 

标签 逆变器 pwm
2015/01/23 15:16:55
2
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

下面手工焊接硬件

硬件H桥使用4个NCE7580,滤波用的5mh电感(胡乱拿的现成的,没有自己绕),电容用的400V1.5UF 的CBB,LCL滤波结构,驱动使用两片IR2110,电路和EG8010的样板一样

 

2015/01/23 15:20:21
3
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

焊好的硬件如下图示,单片机是TSSOP20的,我直接从现有的要调试的PCB飞线过去,下载程序需要用ST的工具把单片机引脚互用功能调好

 

 

2015/01/23 15:25:46
4
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

在公司不敢玩高压,爆了被老板看到就玩完了,直接用直流电源做H桥的输入,波形如下

下管互补波形

上管波形也测下,不过只能测一个管子的,上面两个管子不工地

由于没有稳压和保护算法,整流后带载电压下降,并且波形畸变

IMG_20150123_144738

 

2015/01/23 15:29:36
5
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

综上所诉,感觉做一个单片机的SPWM程序不难,不过要完成其稳压和保护功能,其实波形的失真与否输出和芯片关系不大,主要是滤波器的设置。不过STM8S成本低,如果不接外部晶振稳定性还行,可以试一试

 

我这边只是我的一些个人见解,论坛里面牛人很多,请指教了

2015/01/23 15:50:16
6
mvip
电源币:1 | 积分:0 主题帖:1 | 回复帖:36
LV3
排长

值得借鉴,如果正弦波也用stm8就更牛了。

谢谢分享

2015/01/23 16:03:18
8
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长

不错啊,很牛的技术。

你这个是和EG8010的SPWM波形一样吗?

2015/01/23 16:48:11
9
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
波形不一定一样,因为PWM的分辨率和更新周期不一定相同
2015/01/23 17:11:41
12
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长

不错啊,被版主置顶了,可见大神们对你很看重啊

你这个是一边半桥是高频,一边是工频50HZ的吗?

2015/01/23 17:53:20
13
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

不是的,两个半桥都是高频

2015/01/23 20:33:14
14
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长
站内短信联系你了,有事请较
2015/01/23 21:09:15
15
znzl
电源币:0 | 积分:6 主题帖:1 | 回复帖:20
LV3
排长
高人
2015/03/07 14:50:08
44
454637984
电源币:0 | 积分:0 主题帖:0 | 回复帖:4
LV1
士兵
2016/02/19 16:09:54
48
200808liu
电源币:25 | 积分:0 主题帖:0 | 回复帖:76
LV4
连长
这个芯片好像在电动车控制器上看到过。
2015/01/23 15:56:36
7
mvip
电源币:1 | 积分:0 主题帖:1 | 回复帖:36
LV3
排长

我觉得完成升压输出,单片机绰绰有余。如果加上正弦波输出和保护稳压之类功能有点资源不够。

2015/01/23 16:49:02
10
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长

升压也可以完成,但是要考虑两级的隔离

2015/01/23 16:53:21
11
xzszrs[荣誉版主]
电源币:1689 | 积分:66 主题帖:103 | 回复帖:1746
LV11
统帅

非常不错,鼓励下,置顶!

2015/01/24 14:06:01
16
水乡电源
电源币:29 | 积分:23 主题帖:9 | 回复帖:433
LV8
师长

 

稳压按照峰值采样,

采的峰值电压改变,你载波的每个周期占空比就改变,就改变你的输出电压,

我测过其中一段SPWM的波形,规律如下,

 导通14uS   截止28uS,     导通14uS    截止28uS,    导通15uS   截止27uS, 导通15uS    截止27uS,

 导通16uS   截止26uS,     导通16uS    截止26uS,    导通17uS   截止25uS, 导通17uS    截止25uS,

 导通18uS   截止24uS,     导通18uS    截止24uS,     导通19uS   截止23uS, 导通19uS    截止23uS,

  导通20uS   截止22uS,    导通20uS    截止22uS,   .........................................

 

也就是载波的每2个周期递增1uS, 到了占空比最大时,然后每2个周期递减1uS

 

 

 

 

 

2015/01/24 22:28:09
18
水乡电源
电源币:29 | 积分:23 主题帖:9 | 回复帖:433
LV8
师长

楼主是把50HZ分成多少等份(也就是采样多少点) ?

几个周期改变一次站空比?(几倍频)

 

2015/01/25 08:35:32
19
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
是的,把正弦波分成100个等分,4个定时周期改变一次,这样就是400个周期完成一次正弦波调制
2015/01/25 15:44:44
23
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长
兄台,可以做个电压前馈方式,引入母线高压反馈,这样应该会最快,加上后端的交流采样,2者合成,估计稳压好做了。
2015/01/25 08:39:05
20
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
工频是50HZ,载波是20k,所以400次完成一次正弦波输出,我把一个正弦波分成100等分放在ram里面,刚开始的时候计算好,你的说法是正确的,不过我的是双极性调制,每4个载波周期改变一次PWM输出
2015/01/24 21:18:47
17
shinesz
电源币:0 | 积分:5 主题帖:1 | 回复帖:100
LV4
连长
STM8应该是够用了的,正弦表可以放在flash内,关键是稳压部分吧,EG8010稳压就做得挺好的
2015/01/25 09:20:15
21
世纪逆变
电源币:43 | 积分:13 主题帖:23 | 回复帖:307
LV8
师长
任何PWM的单片机都可以产生正弦波输出的,但是要做好稳压是不容易的
2015/01/25 15:48:15
24
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长
,确实,做正弦波的芯片太多了,已经一点都不神秘了。
2015/01/25 15:42:40
22
ssff
电源币:0 | 积分:0 主题帖:2 | 回复帖:57
LV5
营长

听大神说过,EG8010的动态稳压范围不好,牺牲动态稳压精度,来保证静态的稳压。正弦波稳压好像都是这样,不知道楼主可以打破这个局限不?

2015/01/25 18:17:00
25
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
还没想过,因为不是本行,玩玩还行,如果要我做的话就采样输出电压,改变乘法因子,其中算法可以使用开关  滞环做,不过有一定稳定误差
2015/01/25 21:38:33
26
水乡电源
电源币:29 | 积分:23 主题帖:9 | 回复帖:433
LV8
师长

 

楼主分成100等份,4个周期改变一次占空比,这样你的谐波大,正弦波也不好看,稳压性能也不会好,

至少要200等份,最多2个周期改变一次占空比,

等份越多,输出的正弦越好看,稳压效果越好,

 

采样输出的正弦波,电阻分压后单片机A/D检测,控制载波的脉冲占空比,呈反比例线性变化,达到稳压目的,

 

每个周期改变占空比是最好的,纯硬件做的SPWM,每个周期占空比都会改变,所以纯硬件的动态稳压效果很好,

8010的稳压效果好,波形也漂亮,

8010是50HZ采样234点,每2个周期改变一次占空比,载波23.4K,50*234*2=23.4K

8010是60HZ采样195点,每2个周期改变一次占空比,载波23.4K,所以老寿那个大IGBT驱动板,12M晶振换成10M晶振,

接成60HZ形式输出50HZ,载波是19.5K的原因就是195点,60*195*2=23.4K,50*195*2=19.5K

2015/01/25 22:03:54
27
35956911
电源币:0 | 积分:0 主题帖:59 | 回复帖:248
LV8
师长
你会C语言不,帮我改个收音机程序
2015/01/26 10:21:08
29
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
不敢说精通,但是没做过收音机,建议找专门做收音机的搞
2015/01/26 10:20:06
28
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
我只是试试,本身我不做逆变器的,从单片机资源上来说,没什么问题
2015/01/27 16:26:44
31
HL_ZXM
电源币:33 | 积分:5 主题帖:3 | 回复帖:4
LV3
排长

呵呵!5mha?大啊,当做2KW时就是10A220V的铜丝,可能有2,3个变压器那样打了-------成本就不低

以前做过这样的板,0.5mh,1.2元/片16脚的合泰单片机。

2016/12/08 16:38:10
49
ruohan
电源币:13 | 积分:9 主题帖:46 | 回复帖:1159
LV9
军长

  for(i=0; i<100; i++)    {    //if(j<= 50) pwm_duty[i]=(unsigned char)(0+(float)254*sin(2*3.1415926*(float)i*0.2/(float)20));    //if(j> 50) pwm_duty[i]=(unsigned char)(254-(float)254*sin(2*3.1415926*(float)i*0.2/(float)20));    pwm_duty[i]=(unsigned char)(127+(float)127*sin(2*3.1415926*(float)i*0.2/(float)20));

讲解一下这个语句,

多谢了

2015/01/26 10:25:54
30
电源网-fqd
电源币:5053 | 积分:15070 主题帖:398 | 回复帖:5028
LV11
统帅
帖子非常不错,推荐到帖子底部经典图库。更多请点击哦:http://www.dianyuan.com/bbs/classic/
2015/01/28 20:18:33
32
release
电源币:57 | 积分:5 主题帖:18 | 回复帖:252
LV6
团长
顶一个,向楼主这种钻研精神学习!
2015/01/28 20:41:26
33
又一个暑假
电源币:191 | 积分:0 主题帖:4 | 回复帖:83
LV5
营长
顶一个,喜欢这种直接把源代码贴上来的。
2015/01/29 13:29:52
34
charmaine
电源币:0 | 积分:3 主题帖:2 | 回复帖:6
LV2
班长
请问您的输出滤波电感上压降大吗?用的多大电感电容?谢谢。
2015/02/03 16:49:32
35
raulgu
电源币:286 | 积分:0 主题帖:6 | 回复帖:49
LV4
连长
mark  学习 
2015/02/11 09:52:28
36
电源网-娜娜姐
电源币:457 | 积分:207 主题帖:293 | 回复帖:1807
LV10
司令
好帖,首页推荐了!
2015/02/11 14:41:49
37
aninstone
电源币:3 | 积分:0 主题帖:3 | 回复帖:113
LV4
连长
厉害 不过是双极性的哈
2015/02/12 00:45:53
38
mass_lynnxy
电源币:174 | 积分:0 主题帖:0 | 回复帖:19
LV2
班长
这么便宜的单片机,学习了。
2015/02/12 10:35:56
39
蚂蚁电源
电源币:0 | 积分:0 主题帖:50 | 回复帖:688
LV8
师长

学习

2015/02/14 16:07:09
40
wfc0312
电源币:0 | 积分:0 主题帖:17 | 回复帖:84
LV5
营长
锁相环呢,交流信号分析呢。PI反馈环呢。资源不够啊不够
2015/03/03 13:48:05
42
想飞的狼
电源币:320 | 积分:10 主题帖:34 | 回复帖:34
LV5
营长
业余玩家,不专业
2015/02/25 13:29:51
41
电源网-璐璐
电源币:1090 | 积分:67 主题帖:210 | 回复帖:1437
LV10
司令
貌似不错,2015继续加油哈
2015/03/06 15:41:42
43
fangzumin
电源币:20 | 积分:0 主题帖:0 | 回复帖:50
LV3
排长
很好,学习了。
2015/03/07 19:30:00
45
尤小翠
电源币:31 | 积分:12 主题帖:36 | 回复帖:155
LV7
旅长

窝也做过一些STM8S103F的正弦波逆变 泥看看窝的帖子 有写一些稳压的东西

不过还没正式搭硬件测试呢

2015/03/09 09:55:43
46
aninstone
电源币:3 | 积分:0 主题帖:3 | 回复帖:113
LV4
连长
你的没有看到实测波形
2016/02/19 16:07:44
47
200808liu
电源币:25 | 积分:0 主题帖:0 | 回复帖:76
LV4
连长
学习顶帖
客服热线
服务时间:周一至周五9:00-18:00
微信关注
免费技术研讨会
获取一手干货分享

互联网违法不良信息举报

Reporting Internet Illegal and Bad Information
editor@netbroad.com
022-58392381