【microbit】使用micropython实现增量式PID算法

闭环控制系统

image-20210529114021697

PID算法

image-20210529113838355

增量式PID

E(t) = 设定值-t时刻采样值

增量d计算公式

  • d = KP*[E(t)-E(t-1)]+KI*E(t)+KD*[E(t)-2E(t-1)+E(t-2)]

micropython程序实现

参考2011年电子设计大赛 风板控制系统(F题)

image-20210529151719918

角度检测采用精密导电塑料电位器

image-20210529151835649

使用microbit作为主控系统,仅用做PID程序测试。

1、风板垂直时,ADC采样值为730.

2、例程中设置目标值为760,约25~30度

程序实现:

# 在这里写上你的代码 :-)
from microbit import *

class PID_Inc:
    """增量式PID"""
    def __init__(self, KP=1, KI=1, KD=0.5):
        self.Kp = KP
        self.Ki = KI
        self.Kd = KD

        self.PreError = 0   
        self.PreDerror = 0
        self.error = 0
        self.d_drror = 0
        self.dd_error = 0
        self.dcalc = 0
        
    def setKp(self,KP):
        self.Kp=KP
        
    def setKi(self,KI):
        self.Ki=KI
        
    def setKd(self,KD):
        self.Kd=KD
    
    def update(self, Target, Current):
        self.error = Target - Current
        self.d_error = self.error - self.PreError
        self.dd_error = self.d_error - self.PreDerror
        self.PreError = self.error
        self.PreDerror = self.d_error
        self.dcalc = (
            self.Kp * self.d_error + self.Ki * self.error + self.Kd * self.dd_error
        )
        return self.dcalc


if __name__ == "__main__":
    pid = PID_Inc()
    pwm = 0
    adc_set = 770
    while True:
        if button_a.was_pressed():
            while True:
                sample = pin0.read_analog()
                d = pid.update(adc_set, sample)
                pwm = int(pwm + d)
                if pwm > 1023:
                    pwm = 1023
                if pwm < 0:
                    pwm = 0
                pin1.write_analog(int(pwm))
                print("{},{},{}".format(adc_set, sample, pwm))
                sleep(100)

打印函数主要用于SerialPlot软件绘制曲线观察。

适当调整kp ki kd的值,可以实现系统稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值