发 帖  
原厂入驻New
实战多通道高速精密测温仪的全系列设计教程,以实际项目为依托,提升工程师核心竞争力!→点击立即抢购←
AD DA数控电源的补偿算法怎么写
217 电源
分享
最近在做一个数控电源,流程是这样的,设定电压值——DA输出(有误差)——AD检测输出电压——根据设定值与实际输出的关系进行反馈补偿调整,但是最后一步我不知道怎么写了,就是关于最后一块调整的算法,求指教

我的主函数

#include<reg52.h>

#include"ad_tlc2543.h"
#include"delayyy.h"
#include"serial.h"
#include"dac1230.h"
#include"display.h"

#define uint unsigned int
#define uchar unsigned char

float f_Voltage;
float f_Voltage_Set=12.00;

void main()
{
   uint ad=0;
   float f_Voltage_Set_Temp=f_Voltage_Set;
   
   //uchar i;
   init_serial();                                                  //串口初始化
   Init_dac1230();                                                  //dac1230初始化
   init_1602();                                                          //1602初始化
   IE=0; //屏蔽中断
           while(1)
           {
           //////////DA/////////////
           Write_Date_1230(f_Voltage_Set_Temp);                                                     //往此函数写一个数n则输出一个电压值n
           //////////DA/////////////


           //////////AD/////////////
           ad=read2543(0);                                                                                      //此函数读取通道0的电压值
           f_Voltage=(float)ad/0x0fff*5;                                                         //f_Voltage即是此电压值的十进制浮点数值
           f_Voltage=3.0*f_Voltage;                                                                         //分压采集电压

           display(f_Voltage_Set_Temp);

           delay1ms(1000);
             //下面是调整部分,但是仿真结果不对
           IF(f_Voltage>f_Voltage_Set)
           {
                           f_Voltage_Set_Temp=f_Voltage_Set-(f_Voltage-f_Voltage_Set);                                
           }
           else
           {
                           f_Voltage_Set_Temp=f_Voltage_Set+(f_Voltage_Set-f_Voltage);                                
           }

           display(f_Voltage_Set_Temp);
//
//           i=0;
//           while(i<7)
//                   {
//                         if(ti==1)
//                             {
//                                     SBUF=buf;
//                                     TI=0;
//                                     i++;
//                             }
//                   }
//                   delay1ms(1000);                                                                                         //1秒发送一次
           }
           //////////AD/////////////

}
0
2019-4-26 06:22:00   评论 分享淘帖 邀请回答
5个回答
是仿真啊,非得实际电路吗?
2019-4-26 09:12:31 评论

举报

if(f_Voltage>f_Voltage_Set)
           {
                           f_Voltage_Set_Temp=f_Voltage_Set-(f_Voltage-f_Voltage_Set);                                
           }
           else
           {
                           f_Voltage_Set_Temp=f_Voltage_Set+(f_Voltage_Set-f_Voltage);                                
           }
改为
           if(f_Voltage>f_Voltage_Set)
           {
                           f_Voltage_Set_Temp--;                                
           }
           else
           {
                           f_Voltage_Set_Temp++;                                 
           }
试试
2019-4-26 09:21:21 评论

举报

貌似不行,被我改成这样了
   if(f_Voltage>f_Voltage_Set)
   {
f_Voltage_Set_Temp=f_Voltage_Set-0.01;
   }
   if(f_Voltage<f_Voltage_Set)
   {
f_Voltage_Set_Temp=f_Voltage_Set+0.01;
效果不错,但是我又发现一个问题就是如果把0.01改为0.001,0.005甚至0.009都不会引起f_Voltage_Set_Temp的变化,怎么回事>
2019-4-26 09:29:14 评论

举报

看错了,原来你的还是浮点数....
2019-4-26 09:39:32 评论

举报

只有小组成员才能发言,加入小组>>

749个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

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