H-Brug met IR2148


Op 22 augustus 2021 17:25:50 schreef Toon60:

Één drukknop klopt, maar die moet wel iets meer in z’n mars hebben. Als je in het stroomdiagram kijkt zie je dat er, terwijl het luik open of dicht gaat, gestopt kan worden. Vanuit die gestopte positie kan bepaald worden of het luik in dezelfde richting verder gaat of in de andere richting.

Hier zijn we terug en met vragen ;)
Dat stroomdiagram is voor mij moeilijk te volgens, drukknop in en dan drukknop uit werkt zo niet, drukknop is bij mij een start-stop cyclus

Wat hierboven staat kan geen enkele schakeling, de schakeling kan niet weten wat je in gedachten hebt nadat de motor gestopt werd.
Als de motor bv. gestopt werd tijdens het sluiten kun je met 1 drukknop niet meer kiezen wat je dan wilt doen.
Met 1 drukknop moet je een vaste schakelvolgorde respecteren.

Wanneer gaat de zoemer en hoelang?

Wat moet er gebeuren bij het overstroomsignaal?
Let wel..dat signaal zul je ook krijgen als je de eindcontacten afregelt op maximale druk op dat luik!

Wanneer werkt de led?

In de praktijk worden die eindcontacten meestal in de motorkring gezet om de motor te beschermen tegen falen van de relais en schakelfouten.
De eindcontacten op de foto hebben het na een tijdje ook moeilijk om signalen te schakelen waar bijna geen stroom mee gemoeid is zoals digitale signalen.

Het ziet ernaar uit dat het voor mij, die geen overzicht heeft over de plaatselijke situatie, het heel moeilijk zal zijn om een readymade programma te schrijven.
Vooral de tijden worden een probleem en die kun jij achteraf niet veranderen als ze niet juist staan.
Ik had een rolluikbediening voor ogen, op en neer met 1 knop en binnen een bepaalde tijdspanne met eindcontacten in de motorkring.

Er zal dus nog een en ander opgehelderd moeten worden.

LDmicro user.

Op 22 augustus 2021 17:24:04 schreef Lambiek:
Het kan heel simpel.
Even een klein testje gedaan, dit werkt al goed.

Dat ziet er al indrukwekkend uit, maar ik mis een deel van de gewenste functies. Als ik het goed begrijp is het alleen: Drukknop > luik open > drukknop > luik dicht. Dat is buitenste loop uit het stroomdiagram. Dus ik mis nog dat het luik gestopt kan worden enz. Dat kan ongetwijfeld nog ingebouwd worden in de delen LUIK_OPEN: en LUIK_DICHT: met wat extra code.

Op 22 augustus 2021 17:34:02 schreef MGP:
Ik was van plan om tegen de kosten (5€) u een geprogrammeerde 12F675 incl. de transistoren op te sturen, daarvoor moet je geen programmer enzo kopen...als je akkoord bent natuurlijk.

ow ik zie een zoemer enzo, dan zal het een grotere pic moeten zijn..

Dat is zeker een mooi aanbod, dank daarvoor. Daarmee heb ik gelijk een goed resultaat, alleen is het bepaald geen uitdaging meer voor me. Afgezien natuurlijk van het afbouwen in de praktijk van het geheel.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.

Op 23 augustus 2021 09:31:47 schreef MGP:
[...]
Hier zijn we terug en met vragen ;)
Dat stroomdiagram is voor mij moeilijk te volgens, drukknop in en dan drukknop uit werkt zo niet, drukknop is bij mij een start-stop cyclus

De drukknop is een omschakelaar, dus eigenlijk een dubbele drukknop. In rust is NC=0 en NO=1 (via R2). Ingedrukt is NC=1 (via R1) en NO=0. Die moeten beide gedetecteerd worden.
In de stuurschakeling vormen U1a en b een anti dender circuit en op de meetpunten A en B staan de schone standen van de drukknop.

Wat hierboven staat kan geen enkele schakeling, de schakeling kan niet weten wat je in gedachten hebt nadat de motor gestopt werd.
Als de motor bv. gestopt werd tijdens het sluiten kun je met 1 drukknop niet meer kiezen wat je dan wilt doen.
Met 1 drukknop moet je een vaste schakelvolgorde respecteren.

Het zal toch niet zijn dat een µ-processor niet kan wat ik met mijn TTL circuit wel voor elkaar krijg? De schakeling die ik heb werkt gewoon hè, precies zoals ik bedoel.

Wanneer gaat de zoemer en hoelang?

De rol van de zoemer is als volgt: tijdens het lopen van de motor (open of dicht) kan de drukknop worden ingedrukt, waarmee de motor wordt gestopt. Daarna wordt de drukknop losgelaten wat geen effect heeft op de motor. Nu staat het luik half open of dicht en gebeurt er niets.
Wordt nu de drukknop weer wordt ingedrukt dan worden te twee timers van U7 actief. De eerste (U7b) loopt ±750 mSek. Wordt binnen die tijd de drukknop losgelaten, dan loopt de motor verder in dezelfde richting waarin er gestopt werd.
Blijft de drukknop ingedrukt tot de 750 mSek voorbij zijn, dan wordt de timer van U7a gestart en die activeert gedurende ±250 mSek de zoemer. Daarna moet de drukknop worden losgelaten en gaat de motor verder in de andere richting dan waarin gestopt werd.
Dit alles kan eventueel steeds weer herhaald worden. Dit is ook mooi te zien in het stroomdiagram.

Wat moet er gebeuren bij het overstroomsignaal?
Let wel..dat signaal zul je ook krijgen als je de eindcontacten afregelt op maximale druk op dat luik!

Wanneer werkt de led?

Met het overstroomsignaal doe ik niet veel bijzonders en dat heb ik ook nog niet goed getest. Het idee is dat bij een te hoge motorstroom de LED en de zoemer door de 555 (U5) gepulsd worden geschakeld als een waarschuwing. Normaal is de LED altijd aan als de verlichting van de drukknop.
Maar zoals gezegd daar hoeft voorlopig niets mee gedaan worden.

In de praktijk worden die eindcontacten meestal in de motorkring gezet om de motor te beschermen tegen falen van de relais en schakelfouten.
De eindcontacten op de foto hebben het na een tijdje ook moeilijk om signalen te schakelen waar bijna geen stroom mee gemoeid is zoals digitale signalen.

De eindcontacten zijn twee schakelaars die door een magneetje op de spindel worden aangestuurd.
Die contacten kan ik op elke plaats op de spindel vastzetten en daarmee het traject van het luik bepalen

Het ziet ernaar uit dat het voor mij, die geen overzicht heeft over de plaatselijke situatie, het heel moeilijk zal zijn om een readymade programma te schrijven.
Vooral de tijden worden een probleem en die kun jij achteraf niet veranderen als ze niet juist staan.
Ik had een rolluikbediening voor ogen, op en neer met 1 knop en binnen een bepaalde tijdspanne met eindcontacten in de motorkring.

Er zal dus nog een en ander opgehelderd moeten worden.

Dat begrijp ik, daarom heb ik ook nooit gesteld dat het eenvoudig te maken zou zijn.

Al met al merk ik dat het stuurcircuit wat ik lang geleden heb ontworpen zo gek nog niet is. En op dit moment werkt het beter dan afgelopen weken, waardoor het lijkt dat storingen voortkwamen uit de gebrekkige schakeling op het prikbordje.
Daarom denk ik dat ik toch met dat oorspronkelijke ontwerp een printje ga ontwerpen. Als dat goed gaat werken vind ik dat een mooi resultaat.
Let wel: ik waardeer jullie inzet voor de alternatieve oplossing enorm en hoop daar ooit nog eens iets mee te gaan doen. Maar voor dit moment wil ik de oorspronkelijke weg volgen. Dan ben ik ook benieuwd of de IR2184 en FET’s weer ingezet kunnen worden.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.

Op 23 augustus 2021 10:59:26 schreef Toon60:

Het zal toch niet zijn dat een µ-processor niet kan wat ik met mijn TTL circuit wel voor elkaar krijg? De schakeling die ik heb werkt gewoon hè, precies zoals ik bedoel.

Een µ-controller kan meer en veel makkelijker iets besturen dan TTL, ALS je maar weet hoe het moet werken en daar heb ik het nu moeilijk mee.

Dus je start de motor met de drukknop en halverwege stop je die met de drukknop en nu beweer je dat je met diezelfde drukknop kunt kiezen of het luik open of toe moet gaan, want dat staat in uw oorspronkelijke tekst.
Ik zou niet weten hoe je dat moet doen :?

edit: Oja, je werkt met tijd

Nu.. we volgen verder uw project en misschien zal ik het later wel snappen wat ik nu niet volledig zie ;)

edit: ik heb de indruk dat het iets is voor een persoon met een beperking en te bedienen met bv. een blaaspijp of zoiets.

LDmicro user.
Lambiek

Special Member

Op 23 augustus 2021 11:16:12 schreef MGP:
edit: Oja, je werkt met tijd waarom makkelijk maken (2knoppen) als moeilijk ook kan ;)

Ja precies, met twee knoppen kan het veel makkelijker. Bijv. met één knop door een menu scrollen en één knop om je gekozen actie te activeren. Zo kun je honderden acties doen met twee knoppen.

Ik heb ook al van alles geprobeerd, maar een controller werkt een loop af en dat werkt nu eenmaal anders dan een stuk of 15 losse IC's. :)

Ik snap ook niet waarom je halverwege zou willen stoppen en dan besluit om weer verder te gaan, iets met niet kunnen kiezen.

Halverwege stoppen en weer dicht sturen kan ik me nog iets bij voorstellen.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 23 augustus 2021 12:22:27 schreef Lambiek:
Ik heb ook al van alles geprobeerd, maar een controller werkt een loop af en dat werkt nu eenmaal anders dan een stuk of 15 losse IC's. :)

Met TTL kun je bijna niet anders dan zo te werken, met een controller heb je veel meer mogelijkheden bv. 1x drukken is stop, 2x omhoog en 3x omlaag ...binnen één of meerdere seconde(n).

Maar wat hij maakt met TTL is toch wel verbazend mooi gemaakt, zou ik weer veel moeite mee hebben _/-\o_

LDmicro user.
Lambiek

Special Member

Op 23 augustus 2021 10:55:57 schreef Toon60:
Dat ziet er al indrukwekkend uit, maar ik mis een deel van de gewenste functies. Als ik het goed begrijp is het alleen: Drukknop > luik open > drukknop > luik dicht. Dat is buitenste loop uit het stroomdiagram. Dus ik mis nog dat het luik gestopt kan worden enz. Dat kan ongetwijfeld nog ingebouwd worden in de delen LUIK_OPEN: en LUIK_DICHT: met wat extra code.

Dit werkt goed en doet wat jij wil, maar wel met twee drukknoppen.

Met de keuzeknop kun je door het menu scrollen "hier heb je maar twee keuzes open of dicht" en met de enterknop bevestig je open of dicht.

Met de zelfde keuze knop kun je het proces ook stoppen en weer een keuze maken of het luik verder open gaat of dat je het luik wil sluiten.

Op het display kun je zien wat er gebeurt, zo heb je ook geen ledjes meer nodig. Zoemer zit er ook niet bij, maar zou niet weten waarvoor dat nog moet met het display erbij. Maar kan altijd nog als nodig.

Daarmee heb ik gelijk een goed resultaat, alleen is het bepaald geen uitdaging meer voor me.

Je kunt altijd nog een Arduino kopen en het daarmee maken, dan is de uitdaging er weer wel. :)

pic basic code:


Device 16F887                               ; Processor type

Xtal 10                                     ; Cristal 10Mhz

Asm                                         ; Config settings
CONFIG_REQ            
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON 
__CONFIG _CONFIG2, WRT_OFF & BOR40V 
EndAsm
   
All_Digital true                            ; Alle poorten digitaal

;Declare Adin_Res = 8                        ; resolutie 8 bits
;Declare Adin_Tad = frc                      ; set RC osc
;Declare Adin_Stime = 50                     ; sample tijd 5

Declare LCD_RSPin PORTD.2                   ; Reset display poort D.2
Declare LCD_ENPin PORTD.3                   ; Enable display poort D.3
Declare LCD_DTPin PORTD.4                   ; Data display poort D.4 t/m D.7
Declare LCD_Lines 2                         ; Twee lijns display

;Declare Rsin_Pin  PORTB.0                   ; Data in
;Declare Rsout_Pin PORTB.1                   ; Data uit
;Declare Serial_Baud 2400                    ; Baudrate 2400
;Declare Serial_Data 8                       ; Acht bit data
;Declare Rsin_Timeout 20
;Declare Rsout_Pace 5

;Declare Hserial_Baud 9600                   ; Set baudrate op 9600
;Declare Hserial_RCSTA %10010000             ; Register instelling
;Declare Hserial_TXSTA %10100110             ; Register instelling 
;Declare Hserial_Clear = On                  ; Reset buffer bij een overflow 

;Declare CCP1_Pin PORTC.2                    ; HPWM 1 op poort C.2
;Declare CCP2_Pin PORTC.1                    ; HPWM 2 op poort C.1

Symbol KEUZE = PORTA.0                      ; Ingang keuze drukknop
Symbol ENTER = PORTA.1                      ; Ingang enter drukknop

Symbol EINDSCHAK_OPEN  = PORTE.0            ; Ingang eindschak open
Symbol EINDSCHAK_DICHT = PORTE.2            ; Ingang eindschak dicht

Symbol UIT_1 = PORTC.0                      ; Uitgang relais open
Symbol UIT_2 = PORTC.2                      ; Uitgang relais dicht

Dim TELLER As Byte                          ; Variabele waarde teller
Dim TEL_BIT As Bit                          ; Variabele waarde telbit

Cls                                         ; Wis display

DelayMS 1000                                ; Pauze 1 sec 

Clear                                       ; Wis geheugen

         ;543210                            ; Hulpregel poort A
PORTA  = %000000                            ; Maak poort A laag
TRISA  = %111111                            ; Poort_A I/O

         ;543210                            ; Hulpregel poort B
PORTB  = %000000                            ; Maak poort B laag
TRISB  = %111111                            ; Poort_B I/O

         ;76543210                          ; Hulpregel poort C
PORTC  = %00000000                          ; Maak poort C laag
TRISC  = %00000000                          ; Poort_C I/O

         ;76543210                          ; Hulpregel poort D
PORTD  = %00000000                          ; Maak poort D laag
TRISD  = %00000000                          ; Poort_D I/O

         ;210                               ; Hulpregel poort E 
PORTE  = %000                               ; Maak poort E laag
TRISE  = %111                               ; Poort_E I/O

         ;76543210                          ; Hulpregel analoog
;ADCON0 = %00000001                          ; ADCON0 register analoog 8 bit

         ;76543210                          ; Hupregel analoog
;ADCON1 = %10000000                          ; ADCON1 register analoog 10 bit

         ;76543210                          ; Hulpregel analoog poort_B
;ANSELH = %00000000                          ; ANSEL register analoog poort_B

;----------------------------
; TEST LUIK OPEN LUIK DICHT.
;----------------------------

TELLER = 0
UIT_1 = 0
UIT_2 = 0

MENU:


    If KEUZE = 1 Then
       TEL_BIT = 1
    EndIf
     
    If TEL_BIT = 1 Then
       If KEUZE = 0 Then
          TELLER = TELLER + 1
          TEL_BIT = 0
       EndIf
    EndIf
    
    If TELLER = 1 Then
    
       Print At 1,1,"***LUIK__OPEN***"
       Print At 2,1,"**ENTER__KEUZE**"
       
       If ENTER = 1 Then 
          GoTo LUIK_OPEN
       EndIf
       
    EndIf
    
    If TELLER = 2 Then
    
       Print At 1,1,"***LUIK_DICHT***"
       Print At 2,1,"**ENTER__KEUZE**"
       
       If ENTER = 1 Then   
          GoTo LUIK_DICHT
       EndIf
       
    EndIf
    
    If TELLER > 2 Then
       TELLER = 0
    EndIf
    
    If TELLER = 0 Then
       Print At 1,1,"*MAAK_EEN_KEUZE*"
    EndIf
        
GoTo MENU

LUIK_OPEN:


    If ENTER = 0 Then
    
       Print At 1,1,"DRUK_OP_KEUZE_IS" 
       Print At 2,1,"******STOP******"
       
       UIT_1 = 1
    
       If EINDSCHAK_OPEN = 1 Then
          Print At 2,1,"***LUIK__OPEN***"
          UIT_1 = 0    
          TELLER = 0
          GoTo MENU
       EndIf
    
      If KEUZE = 1 Then
         Cls
         GoTo STOP_LUIK_OPEN
      EndIf 
    
    EndIf
            
GoTo LUIK_OPEN

LUIK_DICHT:


    If ENTER = 0 Then
    
       Print At 1,1,"DRUK_OP_KEUZE_IS" 
       Print At 2,1,"******STOP******"
                    
       UIT_2 = 1
    
       If EINDSCHAK_DICHT = 1 Then
          Print At 2,1,"***LUIK_DICHT***"
          UIT_2 = 0    
          TELLER = 0
          GoTo MENU
       EndIf
    
        If KEUZE = 1 Then
           Cls
           GoTo STOP_LUIK_DICHT
        EndIf
    
    EndIf
    
GoTo LUIK_DICHT

STOP_LUIK_OPEN:


    Print At 1,1,"***STOP__OPEN***"

    If KEUZE = 0 Then
       UIT_1 = 0
       TELLER = 0
       DelayMS 3000
       Cls
       GoTo MENU
    EndIf
    
GoTo STOP_LUIK_OPEN

STOP_LUIK_DICHT:


    Print At 1,1,"STOP__LUIK_DICHT"

    If KEUZE = 0 Then
       UIT_2 = 0
       TELLER = 0
       DelayMS 3000
       Cls
       GoTo MENU
    EndIf
      
GoTo STOP_LUIK_DICHT
  
End
    

Alleen zit het stroom meet gebeuren hier nog niet in, dat is met een shunt eventueel te meten en terug te koppelen naar een analoge ingang.

Hier een voorbeeld:

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 23 augustus 2021 11:16:12 schreef MGP:
[...]
Een µ-controller kan meer en veel makkelijker iets besturen dan TTL, ALS je maar weet hoe het moet werken en daar heb ik het nu moeilijk mee.

Sorry dat ik het u zo moeilijk heb gemaakt.

Nu.. we volgen verder uw project en misschien zal ik het later wel snappen wat ik nu niet volledig zie ;)
edit: ik heb de indruk dat het iets is voor een persoon met een beperking en te bedienen met bv. een blaaspijp of zoiets.

Dat klopt wel een beetje. Het luik is van de kelder in onze schuur, achter in de tuin. Vaak komen we uit huis met spullen in de hand/onder de armen die naar de kelder moeten. Handmatig het luik openen betekent dat eerst alles ergens moet worden neer gelegd/gezet en na openen weer bij elkaar gepakt. Een drukknop kan met de elleboog bediend worden. Met twee drukknoppen is bedienen met de elleboog al een beetje gokken.
Als hobby wijnmaker gok ik liever niet wanneer ik met een volle glazen fles van 15 liter loop die naar de kelder moet.

Op 23 augustus 2021 12:22:27 schreef Lambiek:
[...]
Ja precies, met twee knoppen kan het veel makkelijker. Bijv. met één knop door een menu scrollen en één knop om je gekozen actie te activeren. Zo kun je honderden acties doen met twee knoppen.

Dat begrijp ik, maar door een menu scrollen voor honderden acties is het laatste wat ik wil met die grote glazen fles sta en de kelder in wil. Één drukknop en ’n zoemer is dan overzichtelijker.

Ik heb ook al van alles geprobeerd, maar een controller werkt een loop af en dat werkt nu eenmaal anders dan een stuk of 15 losse IC's. :)

Dat begrijp ik dan weer niet. Wanneer ik naar het stroomdiagram kijk, zou ik volgens mij redelijk eenvoudig met Turbo Pascal een programma in elkaar zetten. Het is dat ik voor dit doel niet steeds een PC kan laten draaien.

Ik snap ook niet waarom je halverwege zou willen stoppen en dan besluit om weer verder te gaan, iets met niet kunnen kiezen.
Halverwege stoppen en weer dicht sturen kan ik me nog iets bij voorstellen.

Wanneer er iets onverwachts gebeurd, wil ik het luik kunnen stoppen. Afhankelijk van wat er aan de hand is, kan het luik verder of weer terug. En het kan, dus waarom niet?

Op 23 augustus 2021 13:37:21 schreef MGP:
Maar wat hij maakt met TTL is toch wel verbazend mooi gemaakt, zou ik weer veel moeite mee hebben _/-\o_

Dank je wel voor dit mooie compliment, eindelijk iemand die het ziet :)

Dank zij jullie commentaren en adviezen heb ik nu wel een plan hoe ik verder wil. Nu voel ik me verplicht eerst de oorspronkelijke opzet te volgen, wat ik niet erg vind. Met relais of zelfs met de FET’s als het kan.
Zodra er vooruitgang is meld ik me weer; eerst ga ik de print maken.
En mocht het tot een goed einde geraken, dan ben je van harte uitgenodigd het geautomatiseerde kelderluik in ogenschouw te komen nemen.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.

@Lambiek: het is toch ook een gave om het ingewikkeld te maken...

Als ik het goed begrijp, is het volgende de bedoeling:

- als de knop ingedrukt wordt, en het luik zich in één van beide eindposities bevindt (gedetecteerd door de eindschakelaars), moet het luik naar de andere positie

- als de knop ingedrukt wordt terwijl het luik beweegt, moet het luik stoppen. Als de knop nogmaals ingedrukt wordt, moet het luik in tegengestelde richting gaan bewegen.

- als het luik een eindschakelaar raakt behorende bij de huidige richting, moet het luik stoppen

- als het luik meer dan X seconde beweegt zonder een eindschakelaar te raken, of (optioneel) voor meer dan Y seconde boven de Z ampere komt, moet het luik stoppen (kan opnieuw beginnen door de knop in te drukken)

@TS: klopt dat een beetje?

Na het stoppen de richting omkeren is net wat eenvoudiger dan de detectie voor een lange of korte druk op de knop, en dan zou je simpelweg nog 2 keer moeten drukken om de richting nog eens om te draaien. Als je perse die lang/kort constructie wilt, kan dat ook wel hoor.

[Bericht gewijzigd door SparkyGSX op 23 augustus 2021 21:00:49 (14%)]

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Shiptronic

Golden Member

Op 23 augustus 2021 20:46:54 schreef Toon60:
[...]

Zodra er vooruitgang is meld ik me weer; eerst ga ik de print maken.
En mocht het tot een goed einde geraken, dan ben je van harte uitgenodigd het geautomatiseerde kelderluik in ogenschouw te komen nemen.

Onder het genot van een glaasje ?? :+

Fijn te lezen dat er ook TS-en zijn die wel normaal met opmerkingen om kunnen gaan, en daar komt dan iets moois uit! IPV boos weg te lopen !! Hulde !

[edit]Je kan nu ook makkelijk de soft start PWM-en

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Op 23 augustus 2021 20:57:50 schreef SparkyGSX:
- als de knop ingedrukt wordt terwijl het luik beweegt, moet het luik stoppen. Als de knop nogmaals ingedrukt wordt, moet het luik in tegengestelde richting gaan bewegen.

Als de knop nogmaals INgedrukt wordt gebeurt er nog niets. Wordt de knop binnen 750 mSek losgelaten dan gaat het luik verder in dezelfde richting. Wordt de 750 mSek, met de knop nog steeds ingedrukt, gepasseerd dan klinkt 250 mSek de zoemer en wanneer daarna de knop wordt losgelaten gaat het luik verder in de tegenovergestelde richting.

- als het luik een eindschakelaar raakt behorende bij de huidige richting, moet het luik stoppen

De andere eindschakelaar kan het luik (de spindel) nooit bereiken.

- als het luik meer dan X seconde beweegt zonder een eindschakelaar te raken, of (optioneel) voor meer dan Y seconde boven de Z ampere komt, moet het luik stoppen (kan opnieuw beginnen door de knop in te drukken)

Dat deel is nog niet helemaal uitgewerkt, maar zoiets kan het worden. Voorlopig wordt bij een te hoge motorstroom alleen “alarm” gegeven.

@TS: klopt dat een beetje?

Meer dan een beetje zou ik zeggen.

Op 23 augustus 2021 21:43:52 schreef Shiptronic:
Onder het genot van een glaasje ?? :+

Kijk, zo’n uitnodiging trekt gelijk nieuw publiek.
Maar er wordt dan natuurlijk alléén naar het kelderluik gekeken, daarvoor hoef je niet noodzakelijk ín de kelder te zijn. Onze gemeente staat bekent om z’n fijne leidingwater, dus dat glaasje komt zo nodig wel goed.

Fijn te lezen dat er ook TS-en zijn die wel normaal met opmerkingen om kunnen gaan, en daar komt dan iets moois uit! IPV boos weg te lopen !! Hulde !

Dat voelt een stuk prettiger en is veel eenvoudiger.

[edit]Je kan nu ook makkelijk de soft start PWM-en

Dat gaat, zoals ik nu verder ga, niet lukken. Daarvoor kan ik beter alsnog de µ processor opstarten.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.
Lambiek

Special Member

Op 23 augustus 2021 20:57:50 schreef SparkyGSX:
@Lambiek: het is toch ook een gave om het ingewikkeld te maken...

Ach ja, wat zal ik zeggen. Jij bent nu wel getriggert. :)

Op 23 augustus 2021 21:43:52 schreef Shiptronic:
Fijn te lezen dat er ook TS-en zijn die wel normaal met opmerkingen om kunnen gaan, en daar komt dan iets moois uit! IPV boos weg te lopen !! Hulde !

Helemaal mee eens.

Op 23 augustus 2021 20:46:54 schreef Toon60:
Dat begrijp ik, maar door een menu scrollen voor honderden acties is het laatste wat ik wil met die grote glazen fles sta en de kelder in wil.

Dat was bij wijzen van spreken natuurlijk, je hebt hier maar twee keuzes open of dicht.

Wanneer er iets onverwachts gebeurd, wil ik het luik kunnen stoppen.

Dat kan ook.

Maar Sparky gaat een programma maken met één knop, heb ik begrepen.

Als je haar maar goed zit, GROETEN LAMBIEK.

Volgens mij doet dit precies wat gevraagd is, en niets meer:

code:

#define STATE_STOPPED 0
#define STATE_OPENING 1
#define STATE_CLOSING 2

#define IN_BUTTON 1
#define IN_OPEN_LIMIT 2
#define IN_CLOSED_LIMIT 3
#define OUT_MOTOR_OPEN 4
#define OUT_MOTOR_CLOSE 5

#define MAX_MOVEMENT_TIME 10000 // 10 seconds

int DoorState = STATE_STOPPED, OpenLimitSwitch, ClosedLimitSwitch, ButtonState, PrevButtonState = 0, PrevDoorState = 0;
unsigned long MovementStartTime = 0;

void setup()
{
  pinMode( IN_BUTTON, INPUT ); // pushbutton
  pinMode( IN_OPEN_LIMIT, INPUT ); // limit switch when opening
  pinMode( IN_CLOSED_LIMIT, INPUT ); // limit switch when closing
  pinMode( OUT_MOTOR_OPEN, OUTPUT );
  pinMode( OUT_MOTOR_CLOSE, OUTPUT );
}

void loop()
{
  ButtonState = digitalRead( IN_BUTTON );
  OpenLimitSwitch = digitalRead( IN_OPEN_LIMIT );
  ClosedLimitSwitch = digitalRead( IN_CLOSED_LIMIT );

  if( ButtonState && !PrevButtonState ) 
  {
    if( DoorState == STATE_STOPPED )
    {
      if( ClosedLimitSwitch && !OpenLimitSwitch )
        DoorState = STATE_OPENING;
   
      if( OpenLimitSwitch && !ClosedLimitSwitch )
        DoorState = STATE_CLOSING;

      if( !OpenLimitSwitch && !ClosedLimitSwitch )
        DoorState = PrevDoorState == STATE_OPENING ? STATE_CLOSING : STATE_OPENING;
    }
    else
    {
      PrevDoorState = DoorState;
      DoorState = STATE_STOPPED;
    }
  }

  if( ( ( DoorState == STATE_OPENING ) && OpenLimitSwitch ) || ( ( DoorState == STATE_CLOSING ) && ClosedLimitSwitch ) )
    DoorState == STATE_STOPPED;

  if( DoorState == STATE_STOPPED )
    MovementStartTime = 0;
  else if( !MovementStartTime )
    MovementStartTime = millis();

  if( MovementStartTime && ( millis() - MovementStartTime > MAX_MOVEMENT_TIME ) )
  {
    PrevDoorState = DoorState;
    DoorState == STATE_STOPPED;
  }
    
  digitalWrite( OUT_MOTOR_OPEN, DoorState == STATE_OPENING );
  digitalWrite( OUT_MOTOR_CLOSE, DoorState == STATE_CLOSING );
  PrevButtonState = ButtonState;
}

Overigens zit hier geen debouncing code in voor de drukknop, dus ik ga er vanuit dat je dit in hardware hebt opgelost (RC filtertje, fatsoenlijke knop).

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 23 augustus 2021 22:11:59 schreef Toon60:
[...]
Als de knop nogmaals INgedrukt wordt gebeurt er nog niets. Wordt de knop binnen 750 mSek losgelaten dan gaat het luik verder in dezelfde richting. Wordt de 750 mSek, met de knop nog steeds ingedrukt, gepasseerd dan klinkt 250 mSek de zoemer en wanneer daarna de knop wordt losgelaten gaat het luik verder in de tegenovergestelde richting.

Mijn gevoel zegt dat je beter af bent met het tellen van de drukknopimpulsen dan op duurtijd.
1x drukken met de elleboog is altijd stop, een veilige oplossing.
Daarna kun je kiezen 2x drukken is open en 3x drukken is dicht.

In Radio Bulletin stond er in de jaren 80 een artikel/schakeling voor een dergelijke bediening binnenshuis voor mindervaliden en als ik mij niet vergis was dat een samenwerking met Elektuur..heel uitzonderlijk was dat in die tijd.
Dat was ook een impulsteller als bediening en was geschikt om meerdere toestellen te bedienen.

Met een controller kun je ook meer comfort aanbieden zoals,
- Een heel korte pieptoon bij het indrukken knop
- foutief drukken (bv.4x) dan pinkt de led en zie je wat er mis is.
- Bij overstroom pinkt de led voor 2sec heel snel + zoemer.
- Bij foutief drukken stopt de motor en wordt gelijkgesteld aan 1x (stop).
- ingeprogrammeerde antidender oplossing.
- maar 1 ic (zonder stroomdetectieschakeling)
- Blijven drukken op de knop (=1x) is motor stop om veiligheidsredenen.

Er zijn nog wel enkele te bedenken, maar probeer eerst uw schakeling want je hebt er nu al veel tijd ingestoken.

LDmicro user.
Lambiek

Special Member

Op 24 augustus 2021 00:42:01 schreef SparkyGSX:
Volgens mij doet dit precies wat gevraagd is, en niets meer:

Hij heeft het weer voor elkaar hoor. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 23 augustus 2021 22:50:19 schreef Lambiek:
[...]
Ach ja, wat zal ik zeggen. Jij bent nu wel getriggert. :)

[...]
Dat kan ook.

Maar Sparky gaat een programma maken met één knop, heb ik begrepen.

@Lambiek: het begint toch wel een beetje op opzet te lijken... ;)

https://en.wikipedia.org/wiki/Reverse_psychology

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Op 24 augustus 2021 11:07:54 schreef SparkyGSX:
[...]
@Lambiek: het begint toch wel een beetje op opzet te lijken... ;)

Ha, Ha. Nee niet echt. Maar ik vond het wel leuk om het zo te brengen. En jij bent er dagelijks mee bezich en ik niet. Plus dat de leeftijd ook een rol gaat spelen.

Ik zag echt niet hoe ik dit anders op moest lossen. Met één knop een teller door lopen wat MGP later ook zei, had ook gekund. Dan zit je niet met een bepaalde tijd een knop indrukken.

Maar goed als dit zo werkt, prima zou ik zeggen. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik weet nog niet of het werkt, ik heb het geschreven, maar niet getest.

Je kunt natuurlijk dit programma (en wat ik geschreven heb voor "laserwaterpas ontvanger", een jaartje geleden) bekijken, om ervan te leren; in grote lijnen zitten die programma's hetzelfde in elkaar.

Bij dit soort problemen is maar aanpak meestal om een state machine te maken, waarbij ik eerst de states definieer, en de voorwaarden om van één state naar een andere te gaan. Vervolgens wordt aan het eind van de loop de staat van de uitgangen bepaald, aan de hand van de nieuwe state. Op die manier schrijf je niet overal door het programma uitgangen hoog en laag, en kun je dus ook nooit vergeten een uitgang weer uit te zetten of zo.

Door de states een naam te geven, in plaats van een nummer (wat jij doet), is het programma veel beter leesbaar; ik hoef niet zelf te onthouden dat "2" betekend dat het luik dicht gaat, want dat heet gewoon "STATE_CLOSING".

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Op 24 augustus 2021 13:42:13 schreef SparkyGSX:
Ik weet nog niet of het werkt, ik heb het geschreven, maar niet getest.

We gaan er vanuit dat het werkt. :)

Door de states een naam te geven, in plaats van een nummer (wat jij doet), is het programma veel beter leesbaar; ik hoef niet zelf te onthouden dat "2" betekend dat het luik dicht gaat, want dat heet gewoon "STATE_CLOSING".

Ik ga daar eens wat mee proberen, maar dan in Basic. C is echt niet mijn ding en ik ga daar niet meer aan beginnen ook. Tot nu toe werkt alles wat ik gemaakt heb, ook al is het soms voor een ander minder logisch of kan het korter.

Maar ik ga het wel proberen op die manier die jij toont.

Als je haar maar goed zit, GROETEN LAMBIEK.

De methode staat los van de gebruikte programmeertaal, dus dit kun je ook in Basic doen. Het zou ook niet heel moeilijk moeten zijn om die code te begrijpen, als je de operators van C begrijpt; && is een logische AND, ! is een logische inverse, == is een vergelijking, terwijl = voor assignment staat. De vraagteken-operator is wat apart; die geen een waarde terug, afhankelijk van een conditie: X = voorwaarde ? resultaat-als-waar : resultaat-als-niet-waar;

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Één ding is me duidelijk geworden: het is toch niet zomaar een microprocessortje toepassen. Jullie programmeerinspanningen stel ik enorm op prijs, echter ik heb geen programma voorbij zien komen wat alles doet wat ik in gedachten heb.
Tenminste wanneer ik mijn eigen "voorgeprogrammeerde TTL processor" buiten beschouwing laat. Want die heb ik inmiddels, netjes op een strak printje, goed werkend bij een motorspanning van 32 VDC. Weliswaar nog met twee relais, maar dat ging eerder ook hopeloos fout.

Op een gaatjesboard zit mijn "TTL-processor" stuurschakeling geprikt, twee relais die via transistors worden aangestuurd, met daarbij de aansluitstekkers voor de bedieningsknop, de motor en de eindschakelaars.
Tot zover ben ik nu tevreden.
Nu zijn er nog twee uitdagingen over: werken met een hogere motorspanning van 100 VDC en de sturing met een H-brug van FET's.
Op 100 VDC kunnen de IRF540's niet veilig gebruikt worden, maar gelukkig heb ik nog de BUZ41A die qua spanning en stroom wel kunnen. Uit al jullie eerdere tips moet ik nu een goede brugschakeling gaan destilleren, liefst met zo min mogelijk componenten eromheen.
Wanneer er nog goede aanvullende adviezen zijn houd ik me aanbevolen.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.

Dan komen we weer terug op het eerdere probleem: met de meest gangbare gate drivers kun je de high-side MOSFET niet 100% aansturen, dus daar zal een charge pump of andere hulpvoeding bij moeten, of je zult de pulsbreedte moeten beperken tot zo'n 95%.

Je kunt natuurlijk ook een H-brug maken van N-channel en P-channel MOSFETs, maar daarmee haal je jezelf weer een hele lading andere problemen op de hals.

Een microcontroller maakt dat allemaal erg simpel; in mijn programma kun je de aansturing van zo'n brug triviaal toevoegen aan het eind, waar de uitgangen gezet worden.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Dank weer voor jouw reactie.

Op 11 september 2021 17:36:11 schreef SparkyGSX:
Dan komen we weer terug op het eerdere probleem: met de meest gangbare gate drivers kun je de high-side MOSFET niet 100% aansturen, dus daar zal een charge pump of andere hulpvoeding bij moeten, of je zult de pulsbreedte moeten beperken tot zo'n 95%.

Je hebt het over een hulpvoeding. Bedoel je dan een 5 volt stuurspanning bovenop de motorspanning voor de gate van de bovenste FET's? Dat is mogelijk wel te realiseren denk ik.

Je kunt natuurlijk ook een H-brug maken van N-channel en P-channel MOSFETs, maar daarmee haal je jezelf weer een hele lading andere problemen op de hals.
Een microcontroller maakt dat allemaal erg simpel; in mijn programma kun je de aansturing van zo'n brug triviaal toevoegen aan het eind, waar de uitgangen gezet worden.

M.b.t. de microcontroller denk ik dat die oplossing nog even een brug te ver is om het zo te zeggen.
Wat zou overigens met de microprocessor anders zijn? Daar komen toch ook twee pulsen uit, voor elke draairichting één. Dat doet mijn TTL circuit nu ook naar behoren en heeft dus wel mijn voorkeur.
Wanneer je bent ingevoerd in die materie kan het eenvoudig zijn, maar het lijkt mij verstandiger voor een eerste microprocessor project iets eenvoudigs op poten te zetten.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.
Lambiek

Special Member

Op 11 september 2021 17:36:11 schreef SparkyGSX:
Je kunt natuurlijk ook een H-brug maken van N-channel en P-channel MOSFETs, maar daarmee haal je jezelf weer een hele lading andere problemen op de hals.

Dan kom je niet hoger dan de gate spanning, de TS wil naar de 100V voor zijn motor.

Als je haar maar goed zit, GROETEN LAMBIEK.

De brug weer opgebouwd, weliswaar op een prikbordje, maar anders kan ik niet veel uitproberen.
Hierbij geen TTL, maar CMOS gebruikt. De twee stuurlijnen voor de draairichting van de motor via optocouplers op 15 VDC gebracht. De overstroombeveiliging maar even achterwege gelaten.
Het deel wat op 5 VDC draait, dus mijn TTL stuurcircuit, is nu gescheiden van de rest.
Met alleen de kleine motor gaat dit tot 32 VDC goed, maar met een zwaardere motor die 1 A trekt hapert de regeling nog steeds. Het valt me op dat met 100 nF tussen de massa van 5 VDC en en de massa van de rest de storingen veel minder zijn. Beide richtingen gaat dan prima, totdat ik halverwege stop, dan komt de motor vaak niet meer op gang.
Graag zou ik de motorstroom helemaal gescheiden houden, maar met de brugschakeling moeten van de 32 VDC en 15 VDC de massa’s aan elkaar zitten.
Het lijkt mij dat het probleem weer in de opstelling zit, net als eerder bij het stuurcircuit wat nu op een degelijk printje zit. Maar daar wil ik me nu nog niet aan wagen, want er is nog een flinke horde te nemen: opschalen naar 100 VDC motorspanning.
Echter 100 VDC schakelen op dit prikbordje is natuurlijk ook geen flauwe kul, moet ik dat wel willen?

In m’n achterhoofd doet de oplossing met relais nog steeds mee als goed werkend alternatief. Maar ook hiermee is die 100 VDC schakelen iets wat niet zomaar kan.
Zouden solid state relais deze klus kunnen klaren? B.v. : SSR-DD2205HK die kan 220 VDC bij 5 A schakelen voor € 5. In plaats van de FET’s in een brug gelijk vanuit TTL (via optocoupler) aansturen. Daarbij heb ik geen 15 VDC meer nodig en de 5 VDC blijft goed gescheiden van de 100 VDC.

Een probleem is er om opgelost te worden. Lukt dat niet dan heb je een feit.