diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/PIDcontrol.py" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/PIDcontrol.py" new file mode 100644 index 0000000000000000000000000000000000000000..589383bb3c8f7595059a5892f32ff1cfe59ab347 --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/PIDcontrol.py" @@ -0,0 +1,57 @@ +from machine import Pin, PWM +from media.sensor import * +import time +class PID: + #kp比例系数/ki积分系数/kd微分系数 + def __init__(self, kp=0, ki=0, kd=0, maxi, maxo): + #静态参数 + self.kp = kp + self.ki = ki + self.kd = kd + #动态参数 + self.change_p = 0 + self.change_i = 0 + self.change_d = 0 + + self.maxi = maxi #积分限幅 + self.mini = mini + self.maxo = maxout #输出限幅 + self.mino = minout + + self.error_1 = 0 #当前误差 + self.error_0 = 0 #之前误差 + + def change_zero(self): #PID变化累计的参数清零 + self.change_p = 0 + self.change_i = 0 + self.change_d = 0 + + def pid_calc(self, reference, feedback): #reference=目标位置 feedback=当前位置 + self.error_0 = self.error_1 + self.error_1 = reference - feedback #获取新的误差 + + #计算微分 + der = (self.error_1 - self.error_0) * self.kd + + #计算比例 + pro = self.error_1 * self.kp + + #计算积分 + self.change_i += self.error_1 * self.ki + + #积分限幅 + if self.maxi > self.max_change_i : + self.maxi = self.max_change_i + elif self.maxi < -self.max_change_i: + self.maxi = -self.max_change_i + + #计算输出 + self.u = pro + der + self.maxi + + #输出限幅 + if self.u > self.maxo: + self.u = self.maxo + elif self.u < -self.maxo: + self.u = -self.maxo + + return self.u diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/servo.py" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/servo.py" new file mode 100644 index 0000000000000000000000000000000000000000..b43b6172f23519965dc05db25a8ca004fd089b8d --- /dev/null +++ "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\344\272\214\347\273\264\350\210\265\346\234\272\344\272\221\345\217\260/servo.py" @@ -0,0 +1,37 @@ +from machine import Pin, PWM, FPIOA +import time + +# X轴排针引脚号13 +pwm_io1 = FPIOA() +pwm_io1.set_function(42, FPIOA.PWM0) +pwm_x = PWM(0, freq=50,duty=50,enable=True) #配置PWM0,默认频率50Hz,占空比50% + +# Y轴排针引脚号15 +pwm_io2 = FPIOA() +pwm_io2.set_function(43, FPIOA.PWM1) +pwm_y = PWM(1, freq=50,duty=50,enable=True) #配置PWM1,默认频率50Hz,占空比50% + +KEY=Pin(21,Pin.IN,Pin.PULL_UP) #构建KEY对象 + +def Servo(servo,angle): + servo.duty(int((angle+90)/180*10+2.5)) + +#舵机复位 +Servo(pwm_x,90) +Servo(pwm_y,90) + +flag = 0; +while True: + if KEY.value()==0: #按键按下 + time.sleep_ms(10) #消抖 + if KEY.value()==0: #确认按键按下 + if(flag): + Servo(pwm_x,45) + Servo(pwm_y,60) + else: + Servo(pwm_x,0) + Servo(pwm_y,0) + flag=not flag + + while not KEY.value(): #检测按键是否松开 + pass diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/b1e0b39d090bfc4640958ffdb11d9741.png" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/b1e0b39d090bfc4640958ffdb11d9741.png" new file mode 100644 index 0000000000000000000000000000000000000000..1d533c22ff41fffadaf4f8cf54998aa0cd47100d Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/b1e0b39d090bfc4640958ffdb11d9741.png" differ diff --git "a/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/buildconfig19.png" "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/buildconfig19.png" new file mode 100644 index 0000000000000000000000000000000000000000..614f4cf8e9c15de9303b59a160dcc86b0e6e176f Binary files /dev/null and "b/2025/\347\254\2545\347\273\204(CanMV-K230)/\346\235\216\344\270\234\346\265\251/\347\254\224\350\256\260/figures/buildconfig19.png" differ