关于AD DA数控电源的补偿算法问题

2020-01-27 11:32发布

最近在做一个数控电源,流程是这样的,设定电压值——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[i];
//                                     TI=0;
//                                     i++;
//                             }
//                   }
//                   delay1ms(1000);                                                                                         //1秒发送一次
           }
           //////////AD/////////////

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
czdavid
2020-01-27 18:25
本帖最后由 czdavid 于 2013-8-11 19:31 编辑

保证AD采回的电压是准确的前提下,输出电压高低值取得DA输出高低值,做DA高低值与AD采集高低值的对应关系。也就是实际电压变化多少对应DA输出变化多少。f_Voltage与f_Voltage_Set之间相差1V不代表DA就是多输出1V。最后根据这个对应关系来补偿输出值。

一周热门 更多>