Nieuws:

Nu in MSM 249 TEST: KATO NMBS 5405 in spoor N

Hoofdmenu

G.I.P: automatisch schaduwstation zonder wissels

Gestart door conducteur, 09 mei 2012, 21:33:26 PM

conducteur

Citaat van: Geert op 23 september 2013, 10:21:47 AM
Rian,

gebruik je de PIC16F887?, dan is C2 de uitgang van PWM!

Dat tellen van het aantal pulsen die de PWM uitstuurt is vrij eenvoudig. Elke keer dat deze start met een puls, zal deze een ISR oproepen waarin geteld wordt. Wil je geen pulsen meer uitsturen, dan kan je in het ISR voorzien dat de PWM stopt.

Hoe dat zit met C om een poort aan te sturen weet ik niet...

Geert
Ga dat eens moeten nakijken, of de klok weldegelijk aan C2 hangt. Tof te weten dat het alvast mogelijk is pwm pulsen te tellen.


@Johan: heb wat te letterlijk gekopieerd uit de cursus, je moet het uiteraard met 0x01 doen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

Wat is de frequentie van die pulsen?

Zal anders is een voorbeeldje schrijven in ASM, kan je zelf omzetten naar C code.

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

400hz (2tr/s) was het maximale die ik uit de motor kreeg tijdens testen op school, daarna bleef ie resoneren en andere rare dingen doen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

dani

#243
Wat ik niet snap....   waarom al dat moeilijk gedoe met pwm en met pulsen tellen en frekwenties en assembler programmatie en zo ?

Ik heb een paar routinekes geschreven  in  C (eentje voor vooruit, eentje voor achteruit) waar je een parameter kan mee geven en die dan de servo motor aanstuurt volgens jouw bevel...
Eigenlijk zijn het 4 routines, want ik heb er ook 2voor "half pulse" waardoor je meer koppel ontwikkelt op de as van de stepper en nog nauwkeuriger kan sturen.
De parameter die je meegeeft is gewoon het aantal milliseconden dat de controller wacht tussen het geven van 2 pulsen, dus eigenlijk een soort frekwentiebepaling.

gebaseerd op dit artikel is dat een "fluitje van een cent". 
http://zone.ni.com/devzone/cda/ph/p/id/247

en het bestaat ook voor bipolaire

http://users.ece.utexas.edu/~valvano/Datasheets/StepperHalfstep.pdf


Misschien heb je er wat aan, het is platform-agnostisch :-) :-) :-)
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

Ziet er zeer interessant uit, Dani, maar heb niet echt door wat je probeert duidelijk te maken. Mijn motor hangt aan de 'L6208', die genereert de stapsequence en stuurt een H brug van Mosfets aan op basis van een kloksignaal en een richtingssignaal... Dan moet ik toch ergens een kloksignaal genereren en tellen? Hoe weet ik anders dat ik 200 stappen verwijderd ben van m'n beginpunt en er bv nog 2000 moet doen?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Havoc

Elke aanpak heeft zijn voordelen. Die van Rian heeft stroomregeling, beveiliging en moet zich niets van de sequentiegeneratie aantrekken. De aanpak van Dani is simpel en weet direct waar alles is (als er geen slip is).
Met vakantie voor onbepaalde duur.

conducteur

M'n programmer ligt klaar, MPlab opgestart nu de code nog. Ik wil eens uitzoeken hoe ik m'n stappenmotor kan aansturen met de pwm functie, waarbij ik het aantal pulsen van de pwm test.
PWM functie aansturen in C en dan ook tellen, waar vind je de commando's daarvoor? In de datasheet van de µC?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Citaat van: conducteur op 19 oktober 2013, 19:17:41 PM
...Ik wil eens uitzoeken hoe ik m'n stappenmotor kan aansturen met de pwm functie, waarbij ik het aantal pulsen van de pwm test.
PWM functie aansturen in C en dan ook tellen, waar vind je de commando's daarvoor? In de datasheet van de µC?

Rian, waarom PWM???  Je stuurt je motor met een L6208.  Die moet enkel pulsen krijgen (1 puls per stap, 2 pulsen indien half-step).

Ik zou als volg te werk gaan: eerst je maximum step-frequentie van je motor bepalen.  Een timer van je controller op de dubbele frequentie instellen (zo krijg je een mooi symmetrisch signaal).  Interrupts uit.

Er moet 'gestapt' worden: een variabele (byte = 256 stappen, word = 65536 stappen, long word = ... stappen) bevat het aantal uit te voeren stappen.  Interrupt enablen.

Bij het 'afgaan' van de timer een interrupt genereren.
 
In de interruptroutine de uitgang naar je clock van je L6208 inverteren en je 'telvariabele' met 1 verminderen indien je de clock van 0 naar 1 hebt gezet.  De 'telvariabele' testen of deze 0 is.  Indien niet: gewoon terugkeren van je interrupt.  Indien 0: de interruptroutine zelf zijn interruptenable laten uitschakelen en een vlagje zetten zodat je main-loop weet dat er niet meer wordt 'gestapt'.

Simpel uitgelegd  ;)


Groetjes, Peter


conducteur

Citaat van: PeterC op 19 oktober 2013, 20:01:10 PM
Citaat van: conducteur op 19 oktober 2013, 19:17:41 PM
...Ik wil eens uitzoeken hoe ik m'n stappenmotor kan aansturen met de pwm functie, waarbij ik het aantal pulsen van de pwm test.
PWM functie aansturen in C en dan ook tellen, waar vind je de commando's daarvoor? In de datasheet van de µC?

Rian, waarom PWM???  Je stuurt je motor met een L6208.  Die moet enkel pulsen krijgen (1 puls per stap, 2 pulsen indien half-step).

Ik zou als volg te werk gaan: eerst je maximum step-frequentie van je motor bepalen.  Een timer van je controller op de dubbele frequentie instellen (zo krijg je een mooi symmetrisch signaal).  Interrupts uit.

Er moet 'gestapt' worden: een variabele (byte = 256 stappen, word = 65536 stappen, long word = ... stappen) bevat het aantal uit te voeren stappen.  Interrupt enablen.

Bij het 'afgaan' van de timer een interrupt genereren.
 
In de interruptroutine de uitgang naar je clock van je L6208 inverteren en je 'telvariabele' met 1 verminderen indien je de clock van 0 naar 1 hebt gezet.  De 'telvariabele' testen of deze 0 is.  Indien niet: gewoon terugkeren van je interrupt.  Indien 0: de interruptroutine zelf zijn interruptenable laten uitschakelen en een vlagje zetten zodat je main-loop weet dat er niet meer wordt 'gestapt'.

Simpel uitgelegd  ;)
Ook een optie, maar m'n kennis van (de commando's in) C is nog erg beperkt. Waar vind je (een index) van de commando's nodig voor dit (en voorbeeldjes evt, voor die interrupts en timers?)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Rian,

Als mijn vermoeden juist is, werk je met Hi-tech C?
Kijk eens naar het voorbeeldje "C:\Program Files\HI-TECH Software\PICC\9.83\samples\TimerDemo\timer0.c".

Daar staat een interruptroutine op Timer 0.

Hier zie je een leesbaar voorbeeldje voor een Timer0 interrupt (welliswaar in JAL maar gemakkelijk om te zetten naar C).

Begin eenvoudig met een ledje te laten knipperen en breidt dan uit (eerst stappen dan pas lopen - in jou geval is dat stappen niet op je motor bedoeld  ;) ).


Groetjes, Peter


conducteur

Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

#251
Dit volgens ASM: init Pwm, init timer2 en init INT: (komt uit MM2 protocol generator)

;****************************************************
;*******  INIT PWM (TIMER 2) ************************
;****************************************************


MOVLW b'00001100' ;PWM mode en start MM protocol generator
banksel CCP1CON
MOVWF CCP1CON
MOVLW .104                         ;=208µs
banksel PR2
MOVWF PR2
MOVLW b'00000101'
banksel T2CON
MOVWF T2CON


;****************************************************
;*******  INIT INTERRUPT ****************************
;****************************************************

banksel INTCON
movlw b'11100000'
movwf INTCON
banksel PIE1
movlw b'00000010'
       ;------1-    enable Timer 2 interrupt
movwf PIE1
banksel 0


INTERRUPT:

;****************************************************
        ;****** DIT DEEL HEEFT TE MAKEN MET MM PROTOCOL *****
;****************************************************

ISR_SPR0 BTFSS PIR1,TMR2IF ;TIMER 2 INTERRUPT?
GOTO ISR_SPR50
BCF PIR1,TMR2IF


hier kan je pulsen tellen





Edit:verkeerde interrupt gebruikt
Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

PeterC

Citaat van: conducteur op 20 oktober 2013, 13:17:17 PM
ASM ziet er complex uit ???

Vooral omdat je, telkens voor je naar een bepaald register schrijft of van een bepaald register leest, je je bank moet juist zetten (vandaar al die banksel instructies).
In een hogere programmeertaal neemt de compiler je dat werk uit de hand.  Het nadeel van een hogere programmeertaal is dat je niet direct weet hoelang een routine gaat duren.  In ASM hoef je maar je instructies te tellen om de tijdsduur van je stuk code te berekenen.

Groetjes, Peter