Voor een apparaatje gebruik ik onderstaand proggie. Er zit een start/ stop functie in en een accuspannings bewaking om vastlopen door te kort accucapaciteit te voorkomen. Tevens zit er een I-meting in m.b.v. een shuntje om bij overschreiden van de max toegestane stroom van de motor deze te stoppen en hiervan de draairichting om te draaien, zodat deze weer vrij loppt naar zijn basis positie.
Nu heb ik een vertraging in de stroombewaking nodig zodat deze niet aanspreekt op aanlopen v/d motor. Dit moet alleen de rest v/h programma niet vertragen.
Heeft er iemand een suggestie??
DEVICE 16F818
CONFIG INTRC_IO,WDT_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF, PWRTE_ON, CP_OFF
OSCCON = %01110000 ' 8MHz
XTAL = 8
ADIN_RES = 12
ADIN_TAD = FRC
ADIN_STIME = 50
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
TRISA = %00000011 ;
TRISB = %00110000
ADCON1 = %11000000
SYMBOL mlinks = PORTB.0 ; motor linksom
SYMBOL mrechts = PORTB.1 ; motor rechtsom
SYMBOL groen = PORTB.2 ; led groen
SYMBOL rood = PORTB.3 ; led rood
SYMBOL cyclus = PORTB.4 ; cyclusschakelaar
SYMBOL deur = PORTB.5 ; deurschakelaar
SYMBOL aan =0
SYMBOL uit =1
SYMBOL open = 1
SYMBOL dicht =0
; dummybit
DIM ddeur AS BIT
DIM dcyclus AS BIT
; analoge signalen
DIM stroom AS WORD
DIM accu AS WORD
CLEAR ;Wis alle RAM geheugen
ddeur= 0 ; zet dymmy bit op 0
dcyclus = 0
; hoofdprogramma
start:
stroom = ADIN 1 ; lezen analoge ingangen
accu = ADIN 0
; accuspanning
IF accu > 670 THEN groen = 1
IF accu < 670 AND cyclus = 0 THEN groen =0 ; als accuspanning lager dan 10VDC wordt en de cyclus is gereed
; dan led groen uit.
IF stroom > 100 THEN GOTO overstroom ; als opgenomen motorstroom > 6A dan naar 'overstroom'.
IF deur ! = ddeur THEN ; als deur niet gelijk aan dummy deur is dan,
IF deur = dicht THEN ; als deur dicht is dan motor linksom aan.
mlinks =1
ENDIF
ENDIF
ddeur = deur ; dummy deur = deur
IF cyclus ! = dcyclus THEN ; als cyclus niet gelijk aan dcyclus dan
IF cyclus = aan THEN ; als cyclus aan is dan stop motor linksom
mlinks = 0
ENDIF
ENDIF
dcyclus = cyclus
IF deur = open THEN ; als deur geopend wordt stop motor linksom
mlinks = 0
ENDIF
IF groen = 0 THEN GOTO acculaag ; als led groen uit is ga naar 'acculaag'
DELAYMS 100
GOTO start
acculaag: ; als accuspanning lager dan 10VDC wordt en de cyclus is gereed
; dan led rood knipperen en start geblokkeerd
HIGH rood
DELAYMS 1000
LOW rood
DELAYMS 1000
overstroom:
WHILE 1=1
LOW mlinks
HIGH rood
DELAYMS 500
LOW rood
DELAYMS 500
IF cyclus = 1 THEN HIGH mrechts
IF cyclus = 0 THEN LOW mrechts
IF cyclus = 0 THEN BREAK
WEND
GOTO start
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Bijhouden of je in normaal bedrijf bent, zo ja moet een te hoge stroom meteen de motor uitschakelen.
Heb je recent gemeten dat er geen stroom loopt, dan ben je in opstartbedrijf en sta je een bepaald aantal metingen (dus een bepaalde tijd lang) toe dat de stroom te groot is, daarna ga je over naar het normaal bedrijf (dat kan je bijhouden in een bitje).
Ja.. inderdaad.
Ik zit even vast met het toe staan van een te grote stroom voor bijv. 1 sec.
Hoe zou ik dit het beste kunnen programmeren.
IF stroom > 100 THEN GOTO overstroom ik sprig nu meteen naar 'overstroom', maar wil dit na 1sec?
bedankt
Monster_Henry
My brain's all broken, but I'm feelin' alright, I feel like I'm chokin', but I'm feelin' alright, I'm goin' down fast, but I'm feelin alright, I'm not gonna last,but I'm feelin ALRIGHT! Oh Henry