• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

STM8S103F制作正弦波逆变器的研究

本人今天才接触STM8单片机 不过之前有别的单片机开发经验 因此上手比较快 现在写出了正弦波发生程序 明天搞了AD和PI算法就能做逆变了 慢慢搞

STM8实现SPWM.txt

1和20输出SPWM波 11输出50Hz方波

全部回复(49)
正序查看
倒序查看
2013-12-20 09:34

STM8S这个片子,PWM自带死区和互补输出,还能生成中心对称的PWM。不使用的话,有点暴殄天物哟。

0
回复
a7702842
LV.1
3
2013-12-20 12:58
最好使用内部rc震荡。不要使用外部晶振。外部晶振受干扰容易复位
0
回复
尤小翠
LV.7
4
2013-12-20 17:58
@a7702842
最好使用内部rc震荡。不要使用外部晶振。外部晶振受干扰容易复位

目前这么设计的 SPWM1 2和它们的反向直接驱动全桥

Shutdown脚用于实现过流保护超功率保护等功能

Shutdown Logic悬空时 Shutdown被拉地时锁定SPWMx的输出

Shutdown Logic接地后 Shutdown被拉低时关闭输出 当取消下拉时恢复输出

FrequencyDetermine 悬空时 输出50Hz正弦波 接地后输出60Hz正弦波 

这次修改为TIM1产生SPWM波形 而且一次4个单极性波形都产生 带死区 直接驱动全桥无压力

但是为了方便使用还是保留了50Hz Sync即同步方波

 

未来的:

Beep用于连接蜂鸣器 在逆变器发生故障时(被从Shutdown脚关机或者电池电压过低等)出声

OutputFeedback用于反馈输出电压 稳定输出电压

Battert Low用于反馈蓄电池电压 外部需要电阻分压 来检测电瓶欠电 当这个脚电压低于1V时亮低电压灯 当低于0.8V时锁定逆变器 SPWM.zip

0
回复
2013-12-20 19:26
@尤小翠
目前这么设计的SPWM12和它们的反向直接驱动全桥Shutdown脚用于实现过流保护超功率保护等功能ShutdownLogic悬空时Shutdown被拉地时锁定SPWMx的输出ShutdownLogic接地后 Shutdown被拉低时关闭输出当取消下拉时恢复输出FrequencyDetermine悬空时输出50Hz正弦波接地后输出60Hz正弦波 这次修改为TIM1产生SPWM波形而且一次4个单极性波形都产生带死区直接驱动全桥无压力但是为了方便使用还是保留了50HzSync即同步方波 未来的:Beep用于连接蜂鸣器在逆变器发生故障时(被从Shutdown脚关机或者电池电压过低等)出声OutputFeedback用于反馈输出电压稳定输出电压BattertLow用于反馈蓄电池电压外部需要电阻分压来检测电瓶欠电当这个脚电压低于1V时亮低电压灯当低于0.8V时锁定逆变器 [图片]SPWM.zip
不错,赞一个!这动手能力都赶上许多研究生,翠师傅上大学几年级了?想我本科时都去体验生活了,浪费时间啊!
0
回复
2013-12-20 19:30
@尤小翠
目前这么设计的SPWM12和它们的反向直接驱动全桥Shutdown脚用于实现过流保护超功率保护等功能ShutdownLogic悬空时Shutdown被拉地时锁定SPWMx的输出ShutdownLogic接地后 Shutdown被拉低时关闭输出当取消下拉时恢复输出FrequencyDetermine悬空时输出50Hz正弦波接地后输出60Hz正弦波 这次修改为TIM1产生SPWM波形而且一次4个单极性波形都产生带死区直接驱动全桥无压力但是为了方便使用还是保留了50HzSync即同步方波 未来的:Beep用于连接蜂鸣器在逆变器发生故障时(被从Shutdown脚关机或者电池电压过低等)出声OutputFeedback用于反馈输出电压稳定输出电压BattertLow用于反馈蓄电池电压外部需要电阻分压来检测电瓶欠电当这个脚电压低于1V时亮低电压灯当低于0.8V时锁定逆变器 [图片]SPWM.zip
楼主水平很高!可以加大一点难度,一是尝试着使用单极性倍频的调制方式,这可为你单片机处理指令省下不少时间。二是控制可以弄复杂些,最好能弄成电压电流瞬时双环的。
0
回复
尤小翠
LV.7
7
2013-12-20 20:08
@a529096768
不错,赞一个!这动手能力都赶上许多研究生,翠师傅上大学几年级了?想我本科时都去体验生活了,浪费时间啊!
窝没上大学呢 明年才上
0
回复
尤小翠
LV.7
8
2013-12-20 20:10
@a529096768
楼主水平很高!可以加大一点难度,一是尝试着使用单极性倍频的调制方式,这可为你单片机处理指令省下不少时间。二是控制可以弄复杂些,最好能弄成电压电流瞬时双环的。

瞬时双环 就怕AD速度不够啊

单极性倍频那种考虑过 也可以做的

0
回复
2013-12-20 20:31
@尤小翠
窝没上大学呢明年才上
哦哦,那就更了不得啦,理解力达到了本科水平!我高中时时间用在做题上面了,楼主把时间花在这些地方,对考大学有很大的影响哟!
0
回复
尤小翠
LV.7
10
2013-12-22 18:07
@a529096768
哦哦,那就更了不得啦,理解力达到了本科水平!我高中时时间用在做题上面了,楼主把时间花在这些地方,对考大学有很大的影响哟!

成绩确实受了点影响 不过依旧可以接受

再补充一个 今天写的 带PID的SPWM (2).zip 应该能稳压了

 

下面的复制下来存为Htm就是正弦表计算软件!

半波正弦表发生器

 步数 

 value="10"> 峰值  

 type="button" size="5" value=" 计算 "> 结果 

 

1
回复
尤小翠
LV.7
11
2013-12-22 21:32
@尤小翠
瞬时双环就怕AD速度不够啊单极性倍频那种考虑过也可以做的

SPWM (3).zip

又更新了 增加了保护和电池低电压智能锁定功能

现在还有两个IO口空余 不知道增加什么功能好呢

 

0
回复
a7702842
LV.1
12
2013-12-23 10:37
单片机的5v和mos管12v驱动是怎样转化的?
0
回复
尤小翠
LV.7
13
2013-12-23 11:08
@a7702842
单片机的5v和mos管12v驱动是怎样转化的?

SPWM1 SPWM2等通过光藕隔离驱动全桥 光藕另一侧是15V的mos驱动电压

单片机是3.3V的

最新的程序SPWM (4).zip

增加1个Disable PID脚 接地时输出的正弦波的峰值从0-100%随着Output Feedback(0-单片机供电电压 通常3.3V) 变化 用于内部PID稳压无法满足需求时 外接运放实现稳压

现在程序功能应该完善了 可以试试驱动全桥了 这次争取来个12V300W逆变 带短路保护

 

0
回复
zhangjunhai
LV.6
14
2013-12-23 21:43
@尤小翠
SPWM1SPWM2等通过光藕隔离驱动全桥光藕另一侧是15V的mos驱动电压单片机是3.3V的最新的程序SPWM(4).zip[图片]增加1个DisablePID脚接地时输出的正弦波的峰值从0-100%随着OutputFeedback(0-单片机供电电压通常3.3V)变化用于内部PID稳压无法满足需求时外接运放实现稳压现在程序功能应该完善了可以试试驱动全桥了这次争取来个12V300W逆变带短路保护 

尤老师辛苦了,我们这些菜鸟才有机会学习软件

0
回复
2014-03-05 12:50
我最近也想用STM8做款300-500W的SPWM逆变器吗,STM8的抗干扰怎么样?
0
回复
2014-03-05 20:56

不错啊,加精鼓励下。

0
回复
shinesz
LV.4
17
2014-03-07 11:01
@尤小翠
SPWM1SPWM2等通过光藕隔离驱动全桥光藕另一侧是15V的mos驱动电压单片机是3.3V的最新的程序SPWM(4).zip[图片]增加1个DisablePID脚接地时输出的正弦波的峰值从0-100%随着OutputFeedback(0-单片机供电电压通常3.3V)变化用于内部PID稳压无法满足需求时外接运放实现稳压现在程序功能应该完善了可以试试驱动全桥了这次争取来个12V300W逆变带短路保护 
一个高中生有如此能力,佩服。STM8我也在用,性价比很高。
0
回复
wwpwwp20088
LV.5
18
2014-03-10 13:53
最近也在学STM8,请教下COSMIC里添加头文件不能用怎么回事,而且你的程序在IAR里不兼容,初学菜鸟,请教!
0
回复
2014-03-11 21:31
@wwpwwp20088
最近也在学STM8,请教下COSMIC里添加头文件不能用怎么回事,而且你的程序在IAR里不兼容,初学菜鸟,请教!
这是电源网水平最高的SPWM帖子,特来顶一个,不过使用内部RC时钟据说不稳定,建议还是外接晶振
0
回复
尤小翠
LV.7
20
2014-04-04 15:18
@wwpwwp20088
最近也在学STM8,请教下COSMIC里添加头文件不能用怎么回事,而且你的程序在IAR里不兼容,初学菜鸟,请教!
窝用STVD写的程序 和IAR确实不兼容....而且窝没使用STM8的库函数...
0
回复
wangshujun
LV.8
21
2014-04-05 08:55
@世纪逆变
这是电源网水平最高的SPWM帖子,特来顶一个,不过使用内部RC时钟据说不稳定,建议还是外接晶振
内部rc误差1%左右,用作一般的逆变足够了
0
回复
wwpwwp20088
LV.5
22
2014-04-07 12:57
@尤小翠
窝用STVD写的程序和IAR确实不兼容....而且窝没使用STM8的库函数...
我用STVD来写,老是提示头文件错误,编译不了,感觉STVD不能像keil C51一样头文件可以随意添加。。。不过程序我也在IAR里完成了,带死区就是好,省了好些电路,但又怕单片机受干扰跑飞让后级MOS直通。。。纠结好多天后还是感觉硬件加死区最安全,STM8的死区功能做前级开环驱动信号。
0
回复
wangshujun
LV.8
23
2014-04-08 13:54
@尤小翠
SPWM1SPWM2等通过光藕隔离驱动全桥光藕另一侧是15V的mos驱动电压单片机是3.3V的最新的程序SPWM(4).zip[图片]增加1个DisablePID脚接地时输出的正弦波的峰值从0-100%随着OutputFeedback(0-单片机供电电压通常3.3V)变化用于内部PID稳压无法满足需求时外接运放实现稳压现在程序功能应该完善了可以试试驱动全桥了这次争取来个12V300W逆变带短路保护 

程序看过了,提点建议

1、系统开启了至少2个定时器中断,使用了3个定时器,在这样的系统中中断冲突导致的延迟必须考虑,建议改成只使用tim1中断,每次中断更新下一个占空比,spwm表可以更细一些,比如用20k的载频,直接用400的spwm表,这个对于stm8来说没有问题。

2、只用一个定时器的情况下,50hz可以使用软件计数来输出的,不是问题,没有必要单独搞一个定时器来做更新

3、你的刹车信号使用了,但是没看到相应的中断服务,也就是说刹车中断只是硬关闭,不恢复的,这个在产品中是有问题的。刹车的恢复一般是延时一段时间后重新启动。

4、需要加上软启动部分否则还是挺危险的。

0
回复
wangshujun
LV.8
24
2014-04-08 14:02
@wangshujun
程序看过了,提点建议1、系统开启了至少2个定时器中断,使用了3个定时器,在这样的系统中中断冲突导致的延迟必须考虑,建议改成只使用tim1中断,每次中断更新下一个占空比,spwm表可以更细一些,比如用20k的载频,直接用400的spwm表,这个对于stm8来说没有问题。2、只用一个定时器的情况下,50hz可以使用软件计数来输出的,不是问题,没有必要单独搞一个定时器来做更新3、你的刹车信号使用了,但是没看到相应的中断服务,也就是说刹车中断只是硬关闭,不恢复的,这个在产品中是有问题的。刹车的恢复一般是延时一段时间后重新启动。4、需要加上软启动部分否则还是挺危险的。

再补充一点,建议增加电流采样通道,硬件驱动刹车的用于保护危险的过流信号,比如负载短路,软件检测的电流信号用于控制过载,最好是有几秒甚至几分钟的过载允许范围

典型设计一般是

额定1000w

允许1200到1500w的120秒过载

允许1500w到2000w的3-5秒过载

超过1500或者2000w的话立即保护

一般商用的选前一组参数,工业的选后一种

一般来说选择的功率管都能短时间承受100%的过载的,但是散热系统通常不能容忍持续过载,否则体积和成本难以接受。所以实用的角度来看加上软件电流检测是有必要的,而且用于显示的话有电流采样就能显示功率(视在功率)信息了,对于应用价值相对较大

0
回复
wangshujun
LV.8
25
2014-04-08 14:15
@wangshujun
再补充一点,建议增加电流采样通道,硬件驱动刹车的用于保护危险的过流信号,比如负载短路,软件检测的电流信号用于控制过载,最好是有几秒甚至几分钟的过载允许范围典型设计一般是额定1000w允许1200到1500w的120秒过载允许1500w到2000w的3-5秒过载超过1500或者2000w的话立即保护一般商用的选前一组参数,工业的选后一种一般来说选择的功率管都能短时间承受100%的过载的,但是散热系统通常不能容忍持续过载,否则体积和成本难以接受。所以实用的角度来看加上软件电流检测是有必要的,而且用于显示的话有电流采样就能显示功率(视在功率)信息了,对于应用价值相对较大

adc采样结果的反馈和pid计算的系数都存在问题,另外积分项的最大值也没有意义,不可能那么大,另外你这个计算出来的pid结果有可能是负数,会导致失控的情况出现。

一般说pid的计算结果是用来进行调整的,也是对调制度进行加操作,并且对调制度上下都要做限制,你当前的调制度出现负数是不能工作的

0
回复
尤小翠
LV.7
26
2014-04-10 12:21
@wangshujun
adc采样结果的反馈和pid计算的系数都存在问题,另外积分项的最大值也没有意义,不可能那么大,另外你这个计算出来的pid结果有可能是负数,会导致失控的情况出现。一般说pid的计算结果是用来进行调整的,也是对调制度进行加操作,并且对调制度上下都要做限制,你当前的调制度出现负数是不能工作的

PID 部分求指导 这部分窝也觉得程序可能会有一点问题...

ADC的部分应该没有问题的说

0
回复
wangshujun
LV.8
27
2014-04-10 13:40
@尤小翠
PID部分求指导这部分窝也觉得程序可能会有一点问题...ADC的部分应该没有问题的说

你要先换算adc的采样值到你目标值相同的比例上再做pid,pid要考虑输入,计算过程,和输出来制定相关系数

对于逆变器来说一般做pi就好了

0
回复
2014-04-11 13:32
@wwpwwp20088
我用STVD来写,老是提示头文件错误,编译不了,感觉STVD不能像keilC51一样头文件可以随意添加。。。不过程序我也在IAR里完成了,带死区就是好,省了好些电路,但又怕单片机受干扰跑飞让后级MOS直通。。。纠结好多天后还是感觉硬件加死区最安全,STM8的死区功能做前级开环驱动信号。
IRA比较好用,
0
回复
尤小翠
LV.7
29
2014-04-11 17:59
@wangshujun
你要先换算adc的采样值到你目标值相同的比例上再做pid,pid要考虑输入,计算过程,和输出来制定相关系数对于逆变器来说一般做pi就好了
明白咯 谢咯
0
回复
zwcyqxzcx
LV.6
30
2014-12-06 11:48
@尤小翠
窝没上大学呢明年才上
楼主目前在哪儿上大学?对你好像有所耳闻。
0
回复
aninstone
LV.4
31
2014-12-30 02:40
@尤小翠
成绩确实受了点影响不过依旧可以接受再补充一个今天写的带PID的SPWM(2).zip应该能稳压了 下面的复制下来存为Htm就是正弦表计算软件!半波正弦表发生器 步数  峰值   结果 functioncalculate(){ varstep=document.form1.step.value; varpeak=document.form1.peak.value; document.form1.result.value="0" for(vart=1;t
有木有实际波形?
0
回复