第一篇:實(shí)習(xí)報(bào)告——智能車設(shè)計(jì)
工業(yè)項(xiàng)目設(shè)計(jì)與制作報(bào)告
——基于電磁傳感器的智能車設(shè)計(jì)
姓名:王香偉 學(xué)號(hào):102673 專業(yè):自動(dòng)化
基于電磁傳感器的智能車設(shè)計(jì)
——工業(yè)設(shè)計(jì)報(bào)告
(102673 王香偉自動(dòng)化)
智能車以自主尋線、高速行駛為目的,以嵌入式系統(tǒng)為支撐,以PID控制算法和汽車結(jié)構(gòu)知識(shí)為核心,以信號(hào)與系統(tǒng)、電力電子、電機(jī)拖動(dòng)、傳感器等為基礎(chǔ),是一項(xiàng)綜合的設(shè)計(jì)。全車設(shè)計(jì)我認(rèn)為可分為四大部分:檢測(cè)信號(hào)采集,控制算法,驅(qū)動(dòng)及車體結(jié)構(gòu)設(shè)計(jì),輔助部分。一下我將一一介紹:
一、檢測(cè)信號(hào)采集:
a.將交變磁場(chǎng)采集成電路中的交流電壓
我們電磁組,檢測(cè)的是賽道中線導(dǎo)線中100mA,20KHz的交流電所產(chǎn)生的交變磁場(chǎng)。利用交變電磁場(chǎng)在電感線圈中產(chǎn)生交變電壓的原理,輔以LRC濾波來檢測(cè)電磁信號(hào)。所用電感L=10mH,電容C=6.8nF,二者串聯(lián)諧振頻率為20KHz,可濾掉所感應(yīng)到的其它頻率的電磁信號(hào)。
b.將交流電壓放大并整流成直流電壓
我們采用運(yùn)放AD823將所獲得的的信號(hào)電壓放大,并通過二極管和電容不可控整流電路將放大后的交流電壓轉(zhuǎn)換為直流電壓。
c.將直流電壓通過單片機(jī)AD口輸入。
五個(gè)電感的電磁信號(hào)分別連到單片機(jī)的五個(gè)不同的AD口上,單片機(jī)利用一個(gè)AD轉(zhuǎn)換器的多路開關(guān)的功能將他們一一轉(zhuǎn)換為數(shù)字量,這一過程在軟件中時(shí)這樣實(shí)現(xiàn)的。通過定時(shí)器中斷0.5ms觸發(fā)一次AD中斷,通過AD中斷讀取AD采樣值。相應(yīng)代碼如下:
#define PIT1_TIME
500 //0.5ms MK60_PITS_INITIALIZE_(MK60_PIT_CH1,SystemCoreClock,PIT1_TIME);設(shè)置定時(shí)器中斷為0.5ms觸發(fā)一次
MK60_PITS_Enables_IRQ(MK60_PIT_CH1);打開定時(shí)器中斷
} 在定時(shí)器中斷的響應(yīng)函數(shù)中打開AD中斷并將多路開關(guān)選擇em0通道。void PIT1_IRQHandler(void)
{
PIT->CHANNEL[1].TCTRL &= ~PIT_TCTRL_TIE_MASK;
PIT->CHANNEL[1].TFLG |= PIT_TFLG_TIF_MASK;
PIT->CHANNEL[1].TCTRL |=(PIT_TCTRL_TIE_MASK | PIT_TCTRL_TEN_MASK);
ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM0;} 然后再在ad中斷的響應(yīng)函數(shù)中,將AD寄存器的值讀到程序中,賦給程序中對(duì)應(yīng)的數(shù)組變量。
void ADC1_IRQHandler(void){
static uint32_t adc_cnt = 0;
ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM0;switch(adc_cnt)
{
case 0:
{
adc1_head++;
}
} if(adc1_head >= 10)
adc1_head = 0;em_adc[0][adc1_head] = ADC1->R[0];ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM1;adc_cnt = 1;break;} case 1: { em_adc[1][adc1_head] = ADC1->R[0];ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM2;adc_cnt = 2;break;} case 2: { em_adc[2][adc1_head] = ADC1->R[0];ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM3;adc_cnt = 3;break;} case 3: { em_adc[3][adc1_head] = ADC1->R[0];ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC1_EM4;adc_cnt = 4;break;} case 4: { em_adc[4][adc1_head] = ADC1->R[0];ADC1->SC1[0] =(ADC1->SC1[0] &(~ADC_SC1_ADCH_MASK))+ ADC_DISABLE;adc_cnt = 0;break;} 每個(gè)傳感器值都在不同的時(shí)間讀了十次,一共五個(gè)傳感器,組成了一個(gè)5X10的數(shù)組。之后再通過濾波(將每個(gè)傳感器的值加權(quán)平均得到一個(gè)之后可用于計(jì)算的值)
如果五個(gè)電感的最大值不一樣,可以將他們的最大值標(biāo)準(zhǔn)化到10000 void em_adc_filter(void){ volatile int i_pos = 0;int32_t fir_i,fir_head;float em_adc_sum[5] = {0,0,0,0,0};float fir[em_adc_size] = {0.4,0.1,0.1,0.1,0.1,0.1,0.05,0.05,0.0,0.0};for(i_pos = 0;i_pos < 5;i_pos++)//加權(quán)平均
{
for(fir_i = 0;fir_i { fir_head = adc1_headrow)+ D_DIRECTION * row_sub + I_DIRECTION))+ steer_midd_adjust;此句代碼即為方向控制的PID算法,其中 P_DIRECTION為比例系數(shù)、D_DIRECTION為微分系數(shù)、并未添加積分控制,比例系數(shù)和微分系數(shù)是根據(jù)車在賽道位置時(shí)刻變化的,如何變化正是我們后期調(diào)試的重點(diǎn),大體思路為,小車在賽道中線附近時(shí)控制系數(shù)較小,距離中線較遠(yuǎn)時(shí),控制。 float get_kp(int po_er){ float kp_l; if(po_er<500) { kp_l=p_5; D_DIRECTION_RATIO=d_small; } else if(po_er<1000) { kp_l=p_5+0.002*(po_er-500)*(p_10-p_5); D_DIRECTION_RATIO=d_small; } } else if(po_er<1500){ kp_l=p_10+0.002*(po_er-1000)*(p_15-p_10);D_DIRECTION_RATIO=d_small;} else if(po_er<2000){ kp_l=p_15+0.002*(po_er-1500)*(p_20-p_15);D_DIRECTION_RATIO=d_small;} else if(po_er<2500){ kp_l=p_20+0.002*(po_er-2000)*(p_25-p_20);D_DIRECTION_RATIO=d_big; } else if(po_er<3000) { kp_l=p_25+0.002*(po_er-2500)*(p_30-p_25);D_DIRECTION_RATIO=d_big; } else { kp_l=p_30; } return kp_l;當(dāng)電磁傳感器檢測(cè)到的信號(hào)過小時(shí),我們就認(rèn)為這組數(shù)據(jù)無效,并認(rèn)為此時(shí)小車偏離中線較遠(yuǎn),將舵機(jī)逐漸打到最大。速度控制中,我們根據(jù)舵機(jī)打角的絕對(duì)量和和連續(xù)二十次舵機(jī)打角的方差來進(jìn)行速度控制。 速度控制的思路為:入彎減速,彎道加速出彎再加速,直道或者曲率很小的彎拼命加速。控制方法為:若舵機(jī)打角方差較小,則認(rèn)為小車處于直道或者彎道而不是入彎狀態(tài),這個(gè)時(shí)候速度有舵機(jī)打角的絕對(duì)值來控制。 若方差很大:則說明小車正在入彎,若此時(shí)速度很快則需要進(jìn)行減速。 if(steer_gyh_fangcha<50&&steer_gyh_fangcha>-50) // { if(pwm_steer_gyh_abs<200){ zd_flag++;zd2_flag++; if(zd_flag>10) { speed_set_l=s_z1; zd_flag=21; } } else if(pwm_steer_gyh_abs<400){ zd2_flag++; zd_flag=0; if(zd2_flag>10) { speed_set_l=s_z1-0.0025*pwm_steer_gyh_abs*(s_z1-s_z2); zd2_flag=21; } } else { speed_set_l=s_w1-0.001667*(pwm_steer_gyh_abs-400)*(s_w1-s_w2); speed_set_l+=get_speed_change(); zd_flag=0; zd2_flag=0; } } else if(steer_gyh_fangcha>50) { speed_set_l=s_s1-0.001*pwm_steer_gyh_abs*(s_s1-s_s2);zd2_flag=0;zd_flag=0;} else { speed_set_l=s_w1;} 控制函數(shù)寫在另外一個(gè)定時(shí)器中斷中,每5ms觸發(fā)一次。 三、驅(qū)動(dòng)及車體結(jié)構(gòu) 電機(jī)和舵機(jī)均采用PWM控制,其中舵機(jī)直接連接到單片機(jī)中的一個(gè)PWM信號(hào)輸出,而電機(jī)則采用通過兩路PWM信號(hào)控制由兩片BTN組成組成的全橋電路來驅(qū)動(dòng)電機(jī) 其中電機(jī)PWM頻率為1500Hz,舵機(jī)PWM頻率為50Hz,舵機(jī)的低頻率導(dǎo)致舵機(jī)控制會(huì)有20ms的延時(shí),這會(huì)是5ms的控制周期有些力不從心。 小車采取前輪轉(zhuǎn)向,后輪驅(qū)動(dòng),車體設(shè)計(jì)以質(zhì)量輕,轉(zhuǎn)動(dòng)慣量小,重心底為原則。 汽車的轉(zhuǎn)向車輪、轉(zhuǎn)向節(jié)和前軸三者之間的安裝具有一定的相對(duì)位置,這種具有一定相對(duì)位置的安裝叫做轉(zhuǎn)向車輪定位,也稱前輪定位。前輪定位包括主銷后傾(角)、主銷內(nèi)傾(角)、前輪外傾(角)和前輪前束四個(gè)內(nèi)容。這是對(duì)兩個(gè)轉(zhuǎn)向前輪而言,對(duì)兩個(gè)后輪來說也同樣存在與后軸之間安裝的相對(duì)位置,稱后輪定位。后輪定位包括車輪外傾(角)和逐個(gè)后輪前束。這樣前輪定位和后輪定位總起來說叫四輪定位。a.主銷后傾角(caster)的調(diào)整 圖2.2 主銷后傾角 從側(cè)面看車輪,轉(zhuǎn)向主銷(車輪轉(zhuǎn)向時(shí)的旋轉(zhuǎn)中心)向后傾倒,稱為主銷后傾角。設(shè)置主銷后傾角后,主銷中心線的接地點(diǎn)與車輪中心的地面投影點(diǎn)之間產(chǎn)生距離(稱做主銷縱傾移距,與自行車的前輪叉梁向后傾斜的原理相同),使車輪的接地點(diǎn)位于轉(zhuǎn)向主銷延長線的后端,車輪就靠行駛中的滾動(dòng)阻力被向后拉,使車輪的方向自然朝向行駛方向。設(shè)定很大的主銷后傾角可提高直線行駛性能,同時(shí)主銷縱傾移距也增大。主銷縱傾移距過大,會(huì)使轉(zhuǎn)向盤沉重,而且由于路面干擾而加劇車輪的前后顛簸,在調(diào)節(jié)的時(shí)候我們將小車前后墊片(初始為2:2)調(diào)整為1:3,即前一后三,使其傾角為負(fù)。這樣可以減少回力矩的作用,使轉(zhuǎn)向更為靈活。 b.前輪外傾角(camber)的調(diào)整 圖2.3 前輪外傾角 從前后方向看車輪時(shí),輪胎并非垂直安裝,而是稍微傾倒呈現(xiàn)“八”字形張開,稱為負(fù)外傾,而朝反方向張開時(shí)稱正外傾。使用斜線輪胎的鼎盛時(shí)期,由于使輪胎傾斜觸地便于方向盤的操作,所以外傾角設(shè)得比較大。如果車輪垂直地面一旦滿載就易產(chǎn)生變形,可能引起車輪上部向內(nèi)傾側(cè),導(dǎo)致車輪聯(lián)接件損壞。所以事先將車輪校偏一個(gè)外八字角度,這個(gè)角度約在 1°左右。c.前輪前束 圖2.4 前輪前束 腳尖向內(nèi),所謂“內(nèi)八字腳”的意思,指的是左右前輪分別向內(nèi)。采用這種結(jié)構(gòu)目的是修正上述前輪外傾角引起的車輪向外側(cè)轉(zhuǎn)動(dòng)。如前所述,由于有外傾,轉(zhuǎn)向變得容易。另一方面,由于車輪傾斜,左右前輪分別向外側(cè)轉(zhuǎn)動(dòng),為了修正這個(gè)問題,如果左右兩輪帶有向內(nèi)的角度,則正負(fù)為零,左右兩輪可保持直線行進(jìn),減少輪胎磨損,在調(diào)試中,我們發(fā)現(xiàn)將這個(gè)角調(diào)整為1度左右,配合主銷后傾,可讓小車既能轉(zhuǎn)向靈活,又能獲得直線良好的沿線能力。 附上小車圖片一張 四、輔助部分 主要的輔助部分由按鍵OLED模塊和藍(lán)牙上位機(jī)模塊 a.按鍵OLED主要用于參數(shù)修改,測(cè)量,標(biāo)定等 大體上,我們采用6個(gè)按鍵來控制OLED,一個(gè)用于打開或關(guān)閉OLED,一個(gè)用于翻頁,另外一個(gè)用于上下左右4個(gè)方向移動(dòng)光標(biāo)。通過OLED修改參數(shù)的方法是:先將需要修改的參數(shù)顯示到OLED上;然后通過按鍵和編碼器修改顯示在OLED上的參數(shù)的值;最后再將修改后的值賦給參數(shù)對(duì)應(yīng)的變量。 在具體實(shí)現(xiàn)上,我們需要做到以下三點(diǎn):1.可以掃描到按鍵按下;2.可以將變量顯示到OLED上;3.可以修改OLED上顯示的數(shù)字;4.可以將OLED上顯示的數(shù)字賦值給變量。1.掃描按鍵: 硬件上:將按鍵、電阻和電源串聯(lián)的電路中合適的點(diǎn)連接到GPIO上,使按鍵按下與否可在相應(yīng)的GPIO端口產(chǎn)生高低電平。 軟件上:先初始化與按鍵相連的GPIO端口,配置成合適的輸入輸出模式。然后調(diào)用MK60_PORT_GPIO_READ(PORTA,key_pin[x])函數(shù)來讀取對(duì)應(yīng)GPIO端口的高低電平。2.顯示變量: 硬件上:將OLED按照接口規(guī)范與單片機(jī)連好。 軟件上:1.先將需要顯示的變量乘上合適的倍數(shù)轉(zhuǎn)化為整數(shù);2.在把整數(shù)每一位按照順序存儲(chǔ)到一個(gè)數(shù)組中;3.把存儲(chǔ)數(shù)據(jù)的數(shù)組中的每個(gè)元素加上’0’便于顯示,然后把對(duì)應(yīng)的參數(shù)名接到這個(gè)數(shù)組的后面;4.調(diào)用OLED中提供的顯示字符的函數(shù)將這個(gè)數(shù)組顯示出來。3.修改變量: 硬件上:將編碼器接好。軟件上:按下上下左右按鍵時(shí)可以選擇所要修改的位置,轉(zhuǎn)動(dòng)后輪帶動(dòng)編碼器計(jì)數(shù)來修改對(duì)應(yīng)的值,修改的是存儲(chǔ)數(shù)據(jù)的數(shù)組 4.變量重新復(fù)制: 將存儲(chǔ)數(shù)據(jù)的數(shù)組中的數(shù)按位加權(quán)求和賦值給變量。 至此,我們實(shí)現(xiàn)了按鍵OLED的基本功能,實(shí)現(xiàn)參數(shù)的顯示和修改。此外我們還實(shí)現(xiàn)了利用按鍵來實(shí)現(xiàn)傳感器最大值的標(biāo)定和速度檔位的控制,實(shí)現(xiàn)方式很簡(jiǎn)單,就是先讀取按鍵的值,然后見機(jī)行事。同時(shí)我們利用 MK60_FTFL_FLASH_WriteRecords()和MK60_FTFL_FLASH_ReadsRecords();函數(shù)將參數(shù)存儲(chǔ)于dataFlash中,便于使用。 b.藍(lán)牙上位機(jī)模塊主要用于信號(hào)的動(dòng)態(tài)觀測(cè)。 我們利用藍(lán)牙和串口將程序中需要觀測(cè)的變量發(fā)送到上位機(jī),上位機(jī)中繪制出折線圖,便于觀察。 五、總結(jié) 和一切智能系統(tǒng)一樣,智能車的智能體現(xiàn)在在反饋信息,對(duì)環(huán)境的識(shí)別和處理。我們采用電磁傳感器進(jìn)行路徑識(shí)別,實(shí)用性不廣,很難應(yīng)用與真實(shí)環(huán)境。所以我們有兩方面可以為之努力:一是考慮電磁環(huán)境的可行性,二是改用其他傳感器。二者留給日后研究。 目錄 一.學(xué)分認(rèn)定書 …… …………………………………………XX 二.實(shí)驗(yàn)報(bào)告 …… ………………………………………………XX 三.智能車制作研究報(bào)告 ……………………………………… XX 四.心得體會(huì) ………………………………………………… XX 五.附錄:程序源代碼………………………………………… … XX (要求:給出一級(jí)目錄,宋體加粗,四號(hào)字,1.5倍行距。) 一.學(xué)分認(rèn)定書(每個(gè)隊(duì)員1份)二.實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一.通用輸入輸出口和定時(shí)中斷 一、實(shí)驗(yàn)?zāi)康?/p> 1.掌握 MC9S12XS128 匯編語言對(duì)通用端口的操作指令。2.掌握程序中指令循環(huán)和跳轉(zhuǎn)的方法。 3.學(xué)會(huì)使用程序延時(shí),并會(huì)大概估算延遲時(shí)間。 二、實(shí)驗(yàn)任務(wù) 1.將 PORTA 口接八位DIP 開關(guān),PORTB口接七段數(shù)碼管顯示,PORTK控制四個(gè)數(shù)碼管其中某一個(gè)顯示。 2.采用定時(shí)中斷方式,利用八位DIP 開關(guān)輸入二進(jìn)制數(shù),數(shù)碼管顯示其十進(jìn)制數(shù)。 三、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)中每個(gè)通用輸入輸出端口要用到的寄存器都有兩個(gè),端口定義寄存器和端口方向寄存器。以 A 端口為例,端口定義寄存器為PORTA和端口方向寄存器為DDRA。在MC9S12XS128的DATASHEET 上可以查到DDRA的地址是0x00(輸入), DDRB的地址是0xFF(輸出), DDRK的地址是0xFF(輸出)。則初始化端口PORTA、PORTB、PORTK的語句為: void initGPIO(void){ DDRA = 0x00;DDRB = 0xFF;DDRK= 0xFF;} 置0 表示該位為接受輸入位,置1 表示該位為輸出位。 MC9S12DP256/DG128 中可以使用實(shí)時(shí)時(shí)鐘或增強(qiáng)型定時(shí)器來完成定時(shí)功能,二者是相互獨(dú)立的。本實(shí)驗(yàn)中用實(shí)時(shí)時(shí)鐘定時(shí)。實(shí)時(shí)時(shí)鐘的可以通過對(duì)外部晶振分頻而得到一個(gè)定時(shí)中斷。RTICTL 是實(shí)時(shí)時(shí)鐘控制寄存器,向該寄存器寫入內(nèi)容,通過查表會(huì)得到一個(gè)分頻因子,外部晶振除以分頻因子就是中斷的頻率了。因?yàn)橥獠烤д耦l率是16MHz,要得到1ms中斷一次,需要16000分頻。在MC9S12XS128的DATASHEET 上可以查到RTICTL設(shè)置為0x8F, 中斷允許寄存器CRGINT設(shè)置為0x80(開中斷)。則初始化中斷程序?yàn)椋?void InitRTI(void){ RTICTL = 0x8F;CRGINT = 0x80;} 一但進(jìn)入中斷,即開始讀PORTA口的二進(jìn)制數(shù),并轉(zhuǎn)換為十進(jìn)制,通過PORTB口顯示出來。由于是數(shù)碼管動(dòng)態(tài)顯示,PORTK口控制四個(gè)數(shù)碼管輪流顯示。具體程序見開發(fā)板例程中——SevenSegmentDigitalTube。 四、思考題 1.如果不用PORTA口做輸入,直接讓單片機(jī)內(nèi)部從0—9999自動(dòng)計(jì)數(shù),并在PORTB口顯示出計(jì)數(shù)過程,PORTK口控制四個(gè)數(shù)碼管輪流顯示,程序該如何改? 對(duì)程序的修改如下: void interrupt 7 RTI_INT(void){ time++;if(time >=50){ 2 time=0;Count_Num++;LedData[0] = Count_Num/1000%10;LedData[1] = Count_Num/100%10;LedData[2] = Count_Num/10%10;LedData[3] = Count_Num%10;if(Count_Num >=9999){ Count_Num=0;} } PORTK = 0x01 << LedNum;PORTB = LedCode[LedData[LedNum]];LedNum++;if(LedNum >= 4)LedNum = 0;CRGFLG = 0x80;} 這樣便可以在數(shù)碼管中顯示動(dòng)態(tài)顯示0000—9999,經(jīng)試驗(yàn)檢測(cè)該方法正確。 實(shí)驗(yàn)二.A/D轉(zhuǎn)換實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康?/p> 了解 S12 單片機(jī)ADC 模塊的使用方法。 二、實(shí)驗(yàn)任務(wù) 用 S12 的ADC 模塊將一路(或多路)模擬電平轉(zhuǎn)換成數(shù)字量,并將轉(zhuǎn)換結(jié)果顯示在數(shù)碼管上,或者通過SCI 發(fā)送到PC 終端顯示出來。 三、實(shí)驗(yàn)內(nèi)容 1、與 S12 的ADC 模塊相關(guān)的寄存器如下,各寄存器的詳細(xì)定義可參閱datasheet。ATDCTL2:控制寄存器。主要設(shè)置A/D 標(biāo)志位清除方式、A/D 采樣觸發(fā)方式、是否允許A/D 采樣完成中斷等。 ATDCTL3:控制寄存器。主要設(shè)置每次A/D 轉(zhuǎn)換采樣幾路電平、采樣結(jié)果的存儲(chǔ)方式等。 ATDCTL4:控制寄存器。主要設(shè)置A/D 轉(zhuǎn)換精度、A/D 轉(zhuǎn)換時(shí)鐘頻率等。 ATDCTL5:控制寄存器。主要設(shè)置A/D 轉(zhuǎn)換結(jié)果的對(duì)齊方式和數(shù)據(jù)類型,以及A/D 的采樣模式(連續(xù)采樣/單詞采樣,順序轉(zhuǎn)換/單通道轉(zhuǎn)換等) ATDSTAT0:狀態(tài)標(biāo)志寄存器。包括A/D 轉(zhuǎn)換完成標(biāo)志,出錯(cuò)標(biāo)志、轉(zhuǎn)換結(jié)果存儲(chǔ)索引等標(biāo)志位。 ATDTEST1:測(cè)試寄存器。 ATDSTAT1:標(biāo)志寄存器。標(biāo)識(shí)一次A/D 轉(zhuǎn)換中各通道的完成情況。 以上寄存器的具體內(nèi)容和其他與 ADC 模塊相關(guān)的寄存器請(qǐng)參看datasheet 相應(yīng)章節(jié)。 2、本實(shí)驗(yàn)采取AN14單通道連續(xù)AD轉(zhuǎn)換模式,且結(jié)果存放在ATD0DR0L中, 轉(zhuǎn)換序列長度為1,轉(zhuǎn)換精度為8位,在freeze模式下繼續(xù)轉(zhuǎn)換。通過查看datasheet,得出ATD0初始化程序如下:void ATD0_init(void){ ATD0CTL1=0x0e;//轉(zhuǎn)換精度為8位,從AN14通道轉(zhuǎn)換 ATD0CTL2=0x40;//禁止外部觸發(fā), 中斷禁止 ATD0CTL2_ASCIE = 1;//允許中斷 ATD0CTL3=0x88;//轉(zhuǎn)換序列長度為1,在freeze模式下繼續(xù)轉(zhuǎn)換 ATD0CTL4=0xFF;ATD0CTL5=0x2E;//單通道連續(xù)AD轉(zhuǎn)換模式 } 具體程序見開發(fā)板例程中——testAN14。 四、預(yù)習(xí)要求 (1)參考datasheet 明確ADC 各寄存器的作用,主要思考以下問題: 1.A/D 轉(zhuǎn)換的時(shí)鐘應(yīng)該是多少?如何設(shè)置分頻因子? 答:A/D 轉(zhuǎn)換的時(shí)鐘應(yīng)該是如下: 其中PRS為ATDCLT4中的后五位。 2.A/D 轉(zhuǎn)換如何啟動(dòng)?有幾種啟動(dòng)方式?分別如何設(shè)置相關(guān)寄存器? 答:可以用ATD0CLT2去給ATD模塊上電,有五種上電(觸發(fā)方式)分別如下:設(shè)置ATD0CLT2中的10~12位。第10位為0時(shí)忽略外部觸發(fā),為1時(shí)則使用內(nèi)部觸發(fā)。但第十位為1時(shí),前兩位為00,01,10,11,分別對(duì)應(yīng)下降沿觸發(fā),上升沿觸發(fā),低電平觸發(fā),高電平觸發(fā)。3.每次A/D 轉(zhuǎn)換啟動(dòng)那幾路電平采樣?采樣結(jié)果如何存儲(chǔ)(注意FIFO 的A/D 轉(zhuǎn)換模式)?采樣結(jié)果的數(shù)據(jù)類型(8 位/10 位?左對(duì)齊/右對(duì)齊?有符號(hào)數(shù)/無符號(hào)數(shù)?)? 答: 每次啟動(dòng)那一路轉(zhuǎn)化得看ATD0CTL5中的設(shè)置。采樣結(jié)果的儲(chǔ)存也是在該寄存器控制的。采樣結(jié)果的位數(shù)也是該寄存器控制。如ATD0CTL5 = 00110000時(shí)該結(jié)果為左對(duì)齊無符號(hào)型數(shù)據(jù)是連續(xù)轉(zhuǎn)化,多通道轉(zhuǎn)化。并且從0通道開始轉(zhuǎn)化。4.如何判斷A/D 轉(zhuǎn)換是否結(jié)束?如何清標(biāo)志位? 答:從ATD0START1_CCF0 = 0 時(shí)轉(zhuǎn)化完成。(2)如何實(shí)現(xiàn)多通道轉(zhuǎn)換? 答:ATD0CTL5中的第四位置1。 五、實(shí)驗(yàn)現(xiàn)象 開發(fā)板通電后,用起子旋轉(zhuǎn)電位器,發(fā)現(xiàn)數(shù)碼管上數(shù)字從0—255連續(xù)變化。 實(shí)驗(yàn) 三、PWM 模塊實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康?/p> 1. 學(xué)習(xí)使用 PWM 模塊。 2. 用 PWM 實(shí)現(xiàn)小型直流電機(jī)調(diào)速和舵機(jī)轉(zhuǎn)向。 二、實(shí)驗(yàn)任務(wù) 1、使用單片機(jī)內(nèi)部PWM 模塊調(diào)制產(chǎn)生不同脈寬的方波,實(shí)現(xiàn)小型直流電機(jī)調(diào) 速和舵機(jī)轉(zhuǎn)向。 2、將 PORTA 口接八位DIP 開關(guān),PORTB口接七段數(shù)碼管顯示,PORTK控制 四個(gè)數(shù)碼管其中某一個(gè)顯示,數(shù)碼管動(dòng)態(tài)顯示原理同實(shí)驗(yàn)1。撥碼開關(guān)高兩位控 制舵機(jī),當(dāng)為00,11代表舵機(jī)轉(zhuǎn)到正中央,為10,01代表舵機(jī)分別左轉(zhuǎn)右轉(zhuǎn)。撥 碼開關(guān)低六位控制電機(jī),表示PWM占空比。數(shù)碼管第一位顯示舵機(jī)控制方向,后 兩位顯示電機(jī)占空比。 三、實(shí)驗(yàn)內(nèi)容 1.PWM 模塊共有28 個(gè)寄存器,其中8 個(gè)為系統(tǒng)保留寄存器,具體介紹如下: PWM 啟動(dòng)寄存器(PWME) 本寄存器的 8 個(gè)bits 分別用來開關(guān)8 路PWM 的通道。PWM 極性寄存器(PWMPOL) 本寄存器的 8 位bits 分別用來設(shè)定8 路PWM 通道輸出波形的起點(diǎn)電平。PWM 預(yù)分頻寄存器(PWMPRCLK) 本寄存器用來設(shè)定 ClockA 和ClockB 的預(yù)分頻因子。ClockA 分頻寄存器(PWMSCLA) 本寄存器提供 PWM 模塊操作時(shí)的幾個(gè)控制位。PWM 通道周期寄存器(PWMPERx) 此 8 個(gè)寄存器分別為8 個(gè)通道設(shè)定方波的周期。PWM 通道脈寬寄存器(PWMDTYx)此 8 個(gè)寄存器分別為8 個(gè)通道設(shè)定脈寬。PWM初始化程序如下: void initPWM(void){ PWME=0x00;//關(guān)閉所有PWM通道 PWMPOL = 0xFF;//PWM極性選擇,選擇一個(gè)周期開始時(shí)為高電平 PWMPRCLK = 0x22;//CLOCK A,B時(shí)鐘分頻,均選擇從總線四分頻 10M PWMSCLA = 5;//CLOCK SA從CLOCK A十分頻,1M PWMSCLB = 5;//CLOCK SB從CLOCK B十分頻,1M PWMCTL = 0xF0;//01級(jí)聯(lián),23級(jí)聯(lián),45級(jí)聯(lián),67級(jí)聯(lián) PWMCLK = 0xFF;//PWM始終選擇,選擇CLOCK SA SB為PWM時(shí)鐘 PWMPER01=1000;//電機(jī)PWM正轉(zhuǎn)頻率1k PWMDTY01=0;PWMPER23=1000;PWMDTY23=0;//電機(jī)反轉(zhuǎn)頻率為1k PWMPER45=20000;//舵機(jī)PWM頻率為50Hz PWMDTY45=STEER_CENTER;//舵機(jī)占空比 PWME_PWME3=1;PWME_PWME1=1;//電機(jī)PWM波開始輸出 PWME_PWME5=1;//舵機(jī)PWM波開始輸出 } 參考程序參見實(shí)驗(yàn)例程——motorpwm 四、實(shí)驗(yàn)現(xiàn)象 撥碼開關(guān)高兩位控制舵機(jī)轉(zhuǎn)向,當(dāng)為00,11舵機(jī)在中央,為10,01舵機(jī)分別左轉(zhuǎn)右轉(zhuǎn)。撥碼開關(guān)低六位控制電機(jī),表示PWM占空比。數(shù)碼管第一位顯示舵機(jī)控制方向,后兩位顯示電機(jī)占空比。占空比越大,轉(zhuǎn)速越大。 四、電磁組實(shí)驗(yàn)——信號(hào)處理 一、實(shí)驗(yàn)步驟 1、電磁傳感器檢測(cè)到信號(hào) 2、單片機(jī)處理這些信號(hào)——判斷是否需要轉(zhuǎn)向、減速 二、實(shí)驗(yàn)內(nèi)容 1、電磁感器檢測(cè)處理后為一模擬電平,需用到AD 轉(zhuǎn)換程序。將光信號(hào)轉(zhuǎn)換為數(shù)字量存在單片機(jī)中。接下來由單片機(jī)處理這些數(shù),判斷是否要轉(zhuǎn)向。最簡(jiǎn)單的兩個(gè)傳感器布局,當(dāng)導(dǎo)線在傳感器中央時(shí),相應(yīng)的AD數(shù)值相同,導(dǎo)線偏向右邊的傳感器時(shí),右邊傳感器的值變大,左邊傳感器值變小。本實(shí)驗(yàn)關(guān)鍵在于如何確定導(dǎo)線位置。 2、輸入輸出口和ATD 的初始化同前面的實(shí)驗(yàn)一和實(shí)驗(yàn)二,將程序運(yùn)行后,打 開Data1 窗口,找出AD 轉(zhuǎn)換后的數(shù)字值,應(yīng)該在0-255 之間。將車子的左邊電感對(duì)準(zhǔn)黑色牽引線,觀察兩個(gè)傳感器。理論上應(yīng)該該電感的值最大,調(diào)解好放大器的應(yīng)在160左右記錄該數(shù)值(159),再將黑線想又移動(dòng),發(fā)現(xiàn)右邊傳感器的值逐漸增大,左邊傳感器的值逐漸減小。黑線一動(dòng)到右邊電感正下方時(shí),將此電感的值調(diào)解到160左右,記錄該數(shù)值(150)。而黑線偏出兩個(gè)電感的范圍時(shí),兩個(gè)傳感器的值同時(shí)減小。 正常情況下小車檢測(cè)中心線程序如下: //計(jì)算Line_center 6 if(ad_data[0]+ad_data[1]<100){ Line_center =(int)(ad_data[0])*160/159-(int)(ad_data[1])*160/150;//歸一化,差值計(jì)算中心線 Get_Line = 1;} else{ Get_Line = 0;} 根據(jù)檢測(cè)到黑線的位置可以判斷行車方向。參考程序見電磁基本程序。 三.智能車制作研究報(bào)告 1.原理介紹 可以確定電感相對(duì)于導(dǎo)線的位置,或者說可以確定導(dǎo)線相對(duì)于小車的分布 2.電磁傳感器 1首先由LC回路檢測(cè)磁場(chǎng)○,輸出信號(hào)Singal1。 2通過放大電路INA128將信號(hào)放大 ○ 3通過○獲得負(fù)電源。 4因?yàn)榉糯蠛蟮碾娐奉l率依然為20KHz的周期信號(hào),所以我們通過下面電路轉(zhuǎn)換為穩(wěn)○定輸出。 5在起跑線檢測(cè)上我們用干簧管電路。○6幅值測(cè)量 ○可以不使用檢波電路,而直接將上述單管放大電路中,三極管集電極電壓接入單片機(jī)的AD 端口,使用單片機(jī)直接采樣交變電壓信號(hào) 只要保證單片機(jī)的 AD 采集速率大于20kHz 的5-10 倍,連續(xù)采集5-10 個(gè)周期的電壓信號(hào)(大約100 數(shù)據(jù)左右),就可以直接從采集的數(shù)據(jù)中最大值減去最小值獲得信號(hào)的峰峰值。假設(shè)采集了128 個(gè)數(shù)據(jù): , 1,2, ,128 i x i=,計(jì)算信號(hào)的峰峰值p p V ? 可以有下式計(jì)算: 上面計(jì)算計(jì)算方法由于只用應(yīng)用了數(shù)據(jù)的最大值、最小值,所得結(jié)果容易受 到噪聲的影響,所以還可以通過計(jì)算數(shù)據(jù)交流信號(hào)的平均值、有效值反映信號(hào)的 幅值: 上面所計(jì)算得到的 , ave e x x 等都與信號(hào)的峰峰值成單調(diào)關(guān)系,所以也可以用來 進(jìn)行計(jì)算位置差值信號(hào)。 7軟件設(shè)計(jì) ○程序主要用到 S12 芯片中的PWM 模塊,TIM 模塊、PIT 模塊、AD 模塊、I/O 模塊 以及 SCI 模塊等。PWM 模塊主要用來控制舵機(jī)和電的運(yùn)轉(zhuǎn); TIM 模塊主要是用在了測(cè)速模塊,捕捉中斷并計(jì)算瞬時(shí)度。PIT模塊用于設(shè)置定時(shí)中斷; AD 模塊主要用于讀取傳感器信息以判斷黑線位置; I/O 模塊主要是用來讀取按鍵信息和控制數(shù)碼管顯示; SCI 模塊只要用在無線串口傳送模塊。 源碼后附 四.心得體會(huì)(每個(gè)隊(duì)員都要提交心得體會(huì)) 五.附錄:程序源代碼 #include #include “derivative.h” /* derivative-specific definitions */ /********************************************************************************* * * * * *********************************************************************************/ #define StrCnr 1500 /**********************************/ //初始化鎖相環(huán) //將總線頻率調(diào)整到40M /**********************************/ void InitPLL(void){ CLKSEL=0x00;//禁止鎖相環(huán),時(shí)鐘由外部晶振提供,總線頻率=外部晶振/2 PLLCTL_PLLON=1;//打開鎖相環(huán) SYNR=0x49;REFDV=0x43;// pllclock=fvco=2*osc*(1+SYNR)/(1+REFDV)=80MHz;POSTDIV = 0x00;_asm(nop);//BUS CLOCK=40M _asm(nop);while(!(CRGFLG_LOCK==1));// 等待鎖相環(huán)初始化完成 CLKSEL_PLLSEL =1;// 使用鎖相環(huán) 2012東南大學(xué)智能車競(jìng)賽電磁組Demo程序 電感信號(hào)分別接0,1口 } /**********************************/ //初始化通用IO口 //A口輸入B口和K口輸出 /**********************************/ void InitGPIO(void){ DDRA = 0x00;//A口輸入 DDRB = 0xFF;//B口輸出 DDRK = 0xFF;//K口輸出 } /**********************************/ //初始化PWM /**********************************/ void InitPWM(void){ PWME=0x00;PWMPOL = 0xFF;PWMPRCLK = 0x22;PWMCLK = 0xFF;PWMSCLA =5;PWMSCLB =5;PWMCTL = 0xF0;PWMCAE=0;PWMPER01=100;PWMDTY01=0;PWMPER23=100;PWMDTY23=0;PWMPER45=20000;PWMDTY45=StrCnr;PWME_PWME3=1;PWME_PWME1=1;PWME_PWME5=1;} /**********************************/ //初始化AD /**********************************/ void InitATD(void){ ATD0CTL0 = 0x0f;ATD0CTL1_SRES = 2;ATD0CTL1_SMP_DIS=1;ATD0CTL2_AFFC = 1;//ATD0CTL2_ASCIE = 1;//10 //關(guān)閉所有PWM通道 每位對(duì)應(yīng)一個(gè)端口 //PWM極性選擇,選擇一個(gè)周期開始時(shí)為高電平//CLOCK A,B時(shí)鐘頻率為10M //選擇CLOCK SA SB為PWM時(shí)鐘 //CLOCK SA頻率為1M //CLOCK SB頻率為1M //設(shè)定PWM通道兩兩級(jí)聯(lián)使用 //電機(jī)正轉(zhuǎn)頻率10k //電機(jī)反轉(zhuǎn)頻率10k //設(shè)定舵機(jī)控制線的頻率為50Hz //設(shè)定舵機(jī)初始位置 //電機(jī)PWM波開始輸出 //舵機(jī)PWM波開始輸出 //多路轉(zhuǎn)換時(shí)轉(zhuǎn)換 //轉(zhuǎn)換精度為12位 //中斷標(biāo)志位自動(dòng)清零 一個(gè)序列傳喚結(jié)束觸發(fā)中斷 //ATD0CTL3 = 0xC0;//結(jié)果寄存器對(duì)齊方式右對(duì)齊(ATD0CTL3_DJM=1),轉(zhuǎn)換序列長度為8(8路),循環(huán)轉(zhuǎn)換,freeze模式下繼續(xù)轉(zhuǎn)換 ATD0CTL3 = 0x80;ATD0CTL4_SMP = 0;// 采樣周期為4個(gè)周期 ATD0CTL4_PRS = 19;//atdclk=busclk/(2*(19+1))=1M ATD0CTL5_SCAN = 1;//連續(xù)轉(zhuǎn)換模式 ATD0CTL5_MULT = 1;//多通道采樣 } /**********************************/ //初始化實(shí)時(shí)中斷 /**********************************/ void InitRTI(void){ RTICTL =0x9F;//2ms中斷一次 } void main(void){ /* put your own code here */ InitPLL();InitGPIO();InitPWM(); { _FEED_COP();/* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } float StrP=0.1;float StrD=0.01;float StrPCtl;float StrDCtl;float StrCtl; #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 7 RTI_INT(void){ DisableInterrupts;11 InitRTI();InitATD();EnableInterrupts;CRGINT_RTIE = 1;for(;;)CRGFLG = 0x80; //可以在此加入合適的數(shù)碼管顯示代碼,讓其中兩位顯示左邊電感的AD值(顯示不下可以顯示其中 //部分二進(jìn)制位),讓另外兩位顯示右邊電感的AD值,方便調(diào)試。注意需要合適的初始化操作。 StrCtl=(ATD0DR1-ATD0DR0)*StrP;//如果需要更加精確可以使用ATD中斷,對(duì)這兩個(gè)值進(jìn)行取平均值,低通濾波等操作。 /* 如果使用PD控制的偽代碼: StrPCtl=(Right-Left)*StrP; StrDCtl=((Right-Left)-LastValueOf(Right-Left))*StrD;StrCtl=StrPCtl+StrDCtl;*/ //對(duì)舵機(jī)控制輸出限幅,避免燒壞舵機(jī) if(StrCtl>1800)StrCtl=1800;else if(StrCtl<1200)StrCtl=1200;PWMDTY45=StrCtl; //請(qǐng)加入合適的速度控制 //如果不確定,可以使用撥碼控制速度。這時(shí)請(qǐng)注意相關(guān)初始化操作 EnableInterrupts;} 智能儀器實(shí)習(xí)報(bào)告 課題名稱 虛擬數(shù)字電壓表的設(shè)計(jì) 院(系)電氣工程與控制科學(xué)學(xué)院專 業(yè) 測(cè)控技術(shù)與儀器 姓 名 _____________ 學(xué) 號(hào) _____________ 起止日期 2017/5/10-2017/5/18 指導(dǎo)教師 蔣 書 波 2017 年 5 月 18 日 一、實(shí)訓(xùn)要求 在LabVIEW平臺(tái)下,掌握虛擬數(shù)字電壓表的前面板設(shè)計(jì)和框圖程序設(shè)計(jì)。了解被測(cè)信號(hào)的種類,保證電壓測(cè)量的精確度。 二、實(shí)訓(xùn)目的 1、數(shù)字電壓表的功能。 2、虛擬數(shù)字電壓表的前面板設(shè)計(jì)。 3、虛擬數(shù)字電壓表的框圖程序設(shè)計(jì)。 4、軟件調(diào)試及誤差分析。 5、電壓測(cè)量值的存儲(chǔ)。 三、實(shí)驗(yàn)原理 電壓是電路中常用的電信號(hào),通過電壓測(cè)量,利用基本公式可以導(dǎo)出其他的參數(shù)。因此,電壓測(cè)量是其他許多電參數(shù)和非電參數(shù)量的基礎(chǔ)。測(cè)量電壓相當(dāng)普及的一種測(cè)量?jī)x表就是電壓表,但常用的是模擬電壓表。模擬電壓表根據(jù)檢波方式的不同。分為峰值電壓表、均值電壓表和平均值電壓表,它們都各自做成獨(dú)立的儀表。這樣,使用模擬電壓表進(jìn)行交流電壓測(cè)量時(shí),必須根據(jù)測(cè)量要求選擇儀表。另外,多數(shù)電壓表的表頭是按正弦交流有效值刻度的,而測(cè)量非正弦波時(shí),必須經(jīng)過換算才能得到正確的測(cè)量結(jié)果,從而給實(shí)際工作帶來不便。 采用虛擬電壓表,可將表征交流電壓特征的峰值、平均值和有效值集中顯示在一塊面板上,測(cè)量時(shí)可根據(jù)波形在面板上選擇儀表,用戶僅通過面板指示值就能對(duì)測(cè)量結(jié)果進(jìn)行分析比較,大大簡(jiǎn)化了測(cè)量步驟 四、實(shí)驗(yàn)內(nèi)容及說明 1、前面板的界面友好,操作方便。設(shè)計(jì)一個(gè)數(shù)據(jù)顯示窗口,一個(gè)交流/直流選擇按鈕,一個(gè)交流電壓測(cè)量多選框(PEAK/VIRTUAL VALUE/AVERAGE),一個(gè)直流電壓輸入框,一個(gè)啟動(dòng)/停止測(cè)量按鈕,一個(gè)退出系統(tǒng)按鈕。 2、顯示窗口由三個(gè)部分構(gòu)成,第一個(gè)為顯示電壓值的,第二個(gè)是顯示AC或DC的,第三個(gè)為顯示V或mV的。 3、交流/直流選擇按鈕用于選擇測(cè)量輸入信號(hào)的交流成分或者直流成分。 4、交流電壓測(cè)量多選框在(3)中交流選擇情況下可用,分別對(duì)應(yīng)于電壓的有效值、峰值和平均值測(cè)量,以滿足不同場(chǎng)合下測(cè)量的需求。 5、直流電壓輸入值控制器在(3)中直流選擇情況下可用,可在其內(nèi)輸入任意直流電壓值,單位為V。 6、程序框圖由數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)顯示和數(shù)據(jù)存儲(chǔ)四個(gè)部分組成。作為虛擬數(shù)字電壓表來說,其交流電壓信號(hào)由Express VI 仿真信號(hào)生成。在數(shù)據(jù)處理中用到交、直流提取;有效值提取;峰值提取;平均值提取。 7、數(shù)據(jù)顯示主要用于顯示數(shù)值、AC/DC、V/mV,后面兩個(gè)布爾型指示器根據(jù)測(cè)量的不同、數(shù)值范圍的變化而發(fā)生變化。主程序包括一個(gè)while循環(huán)結(jié)構(gòu)(用于控制啟動(dòng)或者停止測(cè)量)和兩個(gè)case選擇結(jié)構(gòu)(一個(gè)是進(jìn)行峰值測(cè)量、有效值測(cè)量還是平均值測(cè)量,另一個(gè)是對(duì)測(cè)量結(jié)果是以V還是mV來表示)。 8、數(shù)據(jù)存儲(chǔ),以文本或數(shù)據(jù)記錄形式,將電壓測(cè)量日期、測(cè)量時(shí)間、測(cè)量值、測(cè)量種類(交流/直流)、交流電壓測(cè)量選擇(若是直流電壓,此項(xiàng)為0)、電壓值的單位等有效信息,存儲(chǔ)到文件中。且此文件用文本處理軟件可方便瀏覽。 9、軟件調(diào)試中主要由以下幾種調(diào)試技術(shù): (1)找出錯(cuò)誤:利用查看錯(cuò)誤清單,點(diǎn)擊任何一個(gè)所列錯(cuò)誤,再選用Find功能,則出錯(cuò)的對(duì)象或窗口就會(huì)變成高亮。 (2)設(shè)置執(zhí)行程序高亮:這種執(zhí)行方式一般用于單步模式,來跟蹤框圖中的數(shù)據(jù)流動(dòng)。 (3)VI程序的單步執(zhí)行:設(shè)置單步執(zhí)行模式,將要執(zhí)行的節(jié)點(diǎn)就會(huì)閃爍,指示將被執(zhí)行。在次點(diǎn)擊單步按鈕,程序?qū)?huì)變成連續(xù)方式。 (4)探針:利用工具模板中的探針工具,放置于某根連線上,用來指示當(dāng)前數(shù)據(jù)上流動(dòng)的數(shù)值。 (5)斷點(diǎn):工具模板中的斷點(diǎn)工具,用探針或者單步方式查看數(shù)據(jù),點(diǎn)擊希望設(shè)置或者清除斷點(diǎn)的地方。 10、對(duì)于虛擬數(shù)字電壓表來說,其誤差分析部分就可以省略了。而如果為實(shí)際數(shù)字電壓表的設(shè)計(jì),需要多次重復(fù)測(cè)量某一電壓,考慮重復(fù)性和精確性。 五、設(shè)計(jì)思路 1、前面板的設(shè)計(jì) 前面板模擬真實(shí)電壓表的前面板,用于設(shè)置輸入數(shù)值和觀察輸出量。由于虛擬面板直接面向用戶,是虛擬電壓表控制軟件的核心。設(shè)計(jì)這部分時(shí),主要考慮界面美觀、操作簡(jiǎn)潔,用戶能通過面板上的各種按鈕、開關(guān)等控件來控制虛擬電壓表進(jìn)行測(cè)量工作。根據(jù)傳統(tǒng)電壓表面板控件的功能,利用LabVIEW中的控制模板,分別在設(shè)計(jì)面板上放入模擬實(shí)際電壓表控件的數(shù)據(jù)顯示窗口,一個(gè)交流/直流選擇按鈕,一個(gè)交流電壓測(cè)量多選框(PEAK/VIRTUAL VALUE/AVERAGE),一個(gè)直流電壓輸入框,一個(gè)啟動(dòng)/停止測(cè)量按鈕,一個(gè)退出系統(tǒng)按鈕 2、程序框圖的設(shè)計(jì) (1)、數(shù)據(jù)采集部分 整個(gè)電壓表分為交流和直流兩個(gè)部分,為了方便交直流的選擇,此處采用一個(gè)case選擇結(jié)構(gòu)作為交直流的切換。其中,直流電壓的輸入采用了一個(gè)double型的數(shù)值輸入控件,交流電壓的輸入采用了添加均勻噪聲的正弦仿真信號(hào),如圖: (2)、數(shù)據(jù)處理部分 數(shù)據(jù)處理過程中,在交流部分再次使用case選擇結(jié)構(gòu)來選擇交流電壓峰值、平均值和有效值的輸出,此外還通過電壓值與數(shù)值1的比較來選擇電壓的單位為V還是Mv。 (3)、數(shù)據(jù)顯示部分 由于根據(jù)實(shí)驗(yàn)要求輸出電壓值,在數(shù)據(jù)顯示部分只需要輸出電壓數(shù)值,提供單位V或者mV以及交流直流的顯示,比較簡(jiǎn)單。 (4)、數(shù)據(jù)存儲(chǔ)部分 這部分首先創(chuàng)建文件,之后設(shè)計(jì)了一個(gè)連接字符串,將需要存儲(chǔ)的電壓值,電壓?jiǎn)挝灰约敖恢绷髡f明連接起來,寫入文本。為了使存儲(chǔ)的數(shù)據(jù)簡(jiǎn)單易懂,添加了存儲(chǔ)數(shù)據(jù)產(chǎn)生時(shí)間;為了使產(chǎn)生的文本美觀,使用了行結(jié)束符、制表符等來換行換列。 六、實(shí)訓(xùn)感悟 通過這次實(shí)訓(xùn),我收獲了很多,一方面學(xué)習(xí)到了許多以前沒學(xué)過的專業(yè)知識(shí)與知識(shí)的應(yīng)用,另一方面還提高了自己動(dòng)手做項(xiàng)目的能力。本次實(shí)訓(xùn),是對(duì)我能力的進(jìn)一步鍛煉,也是一種考驗(yàn)。從中獲得的諸多收獲,也是很可貴的,是非常有意義的。在實(shí)訓(xùn)中我學(xué)到了許多新的知識(shí)。是一個(gè)讓我把書本上的理論知識(shí)運(yùn)用于實(shí)踐中的好機(jī)會(huì),原來,學(xué)的時(shí)候感嘆學(xué)的內(nèi)容太難懂,現(xiàn)在想來,有些其實(shí)并不難,關(guān)鍵在于理解。在這次實(shí)訓(xùn)中還鍛煉了我其他方面的能力,提高了我的綜合素質(zhì)。首先,它鍛煉了我做項(xiàng)目的能力,提高了獨(dú)立思考問題、自己動(dòng)手操作的能力,在工作的過程中,復(fù)習(xí)了以前學(xué)習(xí)過的知識(shí),并掌握了一些應(yīng)用知識(shí)的技巧等。 實(shí)訓(xùn)過程中,我同時(shí)也深深的感覺到自己所學(xué)的知識(shí)的膚淺和在實(shí)踐運(yùn)用中知識(shí)的匱乏,剛開始的一段時(shí)間里,對(duì)一些東西無從下手,茫然不知所措,這讓我感到非常的難過。在學(xué)校總以為自己學(xué)的不錯(cuò),一旦接觸到實(shí)踐,才發(fā)現(xiàn)自己知道的是多么少,這才真正領(lǐng)悟到學(xué)無止境的含義。平時(shí)在學(xué)習(xí)中不能夠透徹理解的知識(shí),通過動(dòng)手,會(huì)有更好的認(rèn)知。我意識(shí)到自己的操作能力的不足,在理論上還存在很多缺陷。所以在以后的學(xué)習(xí)生活中,我會(huì)更加努力地加強(qiáng)理論聯(lián)系實(shí)踐的學(xué)習(xí),在努力學(xué)好專業(yè)知識(shí)的同時(shí)努力加強(qiáng)自己的專業(yè)技能方面的能力,使自己的知識(shí)在實(shí)踐中不斷增長,在實(shí)踐中鍛煉自己,培養(yǎng)自己各方面的能力,不斷提高自己的能力。 智能車編程總結(jié) 智能車核心是飛思卡爾xs128芯片,盡可能利用單片機(jī)里的硬件資源是程序的核心。程序理應(yīng)要有漂亮的算法,但由于智能車任務(wù)不復(fù)雜,合理管理和配置硬件資源才是最重要的。? 編程步驟(關(guān)鍵找到程序框架) I.程序第一步:通過配置寄存器來編寫單片機(jī)資源的底層程序。 A.配置總線時(shí)鐘頻率(通過鎖相環(huán)電路) B.配置輸出PWM(脈寬調(diào)制波)功能(占空比) C.配置定時(shí)中斷功能(PIT定時(shí)中斷) D.配置輸入捕捉功能(脈沖累加器) E.配置基本輸入輸出端口的電平 II.程序第二步:利用底層程序編寫各種其他硬件的驅(qū)動(dòng)程序 A.驅(qū)動(dòng)電機(jī)、舵機(jī)(通過PWM波) B.驅(qū)動(dòng)傳感器發(fā)射和接收(通過IO端口和PWM波)。 C.驅(qū)動(dòng)碼盤測(cè)速裝置并接收。(通過輸入捕捉功能)。 III.程序第三步:連接各種硬件,順序完成巡線任務(wù)。 IV.程序第四位:利用控制思想,不斷調(diào)試和優(yōu)化程序。 ? 編程思想(程序關(guān)鍵要清楚) I.盡量使各種功能都封裝成函數(shù)。 II.程序分層次,不同層次盡量寫在不同文檔中(函數(shù)層層調(diào)用)。 III.主函數(shù)中簡(jiǎn)單明了,思路、層次分明。 IV.各種工具函數(shù)同一管理。(延時(shí),絕對(duì)值,取最大最小值等) V.重點(diǎn)參數(shù)使用全局變量方便調(diào)試。 ? 控制方法:使用PID控制方法(關(guān)鍵在調(diào)試) I.電機(jī)調(diào)試PID (以預(yù)設(shè)速度與實(shí)際檢測(cè)的速度的差值為偏差值error) II.搖頭舵機(jī)PID (以傳感器偏離中心距離為偏差值error) III.轉(zhuǎn)向舵機(jī)PID (以搖頭舵機(jī)偏離中心的角度為偏差值error) 其他一些都是根據(jù)實(shí)際情況的一些細(xì)節(jié)處理,比如過十字交叉線,出道檢測(cè),起點(diǎn)檢測(cè)等。 志愿!永恒的志與愿! ------第六屆“飛思卡爾”杯全國大學(xué)生智能汽車競(jìng)賽志愿者心得 當(dāng)我聽到有這樣一個(gè)機(jī)會(huì),可以參與第六屆全國大學(xué)生智能車競(jìng)賽志愿者時(shí),我便毫不猶豫的報(bào)上了我自己的名字。這不僅僅是我對(duì)智能車充滿了興趣,更是因?yàn)槲蚁矚g“志愿者”這三個(gè)字,它不僅僅代表著一種責(zé)任與榮譽(yù),更是體現(xiàn)著我對(duì)生活的理念與追求。 在我心目中,志愿者是一個(gè)高大的形象,就像是晨曦中的太陽,蓬勃朝氣而又散發(fā)著無限的魅力,讓人們不由得去親近。以前我竟沒有想過,我也可以成為這位大群體中的一員,在激動(dòng)的同時(shí),我也察覺到我肩上所擔(dān)的責(zé)任。無論是在制作跑道還是在鋪設(shè)跑道,我無時(shí)無刻不在心里懷揣著一份感激與小心,我不希望這次大賽因?yàn)槲业倪^失而有任何差池,我所希望的只是能為這次比賽奉獻(xiàn)我微薄的力量,我會(huì)因?yàn)槲业呐Χ院溃驗(yàn)槲业暮顾鴺s耀! 今年,我校榮幸的承辦了第六屆全國大學(xué)生智能車競(jìng)賽的任務(wù),作為一名學(xué)習(xí)自動(dòng)化的大學(xué)生,我覺得這是一次千載難逢的機(jī)會(huì),適逢院內(nèi)正在招收志愿者,我就馬上報(bào)了名,沒想到就這樣我榮幸的成為這些優(yōu)秀志愿者中的一員,從此我便開始了我短暫但卻快樂的志愿者時(shí)光。 由于志愿者活動(dòng),是在暑期進(jìn)行的,所以我們變比其他人少了許多與家人相聚的機(jī)會(huì),少了許多游山玩水的機(jī)會(huì)。但我們收獲的,卻是其他人所欽羨的。 在剛放假的時(shí)候,我們便被留了下來,來進(jìn)行一些簡(jiǎn)單跑道的制作,進(jìn)行一些培訓(xùn),以便讓我們制作出更優(yōu)良的賽會(huì)跑道。就這樣我被分到了直道組,初聽到直道組,我高興地不得了,以為可以輕松的勝任這項(xiàng)工作。但是,我錯(cuò)了,到后來慢慢地才發(fā)現(xiàn)知道的工作比別的組別更加的辛苦。不過在這個(gè)時(shí)候?qū)W長的悉心教導(dǎo)讓我們?cè)絹碓酵度氲焦ぷ髦腥ァT诙潭痰娜靸?nèi)就制作出了大量的跑道,但學(xué)長說這還差得遠(yuǎn)呢,于是我明白了這是多么任重而道遠(yuǎn)的工作啊。 在家中過得了一月悠閑地時(shí)光,我們便整裝待發(fā)回到校園,奔向那個(gè)神圣的崗位去了。剛來的那幾天,我們繼續(xù)制作跑道,熟練操作之后,我們便進(jìn)行了大賽預(yù)賽與決賽的跑道制作。比賽的日子越來越近了,在忙完了跑道的制作,我們又開始了迎接參賽選手的服務(wù)工作。比賽進(jìn)行的那幾天里,白天,我們要負(fù)責(zé)引導(dǎo)參賽選手進(jìn)出場(chǎng)地,并在比賽全程中陪伴選手,為他們解決困難,制止他們比賽的完成,周而復(fù)始直到吃飯時(shí)間。在晚上,我們便有投入到工作中去,志愿者們耐心的撤去當(dāng)天的跑道,又鋪設(shè)了第二天比賽要用的賽會(huì)跑道。比賽那幾天,往往要工作到凌晨?jī)牲c(diǎn)左右,更有一些學(xué)長要工作到三點(diǎn)。我們沒有抱怨,仍堅(jiān)持不懈得完成自己分內(nèi)的每一項(xiàng)工作,看到了大賽的圓滿落幕,我們甚至比獲了獎(jiǎng)的比賽選手都要高興。 時(shí)光似乎走的太過焦急,轉(zhuǎn)眼間我就要回到校園生活,結(jié)束這充沛的志愿者歲月。堅(jiān)持,也許是因?yàn)樵诟冻龅倪^程中看到了最純真的笑容;也許是因?yàn)楸舜碎g心心相映的一個(gè)眼神。雖然,第一天加入這個(gè)團(tuán)隊(duì)時(shí)永不分離決心現(xiàn)在看來是那么幼稚,沙漏容不下我們想做完事;但這已經(jīng)足夠,足夠把我們?nèi)松暮綐?biāo)穩(wěn)穩(wěn)樹起。讓我們駛向遠(yuǎn)方,讓我向夢(mèng)想馳騁。或許我們每一個(gè)人只是一種單調(diào)的色彩,但只要我們緊緊的連在一起,我相信我們可以為彼此繪出燦爛的圖畫。書博會(huì)的成功舉辦,讓我們從心里感到自豪。有一天,也許當(dāng)我們會(huì)再次相聚,會(huì)一同回憶起這段青春的故事。 不論我們?cè)谀膬骸氖潞畏N職業(yè),我想每個(gè)中國人都應(yīng)抱著一顆真誠慈愛和博大的心去創(chuàng)造未來,創(chuàng)造美好的明天,而每一名志愿者,不論從事哪種志愿服務(wù),都能讓世界因?yàn)橹驹刚叩奈⑿Ω咏k麗多彩。 志愿!是我們永恒的志與愿!第二篇:智能車電磁組報(bào)告
第三篇:智能儀器實(shí)習(xí)報(bào)告
第四篇:智能車編程總結(jié)
第五篇:智能車志愿者心得體會(huì)