|
之前同事做了一個(gè)1psi PID恒壓控制的程序 讓增大傳感器量程改程序,由于程序較長(zhǎng)我我只貼出了我有疑問(wèn)的部分程序中沒(méi)看明白的部分
1選擇內(nèi)部基準(zhǔn)電壓2.4V而傳感器的輸出電壓是5V 怎么作比較?
2為什么我計(jì)算的采集結(jié)果是 P=(1.25*real/4096-1.125)*690?
12位ADC模擬量輸入配設(shè)置
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 電壓基準(zhǔn)寄存器 基準(zhǔn)電壓選擇 內(nèi)部基準(zhǔn)電壓到VREF引腳
// and VREF output buffer
AMX0CF = 0x00; // ALL inputs are single-ended (default) 信號(hào)采集單端輸入 AMX0CF: AMUX0 配置寄存器
AMX0SL = 0x06; // 選擇P3偶數(shù)引腳
AMX0PRT = 0x01; // 選擇P3.0作為初始模擬輸入
ADC0CF = 0x98; // ADC conversion clock = 1.10592MHz, Gain=1 1001 1000 20分頻 conversion轉(zhuǎn)換 PGA放大增益為1 轉(zhuǎn)換的時(shí)鐘周期
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
模擬量采集
SFRPAGE = SFRPAGE_SAVE;
num++; //掃描6次,使用6個(gè)數(shù)碼管
count++;
if(num==6)
num=0;
if(count == 5)
{
count = 0;
SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = ADC0_PAGE;
AMX0SL = 0x06; // 選擇P3偶數(shù)引腳 0110 AMX0AD3-0 都配置為單端輸入
AMX0PRT = 0x01; // 選擇P3.0作為初始模擬輸入 0001
for(t = 0;t<8;t++) // 第一路循環(huán)采樣
{
AD0INT = 0;
AD0BUSY = 1;//寫1采樣一次
while(!AD0INT);
accumulator += ADC0;
for(s = 0; s<6;s++) //延時(shí)6個(gè)周期
{
;
}
}
real0 = (int)((accumulator >> 3)); //20190814
PID1_OUT();
accumulator = 0;
AMX0SL = 0x06; // 選擇P3偶數(shù)引腳 0110
AMX0PRT = 0x04;
負(fù)壓數(shù)據(jù)
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; //顯示負(fù)壓整數(shù)部分并且顯示小數(shù)點(diǎn)
StrTab[4]=led_code[(temp%100)/10];
StrTab[5]=led_code[temp%10];
break;
|
評(píng)分
-
查看全部評(píng)分
|