het is al eens vermeld geweest, maar vind het topic niet meer terug (kan ook een topic van iemand anders zijn)

kort samen gevat, ik heb een ondersteunde ligfiets die vroeger een hub motor had, met escooter controller, en een arduino die de gashendel zo regelde dat de motor enkel ondersteunde als je trapte. dat ding werkte goed.

ik heb er een arduino tussen zitten, zodat de gashendel ENKEL werkt als je ook op de trappers duwt.
Die gashendel werkt op 5V, en geeft een output van 1-4V waar de controller dan op werkt.
ik sluit die gashendel aan op mijn arduino en lees de binaire waarde in. volgas is daar 780 ongeveer.
als de arduino ziet dat er getrapt wordt, geeft die een analoge waarde op een output om de motor aan te sturen (binair 210 is ongeveer 4.1V).
MAAR, een arduino geeft geen analoog signaal maar een PWM signaal die 'ongeveer' op 4V zal uitkomen. met die oude motorcontroller werkte alles

nu heb ik de boel verbouwd naar een bafang motor. en daar loopt wat fout. die loopt schokkerig, de ene keer levert die 600W, dan 100W, dan 300W,...

ik vermoed dus dat de bafang motor de ene keer 'volgas' detecteerd (5V) en de volgende keer 'nul' (0V) door tussen de PWM pulsen te meten. ik zal dat met een RC netwerkje moeten stabiliseren, maar welke waardes van R en C? 10K 100nf ofzo?
moet er dan ook een bleeder weerstand over de condensator zitten om die te laten leeglopen als je geen "gas geeft"? zit nu op het werk, en kan weinig gaan testen. straks moet ik weer 70km naar huis rijden en kan wel ergens wat weerstandjes en condensatoren afsolderen (beperkt)

Hi fcapri, :-)

Pas je wel goede filtering toe op je PWM signaal?
Je hebt denk ik minimaal 2e orde filtering nodig met een niet te laag kantelpunt anders reageert het te traag.

Groet,
Bram

Om naar huis te rijden zal 10k/100nf wel werken, een bleederweerstand is niet nodig omdat de arduinouitgang kan sinken.

Hi MGP,

6dB/oct met ene kantelpunt van 160Hz noem ik geen goed filter.
Dat levert nog steeds heel veel rimpel op het signaal, het is geen LED string die aangestuurd wordt. :+

Groet,
Bram

Op 17 augustus 2020 08:48:31 schreef fcapri:
... straks moet ik weer 70km naar huis rijden en kan wel ergens wat weerstandjes en condensatoren afsolderen (beperkt)

Hij vraagt om een simpel schema om naar huis te kunnen rijden, zit volgens lezen nu op zijn werk, als hij thuis is moet hij maar een degelijk schema in elkaar zetten ;)

edit: als toemaatje kun je ook nog een 4K7/1µf achter die 10k/100nF plaatsen, dat werkt wat vloeiender.

[Bericht gewijzigd door MGP op (12%)]

Hi,

Zoiets dus:

https://www.bramcam.nl/Diversen/PWM-Filter-REW.png

Maar hij kan ook gewoon trappen gaan, goed voor zijn figuur! *grin*

Groet,
Bram

jaja, maar 140km trappen is er teveel aan.
momenteel een rugblessure waardoor ik niet met de auto kan rijden (krijg teveel rugpijn), echter het fietsen in een ligfiets heb ik geen last van (die zitschaal ondersteund de onderrug dus blijkbaar beter dan een auto).

vroeger had ik geen filtering, dat werkte gewoon direct op die e-scooter controller.
die had blijkbaar wel een iets analogere ingang. de throttle (onderaan, blauwe lijn) kwam toe op een weerstandnetwerk waar C2 over staan en dat kwam dan toe in een opamp. de throttle lijkt daar stroom te laten weglekken van de ene opamp naar de andere

die bafang werkt dus anders en zal blijkbaar het analoge throttle signaal digitaliseren

Je geplaatste schema toont een volledig analoge regeling. Zo werd er vroeger een pwm signaal gemaakt met een paar opamps, de ene opamp maakt een zaagtand en de andere opamp maakkt er dan een pwm signaal van.

Maar het werkt nog steeds, ook in deze tijd van digitale elektronica. :)

Weet je de frequentie van de regelaar? Dat moet je eigenlijk weten om een goed filter te maken.

Zelf zet ik pwm naar een spanning om op deze manier. Wel de verhouding van de weerstand en condensator aanpassen naar jou frequentie.

Al begrijp ik de bedoeling niet helemaal, je gashendel maakt er toch al 1 tot 4VDC van? Oké ik zie het al, is een stukje beveiliging. Zolang je niet trapt gebeurt er niets. :)

Dus wat is de pwm frequentie van je arduino?

Wat ik belangrijker vind: Wat is de frequentie van de PWM uit de arduino. ALS ik het zou maken met een STM32 dan zou ik 12 bits ADC hebben en dan is een 12bits PWM misschien ook niet fout. Dus dan kom ik op 48MHz / 4096 = 12kHz. Maar meestal kies ik voor 2000 stapjes (ongeveer 11 bits) en 24kHz herhaling.

Als je dat filtert met een kantelfrequentie van 100Hz, dan zit je zo ver van de kantelfrequentie af dat een 1e orde filter ook zou moeten voldoen.

Maar volgens mij was de arduino, zeker met de standaard software veel minder snel dan 10 of 20 kHz.

Hoeveel i/o pennen heb je over op die arduino?
Ik neem aan heel veel, als je de arduino alleen voor de trapondersteuning gebruikt.

Dan zou ik een R-2R netwerk gebruiken voor de conversie. Dat hoeft niet eens een uitgebreid netwerk te zijn.
https://www.tek.com/-/media/sites/default/files/2018-03/image-6-tutorial-r2r-dac.jpg
4 bits lijkt me ruim voldoende.

dat is ook een optie.

vroeger maakte ik de regeling zo dat ik traploos van 1-4 volt kon.
dat heb ik eruit gegooid omdat je door het fietsen al niet stabiel aan de gashendel draait.
nu werk ik met 3 stappen.
geen gas geven, arduino doet niks.
beetje gas (digitaal 300-500) geef ik output 150 (3V).
halfgas (digitaal 500-700) geef ik output 190 (3.7V).
volgas (digitaal >700) geef ik output 210 (4.2V).

wat de frequentie van arduino is, geen idee. gewone arduino nano, output op digital 5.
gewoon met analogwrite(210)

dus even gegoogled. zou een 1khz zijn

Board           --      PWM Pins      --        PWM Frequency
Uno, Nano, Mini -- 3, 5, 6, 9, 10, 11 --  490 Hz (pins 5 and 6: 980 Hz)

Op 17 augustus 2020 13:58:37 schreef Lambiek:
Je geplaatste schema toont een volledig analoge regeling. Zo werd er vroeger een pwm signaal gemaakt met een paar opamps, de ene opamp maakt een zaagtand en de andere opamp maakkt er dan een pwm signaal van.
Al begrijp ik de bedoeling niet helemaal, je gashendel maakt er toch al 1 tot 4VDC van? Oké ik zie het al, is een stukje beveiliging. Zolang je niet trapt gebeurt er niets. :)

Dus wat is de pwm frequentie van je arduino?

dat schema was de oude escooter controller waar mijn arduino volledig werkt.
die geeft gewoon het signaal van de gashendel door op voorwaarde dat je een cadans van 30 hebt (dus 1x rondtrappen elke 2seconden).
ik geef niet 1:1 door, maar ik lees de gashendel in, zet naar digitale waarde en geef een 'pwm' analoog signaal aan de uitgang.
zodoende kan ik regelingen maken.
als je trager rijd dan 20km/h, mag je nog volgas geven, de arduino stuurt de motor maar aan tot 50%.
ga je boven de 40km/h, zal ik maar 10% meer doorsturen. op deze manier kon ik mijn fiets bijregelen dat die zuiniger met de battery omging (bv vertrekken uit stilstand deed de motor quasi niks omdat het enorm veel energie vreet).

mijn nieuwe motor is een bafang middenmotor en die maakt problemen van de arduino. waarschijnlijk leest die dus in met een ADC. want die gaat voluit, niks, voluit, niks, halfgas…

Maar goed. Als je toch maar een paar verschillende waardes wil hebben dan heb je niet de R-2R nodig, maar gewoon 2 outputs en wat weerstandjes. Omdat je waardes niet uniform zijn heb je 1 output meer nodig.

Doe een 10k naar ground, dan heb je een 6666 Ohm weerstand naar VCC nodig voor 3V.
Een 3513 ohm weerstand voor 3.7V en 1905 Ohm voor 4.2V. De "niet gebruikte" outputs die moet je op "input" zetten,

Zelf afronden.....

die waardes was van de vorige motor. ik draaide namelijk aan de gashendel en als ik een goeie vermogenstand had, schreef ik die ioop.
150-190 en 210 dus.
het kan goed zijn dat die bafang anders reageert. in software snel aangepast, met weerstanden....

Hi rew,

Deze link geeft je alle frequenties voor de Arduino:
https://www.arduino.cc/reference/en/language/functions/analog-io/analo…

Mijn aangegeven passieve filter (ja ook gebouwd en gemeten vanochtend) geeft nog een redelijk reactie snelheid en vrij goede demping door zijn 2e orde filtering.

Bij sommige Arduino's kan je voor een Pin kiezen die 980Hz is i.p.v. de 490Hz dat zou dan mijn voorkeur hebben omdat je da neen nog hogere demping hebt.
Bij 490Hz heeft mijn filtertje 59dB demping, zeg maar 1/1000 van de PWM waarde
Bij 980Hz geeft het filtertje 70dB demping wat grofweg nog 3x beter is.

Dit is de step responce van het passieve filter, mooi beheerst en ongeveer 50mSec voor volle een volle schaal verandering.
https://www.bramcam.nl/Diversen/rew-pwmfilter-stepresponce.png

Groet,
Bram

Op 17 augustus 2020 16:01:10 schreef blackdog:
Bij 490Hz heeft mijn filtertje 59dB demping, zeg maar 1/1000 van de PWM waarde

... van de 5V. (als je PWM waarde 0.5V probeert te sturen is er nog steeds 10% van de tijd 5V aanwezig, dus dan trekt ie omhoog terwijl ie de rest van de tijd de condensator naar beneden trekt. Je krijgt een (meestal asymmetrische) driehoek, waarbij de top-top waarde altijd van de voeding afhangt. Tweede orde wordt mogelijk iets anders.

Als je geen zin hebt in die 490Hz, dan kan je toch zelf een timer aansturen om de PWM te maken? Als dat ding 16Mhz draait dan is 16MHz/256 prima te doen als basis frequentie. Da's 62kHz.

Ik heb even gegoogled: https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;

Maar hier staat de prescaler nog op 64. Dus even in het datasheet kijken hoe je de prescaler anders krijgt. Ik stel voor: (zonder in het datasheet te kijken, 5 of 10 jaar geleden voor het laatst die pagina gekeken denk ik). zonder kijken had ik het fout. Sorry. Nu goed:

  TCCR2B = _BV(CS20);

Dan staat de prescaler op 1 dus 62kHz PWM. Prima voor een 1 pool RC filter op 100Hz.

Vraagje tussenin. Waarom de digitale uitgang niet omprogrameren tot analoge en gewoon analoog signaal sturen? Is het een uitgang zonder analoge optie? Gaat van uitgang veranderen of herprogrammeren te veel werk vragen of mis ik nog iets anders? Onderweg een rc kring of drg knutselen is toch ook niet eenvoudig?
Edit: oo, echt? Een arduino heeft geen echte analoge uitgang. Een ilusie minder. Zijn er boards die dat wel hebben, in die prijsclasse?

[Bericht gewijzigd door EricN op (18%)]

rew, :-)

Even tussendoor...
De rimple hangt af van het percentage van de duty cycle en ook de golfvorm hangt af van het percentage van de duty cycle.
Bij 50% is de rimpel het grootst en bij 2e orde filter Sinus vormig.

Straks zal ik jullie wat plaatjes laten zien bijde standaard arduino PWM frequentie en het filter wat ik heb laten zien.
Nu eerst de klant verder helpen!

Groet,
Bram

Op 17 augustus 2020 19:28:51 schreef EricN:
Vraagje tussenin. Waarom de digitale uitgang niet omprogrameren tot analoge en gewoon analoog signaal sturen? Is het een uitgang zonder analoge optie? Gaat van uitgang veranderen of herprogrammeren te veel werk vragen of mis ik nog iets anders? Onderweg een rc kring of drg knutselen is toch ook niet eenvoudig?
Edit: oo, echt? Een arduino heeft geen echte analoge uitgang. Een ilusie minder. Zijn er boards die dat wel hebben, in die prijsclasse?

Jawel, vrijwel elke STM32 heeft 2 DAC uitgangen. Goedkope bordjes zijn oa de Discovery en Nucleo reeks, maar ook de "blue pill" heeft DAC dacht ik. Kan je ook met de Arduino omgeving programmeren.

helaas, grandioos mislukt. totaal geen reactie meer van de motor waardoor ik alles eruit heb moeten slopen en met jumperkabels de gashendel aan de motor moeten hangen (rijden zonder trappen dus dewelke illegaal is).

thuis metingen gedaan en de arduino uitgang geraakt maar tot 1,8V als deze aan de motor hangt. trek ik de motor los, heb ik 3,8V. de arduino doet het dus, maar niet belast.

dan maar eens de ingangsweerstand van de bafang gemeten.... 9.8kOhm.

heb dus een spanningsdelen van 10K en 10K hetgeen de spannings halveert.
heb er nu 860ohm in gezet (vind men doosje met 1K weerstanden niet).
boel getest en de gashendel doet het

RP6conrad. Bedankt voor de voor mij waardevolle info.

Kun je met die arduino niet de voedingsspanning van de gashendel schakelen?
Als die hendel geen voeding krijgt zal de motor toch niet draaien.

Hi,

Nog wat extra info met plaatjes, hier laat ik de rimpel zien van het aangegeven filter in dit topic.
Het filter werd aangestuurd door mijn functie generator en aan de uitgang zat een scope probe met als tweede belasting mijn Audio meetset die 100K als ingangs impedantie heeft.
De audio anlyzer geeft dus een klein beetje demping maar is niet zo van belang voor wat ik wil laten zien.

rew gaf al aan dat zijn eerste testen de mis in gingen omdat het apparaat wat hij aanstuurde met zijn filter en vrij lage ingangs impedantie heeft.
De weerstanden 10x lager en de condensatoren 10x hoger zou nog met kunnen met een Arduino wat betreft het aansturen van het filter.

Een nettere oplossing is b.v. een opamp buffer zoals Lambiek liet zien, maar dan denk ik al snel aan een beter filter type die met een opamp mogelijk is.

Maar goed, hier wat plaatjes van 50% duty cycle bij gebruik maken van een passief 2e order filter zoals door mij aangegevens voor 490Hz PWM frequentie.

50% duty cycle, let ook eens op de gele trace welke het ingangs signaal is, ik heb het gemarkeerd met twee oranje circeltjes.
Dis is geen rotte functie generator en ook geen probe meetfout of slecht afgeregelde probe...
De bron impedantie dus generator en zijn externe 50Ω afsluiter resulteren in een 35Ω impedantie die het passiefe filter aansturen.
Dat filter heeft aan de ingang een 1K weerstand met 10uF naar massa, dat zorgt er voor dat er tijdens de flank redelijk wat stroom loopt en de spanning daardoor ook een beetje inzakt, zo rond de 3%.
De signaal form bij 50% duty cycle is vrijwel sinus formig zoals hier goed zichtbaar is.
De grote trace is de audio meetset uitgang en er is geen relatie tussen de aangegeven amplitude hoogte en de scoop schaal, de analyser is auto range.
De groene trace is alleen voor de visuele weergave van de signaalvorm aan de uitgang van het filter.
De audio analyser zegt dat de RMS waarde van de rimpel 2,5mV is.
https://www.bramcam.nl/Diversen/rew-50-490Hz-Rimpel.png

.
En dan nu bij 5% duty cycle
Ook nu zijn er kleine vervormingen zichtbaar in het PWM signaal rond de flanken.
De rimpel zit er uit als een dubbel fasige gelijkrichte Sinus.
De anayser zegt dat de rimpel nu rond de 460uV zit.
https://www.bramcam.nl/Diversen/rew-5-490Hz-Rimpel.png

.
En dit is het laatste plaatje welke bij 95% duty cycle is genomen, het signaal uit de analyser in nu "omgekeerd"
De RMS waarde is hier vrijwel gelijk aan de voorgaande meting bij 5% en is hier ook 460uV.
https://www.bramcam.nl/Diversen/rew-95-490Hz-Rimpel.png

Daar kan ik nog flink over gaan schrijven, want het is vrij veel om hier te gaan opsommen.
Per applicatie zal gekeken moeten worden wat je PWM frequentie is en hoeveel rimpel je kan of wil accepteren.
Vaak gaat het hier al mis, men regelt graag LED's met PWM met een knipperend effect al resultaat.
Dat heeft dan weinig met een electronisch filter te maken maar meer door de te lage schakel frequentie voor de PWM.

Zoals met alle passieve filters heb je ook met de gene die ik hier heb laten zien rekening te houden met de aanstuur en afsluit impedantie.
Dat kan je dus oplossen door gebruik te maken van buffering zoawel aan de ingang alsook aan de uitgang, maar dan zal je ook weer moeten beslissen of je al die electronica wil toepassen.

Wil je wat meer dan een standaard Arduino kan, dan is een Teensy LC een heel mooie vervanging, zoals 16bit PWM en ook 1 stuks echte 12bit DAC.
Verder ook ADC ingangen die je door oversampling boven de 12bit krijgt al is dat dan niet voor echte precisie toepassingen.

Ik ben bezich een Teensy te gebruiken om een kleine LAB voeding mee aan te sturen via PWM voor de U en de I instellingen, we zulle nzien hoe dat uitpakt...

Ook hierbij moet er nagedacht worden over de PWM frequentie en het dynamische gedrag van het PWM filter en de rimpel die het filter doorlaat.
Natuurlijk kan ik ook een DAC nemen, maar daar leer ik veel minder van. :+

Ik hoop daat dit informatief was.

Groet,
Bram

Op 17 augustus 2020 21:50:08 schreef hennep:
Kun je met die arduino niet de voedingsspanning van de gashendel schakelen?
Als die hendel geen voeding krijgt zal de motor toch niet draaien.

dat is ook nog eens een oplossing. nooit aan gedacht.
door dan met 1 uitgang en een weerstand te nemen, zou ik de gashendel op 3V kunnen zitten (minder gasrepons en beperkte regelaar) en met een andere uitgang zou ik 5V kunnen geven waardoor ik het volledige bereik van de gashendel krijg.

dit zullen testen worden voor later. één of andere idioot vond het vandaag niet nodig om voorrang van rechts te geven, waardoor ik een noodrem moest doen.
en bij het vertrekken vanuit stilstand (stond in hoogste versnelling) samen met 600W van de motor, is heel het tandwiel vooraan geplooid (een 70T tandwiel, dus niet snel vervangen). teveel kracht dus op de aandrijflijn...

de boel nu rechtgeklopt en wat verstevigd door nog 2 andere tandwielen er tegen te schroeven. echter morgen een ziekenhuis afspraak waar ik op tijd moet zijn, dus geen risico's nemen om met de fiets te gaan. nog maar eens een rit afzien in de auto.

maar het idee wordt verder uit gezocht

[Bericht gewijzigd door fcapri op (14%)]

Mag ik vragen met welke batterij je rond rijdt?

zelfbouw. 36V 29Ah

de eerste bestaat uit 6x 18.5V 3Ah RC batterijen. maakt totaal 36V 9Ah.

de volgende is een batterij met 18650 cellen, goed voor 36V 20Ah. beide hebben eigen BMS.

1 rit naar het werk (65km) kost ongeveer 500-600Wh aan energie, halve accu leeg dus. voluit was het hoogste verbruik 626Wh.