番茄的随笔2-准PR控制传递函数离散化

目录

1.概述

2.传递函数

3.离散化

4.总结


1.概述

       番茄整天要胡搞乱搞,一天天的不知道自己忙些什么东西。这个是交流量控制逻辑里面一个很火的控制算法。想到控制,不得不提到大名鼎鼎的PID控制(比例积分微分控制),但是PID比较适合对直流量的控制,对于交流控制,这家伙的实在让人不敢恭维。

        因此,交流控制大家有两个思路,一个是把交流变成直流,比如三相电机的控制,这个后面再开一篇;另一个就是重新搞算法,因此,大神们提出了PR控制,比例谐振控制算法。

        番茄最近做的项目里面用到了PR控制,又没有现成的程序供番茄COPY,因此,只能自己研究手搓了。

        PS:实属无奈,如果有现成的或是类似的代码,一定要紧跟前辈们的思路,不要跟我一样胡搞。废话有些多,可能番茄最愿意动嘴,更愿意打字。高中的时候,番茄可是语文课代表,哼哼哼......

2.传递函数

PR控制的传递函数:

准PR控制的传递函数:

两者的波特图对比:

        大神们发现,PR控制随着Kp和Kr系数的变化,波特图变动太不明显了,这就不是一个好同志的表现啊,果断下手改造,因此,搞出来了准PR控制。嗯,随着KP和Kr的变化,增益和频带有了变化,妥妥的就是你了。这是准PR控制用来替代PR控制的原因。

       看看准PR里面的系数,KP比例系数,Kr积分系数,wc频带,wo谐振频率,简直完美有没有。

3.离散化

        离散化解决的是程序实现的问题,可以将连续域内的S更换为离散域内的Z,方便程序编程:

离散化的采用的函数不同,离散结果也不相同。

在本文中,我们利用Tustin进行离散化,推导过程如下:

吼吼吼,字体优美,推导严谨,啪啪啪,完美。

 最后,我们通过matlab程序输入kp和kr值,验证推导结果无误。

4.总结

   这个小文章真是一言难尽,领导们一句话,小兵们能咋办,今天你这头发必须掉,我说的。好了,这玩意也是我项目里面要用的东西。我的资源里面有一些逆变器控制逻辑更加深入的东西,原创的,是我从研究逆变器开始到现在一点点的积累,无比憧憬共产主义。

 了解更多关于PID、PR控制及原理,逆变器的原理,:

(17条消息) 研究报告:逆变器的闭环控制,从面积等效到PID和PR控制-行业报告文档类资源-CSDN文库

  • 16
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
根据提供的引用内容,没有直接提供微信小程序开发番茄时钟的函数。但是可以根据提供的引用内容,结合番茄时钟的功能,给出以下实现思路: 1. 使用canvas绘制番茄时钟的界面,包括倒计时的圆形进度条和倒计时的时间显示。 2. 使用setInterval()函数实现倒计时功能,每秒钟更新一次倒计时的时间和进度条的显示。 3. 在倒计时结束时,使用wx.showModal()函数弹出提示框提醒用户。 以下是一个简单的微信小程序番茄时钟的实现代码: ```javascript //index.js Page({ data: { time: 1500, // 倒计时时间,单位为秒 timer: null, // 计时器 percent: 0, // 进度条百分比 isStart: false, // 是否已经开始倒计时 isPause: false, // 是否已经暂停倒计时 isFinish: false // 是否已经完成倒计时 }, onLoad: function () { this.drawProgress(0); // 初始化进度条 }, startTimer: function () { if (this.data.isFinish) { wx.showToast({ title: '倒计时已完成,请重新开始', icon: 'none' }); return; } if (this.data.isStart && !this.data.isPause) { wx.showToast({ title: '倒计时已经开始', icon: 'none' }); return; } if (this.data.isPause) { this.setData({ isPause: false }); } else { this.setData({ time: 1500, percent: 0, isStart: true }); this.drawProgress(0); } this.data.timer = setInterval(() => { if (this.data.time <= 0) { clearInterval(this.data.timer); this.setData({ isFinish: true }); wx.showModal({ title: '提示', content: '倒计时已完成', showCancel: false, success: function (res) { if (res.confirm) { console.log('用户点击确定'); } } }); return; } this.setData({ time: this.data.time - 1, percent: (1500 - this.data.time) / 15 }); this.drawProgress(this.data.percent); }, 1000); }, pauseTimer: function () { if (!this.data.isStart) { wx.showToast({ title: '请先开始倒计时', icon: 'none' }); return; } if (this.data.isPause) { wx.showToast({ title: '倒计时已经暂停', icon: 'none' }); return; } clearInterval(this.data.timer); this.setData({ isPause: true }); }, resetTimer: function () { clearInterval(this.data.timer); this.setData({ time: 1500, percent: 0, isStart: false, isPause: false, isFinish: false }); this.drawProgress(0); }, drawProgress: function (percent) { const ctx = wx.createCanvasContext('progress'); ctx.setLineWidth(6); ctx.setStrokeStyle('#ff0000'); ctx.setLineCap('round'); ctx.beginPath(); ctx.arc(100, 100, 90, -Math.PI / 2, percent * Math.PI * 2 - Math.PI / 2, false); ctx.stroke(); ctx.draw(); } }) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的番茄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值