• slider image 442
  • slider image 492
  • slider image 493
  • slider image 494
  • slider image 495
  • slider image 496
  • slider image 491
:::

論壇索引


Board index » All Posts (tinason)




為什麼同樣輸出的兩個I/O port無法同步?
#1
新會員
新會員


各位大哥大姐您好:
我設計一 使用ra0與ra1作ad轉換後
去執行邏輯判斷
當ra1值介於 81~101時才有輸出功能,
並將ad_ra0同時輸出至 PORTB與PORTD
然後將PORTB與PORTD以PWM形式輸出用示波器查看
但顯示出來
在某些範圍內沒有同步, 也就是兩個PWM訊號不一樣
PORTD的訊號總是會怪怪的
不知道有沒辦法解決, 謝謝!


;設計一每0.5ms計時中斷 tmr0 rate=1:16,20MHz,0.2 instrument-->3.2us,計時第156.25次時剛好0.5ms,所以tmr0出使設定為99
list p=16f877a,r=dec
include <p16f877a.inc>
;----user varibles-------
ad_ra0 equ 0x20
ad_ra1 equ 0x21
count equ 0X28
CounterA equ 0x29
CounterB equ 0x2a
CounterC equ 0x2b
w_temp equ 0x2c
status_temp equ 0x2d

;----user reset vector---
org 0x00
nop
goto mainline
;----Interrupt Vector---
org 0x04
goto IntService
;----Interrupt Service Routine---
IntService:
movwf w_temp
swapf STATUS,w
movwf status_temp

movf PORTB,W
banksel CCPR1L
movwf CCPR1L
movf PORTD,W
MOVWF CCPR2L

btfsc INTCON,T0IF
call Timer0

swapf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
retfie
;---Timer1 subroutine---
Timer0:
banksel INTCON
bcf INTCON,T0IF
movlw .126
movwf TMR0
bsf INTCON,GIE
return
;----mainprogram--------
mainline:
call initial
mainloop
call ad_convert
call ad_convert1
call LOGIC
call Delay
goto mainloop
;---initial subroutine--
initial:
banksel TRISB
clrf TRISB
banksel PORTB
clrf PORTB
;
banksel TRISD
clrf TRISD
banksel PORTD
clrf PORTD
;
banksel TRISC ;for pwm initial
clrf TRISC
banksel PORTC
clrf PORTC
;
banksel PR2
movlw .249
movwf PR2
;
banksel TMR2
clrf TMR2
;
movlw 0x00
movwf CCPR1L
MOVWF CCPR2L
;
movlw 0x0c
movwf CCP1CON
MOVWF CCP2CON
;
movlw 0x04
movwf T2CON
;
banksel ADCON1
movlw b'00000000'
movwf ADCON1
;
bsf TRISA,0
bsf TRISA,1
bsf TRISA,2
bsf TRISA,3
bsf TRISA,5
bsf TRISE,0
bsf TRISE,1
bsf TRISE,2
;
clrw
clrf PCLATH
banksel OPTION_REG
movlw B'00000011'
movwf OPTION_REG
banksel TMR0
movlw .99
movwf TMR0
;
bsf INTCON,T0IE
bsf INTCON,GIE

return
;-----adconvert-----------
ad_convert:
banksel ADCON0
movlw b'10000001'
movwf ADCON0
call dly_20us
banksel ADCON0
bsf ADCON0,GO
AD_wait
btfsc ADCON0,GO
goto AD_wait
;
movf ADRESH,W
movwf ad_ra0

return
;-----adconvert1-----------
ad_convert1:
banksel ADCON0
movlw b'10001001'
movwf ADCON0
call dly_20us
banksel ADCON0
bsf ADCON0,GO
AD_wait1
btfsc ADCON0,GO
goto AD_wait1
;
movf ADRESH,W
movwf ad_ra1

return
;------dly-------------
dly_20us:
NOP
MOVLW .24
MOVWF count
DECLOOP
NOP
DECFSZ count,F
GOTO DECLOOP
RETURN

;------LOGIC----------
LOGIC:
MOVLW .82 ;if((ra1<101)&&(ra1>81)) 81 ~ 101 直線
BANKSEL ad_ra1
SUBWF ad_ra1,W
BTFSS STATUS,C
CLRF ad_ra0
MOVLW .101
SUBWF ad_ra1,W
BTFSS STATUS,C
GOTO straight_line
CLRF ad_ra0
RETURN

;========== straight_line mode ==============
straight_line:
MOVF ad_ra0,W
MOVWF PORTB
MOVWF PORTD
RETURN

;PIC Time Delay = 0.1 s with Osc = 20.000000 MHz
Delay
movlw D'3'
movwf CounterC
movlw D'140'
movwf CounterB
movlw D'83'
movwf CounterA
loop
decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
return

end

發表於: 2006/11/12 20:51
頂部


多組 A/D輸入 有辦法做到同步?
#2
新會員
新會員


如題, 因為每個ad轉換前需要經過一延遲時間取樣,會犧牲20us
所以在進行下一之腳位的ad轉換之前就會犧牲了20us+上一腳位轉換的時間!

請問有辦法把程式改寫成多組ad同時轉換嗎??

MAINLINE:
call INITIAL
MAINLOOP
call AD_CONVERT
call AD_CONVERT1
call Pwm
Goto MAINLOOP


;*********************
AD_CONVERT:
BANKSEL ADCON0
MOVLW B'10000001'
MOVWF ADCON0
CALL DLY
BSF ADCON0,GO ;啟動AD轉換

AD_WAIT
BTFSC ADCON0,GO
GOTO AD_WAIT
;
BANKSEL ADRESH
MOVF ADRESH,W
MOVWF AD_STATUS
RETURN


;************************
AD_CONVERT1:
BANKSEL ADCON0
MOVLW B'10000001'
MOVWF ADCON0
CALL DLY
BSF ADCON0,GO ;啟動AD轉換

AD_WAIT1
BTFSC ADCON0,GO
GOTO AD_WAIT1
;
BANKSEL ADRESH
MOVF ADRESH,W
MOVWF AD_STATUS1
RETURN

發表於: 2006/11/12 11:51
頂部


Re: portb輸出的問題
#3
新會員
新會員


照您的方法
問題已克服
謝謝!

發表於: 2006/11/10 12:02
頂部


portb輸出的問題
#4
新會員
新會員


各位大哥大姐您好
我使用pic16f877a
ra0類比輸入作ad轉換後
數值輸出到portb 並以led顯示
但portb的RB3/PGM一直顯示不出來
這是為什麼?

謝謝!

發表於: 2006/11/9 23:52
頂部


請問回授的邏輯?
#5
新會員
新會員


我是用pic16f877a
使用24bit浮點數運算 去運行state space
x(k+1)=Ax(k)+Bu(k)
Y(k)=Cx(k)+Du(k)

u is defined as error

我們知道閉迴路 close-loop
error=input-feedback
那麼當相減之後的數值error 難道就直接定義給u去運行嗎?
感覺好像怪怪的...

因為如果 feedback>input 那麼error就會發生欠位 這時候該怎樣處理這個error值? 是把error清為0嗎?

那如果input>feedback, error為正,難道就直接將error值帶入到state space運算嗎? 因為如果兩個很接近,相減後的值"error"可能會接近0, 那這樣不就等於沒送訊號給input "u(k)"了嗎?

請各位大哥大姐幫幫忙,謝謝!

發表於: 2006/11/7 23:32
頂部


Re: Tad跟AD轉換時脈是在幹麼的...
#6
新會員
新會員


請問, 我們在撰寫ad轉換程式時, 在轉換前所給予的等待時間
是否就是Tacq+2Tad, 不需要再把轉換10bit需要的時間(10Tad)加進去, 因為是系統轉換自然會耗掉的時間.
不過可以從
Ts=Tacq+2Tad+(10Tad+2Tad)
算出總共ad轉換從進入到轉換完成到下一刻類比訊號進入之前的總時間

其中
Tacq=類比訊號進入單晶片後,輸入adc電路之前,使其取樣訊號穩定,所需設定的時間,然後才送入adc電路
2Tad=每次完成ad轉換要進行下一次訊號擷取前,至少需要的延遲時間

請指點!

發表於: 2006/9/28 11:46
頂部


Re: 關於PID控制的問題
#7
新會員
新會員


請教各位先進:
在做 直流馬達 feedback 時, 要如何處理回授信號與控制命 令? 我們都希望兩者訊號作相減後, 可使得穩態誤差趨近於零, 但是可能是我觀念不對, 寫出來的程式也怪怪的!

output =kp*ek2+ki*(ek1+ek2+...)+kd*(ek2-ek1)

output=送至ccpr1l做pwm輸出
cmd=控制命令
encoder=回授信號

將馬達接上電流感測器或轉速計取其訊號回授給PIC做處理

請問程式應該這樣寫嗎?

判斷 輸入與回授信號相減之穩態誤差(ek)是否有借位的情況
若有借位則 decf cmd,f.........

以下是小弟從PIC16F87X微控制器原理與專題應用書中的'設計PID控制器"章節的程式修改的

但是跑出來的波形是 沒有 encoder回授的時候, cmd不管輸入多少, 最後pwm都會變成0xff全開, 即便是cmd無輸入,只要給pic電源,波形也是由0x00增加到0xff

請問這是怎麼回事? 那這樣的話 cmd不就失去了控制功能了嗎?

以下是我修改的程式, 請各位大大指點迷津!
http://feedback.me.ccu.edu.tw/uploads/upfile/PID2.asm

與那本書中範例不同的地方是
1. 我以RA0當做cmd輸入, RA1當作encoder回授
2. 不是以中斷來寫
3. 馬達沒有正反轉, 沒有AB相分別, 只有轉與不轉

發表於: 2006/4/11 1:44
頂部






:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------