【正文】
的元件有否接錯,以及外引線間有否短路,同時還須檢查元器件焊接處是否可靠??紤]到本設計只是一次學習過程,對性能要求不是很高,所以采用下載線的5V VCC供電這樣的方法,電路也盡可能的精簡。用萬用表檢查單片機的各個引腳,尤其是PBPB2的PWM輸出引腳的電壓大小是否接近理論值,若不是或者沒有輸出,則直接給定該端口賦固定的位變量值,觀察輸出情況,符合要求,則說明是軟件問題。 軟件調試把調試好的程序下載到單片機中,接上電源,檢驗程序是否如自己所設計的那樣可以實現(xiàn)所要求的功能。首先檢外接收中斷部分,接收到的數(shù)據(jù)是否能夠正確讀取,并轉換成設定的角度值。設定(度)89705030100+10+30+50+70+89實際(度)93725131110+11+32+51+71+92調試是整個設計的關鍵部分,調試的成功與否關系到系統(tǒng)運行的成功與否,所以在調試時要格外的細心和有耐心,由于以前的項目經驗比較少,調試過程中還是遇到了很多困難,但在老師的悉心指導和幫助下,最終調試成功。⑵ ,通過圖形化用戶界面設置角度及顯示控制量的大小。并著重分析設計PID角度控制,提高了系統(tǒng)的穩(wěn)定性及控制精度。本次畢業(yè)設計讓我受益匪淺,通過這次設計,不僅了解了ATmega8L單片機及本次設計涉及到的電機驅動芯片的工作機理,還學會了用VB設計上位機控制系統(tǒng)界面,也再次加深了我對PID控制的理解,總的來說,這是一次從理論到實踐的飛躍過程。eeprom signed int vs=0,v0=0。unsigned char a[2]。39。) Rx_wr=0。amp。039。 if(Rx[1]==39。+39。 asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26endasm }pragma savereg+ifndef _DEBUG_TERMINAL_IO_// Get a character from the USART Receiver bufferdefine _ALTERNATE_GETCHAR_pragma used+pragma usedendifvoid uart0_send(unsigned char i){ while(!(UCSRAamp。 s++。 0x10)==0)。eeprom long v=0。e0=ry。 u=us/10。 PID()。} else { OCR1AL=0x00。 TCNT2=// Declare your local variables here // Input/Output Ports initialization// Port B initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T PORTB=0x00。PORTD=0x00。// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: kHz// Mode: Ph. correct PWM top=00FFh// OC1A output: NonInv.// OC1B output: NonInv.// Noise Canceler: Off// Input Capture on Falling EdgeTCCR1A=0xA1。OCR1AH=0x00。// Timer/Counter 2 initialization// Clock source: System Clock// Clock value: kHz// Mode: Normal top=FFh// OC2 output: DisconnectedASSR=0x00。 // External Interrupt(s) initialization// INT0: Off// INT1: OffMCUCR=0x00。// ADC initialization// ADC Clock frequency: kHz// ADC Voltage Reference: AVCC pinADMUX=ADC_VREF_TYPE。UCSRC=0x86。WDTCR=0x0F。 if(ReadU) { ReadU=0。)。)。如果選中“以十六進制顯示”則串口接收方式改為2進制接收,否則文本形式接收 = IIf(, InputModeBinary, InputModeText)End Sub39。========================39。=============================39。打開串口 按鈕39。 , amp。 , amp。....打開串口 = 關閉串口 = amp。...................關閉串口39。如果Timer1開著就關了它End IfExit SubOpenComErr: MsgBox 打開串口失??! amp。 PortInvalid amp。 Chr(13) amp。 )Exit SubEnd Sub39。 , amp。 , amp。 , amp。 , amp。 , amp。 , amp。=============39。............定義發(fā)送的數(shù)據(jù),字節(jié)型(0~255)Dim Data() As String 39。“0x”后 再用“,”分開,拆成數(shù)組各元素放到Data中 ReDim OPut(UBound(Data)) 39。............................ = OPut Else 39。......... OPut(k) = HEX_to_DEC(Data(k)) 39。....清空輸出寄存器If Then 39。=============Private Sub Command1_Click()On Error Resume Next 39。 , amp。 , amp。 , amp。 , amp。 , amp。 , amp。Combo1~55個串口設置參數(shù)存放39。, vbCritical + vbOKOnly, 錯誤提示 (0x amp。H808080 = FalseExit SubCloseComErr:39。 請確定通信端口存在且沒被占用。...關閉串口 = 打開串口 = amp。 If Then 39。比特率,奇偶效應,數(shù)據(jù)位長度,停止位 On Error GoTo OpenComErr 39。 , amp。...打開串口 = Mid(, 4, 1) 39。=============================Public Function HEX_to_DEC(ByVal Hex As String) As Long Dim I As Long Dim B As Long Hex = UCase(Hex) For I = 1 To Len(Hex) Select Case Mid(Hex, Len(Hex) I + 1, 1) Case 0: B = B + 16 ^ (I 1) * 0 Case 1: B = B + 16 ^ (I 1) * 1 Case 2: B = B + 16 ^ (I 1) * 2 Case 3: B = B + 16 ^ (I 1) * 3 Case 4: B = B + 16 ^ (I 1) * 4 Case 5: B = B + 16 ^ (I 1) * 5 Case 6: B = B + 16 ^ (I 1) * 6 Case 7: B = B + 16 ^ (I 1) * 7 Case 8: B = B + 16 ^ (I 1) * 8 Case 9: B = B + 16 ^ (I 1) * 9 Case A: B = B + 16 ^ (I 1) * 10 Case B: B = B + 16 ^ (I 1) * 11 Case C: B = B + 16 ^ (I 1) * 12 Case D: B = B + 16 ^ (I 1) * 13 Case E: B = B + 16 ^ (I 1) * 14 Case F: B = B + 16 ^ (I 1) * 15 End Select Next I HEX_to_DEC = BEnd Function39。========================Public Function BinReverse(ByVal Exp) As String Dim lngLen As Long, I As Long lngLen = Len(Exp) For I = 1 To lngLen BinReverse = BinReverse amp。自定義函數(shù) 二進制轉十進制39。 uart0_send(mm%10+48)。 uart0_send(39。 if(mm0) {uart0_send(39。 r = (v+90)*562/100。UBRRL=0x33。 // USART initialization// Communication Parameters: 8 Data, 1 Stop, No Parity// USART Receiver: On// USART Transmitter: On// USART Mode: Asynchronous// USART Baud rate: 9600UCSRA=0x00。// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80。TCNT2=0x12。OCR1BH=0x00。TCNT1H=0x00。// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: kHzTCCR0=0x04。PORTC=0x00。 = (ppy)。0xff。 OCR1AL=uamp。 asm(sei) TCNT0=50。 if(us2500) us=2500。 y=read_adc(3)。 return ADCW。 // Start the AD conversion ADCSRA|=0x40。 UDR=i。 } Rx_wr=0。) vs=v0。039。239。)39。if(data==39。data=UDR。239。參考文獻[1] 童詩白,[M].北京:高等教育出版社, 2000.[2] [M]. 北京:清華大學出版社,2003. [3] [M].北京:北京航空航天大學出版社,2008.[4] 杜剛, ATmega128單片機C程序設計與實踐[M].北京:北京航空航天大學出版社,2008. [5] [M].北京:北京航空航天大學出版社,2003.[6] 潘新民,[M].北京:電子工業(yè)出版社,2007.[7] 金春林,邱慧芳,[M].北京:清華大學出版社,2003.[8] ——C語言教程[M].北京:機械工業(yè)出版社,2008.[9] 李江全, Basic數(shù)據(jù)采集與串口通信測控應用實戰(zhàn)[M].北京:人民郵電出版社,2010.[10] [M].北京:北京航空航天大學出版社,2009.[11] [J].科技資訊,2010,(18):127.[12] [J].自動化技術與用,2008,27(6):8587.[13] [J].科技資訊,2007,(8):45.[14] NEURON CHIP Distributed Communication And Control Inc.,1994.附 錄/*****************