文号
t62778
阅读
4959
回复
6
收藏
5
单片机 delta-sigma PSM调制
2013/11/27
IP:广东
前几天看了yanli12321发的低调奢华的DRSSTC驱动,在帖子里面yanli12321用逻辑ic实现了每16个脉冲剔除掉其中的0-15个,实现了15档功率可调。我本人不是高压爱好者,不懂那个全桥加线圈的工作原理,但是通过阅读帖子,我认为帖子里面解决的问题,可以简化为下面的描述:

有一个频率不定,占空比为50%的脉冲序列作为输入。
输出一个相位与输入相同的脉冲序列,占空比仍然为50%,但是有一些脉冲被剔除了。比如每16个脉冲剔除掉3个,那么实现的输出功率就是13/16.

再详细一点讲,以一半功率为例:输入的脉冲序列是 n n n n n n n n 则希望输出的序列是n _ n _ n _ n _ 而不是 n n _ _ n n _ _,也就是希望脉冲的分布尽可能平均分散,尽量减少较低频率的频率分量(因为频率足够低时,有可能产生人耳能听见的声音)。

不知道我的理解是否正确。

要实现上面所述目标,同时实现无级(连续)的功率调整,可以使用delta-sigma调制的方式,来选择剔除掉哪些脉冲。

首先给出一段VB代码,这段代码模拟当输入功率为inputlevel(0到1之间的实数)时,调制器的输出。

dsigma2.png

运行结果,1代表保留的脉冲,0代表剔除掉的脉冲。序列长度为63,如果序列长度趋于无穷大,则可以证明[保留的脉冲的数量/脉冲总数=inputlevel值]。

dsigma.png

未完待续。
novakon作者
13年1个月前IP:未同步
655367
1楼
为了让大家看得更直观一些,我用n和_表示脉冲。

QQ截图20131127134719.png
引用
评论
novakon作者
13年1个月前IP:未同步
655374
2楼
那么delta-sigma调制怎么实现呢?用单片机显然是最好的选择,通过算法优化可以得到高效率的256档PSM功率调节。然而即使单片机效率再高,计算也需要时间,输出的脉冲和输入的脉冲序列会有一个时间差,造成相位差。而时间差是固定的,所以相位差引起的问题在频率较高时会很明显。

为了减少因为单片机读取针脚、计算等操作导致的时间差,提出了下面的基于单片机+逻辑ic的解决方案。

首先,在上一个脉冲的下降沿,单片机首先输出高;然后根据需要的功率级别,运行delta-sigma调制程序,决定下一个脉冲是否要剔除;
如果下一个脉冲要剔除,就在下一个脉冲来临前,输出低;如果下一个脉冲要保留,就什么也不做。
在下一个脉冲的下降沿,单片机再次输出高;然后重复之前的过程。

将单片机输出和脉冲输入用逻辑ic作与运算(AND),得到波形如下:

wavegraph01.png

第一行是输入脉冲
第二行是单片机输出,绿色代表单片机需要的计算时间
第三行是输出的脉冲

如此,就可以实现相位同步的PSM了。
引用
评论
13年1个月前IP:未同步
655403
3楼
novakon 发表于 2013-11-27 14:08
那么delta-sigma调制怎么实现呢?用单片机显然是最好的选择,通过算法优化可以得到高效率的256档PSM功率调 ...


mcu在tc的强电场下工作貌似有点勉强
引用
评论
13年1个月前IP:未同步
655405
4楼
用FPGA吧,速度快而且时序准确
引用
评论
novakon作者
13年1个月前IP:未同步
655562
5楼
本帖最后由 novakon 于 2013-11-29 12:17 编辑

那么下面展示一下我用STM8S103单片机(主频16M)达到的效果。

功率是66/256.程序逻辑改进了一下,减少了判断和操作的次数,所以波形和之前描述的不一样。

这是第一版的代码,已经实现比较好的效果。目前又加入了一些改进。
QQ截图20131128202654.png

波形:最下是输入的50%占空比脉冲,
中间是单片机输出,
最上是对两个波形做AND运算。

Camera HDR Studio - 1385641901851.jpg

Camera HDR Studio - 1385642227897.jpg

如图,目前的调制程序,在输入脉冲频率高达500kHz时,可以稳定工作,不会因为计算时间过长而削掉脉冲。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的