Poly-Metal1 Via
<<Team Deadly Nightshade (2.0)>> I am the Future Priest of Now. I am the guardian of the underworld.
Hallo,
We zijn bezig aan project 4e jaar elektrotechniek. We zijn bezig met het maken van een sonar voor een robot.
Het algoritme zal gebruikt worden op een DSP (http://www.ti.com/product/tms320c6457). Tevens is er op het systeembord ook een FPGA (Virtex-5) aanwezig die in principe gebruikt mag worden maar niet ondesteund wordt door matlab.
De sonar bestaat uit 8 zender/ontvangers rondom de robot. De DSP moet uiteindelijk via de uart aan de main processor van de robot doorsturen waar obstakels staan.
Met het algoritme in te matlab implementeren zijn de 3 andere teamleden bezig. Ik was met Li en nu alleen bezig met het testen van de matlabr dsp compiler.
Nu loop ik tegen drie problemen aan.
1: Hoe kan ik de sonars aansluiten op de DSP? De enige aansluitingen op het bord zijn 4 keer gigabit ethernet, 1 keer rs232, 1 keer JTAG en 2 keer 'FMC400 8x15.6gbps Serial Interconnect with Parity'. Er zijn ook een aantal aansluitingen met low speed io die me geschikt lijken, maar die hangen aan de FPGA ipv aan de DSP. Die FMC dingen gaan ook naar de FPGA maar er zit ook iets op dat via 'bus master/slave controller' naar de DSP gaat dus die lijken me juiste. Op die FMC aansluitingen zit standaard een printje met 'active terminator' op.
Ik heb het al gevraagd aan de persoon die het bord gekocht heeft maar die weet niet hoe het werkt. Dit bord was goedkoop want is gesponsorred door de firma die de compilers ervoor maakt. De interface naar de sonar is een digitaal signaal dat met 100KHz moet worden aangedreven. Verder is er een analoge uitgang met gewoon het ontvangen signaal en een digitale die eens puls geeft bij het ontvangen van een echo.
2: Ik heb om te testen het ledflash demo programma gebruikt en dan de snelheid op 100KHz ingesteld maar dat geeft slechts 2.3KHz. Dan heb ik de code om de tijd bij te houden gedelete zodat er enkel een whileloop staat
while
output=1 output=0
end
Dit geeft 77KHz, gemeten met oscilloscoop. Ik moet 100KHz hebben voor de sensor
. Hoe kan ik dit sneller maken? Ik heb voor de grap eens geprobeerd om de klokfrequentie op 1.3GHz in te stellen, de DSP is max 1GHz. Dan gaat hij juist de goede snelheid maar loopt vast na een 20-60 seconden. Er zijn 8 leds dus in principe kan ik hier de sensoren aanhangen maar de leds zitten direct op de print zonder draadjes dus ik weet niet of je daaraan kunt solderen.
3: Als we het gehele algoritme proberen te gebruiken krijgen we een error bij programmeren:
"JTAG Error 755: Erase block address exceeds target flash size (0x10000000)"
Ik snap dat de DSP te weinig geheugen heeft voor het programma maar dit zou 256MB moeten zijn
. Het matlab programma is slechts 1431 lijnen lang en maar 1.8kb groot dus dat kan het probleem niet zijn.
Sorry als het verhaal een beetje warrig is. Het project moet donderdagmiddag af zijn want dan moet het worden geintegreerd met de rest van de robot zodat hij nog op tijd klaar is voor de wedstrijd de 27ste, maar daar moeten wij niks meer aan doen. Ik ben al sinds gisteren 4u 's morgens bijna non-stop aan het debuggen dus nu begint het wel wat lang te worden. We zijn begonnen met het project vrijdagavond om 21u.
Li is met een alternatieve route bezig om zeker iets werkends te hebben. Ze gebruikt een arduino die ze had van een ander project omdat dat veel eenvoudiger is om uit te zoeken op enkele dagen dan deze DSP met een handleiding van 1000den pagina's. Ze is ook al bezig sinds vrijdagavond maar is pas sinds gisteren namiddag met die arduino bezig ipv met mij mee te doen. 20 min geleden is het gelukt om met 1 sensor de afstand te meten dus dat is al wat positief
. BTW: Aziaatjes op amphetamine zijn grappig
.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Een kanjer van een FPGA en een idioot snelle DSP, en dan is het een probleem om een 100kHz blokgolfje te maken?
Ik zou het niet softwarematig doen, maar gewoon een PWM uitgang nemen, of de clock van de FPGA delen om 100kHz op een uitgang te krijgen. Om die puls te vangen kun je een input capture ingang gebruiken, of iets met dergelijke functionaliteit in de FPGA maken. Ik ken dat bord niet, maar misschien kun je de beschikbare I/O pinnen via de FPGA doorgeven naar de juiste pinnen van de DSP.
Om iets met die FPGA te kunnen doen moet je waarschijnlijk met verilog of VHDL aan.de gang, maar ik mag toch hopen dat je dat na 4 jaar studie wel eerder gedaan hebt.
Om die PWM en input capture periferals te gebruiken, moet je blockset die natuurlijk wel ondersteunen, of je moet het zelf in C gaan doen.
Je laatste vraag lijkt me een fout in de linker command file, kijk daar maar eens waar de verschillende segmenten in flash belanden. Ik kan me niet voorstellen dat die file zo klein is, aangezien er meestal enorme libraries en een of ander RTOS mee komt met matlab/simulink gegenereerde code, dacht ik. Een "hello, world" van 300kB is niet vreemd (maar wel belachelijk).
De tijd lijkt me nogal beperkt; beetje laat begonnen?
Poly-Metal1 Via
<<Team Deadly Nightshade (2.0)>> I am the Future Priest of Now. I am the guardian of the underworld.
Ik zou het niet softwarematig doen, maar gewoon een PWM uitgang nemen, of de clock van de FPGA delen om 100kHz op een uitgang te krijgen. Om die puls te vangen kun je een input capture ingang gebruiken, of iets met dergelijke functionaliteit in de FPGA maken.
* Sorry deze materie is wat nieuw voor mij maar ik zal er even over lezen.
Om iets met die FPGA te kunnen doen moet je waarschijnlijk met verilog of VHDL aan.de gang, maar ik mag toch hopen dat je dat na 4 jaar studie wel eerder gedaan hebt.
* Ik heb al met FPGA gewerkt met labview. Deze FPGA gaat niet met labview denk ik want ik kan hem niet selecteren. VHDL en Verilog zijn zover ik kan zien ook programmas om fpga te programmeren kan het hiermee wel dan?
Om die PWM en input capture periferals te gebruiken, moet je blockset die natuurlijk wel ondersteunen, of je moet het zelf in C gaan doen.
* Wat bedoel je met blockset? We werken met S functie.
Je laatste vraag lijkt me een fout in de linker command file, kijk daar maar eens waar de verschillende segmenten in flash belanden. Ik kan me niet voorstellen dat die file zo klein is, aangezien er meestal enorme libraries en een of ander RTOS mee komt met matlab/simulink gegenereerde code, dacht ik. Een "hello, world" van 300kB is niet vreemd (maar wel belachelijk).
* Hoe kan ik dat nakijken? Ik klik gewoon op 'build middleware', 'build target' en dan 'flash'. Het led test programma gebruikt 17MB flash memory (13MB voor middleware, 4MB user code) en 1.3MB RAM memory (1.3MB middleware, 0MB user code).
De tijd lijkt me nogal beperkt; beetje laat begonnen?
* Ja, we helpen mee met het organiseren van studentenevenementen. Daarom dat we allemaal elkaar hebben opgeschreven om mee samen te werken zodat we samen zitten. We zijn wel redelijk gewoon om dingen op het laatste moment 's nachts te doen. Dat wil niet zeggen dat we het dan slecht doen, meestal is onze oplossing nog een van de beste. We proberen ten minste, de meeste downloaden een kant en klaar project van internet, passen de namen van de variablen aan en geven dat af. Of je het op het einde 150 uur werkt of verdeeld over het jaar maakt weinig uit. Het project loopt al sinds februari 22.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Als ik goed begrijp, heb je dus nog helemaal geen ervaring met verilog, VHDL of C, hebt nog nooit zelf iets met een FPGA, microcontroller of DSP gedaan, buiten code die gegenereerd is door matlab/simulink of labview? Dit wordt echt een uitdaging...
Ik zou eerst bekijken welke periferals die DSP heeft, en of je bij die pinnen kunt komen, met een beetje geluk kun je die hele FPGA links laten liggen. Je zou dan ook moeten controleren of de blockset (library voor de target processor in simulink) die periferals ondersteund.
17MB is echt absurd; ik kan me niet voorstellen dat die DSP zoveel flash aan boord heeft. Wat compileer je in vredesnaam allemaal mee? Windows CE, Office, Firefox en VLC player?!? Ik kan me ook niet voorstellen dat je die 17MB echt nodig hebt, je moet daar wel bijna iets fout doen.
Neem me niet kwalijk, maar na 4 jaar studeren verwacht ik toch iets meer dan "ik druk eerst op dit knopje, en dan op die". Nou ben ik toch een beetje nieuwsgierig: InHolland?
stecj366
Sonar is meer dan Ping...
1) Eerste vraag: wat voor een sonar is het? 100kHz als carrier kan, maar lijkt me vreemd... 40/50kHz is meer gebruikelijk
2) wat voor processing wil je op de data doen? enkel de afstand tot de eerste reflector meten? Dat doe je met een arduino op z'n sokken... Je beseft toch dat ze niet allemaal tesamen mogen "vuren" ivm crosstalk... Indien het breedbandige zijn: een breedbandige zendpuls maken met kasami/walsh-Hadamard/... codes zodat ze tesamen kunnen vuren (het zijn er maar 8.. Eventueel 4 FM-downsweeps en 4FM upsweeps nemen (elks 2 lineair en 2 hyperbolisch bv van verschillende lengtes, die kruiscorreleren niet goed met elkaar). En dan 8 matched filters. Krijg je ineens wat meer informatie binnen dan enkel range... En je gebruikt je spullen die je hebt wat efficienter...
plano
Webshop voor Electronic Prototype | http://eProto.nl/
Interessant, 8x een "ping" met een Virtex-5 of dsp. Wat ik verderop al lees, pak een Arduino (Atmel) Of chipKIT Max32 (PIC32) en wat software en draaien maar. De Virtex-5 kun je ook programmeren met de gratis Digilent Adept software of met de Xilinx's iMPACT.
Poly-Metal1 Via
<<Team Deadly Nightshade (2.0)>> I am the Future Priest of Now. I am the guardian of the underworld.
Het is helemaal gelukt. De reden dat het sensorprogramma niet op de DSP paste was dat er een bestand matlab_crash_dump stond in en datamap van 400MB die werd ingeladen in het programma en het daarmee te groot maakt.
De 100KHz halen met de DSP is niet gelukt. Begeleider kreeg het ook niet sneller maar we hebben schakeling gemaakt 8 keer lm555 ingesteld op 100KHz, werkt prima.
Die bus master/slave controller kun je zo instellen als je leest van een geheugenlocatie in een bepaalde range dat het adres op bepaalde pinnen komt en dat je de waarde van de data pinnen kunt inlezen dus wat we hebben gedaan is 8 adreslijnen aangesloten op de 555 reset aansluiting en de sonar echo detected pin aan de datalijnen.
dus je doet eerst read(1) om sonar 1 te laten zenden
dan wacht zoveel tijd en dan
b=0
while a<1
b=b+1
a=read(0) stoppen met zenden en kijken of signaal ontvangen
end
en dan kun je aan b zien hoe groot de afstand is. Doe je dan opniew voor 2 4 8 enz
Nu ga ik slapen. Li maakt vanavond nog presentatie zodat ze klaar is tegen morgen.
Aanpassing:
Wat bedoel je met inHolland?
stecj366
Sonar is meer dan Ping...
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com