Compare1A ligt buiten timer waarde

Kruimel

Golden Member

Nou dat zeg je:

Op 25 november 2019 19:28:25 schreef Kruimel:
In het ideale geval stel je de voedingsspanning bij of plaats je een weerstand in serie of zo, maar dan wordt het snel te complex.

Op 25 november 2019 23:13:04 schreef bol00052:
[...]

Iets anders, timer wordt iedere 180 krukasgraden (2 markeringen per krukasomwenteling op 160 krukasgraden voor bdp gereset. Het is een 4 cil. 4 takt Dus twee vonken per krukasomwenteling) uit het aantal ticks van de timer tussen de markeringen in wordt de rotatiefrequentie en de versnelling t.o.v. de vorige waarde betekend. I.c.m. belasting van de motor en nog wat andere parameters wordt uiteindelijk compare1a en 1b berekend. Deze worden normaliter in de volgende 180 krukasgraden afgewerkt. Het probleem wat ik hierboven beschrijf bestaat dan niet.

Ik snap het probleem niet. Ook bij 5 graden voor bdp weet je precies het aantal ticks van de timer en uiteraard het aantal ticks van de voorgaande timers(metingen). Aan de hand van deze metingen weet je toch precies wanneer je de bobine moet inschakelen en wanneer je de bobine moet uitschakelen? Als deze tijd te groot wordt en daardoor de onzekerheid te groot wordt (bobine te laat ingeschakeld ivm grote versnelling of bobine te vroeg ingeschakeld ivm te grote vertraging), dan ontkom je niet aan een hardwarewijziging.

Op 26 november 2019 15:00:18 schreef ohm pi:
@bol00052,
Een optie die nog niet genoemd is

@Kruimel,
Sorry, eroverheen gelezen.

Op 26 november 2019 13:23:10 schreef rew:

Als ik het goed begrijp is het nu zo dat je de volgende ontsteking "ongeveer" moet plannen rond de tijd dat je ook de volgende trigger ontvangt. Dus bij niet eens zo veel versnelling krijg je dat de trigger inderdaad eerder komt dan de volgende ontsteking. Tja, dan draai je dus inderdaad op bijna 2 omwenteling oude "snelheidsinformatie" en is de onnauwkeurigheid dus groter. Eigenlijk KAN het niet beter dan wat ik/sparky voorstellen.

Daar ben ik nu ook van overtuigd.

Een kleine verbetering kan wel. Normaliter start je de ontsteking cyclus net voor de volgende trigger. Als je volgende trigger dan onverwacht komt op een moment dat je nog niet de ontsteking gestart hebt, dan zou je in de trigger-interrupt de ontstekingscyclus kunnen starten, zonder het oude start-moment af te wachten. Nog niet ideaal maar wel subtiel beter. Als je ontsteking ALTIJD om het trigger moment valt, dan kan je botweg gewoon altijd de bobine-oplaad-output hoog maken.

Dit doe ik al en werkt redelijk. Het ontstekingsmoment is variabel dus die laatste zin kan niet, de bobine zal dit uiteindelijk ook niet trekken aangezien de contacttijd bij lage toerentallen dan +/- 30 ms zal zijn.

Op 26 november 2019 15:25:25 schreef ohm pi:
[...]Ik snap het probleem niet. Ook bij 5 graden voor bdp weet je precies het aantal ticks van de timer en uiteraard het aantal ticks van de voorgaande timers(metingen). Aan de hand van deze metingen weet je toch precies wanneer je de bobine moet inschakelen en wanneer je de bobine moet uitschakelen? Als deze tijd te groot wordt en daardoor de onzekerheid te groot wordt (bobine te laat ingeschakeld ivm grote versnelling of bobine te vroeg ingeschakeld ivm te grote vertraging), dan ontkom je niet aan een hardwarewijziging.

Dit laatste is dus inderdaad in dit specifieke geval de beste oplossing echter dat ga ik niet doen i.v.m. wellicht de eenmaligheid van dit project.

Ik denk dat voor mij de meest zinvolle oplossing is, bobine laadtijd verlengen, zoals al eerder werd voorgesteld, als cmp1a en cmp1b te dicht bij het triggerpunt liggen. Daarbij een ander type bobine monteren die minder gevoelig is voor een langere aansturing.

Als ik het me goed herinner kun je in die timers twee triggermomenten definieren. Je krukasversnelling is niet al te groot binnen een omwenteling dus moet je de laatste meetwaarde gebruiken (je hebt immers geen info zoals starterkrans pulsen om dat 'real-time' te kunnen meten, dus moet je het doen met wat je wel weet). OK, in de laatste omwenteling heb je gemeten hoe ver die timer telt bij een omwenteling. Daarmee weet je het aantal ticks voor een omwenteling, want dat is je capture waarde. Op 80% van dat aantal moet je ontsteken, dus daar zet je een timer compare interupt. Het inschakelen van de primaire bobine-stroom bepaal je door het andere compare interrupt een aantal ticks eerder te zetten. Dat aantal kun je eenvoudig bepalen door de gewenste tijd te delen door de clockfrequentie van de timer. Immers elke tick is een bekend aantal micro/miliseconden.
Als je sensor niet op b.d.p. zit moet je die beeide compare waarden corrigeren door er een vaste waarde bij op te tellen (of van af te trekken). Die waarde is: (sensorhoek t.o.v. bdp)/360 * (ticks per omwenteling) / timerclockfrequentie (even uit het blote hoofd).
Het kan zijn dat dit al door andere leden is voorgesteld. Ik heb niet alle reakties in detail bekeken.

Niet alles wat op internet staat is waar... Dat geldt ook voor CO.