|
之前同事做了一個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;
|
評分
-
查看全部評分
|