|
之前同事做了一个1psi PID恒压控制的程序 让增大传感器量程改程序,由于程序较长我我只贴出了我有疑问的部分程序中没看明白的部分
1选择内部基准电压2.4V而传感器的输出电压是5V 怎么作比较?
2为什么我计算的采集结果是 P=(1.25*real/4096-1.125)*690?
12位ADC模拟量输入配设置
void ADC0_Init (void) //
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = ADC0_PAGE;
ADC0CN = 0x80; // ADC0 enabled; normal tracking 1000 0000 ADC0使能
// mode; ADC0 conversions are initiated
// when writing 1 to ad0busy flag; ADC0 data is
// right-justified
REF0CN = 0x03; // Enable on-chip VREF, 0011 电压基准寄存器 基准电压选择 内部基准电压到VREF引脚
// and VREF output buffer
AMX0CF = 0x00; // ALL inputs are single-ended (default) 信号采集单端输入 AMX0CF: AMUX0 配置寄存器
AMX0SL = 0x06; // 选择P3偶数引脚
AMX0PRT = 0x01; // 选择P3.0作为初始模拟输入
ADC0CF = 0x98; // ADC conversion clock = 1.10592MHz, Gain=1 1001 1000 20分频 conversion转换 PGA放大增益为1 转换的时钟周期
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
模拟量采集
SFRPAGE = SFRPAGE_SAVE;
num++; //扫描6次,使用6个数码管
count++;
if(num==6)
num=0;
if(count == 5)
{
count = 0;
SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = ADC0_PAGE;
AMX0SL = 0x06; // 选择P3偶数引脚 0110 AMX0AD3-0 都配置为单端输入
AMX0PRT = 0x01; // 选择P3.0作为初始模拟输入 0001
for(t = 0;t<8;t++) // 第一路循环采样
{
AD0INT = 0;
AD0BUSY = 1;//写1采样一次
while(!AD0INT);
accumulator += ADC0;
for(s = 0; s<6;s++) //延时6个周期
{
;
}
}
real0 = (int)((accumulator >> 3)); //20190814
PID1_OUT();
accumulator = 0;
AMX0SL = 0x06; // 选择P3偶数引脚 0110
AMX0PRT = 0x04;
负压数据
temp = (int)((1-real0/4096.0)*690); //20190426
StrTab[0]=led_code[18]; //显示P
StrTab[1]=led_code[0]; //显示0
StrTab[2]=0xBF; //显示"-" 20190426
StrTab[3]=led_code[temp/100] & 0X7F; //显示负压整数部分并且显示小数点
StrTab[4]=led_code[(temp%100)/10];
StrTab[5]=led_code[temp%10];
break;
|
评分
-
查看全部评分
|