Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Traction Control op een RC-auto

Pagina: 1
Acties:

  • Robbiepr1
  • Registratie: September 2008
  • Laatst online: 07:19
We zijn voor school met een project bezig waarbij we een traction control systeem op een bestuurbare auto willen bouwen. Het principe van het TCS is dat het systeem het vermogen van de auto verlaagt als er een 15% slip wordt geconstateerd. We willen het meten van de hoeveelheid slip doen aan de hand van het vergelijken van de toerentallen van de wielen. Deze toerentallen willen we dan meten door een relfective opto switch bij de wielen te zetten, een cirkel met de ene helft wit en de andere helft zwart te monteren aan de binnenkant van de velg. De opto switch geeft dan een hoog signaal als de witte helft van de cirkel passeert. Dit signaal gaat dan naar een atmega8 microcontroller van Atmel. Deze berekent dan het rpm en vergelijkt deze met elkaar. We programmeren de microcontroller met BASCOM-AVR.

Voor dat we de sensoren aan willen sluiten, willen we eerst kijken of het geschreven programma werkt. Dit wilden wij doen met behulp van 2 frequentie regelaars. (één voor elk wiel). Dit hebben wij gedaan en bij een frequentie van rond de 10 Hz werkt het programma vlekkeloos. Als we de ene frequentie regelaar op 10 Hz zetten en de andere op 11,5 Hz dan gaat er een LED branden. (Dit om de functie van het meten van de hoeveelheid slip te simuleren). Gaan wij de frequentie opkrikken naar 100 Hz (beide regelaars) dan gaat de LED branden ondanks dat er geen verschil in "toetental" is.

Iemand enig idee wat we fout hebben gedaan, en misschien hoe we dit zouden kunnen oplossen?

Ons programma ziet er zo uit:

$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

Config Portc = Input
Config Portd = Output

Dim Verschil1 As Word
Dim Count1 As Word
Dim Count3 As Word
Dim Rpm1 As Word
Dim Rpm3 As Word
Dim Temp As Single
Dim Temp1 As Single
Dim Temp2 As Single
Dim Temp3 As Single
Dim Temp4 As Single

Do

Pulsein Count1 , Pinc , 4 , 1 'Meten rpm wiel 1

Temp1 = Count1 * 2
Temp2 = 1000000 / Temp1
Rpm1 = Temp2 * 60

Pulsein Count3 , Pinc , 2 , 1 'Meten rpm wiel 3

Temp3 = Count3 * 2
Temp2 = 1000000 / Temp3
Rpm3 = Temp2 * 60

Temp = Rpm1 - Rpm3
Temp4 = Temp / Rpm3
Verschil1 = Temp4 * 100

If 15 < Verschil1 Then
Portd.7 = 1
Else
Portd.7 = 0
End If

Loop
End

  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 20-11 16:11

DaWaN

'r you wicked ??

Ik weet niet hoe handig het is om BASCOM hiervoor te gebruiken.
Als je tijd-kritische dingen wilt doen dan wil je liever gewoon direct met de timers e.d. spelen in GCC ipv een vage Basic compiler.
Daarbij moet je ook bedenken dat een sensor die maar 2 verschillende standen heeft per rotatie van het wiel heeft een niet bijzonder vloeiende TC oplevert.

If you do not change direction, you may end up where you are heading


  • Speedsmile
  • Registratie: Juni 2004
  • Laatst online: 00:21
Grappig project, alleen zou ik toch wat dingen heroverwegen (ik heb Automotive als Master op TU/e),

Als ik het goed begrijp, en zoals Dawan al aangeeft, zal een traction control die simpelweg het vermogen aan/uit gooit waarschijnlijk niet echt soepel werken.
Ik neem even aan dat het om een elektrische achterwiel aangedreven auto gaat, anders wordt het verhaal natuurlijk stuk moeilijker.

1. Een reflective opto switch met twee standen is erg euhhh discreet. Zeker bij juist traction control wil je nauwkeuring het toerental kunnen meten, vooral omdat de voorwielen vrij langzaam zullen draaien bij het wegrijden. Ik zou toch kijken of het niet te lastig is om gewoon een gaatjes encoder daarvoor te nemen. Pak als het moet gewoon een oude muis en sloop daar de wieltjes uit.

2. Ik weet niet hoeveel kaas je gegeten hebt van control, maar het moet ook niet moeilijk zijn een iets betere controller te ontwerpen, zeg bijvoorbeeld een simple PD regelaar. Dan krijg je echt een mooie traction control, die netjes naar 15% slip regelt.

Een ander nadeel van dit systeem is dat het simpelweg aan-uit schakelen van de motor nogal wat dynamica introduceert, wat je eigenlijk liever niet wilt hebben. Aan de andere kant, het zal waarschijnlijk een stuk lastig worden als je de stroom naar de motor analoog wilt aansturen--> DAC nodig.
Misschien dat je dan wat met PWM zou kunnen doen, maar daar heb ik persoonlijk (nog) niet zoveel kaas van gegeten.

Kortom, wat meer details zou leuk zijn, vet projectje is het zeker.

[ Voor 3% gewijzigd door Speedsmile op 28-11-2008 13:54 ]

If good's on the left, then I'm sticking to the right.


  • donzz
  • Registratie: Maart 2006
  • Laatst online: 20-11 11:51
naast alles wat al eerder gezegd is, lijkt mij dat de code een stuk efficiënter kan. je rekent de toerentallen uit, maar daar ben je niet in geïnteresseerd.. (volgens je verhaaltje dan) je bent geïnteresseerd in het relatieve verschil in snelheid.. (nou ken ik de taal die je gebruikt niet, dus je moet nog even vertalen)

lees wiel 1 in->wiel1
lees wiel 2 in->wiel2
wiel1 * 100 / wiel2 -> temp1 '(in procenten van wiel1 harder dan wiel2)
if(temp1>115)
'laat wiel1 langzamer draaien
endif
if(temp1<85)
'laat wiel2 langzamer draaien
endif

of zoiets. misschien zie ik nog iets over het hoofd.. maar daar wijst vast iemand mij op
(rare uitkomsten kunnen komen doordat je denkt dat 10 gelijk is aan 85% van 11,5, wat niet waar is :) dus testen door 1 wiel op 10 te laten draaien, en de andere te variëren tussen 11,6 en 8,4

alles kan kapot; beter dat ik het nu test dan dat er straks iemand komt klagen


  • Speedsmile
  • Registratie: Juni 2004
  • Laatst online: 00:21
Ik kwam toevallig net dit nog tegen, zal goed zijn voor de inspiratie...http://www.dharmanitech.c...ontrol-by-pwm-method.html

If good's on the left, then I'm sticking to the right.


  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 19-10 00:17
code:
1
2
3
Verschil1 = Temp4 * 100

If 15 < Verschil1 Then

Je hebt het probleem dat je alleen hele getallen op kunt slaan, ga je die nu vermenigvuldigen met 100 dan is je getal altijd deelbaar door 100, de expressie 15 < Verschil1 is alleen onwaar als Temp4 0 of lager is.

Je aanpak is ook helemaal verkeerd, het toerental is omgekeerd evenredig aan de interval, waarom zou je die dan nog uitrekenen? Het is veel beter om direct de interval waarde te vergelijken.

Verzin ook eens wat betere namen voor de variabelen.
en gebruik een echte taal :P

[ Voor 3% gewijzigd door bobo1on1 op 28-11-2008 20:10 ]

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 20-11 16:11

DaWaN

'r you wicked ??

Geef eens wat details over de RC auto.
Het maakt niet uit wat voor model het is, brandstof of electrisch, het signaal wat die dingen gebruiken voor hun aansturing is gewoon 50Hz PWM met regelbare dutycycles, dat is ultra makkelijk te doen met een AVR, kost je 1 timer met PWM kanaal. Dan kun je voor de toerentallen evt de andere timer gebruiken, mooie sensoren pakken zoals speedsmile zegt, die vervolgens aan interrupt pinnen hangen, dan netjes interrupts genereren, vervolgens eens in de zoveel tijd een timer interrupt genereren (kun je evt ook nog variabel maken adv de snelheid) en dan evt de uitgaande dutycycle aanpassen. Dat dan allemaal netjes met AVR studio en GCC maken.

If you do not change direction, you may end up where you are heading


  • Robbiepr1
  • Registratie: September 2008
  • Laatst online: 07:19
Bedankt voor jullie reacties!

Hierbij eerst een korte toelichting over het volledige systeem. De auto die we nu hebben werkt met een PWM signaal. Het is de bedoeling dat de uC gaat meten wat de dutycycle is van dat signaal. Treed er slip op, dan wordt de dutycycle verlaagt met 20% tot dat het toerental van de wielen weer gelijk is. Treed er geen slip op, dan wordt dezelfde dutycycle aangehouden. Het is dus NIET de bedoeling de motor een moment stil te zetten! Als de er geen slip meer plaats vind wordt het vermogen weer langzaam opgebouwd. Het is niet zo dat de motor meteen zijn volledige vermogen terug krijgt (aangezien er waarschijnlijk dan weer gelijk slip op treedt).

De keuze voor een reflective opto switch is omdat het wiel niet erg groot is. De keuze voor een muiswiel valt daarom af. Het wiel is te klein om er een ontvanger/zender in te bouwen. Dus valt die mogelijkheid af. Jullie hebben wel gelijk dat 2 standen erg onnauwkeurig is. Maar dit is natuurlijk ook te vervangen door een cirkel met 20 taartpuntjes. (10 zwart en 10 wit). Dit komt de nauwkeurigheid ten goede.

De reden waarom wij het toerental berekenen is dat wij eerst bepaalde data naar de computer wilden versturen. (Dit ter controle van de werking van het programma). Aangezien dit geen must is hebben wij dit er nu even van tussen gehaald. Mochten we tijd over hebben dan kunnen we dat er altijd nog tussen zetten.

@Speedsmile: Bedankt voor de link. We hebben nu een h-brug op een aparte print, maar de h-brug die ze daar gemaakt hebben neemt zeker veel minder ruimte in.

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Slip detectie? Dan kun je reflectie punten op de zijkant van de wielen plaatsen, bijvoorbeeld witte verfpunten, en laat je de reflectiesensor daarop richten. Voor en achter.
De microcontroller vergelijkt dan beide signaalvormen of ze bijna gelijk oplopen. Dan is er geen slip en auto rijdt netjes weg. Motorcontroller krijgt normale signaal uit de ontvanger.
Mocht ene signaal veel meer frequentie maken dan andere signaal (voorwielen draaien langzaam en achterwielen draaien snel) dan kan microcontroller signaal naar motorregelaar sturen om motor minder snel te laten draaien. Dat betekent dat microcontroller dus tussen ontvanger en motorcontroller komt te staan, dan kan er pulsen mee gestuurd worden. De controle over auto zal dan snel hersteld worden.

Alleen als je door de modder rijdt is andere zaak. De sensoren worden vies en is detectie niet meer goed. Op schone wegen zoals auto racing kan dat wel, maar niet voor 4x4 die door vies terrein rijdt.

De microcontroller zal een complex onderdeel zijn vanwege snel detecteren en dus optimale code moet hebben, en goed inlezen van inkomende signalen.
Pagina: 1