最近在做一个数控电源,流程是这样的,设定电压值——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/////////////
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
保证AD采回的电压是准确的前提下,输出电压高低值取得DA输出高低值,做DA高低值与AD采集高低值的对应关系。也就是实际电压变化多少对应DA输出变化多少。f_Voltage与f_Voltage_Set之间相差1V不代表DA就是多输出1V。最后根据这个对应关系来补偿输出值。
一周热门 更多>