OpenEdv-开源电子网

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

我想用AD采样,经过PID调节,控制PWM占空比

[复制链接]

3

主题

8

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-4-24
在线时间
12 小时
发表于 2020-5-20 08:43:06 | 显示全部楼层 |阅读模式
10金钱
我想模拟一个开关电源,采集输出的数据然后经过PID计算占空比然后再调节电路。我现在ADC采样和PWM都已经配置好了也可以运行,但是这个主函数怎么利用这个PID再改变占空比不太清楚,有没有大佬有类似的主函数我想参考下,谢谢了

最佳答案

查看完整内容[请看2#楼]

//计算中放大KK倍,输出时除以KK,相当于以整数代替小数。 #define KK 10 #define PID_P 5 #define PID_I 2 #define PID_D 0 void dopid(void) { static S16 err1=0,err2=0;//上次误差,上上次 S16 err0,add;//本次误差 err0=Is-Ir;//设置值减去检测值 add=PID_P*(err0-err1)+PID_I*err0+PID_D*((err0-err1)-(err1-err2)); err2=err1; err1=err0;//保存本 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2020-5-20 08:43:07 | 显示全部楼层
//计算中放大KK倍,输出时除以KK,相当于以整数代替小数。
#define KK 10

#define PID_P 5
#define PID_I 2
#define PID_D 0
void dopid(void)
{
        static S16 err1=0,err2=0;//上次误差,上上次
        S16 err0,add;//本次误差
        
        err0=Is-Ir;//设置值减去检测值
        add=PID_P*(err0-err1)+PID_I*err0+PID_D*((err0-err1)-(err1-err2));
        err2=err1;
        err1=err0;//保存本次误差
        Pid_Out=Pid_Out+add;
        pwm_out(Pid_Out/KK);//调节PWM
}
专治疑难杂症
回复

使用道具 举报

0

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-7-11
在线时间
1 小时
发表于 2020-5-20 08:43:08 | 显示全部楼层
纯菜鸟,帮楼主顶一下。。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-4-24
在线时间
12 小时
 楼主| 发表于 2020-5-20 13:19:07 | 显示全部楼层
LcwSwust 发表于 2020-5-20 12:09
//计算中放大KK倍,输出时除以KK,相当于以整数代替小数。
#define KK 10

感谢大哥。我还是有点问题不太明白。这个KK P  I  D   参数是怎么定的。这个函数循环调用就行了吗,这最后PWM_out是数字量吗
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2020-5-20 13:46:22 | 显示全部楼层
zqx123456 发表于 2020-5-20 13:19
感谢大哥。我还是有点问题不太明白。这个KK P  I  D   参数是怎么定的。这个函数循环调用就行了吗,这最 ...

参数要靠自己做实验去试,看看各个参数对输出的影响,才能明白。循环调用就行,最后是数字量。
Pid_Out=Pid_Out+add;这句之后还要加限幅,比如:
if(Pid_Out<0)Pid_Out=0;
if(Pid_Out>255*KK)Pid_Out=255*KK;
专治疑难杂症
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-30
在线时间
8 小时
发表于 2021-5-4 01:07:46 | 显示全部楼层
我想问一下,里面的ad采样频率那些要设置多少?我的输入频率是40kHz
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2020-5-15
在线时间
19 小时
发表于 2021-7-14 20:53:28 | 显示全部楼层
最近也正在搞这个,遇到了头疼的问题,不知道楼主可不可以分享一下工程学习一下,万分感谢:574480226@qq.com
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-7-13
在线时间
7 小时
发表于 2021-8-11 09:43:14 | 显示全部楼层
lyn1 发表于 2021-5-4 01:07
我想问一下,里面的ad采样频率那些要设置多少?我的输入频率是40kHz

AD采样要看你的PWM的周期,必须在周期内完成采样,才能实时调节
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 03:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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