请教个程序思路

[复制链接]
1346|20
手机看帖
扫描二维码
随时随地手机跟帖
chest20090909|  楼主 | 2017-7-27 09:52 | 显示全部楼层 |阅读模式
请教下大家,有一块电路板相当于一个单片机控制的功率电路,单片机通过PWM控制电路板输出功率,电路板输出接一个采样电阻检测输出电流,空载时单片机输出固定的PWM。接触负载后,采样电压升高,就增加PWM。离开负载时,采样电压降低,就减小PWM到空载时的PWM。这个程序结构应该是怎样的呢

void main()
{
     while(1)
      {
               设定空载PWM,
               读取空载时AD值ad_kongzai
               if(ad>ad_kongzai)
               {
                        if(ad<ad_max)
                         {
                                PWM++;
                                读取调整后的AD值ad_1;
                         }
                }
                 if(ad<ad_ad_1)
               {
                        if(ad>ad_kongzai)
                         {
                                PWM--;
                         }
                }
      }
}

相关帖子

kingkits| | 2017-7-27 10:33 | 显示全部楼层
通常设置和检查数据这段代码会很快执行,而采样的数据会滞后,所以你目前的思路会导致PWM加几百次,才能得到之前的采样结果。其结果会导致PWM过调。这中间要考虑数据延迟导致的问题

使用特权

评论回复
chest20090909|  楼主 | 2017-7-27 10:45 | 显示全部楼层
kingkits 发表于 2017-7-27 10:33
通常设置和检查数据这段代码会很快执行,而采样的数据会滞后,所以你目前的思路会导致PWM加几百次,才能得 ...

请教大概的程序结构或者思路应该怎么弄呢

使用特权

评论回复
cjseng| | 2017-7-27 13:46 | 显示全部楼层
用PID试试

使用特权

评论回复
chest20090909|  楼主 | 2017-7-27 13:52 | 显示全部楼层

PID不太会调,如果调节的不好,会不会适得其反

使用特权

评论回复
gx_huang| | 2017-7-27 13:59 | 显示全部楼层
你这个加一减一的算法也是可以的,关键是要周期性的计算,而不是连续循环计算,那就不是加一和减一了,变成要么最低输出要么最高输出了。PID计算,也是有时间周期的。

使用特权

评论回复
chest20090909|  楼主 | 2017-7-27 14:13 | 显示全部楼层
gx_huang 发表于 2017-7-27 13:59
你这个加一减一的算法也是可以的,关键是要周期性的计算,而不是连续循环计算,那就不是加一和减一了,变成 ...

是不是周期性读取AD值,读取AD值后做PID调节

使用特权

评论回复
天使都哭咯| | 2017-7-27 16:05 | 显示全部楼层
周期性计算问题

使用特权

评论回复
chest20090909|  楼主 | 2017-7-27 16:16 | 显示全部楼层

如果把电路功率输出分几个档次区间,比如分3个档位,每个档位最大输出功率不同,通过按键设定。在做PID调节时,怎么根据采样电压来调节PWM

使用特权

评论回复
kingkits| | 2017-7-27 17:04 | 显示全部楼层
可以做延时,根据实际情况,在adc每一次(或几次)有效采样后,做一次加或减的操作

使用特权

评论回复
chest20090909|  楼主 | 2017-7-27 21:44 | 显示全部楼层
这个是不是功率跟踪,有没有相关资料参考下呢

使用特权

评论回复
fzyuan| | 2017-7-28 07:36 | 显示全部楼层
如果仅安装楼主所说,这程序也没毛病。
因为他只说“采样电压升高,就增加PWM”“采样电压降低,就减小PWM到空载时的PWM”,也就是说PWM无上限而有下限,下限就是“空载PWM”。

这样的话其实就是一个开关控制了:负载:大PWM;空载:小PWM。

但实际上的要求会是这样吗?应该不会吧!
应该有控制对象、控制目标的。
如果确定了对象,那才可以根据楼上几个建议去实施。

使用特权

评论回复
chest20090909|  楼主 | 2017-7-28 09:04 | 显示全部楼层
fzyuan 发表于 2017-7-28 07:36
如果仅安装楼主所说,这程序也没毛病。
因为他只说“采样电压升高,就增加PWM”“采样电压降低,就减小PWM ...

分功率档位的话,也是有上限的,打个比方,比如1档空载是10,最大输出是40(功率输出范围就是10-40)。2档空载是20,最大输出是60,。3档空载是30,最大输出是70。。。。
那调节时程序设定值是不是设置到每个档位的最大输出值(比如1档的40),然后在1档时根据负载不同输出不同的PWM呢(输出的范围就在1-40之间),如果需要更大输出再切换到其他功率档位。

使用特权

评论回复
xuyaqi| | 2017-7-28 09:27 | 显示全部楼层
楼主目前有无实际控制装置,有的话你把你的程序试了吗,结果如何,如果没有实际装置在这空谈没有用,楼主的程序在负载变化不频繁不剧烈是可以用的。

使用特权

评论回复
chest20090909|  楼主 | 2017-7-28 11:50 | 显示全部楼层
xuyaqi 发表于 2017-7-28 09:27
楼主目前有无实际控制装置,有的话你把你的程序试了吗,结果如何,如果没有实际装置在这空谈没有用,楼主的 ...

有实际控制装置,按现在的程序确实出现PWM直接加到最大或最小的情况,负载变化还是比较频繁的。

使用特权

评论回复
潜力变魅力| | 2017-7-28 12:34 | 显示全部楼层
列一个程序流程图,仔细思考每一步,然后再针对每一步进行验证,不要一次写完,不好调试!!分享一下编程思路而已!

使用特权

评论回复
xuyaqi| | 2017-7-28 14:06 | 显示全部楼层
chest20090909 发表于 2017-7-28 11:50
有实际控制装置,按现在的程序确实出现PWM直接加到最大或最小的情况,负载变化还是比较频繁的。 ...

如果“负载变化还是比较频繁的”那么就要用PID调节的思想,偏差大每次增加的多,偏差小每次增加的少,而不是每次都加减1.

使用特权

评论回复
chest20090909|  楼主 | 2017-7-28 15:09 | 显示全部楼层
xuyaqi 发表于 2017-7-28 14:06
如果“负载变化还是比较频繁的”那么就要用PID调节的思想,偏差大每次增加的多,偏差小每次增加的少,而 ...

用PID调节的话,是把频繁变化的负载值作为目标值吗

使用特权

评论回复
xuyaqi| | 2017-7-28 17:04 | 显示全部楼层
chest20090909 发表于 2017-7-28 15:09
用PID调节的话,是把频繁变化的负载值作为目标值吗

你的系统应该叫做随动系统,输出功率随着负载变,测到的电流与空载电流差小PWM就增加少,测到的电流与空载电流差大PWM就增加多,这个就是比例调节的思想。

使用特权

评论回复
江边飞鸟| | 2017-7-28 17:05 | 显示全部楼层
fzyuan 发表于 2017-7-28 07:36
如果仅安装楼主所说,这程序也没毛病。
因为他只说“采样电压升高,就增加PWM”“采样电压降低,就减小PWM ...

这个说的很详细

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

632

帖子

4

粉丝