首页 >> 大全

CubeMX配合PlatformIO开发STM32(STorM32)

2023-09-10 大全 29 作者:考证青年

本人使用的设备/驱动:

使用,实现pid算法控制电机的转角

本文直接从项目中加入相关功能说起,环境以及其他外设配置:

使用ST-LINK 将单片机中的程序下载下来

配合开发STM32,配置环境,点亮LED灯

配合开发STM32,配置usart实现串口通讯

配合开发STM32,配置ADC实现电池电压检测

配合开发STM32,配置(I2C)

配合开发STM32,配置双(板载与外置),并使用gui显示数据

配合开发STM32,通过系统时钟()中断让不同功能代码以不同频率执行,计算计算所花时间

配合开发STM32,实现pid算法控制电机的转角

配合开发STM32,配置定时器,实现SPWM算法控制电机

前端开发和后端配合流程图_

配合开发STM32,配置uart中断,配合的gui在线调参

正文

耳熟能详pid:

设计方便

不需要知道被控对象的传递函数

只需要调整参数,可以很好的控制很多的系统

在控制系统中,pid作为控制器,根据需求角度和实际角度的角度差,控制过程电机以一定速度转动,来跟随需求角度。

控制系统中其他部分:电机驱动SPWM(执行器),获取实际角度(反馈)

PID的连续函数:

因为要在计算机中实现,所以要进行离散化:

P:

I:

D:

因为main算法以200Hz的频率刷新,所以可以求出,I和D直接整合进I和D进行调整即可

#define cutoff_coefficent   ((float)1/(2*MATH_PI*30.0f))
#define delta_t             ((float)SYSTEM_PERIOD*0.001)static float pitchPPara = 130.0;
static float pitchIPara = 1.0;
static float pitchDPara = 10.0;
static float rollPPara = 130.0;
static float rollIPara = 1.0;
static float rollDPara = 10.0;
static float yawPPara = 80.0;
static float yawIPara = 0.0;
static float yawDPara = 8.0;float PID_Motor1(float actAngle, float expAngle)    // return electric angular speed
{static float expAngle_old = 0.0, et = 0.0, et_pre = 0.0, et_sum = 0.0, et_diff = 0.0,et_diff_last =0, dpid = 0.0;static float dP = 0.0, dI = 0.0, dD = 0.0;et = actAngle - expAngle;	//error dP = rollPPara * et;		//et_sum += et;dI = rollIPara * et_sum;et_diff_last=et_diff;et_diff = et - et_pre;// low-pass filteret_diff = cutoff_coefficent / (cutoff_coefficent + delta_t) * et_diff_last + delta_t / (cutoff_coefficent + delta_t) * et_diff;et_pre = et;dD = rollDPara * et_diff;dpid = dP + dI + dD;return dpid;
}

在实验中发现信号的噪声会使D参数的波动较大,影响控制的性能,所以增加了一个低通滤波器。

其中,截止频率选择为30rad/s,因为通过建模,得出系统的wn大约是22rad/s

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了