搜索
bottom↓
回复: 2

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

[复制链接]

出0入0汤圆

发表于 2013-8-11 10:33:51 | 显示全部楼层 |阅读模式
最近在做一个数控电源,流程是这样的,设定电压值——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/////////////

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-8-11 17:50:45 | 显示全部楼层
也对采回来的一组电压数据进行求最大值,最小值,然后求平均,感觉还是有很大的误差,也想请教补偿的方法,

出0入0汤圆

发表于 2013-8-11 19:29:57 | 显示全部楼层
本帖最后由 czdavid 于 2013-8-11 19:31 编辑

保证AD采回的电压是准确的前提下,输出电压高低值取得DA输出高低值,做DA高低值与AD采集高低值的对应关系。也就是实际电压变化多少对应DA输出变化多少。f_Voltage与f_Voltage_Set之间相差1V不代表DA就是多输出1V。最后根据这个对应关系来补偿输出值。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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