OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7095|回复: 11

这个无刷电机PID控制的程序该怎么理解?

[复制链接]

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
发表于 2016-7-5 17:03:58 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 xiaobudonglaoshi 于 2016-7-5 17:09 编辑

#include "pid.h"

float PP=0.5,II=0.5,DD=0;

double SumError=0,PrevError=0,LastError=0;
int dError=0,Error=0;

void PID_init(void)
{
        Error=0;SumError=0;LastError=0;
}

void PIDcompute(unsigned int Target,unsigned int Real)
{
  /*--------------------------------------------------------------------
根据设定及采集值进行计算PID调节,计算pwm输出值
--------------------------------------------------------------------*/
float j=0.0,i;
      
                Error =(Target-Real);                     
                SumError +=Error;                  
    dError=Error-LastError;
    LastError=Error;
            
                i=PP;
                j=Error*i;
                i=II;
                j=j+SumError*i;
                i=DD;
                j=j+dError*i;

                j=j/100;

         if(j>=hArrPwmVal)OutPwmValue=hArrPwmVal;
         else if(j<1)OutPwmValue=1;
         else OutPwmValue=j;
}


其中:                j=j/100;

         if(j>=hArrPwmVal)OutPwmValue=hArrPwmVal;
         else if(j<1)OutPwmValue=1;
         else OutPwmValue=j;

这里有点看不懂  我自己算了下  感觉不对啊。。。。

(这是用的STM8S:
unsigned int hArrPwmVal = ((u16)((STM8_FREQ_MHZ * (u32)1000000)/PWM_FREQUENCY));
//PWM信号周期
//hArrPwmVal=1000)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-5 17:29:19 | 显示全部楼层
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-5 21:27:23 | 显示全部楼层
ding   
回复

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2016-7-5 22:44:02 | 显示全部楼层
1. 数学上 , 最后除以 100 和将各个系数除以 100 是等效的 , 程序上这么处理可以保留 0.01 的计算精度 .

2. 后面一段是限幅器 , 由于某些目的限制参数的范围 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-5 23:31:06 | 显示全部楼层
shihantu 发表于 2016-7-5 22:44
1. 数学上 , 最后除以 100 和将各个系数除以 100 是等效的 , 程序上这么处理可以保留 0.01 的计算精度 .

...

但是它除以100的目的是什么呢?我现在越来越迷糊了,算完j以后  到底怎么用啊?
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-5 23:33:18 | 显示全部楼层
shihantu 发表于 2016-7-5 22:44
1. 数学上 , 最后除以 100 和将各个系数除以 100 是等效的 , 程序上这么处理可以保留 0.01 的计算精度 .

...

这个程序中OutPwmValue本来就在0-1000之间的范围,要是除以100,算出来的j永远不可能大于1000啊,那还要判断if(j>1000)干嘛呢。。。。
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-5 23:44:25 | 显示全部楼层
shihantu 发表于 2016-7-5 22:44
1. 数学上 , 最后除以 100 和将各个系数除以 100 是等效的 , 程序上这么处理可以保留 0.01 的计算精度 .

...

我现在不明白的的是: 在PID函数中,我写到j=P*Error+I*SumError+D*dError这一步之后,到底该怎么利用j来控制我需要控制的参数,比如说控制电机的转速,j算出来到底是个啥。。。。
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
 楼主| 发表于 2016-7-6 10:07:46 | 显示全部楼层
ding   
回复

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2016-7-6 12:06:43 | 显示全部楼层
xiaobudonglaosh 发表于 2016-7-5 23:33
这个程序中OutPwmValue本来就在0-1000之间的范围,要是除以100,算出来的j永远不可能大于1000啊,那还要 ...

不是本来在这个范围内 , 而是需要在这个范围内 , 因果关系要搞清楚 .

积分部分的结果是可以超过所谓的范围的 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2016-7-6 12:07:33 | 显示全部楼层
xiaobudonglaosh 发表于 2016-7-5 23:44
我现在不明白的的是: 在PID函数中,我写到j=P*Error+I*SumError+D*dError这一步之后,到底该怎么利用j来 ...

1. 不要用意义不明的变量名 .

2. 好好看一下自动控制原理 , 没有基础很难说下去 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

4

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2015-12-4
在线时间
17 小时
发表于 2016-7-14 09:51:06 | 显示全部楼层
Mark Mark
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-3-28
在线时间
1 小时
发表于 2022-3-28 13:38:28 | 显示全部楼层
根据设定及采集值进行计算PID调节
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 21:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表