你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32电机培训online】+ P-NUCLEO-IHM002 修改PID参数

[复制链接]
damiaa 发布时间:2018-8-30 17:15
本帖最后由 damiaa 于 2018-8-31 15:07 编辑

【STM32电机培训online】+ P-NUCLEO-IHM002 修改PID参数

接上面的例子开始修改PID参数实验:所谓的PID就是看稳定到一个速度是快是慢,稳定的时候会高一些,然后再降下来。

1,要在项目的main.c 中加入头文件
#include "mc_api.h"
#include "mc_tasks.h"

2,写个函数
void modimotospeed(void)
{
        MCT_Handle_t* pMctHdl;
         static int16_t Speed_Kp,Speed_Ki;
        MC_ProgramSpeedRampMotor1(2000/6,3000);
  MC_StartMotor1();
        HAL_Delay(10000);
        pMctHdl = GetMCT(M1);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);    //主要用到的函数,需要头文件
#include "mc_tasks.h"
        HAL_Delay(5000);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);
        HAL_Delay(10000);
        MC_StopMotor1();//
        HAL_Delay(10000);
        MC_ProgramSpeedRampMotor1(1000/6,3000);
  MC_StartMotor1();
        HAL_Delay(10000);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
        HAL_Delay(10000);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
        HAL_Delay(10000);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
        HAL_Delay(10000);
        MC_StopMotor1();//
        while(1);
}

并在main.c 中调用,main.c 中main函数前声明外部函数extern MCT_Handle_t* GetMCT(uint8_t bMotor);然后编译运行,看是否跑得起来。 捕获18.PNG

微信图片_20180827100256.jpg
3,在MotorControl Workbench 5.0.3 中打开工程。
捕获19.PNG
4,观察变化(这里注意,是MDK或IAR等的要观察的工程运行起来了后才能里连接串口观察),按下图1位置,打开监控,按2,连接,3,4部分看变化,可以看到电机的速度,电机的运行参数曲线等。
捕获20.PNG 捕获21.PNG
捕获22.PNG
5,最直观的方法还是在main.c中调用 下面的函数,然后改动红色部分的Speed_Kp*2,Speed_Ki*2  2为要改动的倍数,可以0.5,1.5等看看波形变化。
void task2(void)
{
//TASK2??
  MCT_Handle_t* pMctHdl;
  static int16_t Speed_Kp,Speed_Ki;
        MC_ProgramSpeedRampMotor1(3000/6,3000);
  MC_StartMotor1();
        pMctHdl = GetMCT(M1);
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);
        while(1);
}        
改为0.5的波形:
捕获25.PNG
改为1的波形:
捕获23.PNG
改为2的波形
捕获24.PNG

6,继续加油。





捕获25.PNG
收藏 评论1 发布时间:2018-8-30 17:15

举报

1个回答
zero99 回答时间:2018-8-31 13:15:48
谢谢分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版