在线免费观看成年人视频-在线免费观看国产-在线免费观看国产精品-在线免费观看黄网站-在线免费观看精品

產(chǎn)品分類

當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 工業(yè)傳感器 > 溫度傳感器

類型分類:
科普知識
數(shù)據(jù)分類:
溫度傳感器

labview 溫度傳感器:LABVIEW上位機(jī)+STM32內(nèi)部溫度傳感器源程序

發(fā)布日期:2022-10-09 點(diǎn)擊率:143


labview 溫度傳感器:LABVIEW上位機(jī)+STM32內(nèi)部溫度傳感器源程序

1、打開電腦的“控制面板” -->“字體”,把“數(shù)碼管字體”文件夾中的兩個(gè)文件,復(fù)制到“字體”中
2、重新打開main.vi,就可以在您的字體設(shè)置欄找到NI7SEG字體了
3、本labview采集程序采用了自動(dòng)識別單片機(jī)串口技術(shù),用戶不必手動(dòng)選擇串口
4、本程序可以測量STM32芯片內(nèi)部的溫度。如果您用手按住開發(fā)板上的STM32芯片,可以看到labview上顯示的溫度在增加
5、本實(shí)驗(yàn)的采樣率是:10/秒,即labview可以在100ms之內(nèi)處理完一個(gè)數(shù)據(jù)。如果用戶的采樣率加大,請采用labview生產(chǎn)者/消費(fèi)者結(jié)構(gòu)
單片機(jī)源程序如下:
#include "stm32f10x.h"
#include

RCC_HCLKConfig(RCC_SYSCLK_Div1);               //配置AHB(HCLK)時(shí)鐘等于==SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1);                //配置APB2(PCLK2)鐘==AHB時(shí)鐘
RCC_PCLK1Config(RCC_HCLK_Div2);                //配置APB1(PCLK1)鐘==AHB1/2時(shí)鐘

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  //配置PLL時(shí)鐘==外部高速晶體時(shí)鐘 * 9=72MHz
RCC_PLLCmd(ENABLE);                                   //使能PLL時(shí)鐘

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)    //等待PLL時(shí)鐘就緒
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            //配置系統(tǒng)時(shí)鐘=PLL時(shí)鐘
while(RCC_GetSYSCLKSource() !=0x08)                  //檢查PLL時(shí)鐘是否作為系統(tǒng)時(shí)鐘
{
}
 }

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOF | RCC_APB2Periph_AFIO, ENABLE);  //允許GPIOB、GPIOF、AFIO時(shí)鐘
}
static void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);              //72M/6=12,ADC最大時(shí)間不能超過14M

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;                 //ADC1工作模式:獨(dú)立模式
ADC_InitStructure.ADC_ScanConvMode=DISABLE;                         //單通道模式
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;                 //單次轉(zhuǎn)換
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;          //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動(dòng)
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;         //ADC1數(shù)據(jù)右對齊
ADC_InitStructure.ADC_NbrOfChannel=1;           //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
ADC_Init(ADC1, &ADC_InitStructure);                   //根據(jù)ADC_InitStruct中指定的參數(shù),初始化外設(shè)ADC1的寄存器

ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);        //ADC1,ADC通道16,規(guī)則采樣順序值為1,采樣時(shí)間為55.5周期
ADC_TempSensorVrefintCmd(ENABLE);                   //ADC內(nèi)置溫度傳感器使能(要使用片內(nèi)溫度傳感器,切記要開啟它)

ADC_Cmd(ADC1, ENABLE);                  //使能ADC1

ADC_ResetCalibration(ADC1);                                                //重置ADC1的校準(zhǔn)寄存器

while(ADC_GetResetCalibrationStatus(ADC1));                //獲取ADC1重置校準(zhǔn)寄存器的狀態(tài),設(shè)置狀態(tài)則等待

ADC_StartCalibration(ADC1);                                        //開始ADC1的校準(zhǔn)狀態(tài)

while(ADC_GetCalibrationStatus(ADC1));                //等待校準(zhǔn)完成

ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能ADC1的軟件轉(zhuǎn)換啟動(dòng)功能
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
 //配置TIM2中斷
 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
void USART3_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate=;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStructure);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

USART_Cmd(USART3, ENABLE);

USART_ClearFlag(USART3, USART_FLAG_TC);     // 清標(biāo)志
}
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;                                        //定義GPIO初始化結(jié)構(gòu)體
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10 | GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void Timer2_Configuration(void)
{
 TIM_TimebaseInitTypeDef   TIM_TimebaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);            //打開TIM2定時(shí)器的時(shí)鐘

TIM_DeInit(TIM2);                                                    //TIMx寄存器重設(shè)為缺省值

TIM_TimebaseStructure.TIM_Period=781;                            //自動(dòng)重裝載寄存器周期的值
 TIM_TimebaseStructure.TIM_Prescaler=36 - 1;               //TIMx 時(shí)鐘頻率除數(shù)的預(yù)分頻值
 TIM_TimebaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;     //采樣分頻
 TIM_TimebaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計(jì)數(shù)模式
 TIM_TimebaseInit(TIM2, &TIM_TimebaseStructure);

TIM_ARRPreloadConfig(TIM2, ENABLE);                       //允許自動(dòng)重裝載寄存器(ARR)
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                        //允許TIM2溢出中斷

TIM_Cmd(TIM2, ENABLE);        //開啟時(shí)鐘
}
void Uart3_PutChar(u8 ch)
{

GPIO_SetBits(GPIOF, GPIO_Pin_10);

GPIO_SetBits(GPIOF, GPIO_Pin_11);
 USART_SendData(USART3, (u8) ch);
 while (USART_GetFlagStatus(USART3, USART_FLAG_TC)==RESET);        //注意此句與RS232不同
 //注意:因?yàn)镽S485的半雙工方式,在RS485發(fā)送數(shù)據(jù)完畢后,需要把RS485設(shè)置在接收狀態(tài),否則收不到主機(jī)的數(shù)據(jù)

GPIO_ResetBits(GPIOF, GPIO_Pin_11);

GPIO_ResetBits(GPIOF, GPIO_Pin_10);
}
void USART3_IRQHandler(void)            //在中斷服務(wù)程序中,由于主機(jī)響應(yīng)中斷時(shí)并不知道是哪個(gè)中斷源發(fā)出中斷請求,因此必須在中斷服務(wù)程序中對中斷源進(jìn)行判別,然后分別進(jìn)行處理。當(dāng)然,如果只涉及到一個(gè)中斷請求,是不用做上述判別的。但是無論什么情況,做上述判別是個(gè)好習(xí)慣
{

GPIO_ResetBits(GPIOF, GPIO_Pin_11);

GPIO_ResetBits(GPIOF, GPIO_Pin_10);
 if(USART_GetITStatus(USART3, USART_IT_RXNE) !=RESET)    //若接收數(shù)據(jù)寄存器滿
 {
comm=USART_ReceiveData(USART3);   //此語句作用:將USART_DR寄存器的內(nèi)容傳到comm里。另外,在單緩沖器模式下,軟件讀USART_DR寄存器則完成對RXNE位清除。[注意]在多緩沖器模式下,必須通過軟件清零"傳輸完成標(biāo)志"DMA1_FLAG_TCx(即:令DMA_IFCR的位CTCIFx=1),否則將會無法跳出中斷服務(wù)程序,出現(xiàn)一次中斷請求無數(shù)次響應(yīng)的后果

if(comm==0x63)                    //上位機(jī)自動(dòng)查找采集器是否在線
{
 comm=0;
 Uart3_PutChar(0x63);              //發(fā)送CP的ASCII碼
 Uart3_PutChar(0x70);
}
 }
}
void TIM2_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
  {
 TIM_ClearITPendingBit(TIM2,TIM_IT_Update);         //清除中斷標(biāo)志
 gototime=1;
  }
}
int main(void)
{
 u16 i;
 RCC_Configuration();
 ADC_Configuration();            //配置PC0 為ADC1_IN10
 GPIO_Configuration();
 NVIC_Configuration();
 USART3_Configuration();
 Timer2_Configuration();

GPIO_ResetBits(GPIOF, GPIO_Pin_11);

GPIO_ResetBits(GPIOF, GPIO_Pin_10);
 while(1)
 {
if (comm==0x7a)                           //單片機(jī)發(fā)送數(shù)據(jù)給PC機(jī)
{
 for(i=0;i < 256;i++)                    //根據(jù)過采樣技術(shù),每提高一位AD分辨率,需要增加4倍的采樣率;從12位AD分辨率增加到16位AD分辨率,即增加4位,所以需要增加256倍的采樣率      {        gototime=0;        TIM_Cmd(TIM2, ENABLE);                                //開啟時(shí)鐘            ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //軟件啟動(dòng)ADC轉(zhuǎn)換            while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待轉(zhuǎn)換結(jié)束            ad=0;                ad=ADC_GetConversionValue(ADC1);                        //讀取ADC值                            tempu32 +=ad;                                      //累加                while(gototime==0);                                                //延時(shí):390.5us。采樣率:10/秒        TIM_Cmd(TIM2, DISABLE);                                //關(guān)閉時(shí)鐘      }          //以下數(shù)據(jù)處理和發(fā)送會占用一定的時(shí)間,如果我們不采用過采樣技術(shù),可以把以下代碼放在TIM2定時(shí)之內(nèi)處理                                  ad=tempu32 >> 4;                        //16位分辨率,累加值右移4位
 ah=ad >> 8;                                                    //高8位
 al=ad & 0xff;                                   //低8位
 Uart3_PutChar(ah);
 Uart3_PutChar(al);

tempu32=0;
}
 }
}
復(fù)制代碼
所有資料51hei提供下載:
LabVIEW-NTCthermistor-temperature (1).rar
(490.51 KB, 下載次數(shù): 124)
2019-7-17 19:56 上傳
點(diǎn)擊文件名下載附件
labview 溫度傳感器:LABVIEW上位機(jī)+STM32內(nèi)部溫度傳感器源程序  第1張

labview 溫度傳感器:labview中DAQ采集多個(gè)數(shù)據(jù)通道(溫度傳感器)(TTL信號的曲軸位置傳感器)總結(jié)

文章目錄
前言一、面對的問題篇二、問題解決篇三、后續(xù)工作總結(jié)

前言
我研一的項(xiàng)目利用labview軟件和NI數(shù)據(jù)采集卡采集發(fā)動(dòng)機(jī)傳感器的信號然后進(jìn)行采集,發(fā)動(dòng)機(jī)傳感器是有很多種的,所以難以避免的需要采集多個(gè)通道的傳感器信號。

一、面對的問題篇
前篇已經(jīng)寫道我已經(jīng)將溫度傳感器的信號采集出來,也可以將其數(shù)據(jù)進(jìn)行信號處理,由電壓信號轉(zhuǎn)變?yōu)闇囟戎怠5窍胍杉鄠€(gè)通道的信號,加上TTL信號的曲軸位置傳感器,我模仿溫度傳感器采集的程序另加了一個(gè)DAQ助手進(jìn)行采集。也就是如圖所示的程序:

但是這個(gè)程序不能正常顯示,此時(shí)我面對的問題有:
1、波形圖無法顯示可觀察的波形,更無法對其進(jìn)行運(yùn)算。
2、我不清楚程序里是不是可以使用多個(gè)DAQ助手,用了能顯示么?有干擾么?能同時(shí)工作么?
3、若是用一個(gè)DAQ助手,可以明顯的知道一個(gè)波形圖表里面會有兩個(gè)波形,我們?nèi)绾螌蓚€(gè)波形分離出來,將其進(jìn)行分別處理?

二、問題解決篇
對于第一個(gè)問題:波形圖表無法顯示可以觀察的波形,是因?yàn)閿?shù)據(jù)采集的過快過多,可以在程序里加一個(gè)等待函數(shù),就可以將其正常顯示。
對于第二個(gè)問題:多個(gè)DAQ助手在一個(gè)程序里是不能正常工作的,在與老師的交流后,明白數(shù)據(jù)采集卡其實(shí)是以一個(gè)循環(huán)進(jìn)行采集的,當(dāng)采集完第一個(gè)通道的信號后會采集第二個(gè)通道的信號,所以一個(gè)DAQ助手會占據(jù)每一個(gè)通道,也就是說第二個(gè)DAQ助手的通道被占領(lǐng)無法采集數(shù)據(jù)。所以只能選擇一個(gè)DAQ助手采集多個(gè)通道,現(xiàn)在的問題應(yīng)該轉(zhuǎn)向采集多個(gè)通道后如何將信號多個(gè)通道分開,也就是我們將面對第三個(gè)問題。
對于第三個(gè)問題:我一開始的解決方案是采集到一個(gè)波形圖表里,然后右鍵將其信號進(jìn)行分開顯示,即如下圖的操作:

但是不可以,在將其屬性節(jié)點(diǎn)作為值轉(zhuǎn)換時(shí),它是兩個(gè)波形的值,無法單獨(dú)進(jìn)行信號處理。
所以采用了信號拆分的函數(shù),在其數(shù)據(jù)輸出時(shí)就將信號進(jìn)行分為N個(gè)所需的通道,基本成功,完整程序如下圖:

現(xiàn)在的信號采集基本程序思路已經(jīng)有了,接下來就是信號處理。

三、后續(xù)工作
信號處理主要是TTL信號的曲軸位置傳感器的信號,老板想要通過該傳感器的信號處理得到發(fā)動(dòng)機(jī)轉(zhuǎn)速和加速度物理值,這里可以由波形的橫坐標(biāo)時(shí)間和曲軸的齒數(shù)(60-2)計(jì)算平均速度,然后一段時(shí)間分隔開來可以計(jì)算發(fā)動(dòng)機(jī)的加速度,后續(xù)程序做出來后再寫。

總結(jié)
每次做完項(xiàng)目后就會感覺自己做的東西很簡單。這次的經(jīng)驗(yàn)是可以按需去寫,先寫下自己的需要,然后一點(diǎn)點(diǎn)的去解決需要,可能會更快速一點(diǎn)!
labview 溫度傳感器:LABVIEW上位機(jī)+STM32內(nèi)部溫度傳感器源程序  第2張

labview 溫度傳感器:LabVIEW監(jiān)控溫度傳感器

本帖最后由 Alan_Green 于 2019-4-30 22:29 編輯
  這里涉及 dht11 數(shù)字溫度濕度傳感器模塊、TM1637數(shù)碼顯示模塊、LabVIEW。
  功能:定時(shí)采集溫度,把溫度顯示在數(shù)碼管上,并通過串口發(fā)送給LABVIEW,記錄成EXCEL表格。
  這是幾個(gè)月前整的東西吧,當(dāng)時(shí)剛買到R3的板子和模塊,在貼吧里找的庫和代碼,東拼西湊改過來的,(記得改過顯示模塊的庫文件,增加了數(shù)組。。。。只是為了使用方便)這兩個(gè)模塊的庫很好找。這里主要是把LabVIEW連接起來了,其實(shí)LabVIEW也是用自帶的串口通信例程改過來,自己在循環(huán)里添加了程序,把串口收到的數(shù)據(jù)處理成表格保存。
[mw_shl_code=arduino,true]
//
//
#include

pinMode(LED,OUTPUT);
 Serial.begin(9600);
//
cli();      // disable global interrupts
TCCR1A=0; // set entire TCCR1A register to 0
TCCR1B=0; // same for TCCR1B
OCR1A=;              // set compare match register to desired timer count:
TCCR1B |=(1 << WGM12);     // turn on CTC mode: TCCR1B |=(1 << CS10);      // Set CS10 and CS12 bits for 1024 prescaler: TCCR1B |=(1 << CS12); TIMSK1 |=(1 << OCIE1A);    // enable timer compare interrupt: sei();                      // enable global interrupts: } void loop() {  if(okstage==1){    DHT11.read(DHT11PIN); //讀溫濕度傳感器數(shù)據(jù)存入相應(yīng)數(shù)組    count();              //把溫濕度轉(zhuǎn)換存入顯示數(shù)組    displayLED();         //顯示顯示數(shù)組      send_labview(); //  bringled();           //翻轉(zhuǎn)LED        okstage=0;    }    Serial.println();    delay(200); } // void displayLED() {    for(int i=0;i<4;i++)    {    tm1637.display(i,ListDisp);  //What the F***? 這里是ListDisplay 【i】,為什么顯示不出來?    } } // void count() {  ListDisp[0]=DHT11.temperature / 10;  ListDisp[1]=DHT11.temperature % 10; //  ListDisp[2]=DHT11.humidity / 10; //  ListDisp[3]=DHT11.humidity % 10;  ListDisp[2]=DHT11.temperature_4; } // void bringled() {  if(ledstage==LOW) ledstage=HIGH;  else                ledstage=LOW;  digitalWrite(LED,ledstage); } // void send_labview(){    Serial.write(DHT11.humidity);    Serial.write(DHT11.humidity_1);    Serial.write(DHT11.temperature);    Serial.write(DHT11.temperature_4);    Serial.write(DHT11.jiaoyan);    Serial.println();     } // ISR(TIMER1_COMPA_vect) {  seconds++;  if (seconds==1)  {    seconds=0;    okstage=1; //    readMySensor();   //定時(shí)訪問傳感器或者其他子程序  } }[/mw_shl_code] LABVIEW部分框圖.png (85.38 KB, 下載次數(shù): 59) 下載附件 2019-4-30 21:56 上傳 LABVIEW框圖 LABVIEW前面板.png (84.11 KB, 下載次數(shù): 38) 下載附件 2019-4-30 21:56 上傳 LABVIEW前面板 串口數(shù)據(jù).png (17.23 KB, 下載次數(shù): 26) 下載附件 2019-4-30 22:06 上傳 串口數(shù)據(jù) 實(shí)物圖.jpg (194.73 KB, 下載次數(shù): 26) 下載附件 2019-4-30 22:12 上傳 表格內(nèi)容.png (98.7 KB, 下載次數(shù): 24) 下載附件 2019-4-30 22:18 上傳 不能上傳表格,只能截圖了。labview 溫度傳感器:LABVIEW上位機(jī)+STM32內(nèi)部溫度傳感器源程序  第3張

labview 溫度傳感器:我想用LabViEW做個(gè)東西,具體是這樣的: 溫度傳感器測溫度實(shí)時(shí)以波形顯示在面板里,問用labVIEW要怎么設(shè)計(jì)?

傳統(tǒng)的溫度測量儀器,其功能及規(guī)格是單一固定的,用戶無法根據(jù)自己的需要改變。NI公司提出的虛擬儀器概念,徹底打破了傳統(tǒng)儀器由廠家定義、用戶無法改變的模式,使測控儀器發(fā)生了巨大變革。LabVIEW是NI公司開發(fā)的一種虛擬儀器平臺,而目前利用LabVIEW進(jìn)行的開發(fā)通常都是建立在LabVIEW所支持的價(jià)格昂貴的數(shù)據(jù)采集板卡之上的。為解決這一問題,本系統(tǒng)采用低功耗單片機(jī)P89LV51RD2和低功耗溫度傳感器TMPll2組成溫度采集節(jié)點(diǎn),并通過無線通信模塊實(shí)現(xiàn)單片機(jī)系統(tǒng)與上位機(jī)的遠(yuǎn)程通信,不僅取代了價(jià)格昂貴的數(shù)據(jù)采集卡,大大降低了系統(tǒng)成本,而且實(shí)現(xiàn)了數(shù)據(jù)的無線傳輸。同時(shí),溫度采集節(jié)點(diǎn)的低功耗特性,降低了ZigBee組網(wǎng)時(shí)對電源的要求,便于進(jìn)行組網(wǎng)實(shí)現(xiàn)多點(diǎn)測溫。
  1 系統(tǒng)的組成及工作原理
  圖1給出了系統(tǒng)組成框圖,該溫度測控系統(tǒng)主要由計(jì)算機(jī)、單片機(jī)、溫度測量電路、溫度控制電路以及無線通信電路組成。TMPll2溫度傳感器進(jìn)行溫度采集,將溫度數(shù)字量傳送給P89LV51RD2后,通過數(shù)碼管LED電路進(jìn)行現(xiàn)場溫度顯示。同時(shí),P89LV51RD2將溫度數(shù)據(jù)通過無線通信模塊SZ05發(fā)送給遠(yuǎn)程計(jì)算機(jī),運(yùn)行于PC機(jī)上的LabVIEW控制平臺對溫度進(jìn)行實(shí)時(shí)顯示,并進(jìn)行數(shù)據(jù)處理、溫度報(bào)警及數(shù)據(jù)存儲等。另外,控制平臺采樣輸入信號,利用LabVIEW中的PID控制器進(jìn)行PID控制,將控制量通過無線模塊發(fā)送給單片機(jī),單片機(jī)輸出控制量實(shí)現(xiàn)溫度控制。
  2 系統(tǒng)硬件設(shè)計(jì)
  2.1 溫度測量顯示電路
  本系統(tǒng)采用TI公司于2009年6月推出的高精度低功耗數(shù)字溫度傳感器TMPll2來實(shí)現(xiàn)溫度測量。該傳器具有如下特點(diǎn):
  ◆測溫范圍為-40~125℃;
  ◆0~65℃溫度范同內(nèi)精度達(dá)O.5℃,-40~125℃范圍內(nèi)精度達(dá)1℃;
  ◆12位分辨率,測量值的讀取精度達(dá)到0.0625℃;
  ◆正常操作模式的最大靜態(tài)電流為10μA,關(guān)機(jī)模式則為1μA;
  ◆電源范圍1.4~3.6 V;
  ◆SMBus/兩線式串行接口,總線上最多可連接4個(gè)該傳感器。
  從功耗、精度、接口等方面綜合考慮,采用P89LV51RD2與TMPll2組成溫度測量節(jié)點(diǎn)。雖然P89LV51RD2單片機(jī)沒有專用的I2C總線接口,但可以使用軟件模擬I2C總線,來實(shí)現(xiàn)單片機(jī)與TMPll2的通信。利用單片機(jī)的I/O口P1.0和P1.1分別模擬I2C總線的SDA和SCL信號,故只需將單片機(jī)的P1.O和P1.1引腳分別與TMPll2的SDA和SCL引腳相連(注意需要上拉)。P89LV51RD2通過I2C總線讀取溫度數(shù)據(jù)后,由5個(gè)數(shù)碼管顯示溫度值,包括百位(或符號位)、十位、個(gè)位與2個(gè)小數(shù)位。
  2.2 溫度控制電路
  溫度控制電路如圖2所示,它主要由NPN型晶體管Q1、TLP521-1型光電耦合器U1和大功率NMOS管Q2組成。上位機(jī)程序控制系統(tǒng)將檢測溫度值與系統(tǒng)設(shè)定值進(jìn)行比較,按照PID控制算法進(jìn)行運(yùn)算,從單片機(jī)的P1.2口輸出占空比可調(diào)的PWM信號,經(jīng)晶體管Q1驅(qū)動(dòng)后,控制光電耦合器U1的通斷,繼而控制NMOS管Q2(IRF840A)的通斷時(shí)間,從而控制加熱對象——大功率電阻R的加熱時(shí)間,使其達(dá)到設(shè)定的溫度值。為方便實(shí)驗(yàn),采用的R為大功率線繞電阻,額定功率10W,額定電阻10Ω,采用+12V直流電源供電。由于流過加熱電阻R的電流較大,故為R供電的+12V直流電源必須與為其他模擬器件供電的+12V直流電源分開。
  2.3 無線通信電路
  無線通信電路采用上海順舟網(wǎng)絡(luò)科技有限公司的SZO5系列ZigBee無線數(shù)據(jù)通信模塊來實(shí)現(xiàn)。該模塊提供RS232、RS485和TTL三種接口標(biāo)準(zhǔn),傳輸距離可達(dá)100~2 000m。為了提高開發(fā)效率,采用該模塊的RS232接口,實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)的串行無線通信,使得軟件編程變得簡單。若系統(tǒng)對距離并無要求,只需使用1根串口線便能實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)的通信,而不必更改軟件設(shè)計(jì),通用性強(qiáng),適合各種應(yīng)用場合。
  3 系統(tǒng)軟件設(shè)計(jì)
  3.1 上位機(jī)軟件設(shè)計(jì)
  上位機(jī)軟件采用LabVIEW圖形化編程語言來完成控制平臺的設(shè)計(jì)。LabVIEW提供了一個(gè)非常簡潔直觀的圖形化編程環(huán)境,設(shè)計(jì)者可以輕松組建測量系統(tǒng),構(gòu)造友好美觀的操作界面,無需編寫繁瑣的計(jì)算機(jī)程序代碼,大大簡化了程序設(shè)計(jì),提高開發(fā)效率。
  圖3給出了上位機(jī)LabVIEW控制平臺的溫度監(jiān)控界面(正在進(jìn)行溫度采集顯示時(shí)的界面)。采用模塊化設(shè)計(jì)思想,該系統(tǒng)主要由數(shù)據(jù)采集與顯示、數(shù)據(jù)處理與報(bào)警、數(shù)據(jù)存儲及PID控制等模塊組成。用戶通過鼠標(biāo)在界面上操作,便可實(shí)現(xiàn)溫度的采集、顯示、處理、報(bào)警、保存及控制等功能。
  (1)數(shù)據(jù)采集與顯示模塊
  數(shù)據(jù)采集與顯示模塊主要是通過計(jì)算機(jī)串口及無線通信模塊接收單片機(jī)發(fā)送來的溫度數(shù)據(jù),并進(jìn)行實(shí)時(shí)顯示。為了保證計(jì)算機(jī)與單片機(jī)的順利通信,首先應(yīng)進(jìn)行串口初始化,如設(shè)置串口號COMl、波特率9600、8個(gè)數(shù)據(jù)位、1個(gè)停止位,無奇偶校驗(yàn)及流控制。程序運(yùn)行時(shí),單擊“開始采集”按鈕,系統(tǒng)便能接收到單片機(jī)發(fā)送來的溫度數(shù)據(jù),通過溫度儀表控件顯示當(dāng)前采集到的溫度值。此外,數(shù)據(jù)采集模塊所接收到的是一組離散的溫度信號值,通過波形圖表顯示控件進(jìn)行逐點(diǎn)顯示并連線,可繪制出溫度趨勢曲線,拖動(dòng)曲線圖右下方的滑塊,并可查看歷史溫度曲線。
  (2)數(shù)據(jù)處理與報(bào)警模塊
  數(shù)據(jù)處理主要實(shí)現(xiàn)對采集到的溫度數(shù)據(jù)進(jìn)行直方圖統(tǒng)計(jì)。單擊系統(tǒng)界面上的“創(chuàng)建直方圖”按鈕,系統(tǒng)便執(zhí)行相應(yīng)程序?qū)囟葦?shù)據(jù)進(jìn)行統(tǒng)計(jì),在波形圖控件中顯示溫度直方圖,便于用戶進(jìn)行統(tǒng)計(jì)分析。
  溫度報(bào)警模塊主要實(shí)現(xiàn)高溫報(bào)警和低溫報(bào)警。用戶在系統(tǒng)界面中設(shè)置溫度上下限值,當(dāng)實(shí)際溫度大于溫度上限或小于溫度下限時(shí),系統(tǒng)通過指示燈給出高溫報(bào)警(紅燈亮)或低溫報(bào)警(黃燈亮),提示用戶溫度超限,以確保人員及設(shè)備安全。
  (3)數(shù)據(jù)存儲模塊
  數(shù)據(jù)存儲模塊主要實(shí)現(xiàn)將采集到的溫度數(shù)據(jù)保存至Excel表格,方便用戶日后調(diào)出歷史溫度數(shù)據(jù)進(jìn)行查閱分析。首先利用“數(shù)組大小”VI獲取采集到的溫度數(shù)組的大小,并判斷其能否被10整除,若能整除,執(zhí)行“條件結(jié)構(gòu)”的“真”分支程序,將采集時(shí)間及10個(gè)溫度數(shù)據(jù)寫入電子表格文件后換行,然后再進(jìn)行條件判斷。這樣,溫度數(shù)據(jù)便以10個(gè)為l行記錄到電子表格文件中,同時(shí)每一行的開頭均記錄下了采集本組數(shù)據(jù)的日期與時(shí)間。
  另外,利用“方法節(jié)點(diǎn)”和“寫入JPEG文件”VI可將溫度曲線以JPEG格式存儲。用戶單擊“保存溫度曲線”按鈕,系統(tǒng)彈出保存對話框,提示用戶將溫度曲線保存為JPEG圖片。
  (4)PID控制模塊
  LabVIEW提供了功能強(qiáng)大的PID控制器,使用戶避免了繁瑣的PID算法的編寫,提高開發(fā)效率。進(jìn)行PID控制時(shí),首先將溫度信號輸入至PID控制器,并輸入溫度設(shè)定值和PID增益,包括比例系數(shù)Kc、積分時(shí)間常數(shù)Ti及微分時(shí)間常數(shù)Td。單擊“PID控制”按鈕,程序按照PID算法對溫度進(jìn)行控制,使溫度逼近設(shè)定值。
  3.2 下位機(jī)軟件設(shè)計(jì)
  P89LV5lRD2單片機(jī)程序采用C語言進(jìn)行設(shè)計(jì)。P89LV51RD2內(nèi)部提供了3個(gè)16位定時(shí)器/計(jì)數(shù)器以及1個(gè)全雙工串行通信口,滿足本系統(tǒng)的軟件設(shè)計(jì)要求。圖4給出了單片機(jī)控制程序流程。
  在系統(tǒng)初始化時(shí),設(shè)置8位串行口模式1,以及單片機(jī)的定時(shí)器T2工作在波特率發(fā)生器模式,產(chǎn)生串行通信所需的波特率。再令單片機(jī)的定時(shí)器T0工作在定時(shí)器模式,用于產(chǎn)生指定的控制周期。在TO的中斷程序中,首先將采集到的溫度數(shù)據(jù)通過無線模塊發(fā)送給上位機(jī)進(jìn)行實(shí)時(shí)顯示,然后上位機(jī)利用LabVIEW中的PID控制器,確定系統(tǒng)輸出控制量的大小并發(fā)送回單片機(jī),單片機(jī)根據(jù)控制量輸出PWM信號,驅(qū)動(dòng)控制電路對被測對象進(jìn)行溫度控制。
  結(jié)語
  本文設(shè)計(jì)的溫度測控系統(tǒng)以低功耗的單片機(jī)系統(tǒng)為采集模塊,代替了價(jià)格昂貴的數(shù)據(jù)采集板卡,成本低,并以LabVIEW開發(fā)的軟件平臺進(jìn)行溫度處理與控制,與傳統(tǒng)儀器相比,具有界面友好、易于操作及擴(kuò)展性強(qiáng)等特點(diǎn)。實(shí)驗(yàn)表明,本系統(tǒng)可以作為教學(xué)實(shí)驗(yàn)系統(tǒng)的一部分,嵌入到虛擬儀器實(shí)驗(yàn)平臺中,供學(xué)生學(xué)習(xí)LabVIEW編程以及虛擬儀器與單片機(jī)的通信。另外,可以將多個(gè)節(jié)點(diǎn)進(jìn)行組網(wǎng),形成一個(gè)分布式無線網(wǎng)絡(luò),實(shí)現(xiàn)多點(diǎn)溫度測量與控制,具有良好的應(yīng)用前景。(單片機(jī)與嵌入式系統(tǒng) 作者:潘曉燁,胡仁杰 東南大學(xué))

這樣例子在LabVIEW中就有,如果你是用NI的溫度測量專用轉(zhuǎn)換器,就更簡單了。
如果用其它的AD卡,需要有LabVIEW驅(qū)動(dòng)。
溫度傳感器一般說噪聲不大,可以直接通過AD卡采集,另外就是有噪聲也可以通過軟件濾波處理。

a/d卡太昂貴了
溫度傳感器-----單片機(jī)-----串口------pc

溫度傳感器-----單片機(jī)-----串口------pc
LabVIEW是一種程序開發(fā)環(huán)境,由美國國家儀器(NI)公司研制開發(fā),類似于C和BASIC開發(fā)環(huán)境,但是LabVIEW與其他計(jì)算機(jī)語言的顯著區(qū)別是:其他計(jì)算機(jī)語言都是采用基于文本的語言產(chǎn)生代碼,而LabVIEW使用的是圖形化編輯語言G編寫程序,產(chǎn)生的程序是框圖的形式。 LabVIEW軟件是NI設(shè)計(jì)平臺的核心,也是開發(fā)測量或控制系統(tǒng)的理想選擇。 LabVIEW開發(fā)環(huán)境集成了工程師和科學(xué)家快速構(gòu)建各種應(yīng)用所需的所有工具,旨在幫助工程師和科學(xué)家解決問題、提高生產(chǎn)力和不斷創(chuàng)新。

下一篇: PLC、DCS、FCS三大控

上一篇: 電氣控制線路圖控制原

推薦產(chǎn)品

更多