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

stm32输出SPWM 同步外部50HZ调试成功

一直忙于工作,很久没有发帖了,学习了stm32已经有一段时间了,以前一直在用8bit的PIC单片机,接触了stm32后感觉到了32bit的高大上,最初的时候想做一个UPS控制板,程序折腾了很久了,最难的控制就是和外部50HZ同步,今晚调试成功,和大家一起分享、讨论。

来张调试全家福

乱糟糟的,买了块stm32最小系统(便宜),搭配430开发板,就这样飞起来了,

CPLD板子输出50HZ基准,板子也是看着便宜买的,学习的时候都刷坏了一片了,话说这玩意儿大概烧写200次就洗白了,初学的时候该买块FPGA的,随便烧写。

待续。。。。

全部回复(21)
正序查看
倒序查看
黑夜11
LV.5
2
2016-05-18 21:51

stm32F103c8T6的片子,规划的时候引脚已经用完了,话说这片子的抗干扰性能还真不咋滴,接地线用1根杜邦线的时候开启外部中断干扰很大,必须加大接地面积。

调试总得有个示波器,网上一搜太贵了,二手的看不上,干脆买个逻辑分析仪,以后还可以搞破解:

0
回复
黑夜11
LV.5
3
2016-05-18 22:02
@黑夜11
stm32F103c8T6的片子,规划的时候引脚已经用完了,话说这片子的抗干扰性能还真不咋滴,接地线用1根杜邦线的时候开启外部中断干扰很大,必须加大接地面积。[图片]调试总得有个示波器,网上一搜太贵了,二手的看不上,干脆买个逻辑分析仪,以后还可以搞破解:[图片]

重点来了,下面是oled12864显示器,帮助我看是否相位锁定

第一排的720是捕获到外部50HZ的值,第二排360是捕获到外部50HZ的脉宽值。捕获后基本不变,证明分频器精度还是很高

第三排为同步后的相位值,我设置的0,可以看到在从720~6  一直变化,证明基本同步

第三排为SPWM基准波形,大概显示在721左右,一直在跳动,这个值跟第一排的值做PI环调节

下面是同步后的波形截图:

最上面白色的波形是CPLD输出的50HZ,第二根以下是STm32输出的波形

0
回复
黑夜11
LV.5
4
2016-05-18 22:17
@黑夜11
重点来了,下面是oled12864显示器,帮助我看是否相位锁定第一排的720是捕获到外部50HZ的值,第二排360是捕获到外部50HZ的脉宽值。捕获后基本不变,证明分频器精度还是很高第三排为同步后的相位值,我设置的0,可以看到在从720~6 一直变化,证明基本同步第三排为SPWM基准波形,大概显示在721左右,一直在跳动,这个值跟第一排的值做PI环调节[图片]下面是同步后的波形截图:[图片]最上面白色的波形是CPLD输出的50HZ,第二根以下是STm32输出的波形

下面说说我实验中的同步方案:

以下是我画的一个草图:

大家都知道,要想两个波形完全同步的话,首先这两个波形的周期(频率)、占空比 要一样

如果两个周期,占空比一样的波形在一起那就好办了,

首先

1、设置好PWM输入捕获(捕获外部50HZ用),比如上升沿中断,

2、我们需要一个定时器0来记录单片机所输出一个周期的SPWM值(也就是产生一个50HZ需要多长时间),这个定时器0在一个50HZ输出周期后清零。

3、当输出捕获上升沿中断到来的时候,记录下当前定时器0所处的值,然后单片机一个周期的值和外部50HZ的周期捕获值做PI环调节,使单片机的输出频率等于外部的50HZ

4、捕获所记录的值再和设定值(比如360)做PI环调节,即可初步达到相位同步

后续更新所实验的程序,待续。。。。。。

0
回复
黑夜11
LV.5
5
2016-05-18 23:06
@黑夜11
下面说说我实验中的同步方案:以下是我画的一个草图:大家都知道,要想两个波形完全同步的话,首先这两个波形的周期(频率)、占空比要一样如果两个周期,占空比一样的波形在一起那就好办了,首先1、设置好PWM输入捕获(捕获外部50HZ用),比如上升沿中断,2、我们需要一个定时器0来记录单片机所输出一个周期的SPWM值(也就是产生一个50HZ需要多长时间),这个定时器0在一个50HZ输出周期后清零。3、当输出捕获上升沿中断到来的时候,记录下当前定时器0所处的值,然后单片机一个周期的值和外部50HZ的周期捕获值做PI环调节,使单片机的输出频率等于外部的50HZ4、捕获所记录的值再和设定值(比如360)做PI环调节,即可初步达到相位同步[图片]后续更新所实验的程序,待续。。。。。。

发个PI调整相位程序,输出直接调整SPWM载波,使之达到调整

0
回复
2016-05-19 09:52
@黑夜11
[图片]发个PI调整相位程序,输出直接调整SPWM载波,使之达到调整[图片]

帮顶~~~


扫一下二维码,工作人员邀你进电源网官方微信群(技术我们是闲侃的,闲侃我们是认真的)

0
回复
2016-05-19 10:56
已经被添加到社区经典图库喽
http://www.dianyuan.com/bbs/classic/
0
回复
dobetter
LV.7
8
2016-05-19 21:26
@黑夜11
[图片]发个PI调整相位程序,输出直接调整SPWM载波,使之达到调整[图片]
0
回复
黑夜11
LV.5
9
2016-05-19 21:50
@黑夜11
[图片]发个PI调整相位程序,输出直接调整SPWM载波,使之达到调整[图片]

继续发。。。

前面程序部分同步外部50hz成功后,下一步就需要一个能够检测外部市电掉电和整流成50hz方波的电路,网上搜了好多ups的掉电检测电路,有用光耦的,如下图:

有用运放的:

如果用光耦的话,涉及到一个滤波大小的问题,滤波电容太大,则掉电后的检测时间越长,

如果用运放的话,涉及到全波整流后,因为交流零点的问题,有一个小的毛刺问题,也要滤波电路,

综合考虑选择了用LM358加上NE555来判断是否掉电,lm358则做全波整流,Ne555做一个带比较的单稳态电路,用Protues仿真实验了一下,

检测时间在0.2ms左右。

放大后

待续。。。

0
回复
345295362
LV.6
10
2016-05-25 01:18
很好,刚好我刚做完这个项目,值得学习
0
回复
345295362
LV.6
11
2016-05-25 01:28
你用STM32做这个就容易多了,外设,速度都不缺,我用的8位PIC,不带硬件乘法器做太痛苦了,到处都要斤斤计较,不然跑步过来,特别像你这样大篇幅的运算,根本不敢用。 还好我选的片子外设够强悍,基本没有难的运算,做出来效果基本满意。
0
回复
2016-05-25 19:58
@黑夜11
下面说说我实验中的同步方案:以下是我画的一个草图:大家都知道,要想两个波形完全同步的话,首先这两个波形的周期(频率)、占空比要一样如果两个周期,占空比一样的波形在一起那就好办了,首先1、设置好PWM输入捕获(捕获外部50HZ用),比如上升沿中断,2、我们需要一个定时器0来记录单片机所输出一个周期的SPWM值(也就是产生一个50HZ需要多长时间),这个定时器0在一个50HZ输出周期后清零。3、当输出捕获上升沿中断到来的时候,记录下当前定时器0所处的值,然后单片机一个周期的值和外部50HZ的周期捕获值做PI环调节,使单片机的输出频率等于外部的50HZ4、捕获所记录的值再和设定值(比如360)做PI环调节,即可初步达到相位同步[图片]后续更新所实验的程序,待续。。。。。。
没看明白,第一、你用一个定时器产生了一路50Hz的方波信号,同时用了一个定时器来捕获外面的方波信号,最后达到这两个的方波信号的相位相同,这样SPWM 怎么产生关系呢?希望楼主解答一下
0
回复
2016-05-25 21:11
@345295362
你用STM32做这个就容易多了,外设,速度都不缺,我用的8位PIC,不带硬件乘法器做太痛苦了,到处都要斤斤计较,不然跑步过来,特别像你这样大篇幅的运算,根本不敢用。还好我选的片子外设够强悍,基本没有难的运算,做出来效果基本满意。
其实stm32也不贵!
0
回复
黑夜11
LV.5
14
2016-05-26 22:45
@皇甫仁和
没看明白,第一、你用一个定时器产生了一路50Hz的方波信号,同时用了一个定时器来捕获外面的方波信号,最后达到这两个的方波信号的相位相同,这样SPWM怎么产生关系呢?希望楼主解答一下
首先,50HZ不是单片机产生的,是我用CPLD产生的,单片机产生SPWM对应一个计数定时器,而且这个定时器要跟捕获定时器设置一模一样,SPWM信号的一个周期(即20MS)后,清零SPWM对应的计数器,把这个计数器和捕获计数器做PI环,即可达到与外部捕获一样的周期了,我贴有程序,可以看一下,全文字说明,将就理解吧
0
回复
黑夜11
LV.5
15
2016-05-26 22:51
@345295362
你用STM32做这个就容易多了,外设,速度都不缺,我用的8位PIC,不带硬件乘法器做太痛苦了,到处都要斤斤计较,不然跑步过来,特别像你这样大篇幅的运算,根本不敢用。还好我选的片子外设够强悍,基本没有难的运算,做出来效果基本满意。

菜单已经写好,折腾惨了

0
回复
黑夜11
LV.5
16
2016-05-26 22:58
@黑夜11
继续发。。。前面程序部分同步外部50hz成功后,下一步就需要一个能够检测外部市电掉电和整流成50hz方波的电路,网上搜了好多ups的掉电检测电路,有用光耦的,如下图:[图片]有用运放的:[图片]如果用光耦的话,涉及到一个滤波大小的问题,滤波电容太大,则掉电后的检测时间越长,如果用运放的话,涉及到全波整流后,因为交流零点的问题,有一个小的毛刺问题,也要滤波电路,综合考虑选择了用LM358加上NE555来判断是否掉电,lm358则做全波整流,Ne555做一个带比较的单稳态电路,用Protues仿真实验了一下,检测时间在0.2ms左右。[图片]放大后[图片]待续。。。

在这里发一个掉电检测电路,电路需要稍微改进,做的好的话检测部分不需要任何滤波电容,由于涉及个人隐私,我只发仿真电路,仿真软件用的Protues

50HZ_ccp.zip,,鼠标点击开关模拟停电,来电

0
回复
2016-05-30 17:26
赞一个!不懂楼主可否分享一下学习资料,小的也想玩玩
0
回复
2016-06-13 23:36
@guang卢
赞一个!不懂楼主可否分享一下学习资料,小的也想玩玩[图片]
高手
0
回复
ruohan
LV.9
19
2016-06-15 16:48
@空军通信兵
高手

确实是高手

0
回复
2016-11-09 22:08
@黑夜11
首先,50HZ不是单片机产生的,是我用CPLD产生的,单片机产生SPWM对应一个计数定时器,而且这个定时器要跟捕获定时器设置一模一样,SPWM信号的一个周期(即20MS)后,清零SPWM对应的计数器,把这个计数器和捕获计数器做PI环,即可达到与外部捕获一样的周期了,我贴有程序,可以看一下,全文字说明,将就理解吧
你好,请问你贴的程序在哪?学习下
0
回复
peter_yu
LV.5
21
2017-01-27 17:07
@ruohan
确实是高手
仔细学学,谢谢分享。
0
回复
无锡市
LV.4
22
2017-02-04 20:19
@黑夜11
首先,50HZ不是单片机产生的,是我用CPLD产生的,单片机产生SPWM对应一个计数定时器,而且这个定时器要跟捕获定时器设置一模一样,SPWM信号的一个周期(即20MS)后,清零SPWM对应的计数器,把这个计数器和捕获计数器做PI环,即可达到与外部捕获一样的周期了,我贴有程序,可以看一下,全文字说明,将就理解吧
难道没有人能把全部资料发在这里吗  
0
回复