Konstruktion av styrsystem för virtuell bro av flygande bollar



Relevanta dokument
FÖRELÄSNING 8 INTRODUKTION TILL DESIGN AV DIGITALA ELEKTRONIKSYSTEM

Hjälpmedel: Appendix A. VHDL-syntax. (bifogas detta prov) Appendix B.2. IEEE-package (bifogas detta prov)

Programmerbara kretsar och VHDL 2. Föreläsning 10 Digitalteknik, TSEA22 Oscar Gustafsson Institutionen för systemteknik

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

VHDL 1. Programmerbara kretsar

std_logic & std_logic_vector

Konstruktionsmetodik för sekvenskretsar. Föreläsning 7 Digitalteknik, TSEA22 Mattias Krysander Institutionen för systemteknik

Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV

DESIGN AV SEKVENTIELL LOGIK

VHDL och laborationer i digitalteknik

VHDL testbänk. Mall-programmets funktion. Låset öppnas när tangenten 1 trycks ned och sedan släpps. William Sandqvist

Angående buffer. clk clear >=1 =9?

Support Manual HoistLocatel Electronic Locks

Chalmers ekniska Högskola Institutionen för Data- och Informationsteknik. EDA 321 Digitalteknik syntes Laboration 2 - VHDL

L15 Introduktion modern digital design

Konstruktionsmetodik för sekvenskretsar

Digitala projekt Elektro- och informationsteknik

D2 och E3. EDA321 Digitalteknik-syntes. Fredag den 13 januari 2012, fm i M-salarna

DIGITALA PROJEKT Väderstation

DIGITAL ELEKTRONIK. Laboration DE3 VHDL 1. Namn... Personnummer... Epost-adress... Datum för inlämning...

Laboration i digitalteknik Datablad

Digital elektronik CL0090

Master Thesis. Study on a second-order bandpass Σ -modulator for flexible AD-conversion Hanna Svensson. LiTH - ISY - EX -- 08/ SE

Digitalteknik: CoolRunner-II CPLD Starter Kit

VHDL Basics. Component model Code model Entity Architecture Identifiers and objects Operations for relations. Bengt Oelmann -- copyright

LOG/iC2. Introduction

KALKYLATOR LABORATION4. Laborationens syfte

Programmerbara kretsar och VHDL. Föreläsning 9 Digitalteknik Mattias Krysander Institutionen för systemteknik

Tentamen PC-teknik 5 p

Digitalteknik: CoolRunner-II CPLD Starter Kit Med kommentarer för kursen ht 2012

LABORATION DATORKONSTRUKTION TSEA83 UART. Namn och personnummer. Version: (OS)

Programmerbar logik och VHDL. Föreläsning 1

Digital- och datorteknik, , Per Larsson-Edefors Sida 1

Sekvensnät. William Sandqvist

Laboration i digitalteknik Datablad

Programmerbara kretsar och VHDL. Föreläsning 9 Digitalteknik Mattias Krysander Institutionen för systemteknik

CanCom Bluetooth BLUETOOTH V5.6. Specifikation Specification LED. transceiver

Tentamen i Digitalteknik, EIT020

Strukturell VHDL. Grundläggande kunskaper om. och TESTBÄDD. UMEÅ UNIVERSITET Tillämpad fysik och elektronik Lars Wållberg ver 1.

Digitalteknik, fortsättningskurs Föreläsning VHDL Very High Speed Integrated Circuit Hardware Description Language

Lösningförslag till Exempel på tentamensfrågor Digitalteknik I.

Beijer Electronics AB 2000, MA00336A,

(2B1560, 6B2911) HT08

IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare

Simulering med ModelSim En kort introduktion

-c wc. Pre- Next state Out- Vi ser att tillstånden är redan sorterade i grupper med olika utsignaler,

Läsminne Read Only Memory ROM

Föreläsning 4 IS1300 Inbyggda system

Viktig information för transmittrar med option /A1 Gold-Plated Diaphragm

- Digitala ingångar och framförallt utgångar o elektrisk modell

LABORATIONSINSTRUKTION LABORATION

Minneselement,. Styrteknik grundkurs. Digitala kursmoment. SR-latch med logiska grindar. Funktionstabell för SR-latchen R S Q Q ?

Tenta i Digitalteknik

Styrteknik 7.5 hp distans: E-1000 och E-Designer

Forma komprimerat trä

IndraDrive Open-loop. Styrning av asynkronmotor över Profibus. Version 1

Tentamen i Digitalteknik, EIT020

Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

RADIATION TEST REPORT. GAMMA: 30.45k, 59.05k, 118.8k/TM1019 Condition D

Styrteknik : Programmering med IEC Styrteknik

Digital elektronik CL0090

DIGITALTEKNIK. Laboration D172

Programmerbar logik och VHDL. Föreläsning 4

CM FORUM. Introduktion till. Configuration Management (CM) / Konfigurationsledning. Tobias Ljungkvist

Översikt, kursinnehåll

Styrteknik: Binära tal, talsystem och koder D3:1

FIFO-kostruktion baserat på ett enkel-ports SRAM Yusuf Duman

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Digitala projekt rapport

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

VHDL3. Angående buffer

2.45GHz CF Card Reader User Manual. Version /09/15

Datasäkerhet och integritet

Konstruktion av digitala system - VHDL

4 grundregler. Minneshantering. Problemet. Windows minkrav

Det finns en handledning till kortet på hemsidan. AVR STK500.

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

Lunds Universitet LTH Ingenjörshögskolan IDa1, IEa1 Helsingborg. Laboration nr 4 i digitala system ht-15. Ett sekvensnät. grupp. namn.

Styrteknik distans: Minneselement, register, räknare, AD-omv D4:1

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Växtviskaren EITF11 Digitala projekt VT15, I12

KALIBRERINGS MENY. För att komma tillbaka till Mätfunktionerna håll inne M -knappen 3s. eller vänta 1 min. 1 =MOD. 9.6 KBaud

GPIO - General Purpose Input Output

Generering av analoga signaler från XSV300

Styrteknik : Funktioner och funktionsblock

Product configurations Produire configuration Produkt konfigurationen Producto configuraciones Produkt konfigurationerna

Tentamen i Digitalteknik, EIT020

InstalationGuide. English. MODEL:150NHighGain/30NMiniUSBAdapter

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Alias 1.0 Rollbaserad inloggning

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

VHDL2. Sekvensnätsexemplet

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Datorteknik. Den digitala automaten. En dator måste kunna räkna! Register och bussanslutning


HANTERING AV UPS CX

Ett urval D/A- och A/D-omvandlare

Kombinationskretsar. Föreläsning 4 Digitalteknik Mattias Krysander Institutionen för systemteknik

Laborationskort - ML4

Transkript:

Examensarbete Konstruktion av styrsystem för virtuell bro av flygande bollar Peter Engström Jan Odeskog LiTH-ISY-EX-ET-0202 2001-03-30

Konstruktion av styrsystem för virtuell bro av flygande bollar Examensarbete utfört vid Reglerteknik, Institutionen för Systemteknik, Linköpings Tekniska Högskola av Peter Engström Jan Odeskog LiTH-ISY-EX-ET-0202 2001-03-30 Examinator: Kent Hartman Handledare: Valur Einarsson

Avdelning, Institution Division, Department Division of Automatic Control Department of Electrical Engineering Datum Date 2001-03-30 Språk Language x Svenska/Swedish Engelska/English Rapporttyp Report category Licentiatavhandling x Examensarbete C-uppsats D-uppsats Övrig rapport ISBN ISRN Serietitel och serienummer ISSN Title of series, numbering URL för elektronisk version LiTH-ISY-EX-ET-0202 Titel Title Konstruktion av styrsystem för virtuell bro av flygande bollar Construction of control system for a virtual bridge of flying balls Författare Author Peter Engström, Jan Odeskog Sammanfattning Statens konstråd fick i uppgift att göra ett konstverk till den svenska paviljongen vid världsutställningen Expo 2000. Konstnären Christian Partos idé var att skjuta bollar med ett antal lufttryckskanoner och vår uppgift var att konstruera ett styrsystem för kanonerna. I systemet ingår lufttryckskanoner, kompressor och trycktank. Systemet styrs av en PC:n med specialutvecklad mjukvara och styrelektronik. Styrsystemets funktioner är implementerade med programmerbar logik, vilket gör det enkelt att förändra styrsystemets beteende. Abstract The National Public Art Council was responsibe to create a piece of art for the Swedish paviljon at the Expo2000. The artist Christian Partos idea for the paviljon was to shoot balls with a number of air pressure cannons. Our issue was to create a control system for these cannons. The system consist of air pressure cannons, an air compressor and an air pressure tank. The system is controlled by a PC with specially developed software and electronics. The control system s functions is implemented with programmable logic, which makes it easy to upgrade the behaviour of the control system. Nyckelord elektronikkonstruktion, styrsystem, kanon, VHDL, FPGA, C++ Keyword electronics construction, control system, cannon, VHDL, FPGA, C++

Sammanfattning Statens konstråd fick i uppgift att göra ett konstverk till den svenska paviljongen vid världsutställningen Expo 2000. Konstnären Christian Partos idé var att skjuta bollar med ett antal lufttryckskanoner och vår uppgift var att konstruera ett styrsystem för kanonerna. I systemet ingår lufttryckskanoner, kompressor och trycktank. Systemet styrs av en PC:n med specialutvecklad mjukvara och styrelektronik. Styrsystemets funktioner är implementerade med programmerbar logik, vilket gör det enkelt att förändra styrsystemets beteende.

Innehållsförteckning 1 INLEDNING... 1 1.1 BAKGRUND... 1 1.2 UPPGIFT... 1 1.3 RAPPORTENS STRUKTUR... 1 2 SYSTEMBESKRIVNING... 2 2.1 LUFTTRYCKSKANONERNAS UPPBYGGNAD... 2 2.2 BESKRIVNING AV STYRSYSTEMET... 3 3 HÅRDVARUBESKRIVNING... 5 3.1 INTERFACE MED DATORN... 5 3.1.1 Parallellporten... 5 3.1.2 Buffring av data... 6 3.1.3 Signaler mellan parallellporten och styrkretsen... 6 3.2 STYRELEKTRONIKEN... 7 3.2.1 Styrkretsen... 7 3.2.2 Utgångsbuffert... 7 3.2.3 Hastighetsmätning... 7 3.2.4 Tryckmätning... 8 3.3 STRÖMFÖRSÖRJNING... 9 3.4 KRETSKORTSTILLVERKNING OCH MONTERING AV KOMPONENTER... 9 4 MJUKVARA... 9 4.1 FILFORMAT... 10 4.1.1 Information för skjutning... 10 4.1.2 Konfigurationsfil... 10 4.3 ANVÄNDARGRÄNSSNITTET... 11 4.4 KONFIGURERING AV STYRKRETSEN... 11 5 UTVECKLINGSARBETE... 12 5.1 PROVSKJUTNINGAR... 12 5.2 HÅRDVARA... 12 5.2.1 Utvecklingsverktyg... 12 5.2.2 Problem... 12 5.2.3 Reglering... 13 5.3 MJUKVARA FÖR WINDOWS... 13 6 RESULTAT... 14 Bilagor 1 Utdrag ur datablad, 512x8 FIFO IDT720 2 Utdrag ur datablad, FPGA XCS40XL 3 VHDL kod 4 Utdrag ur datablad, A/D omvandlare MAX153 5 Kretskortslayouter 6 Inställningsparametrar 7 Projektbeskrivning från Statenskonstråd 8 Kretsschema

1 Inledning 1.1 Bakgrund Temat för den Svenska paviljongen vid världsutställningen i Hannover sommaren år 2000 var Kunskapens broar. Paviljongen ritades av Greger Dahlström vid FOJAB arkitekter i Malmö. Den präglas av stilren enkelhet, en svart ask med ena långsidan täckt i glas. I paviljongen presentaterades svensk design, mat och musik. Samarbeten pågick mellan Konstfack, KTH och Karolinska Institutet. Statens konstråd fick i uppgift att ta fram den konstnärliga huvudattraktionen i paviljongen, en illustration till temat kunskapens broar. Konstnären Christian Partos hade två olika idéer för att illustrera temat. Den ena idén gick ut på att ett stort antal lufttryckskanoner skjuter bollar med varierande tidsintervall. Bollarna formar då ett mönster i luften som liknar en bro. Uppfinnaren Peter Cramiz konstruerade kanonerna och vi utvecklade styrsystemet. FIGUR 1. IDÉSKISS TILL DEN VIRTUELLA BRON. 1.2 Uppgift Uppgiften var att skapa ett styrsystem till en prototyp med 19 kanoner som ska styras med hjälp av en PC. Prototypen ska kunna vidareutvecklas till ett fullskaligt system. 1.3 Rapportens struktur För att få en bra förstå för hur styrsystemet är konstruerat beskrivs först lufttryckskanonernas uppbyggnad i kapitel 2 och sedan följer en presentation av styrsystemet i kapitel 3. Därefter följer en redogör av hur mjukvaran utvecklades i kapitel 4 och utvecklingsarbetet beskrivs i kapitel 5. Slutligen presenteras resultatet i kapitel 6. 1

2 Systembeskrivning Systemet består av en PC, elektronik, 19 lufttryckskanoner, kompressor och trycktank med tryckregulator. FIGUR 2. ÖVERSIKT AV SYSTEMET. 2.1 Lufttryckskanonernas uppbyggnad Kanonerna består av följande delar: pipa, slid, fjäder, pistong och bakstycke. En elektrisk 3/2 lufttrycksventil är monterad på bakstycket. figur 3 visar kanonen i viloläge. FIGUR 3. När styrkretsen skickar en signal öppnar ventilen och då pressas luft in genom bakstycket. Fjädern motverkar slidens rör framåt, vilket gör att ett tryck byggs upp mellan slid och bakstycke. När lufttrycket överstiger trycket från fjädern, rör sig sliden framåt och samtidigt för sliden bollen framför sig, se figur 4. FIGUR 4. 2

När sliden har rört sig förbi pistongen bildas en öppning som kan ses i figur 5. Luften kan nu fritt passera igenom sliden och bollen trycks ut genom pipan. FIGUR 5. Fjädern trycker tillbaka sliden till sitt ursprungsläge, se figur 6. När sliden har nått sitt bakre ändläge så faller en ny boll ner i pipan och ny boll kan skjutas iväg, se figur 3. FIGUR 6. 2.2 Beskrivning av styrsystemet Styrsystemet består av en PC med specialutvecklad mjukvara för Windows och elektronik med en central styrkrets. Programmet i PC:n skickar data till styrkretsen om vilka kanoner som ska skjuta för att bilda det mönster man vill ha. FIGUR 7. FORMATION AV BOLLAR MED TIDSRAMAR. Sekvensen av bollar delas in i tidsramar. Mellan varje tidsram går det 4 ms vilket ger en upplösning på 10 cm om utgångshastigheten är 25 m/s. Styrkretsens uppgift är att styra ventilerna och reglera hastigheten på bollarna. 3

Skillnader mellan bollarnas utgångshastighet bör vara så liten som möjligt för att bibehålla bollarnas inbördes position i luften. När en ventil öppnas skjuts en boll iväg med en hastighet som beror på tiden som ventilen är öppen och på lufttrycket. För att kunna reglera utgångshastigheten så mäts trycket och hastigheten på bollarna. Varje kanon har en individuell hastighetsmätning och på lufttryckstanken sitter en tryckgivare. Från PC:n kan en konfigurationsfil överföras till styrkretsen. Filen innehåller parametrar för reglering av utgångshastigheten hos lufttryckskanonerna. 4

3 Hårdvarubeskrivning 3.1 Interface med datorn All information om vilka kanoner som ska skjuta finns lagrad i datorn. För att styrkretsen ska få tillgång till den informationen så måste datorn på något sätt kommunicera med hårdvaran. I systemet används parallellporten som finns på många vanliga datorer och är enkel att styra. Bilden nedan visar interfacet mellan datorn och styrelektroniken. FIGUR 8. INTERFACE MED DATORN. 3.1.1 Parallellporten Parallellporten består av en dataport (D7-D0), en statusport (S7-S3) och en kontrollport (C3-C0), där C0 är klocksignalen. Dataporten används som databuss, statusporten används för att skicka kontrollsignaler och kontrollporten används för att hämta information från styrskretsen. Parallellporten överför i sitt orginalutförande ungefär 50 kb/s. Enligt avsnitt 4.1.1 krävs en överföringshastighet på 750 byte/s. FIGUR 9. STANDARD PARALLELLPORT 5

3.1.2 Buffring av data Operativsystemet Windows skickar inte data utan avbrott med de tidskrav som finns. För att säkerställa en kontinuerlig ström av data används därför ett buffertminne, sk. First In First Out (FIFO), se bilaga 1. Storleken på minnet är 512x8-bitar. Buffertminnet har en 8-bitars ingång, 8-bitars utgång, kontrollsignaler och statussignaler. Ingången kontrolleras av Write Clock och Write Enable. Data lagras i minnet vid varje positiv klockflank om Write Enable är negativ. Utgången styrs av Read Clock och Read Enable bestämmer när data kan läsas. FIGUR 10. BUFFRING AV DATA FRÅN PARALLELLPORTEN För att inte överfylla buffertminnet är kontrollsignalen Almost Full ansluten till S7 på parallellporten och fungerar som ett interupt. På detta sätt får datorn en signal när buffertminnet nästan är fullt och att ingen mer data ska skickas. FIGUR 11. LÄSNING FRÅN FIFO. 3.1.3 Signaler mellan parallellporten och styrkretsen Ett 2 bitars ord används för att bestämma funktionen på styrkretsen och kodas på följande sätt. Kod Funktion Beskrivning 00 Skjut Skjut bollar enligt data 01 Konfigurera Läs in konfigurationsparametrar från datorn 10 Standby Vänta 11 Skicka Skicka information till datorn 6

3.2 Styrelektroniken 3.2.1 Styrkretsen Styrkretsen består av en FPGA (Field Programmable Gate Array), vilket är en typ av programerbar logik. Den använda FPGA:n, XCS40XL-PQ208, tillverkas av Xilinx och har motsvarande 20 000 logikgrindar och 169 I/O. Kapseln är 3x3 cm och har 208 ben med en delning på 0,5 mm. Matningspänningen är 3,3 V men ingångarna klarar 5 V, vilket gör att de övriga enheterna kan kopplas direkt till fpga:n. Utgångarna klarar att driva 24 ma. För mer detaljerad information om FPGA:n se bilaga 2. FPGA:n klockas av en kristalloscillator på 4 MHz. Programmering sker genom parallellporten på datorn. Detta måste göras vid varje uppstart på grund av att FPGA:n raderas när spänningen försvinner. Komplett VHDL kod för FPGA:n finns i bilaga 3. 3.2.2 Utgångsbuffert Magnetventilerna drivs med 24 V och kräver en ström på ca 100 ma för att öppna. Styrkretsen styr ventilerna via transistorsteg enligt figur 12 nedan. FIGUR 12. UTGÅNGSBUFFERT. 3.2.3 Hastighetsmätning Fotodioder och IR dioder är monterade på lufttryckskanonerna enligt figur 13 och fungerar som läsgafflar. FIGUR 13. HASTIGHETSMÄTNING. När fotodioderna träffas av ljuset från IR-dioderna leder de ström. Fotodioderna är kopplade enligt fig 14, vilket ger en negativ puls då strålen bryts av bollen. Dioderna som används är ELSIR91-21C/F9 och PD410PI. 7

En schmitt-trigger sitter mellan fotodioden och styrkretsen för att förbättra pulsen och för att skydda styrkretsen. FIGUR 14. LÄSGAFFLARNAS UPPKOPPLING. När bollen bryter den första strålen börjar en räknare i styrkretsen räkna pulser tills den andra strålen bryts. Antalet räknade pulser blir då ett mått på hastigheten. Pulserna består av 124 st klockpulser på 250 ns från styrkretsens externa klocka, vilket blir 31 us. Räknaren implementeras med 8 bitar som gör det möjligt att mäta tider upp till 255x31 us = 7,9 ms. Detta motvarar en hastighet ner till 0,1/7,9 ms = 12,6 m/s. Onoggranheten på grund av ändlig ordlängd blir en puls, dvs 31 us. Vid normal hastighet, ca 22 m/s, motsvarar detta 0,16 m/s. Eventuella skillnader mellan de två fotodioderna och tillhörande komponenter försummas. 3.2.4 Tryckmätning För att mäta trycket används en tryckgivare som sitter monterad på trycktanken. Givaren ger en analog signal mellan 0 och 5 V. Signalen digitaliseras av en A/D omvadlare som kontrolleras av styrkretsen. Trycket mäts en gång för varje boll som skjuts iväg. Den minsta tiden mellan två bollar är 4 ms, dvs en tidsram. Tidskravet på A/D omvandlaren blir därför att en omvandling inte får ta längre tid än den 4 ms, vilket är lång tid i detta sammanhang. I prototypen representeras trycket med 8 bitar och omvandlas varje 50us. A/D omvandlaren som används är MAX153, se bilaga 6. Den valdes på grund av att den är enkel att styra och att den har ett lågt pris. Insignalen WRITE startar en omvadling och när signalen READ är låg, skickas det omvandlade värdet till styrkretsen. Signalerna WRITE och READ är ihopkopplade vilket gör att en ny omvandling startar samtidigt som data skickas. Eftersom signalen från tryckgivaren har samma spänningssving på utsignalen som strömförsörjningen, så används VDD och GND som spänningsreferens till A/D omvandlaren. FIGUR 15. SIGNALER MELLAN A/D-OMVANDLARE OCH STYRKRETS. 8

3.3 Strömförsörjning Elektroniken drivs med tre olika matningsspänningar. FPGA:n kräver en spänning på 3,3V, magnetventilerna går på 24 V och de övriga komponenterna drivs med 5 V. Två spänningsregulatorer genererar 3,3 V och 5V enligt fig 16 nedan. FIGUR 16. SPÄNNINGSMATNING. Den likriktade ingångsspänningen till spänningsregulatorerna och 24V som driver magnetventilerna kommer från ett nätaggregat. 3.4 Kretskortstillverkning och montering av komponenter Elektroniken är uppdelad på 6 olika kretskort: FIFO, FPGA, hastighetsmätning, tryckmätning, strömförsörjning och utgångssteg. Kretskortslayouterna är gjorda med programmet Winboard och har överförts till laminat med fotografisk metod. Kretskorten är tillverkade av enkelsidigt 1 mm kopparlaminat av glasfiber med 35 um koppar. Kretskortet med FPGA:n är ytmonterat och vid monteringen användes ett stereomikroskop på grund av att bendelningen är mycket liten! (0.5 mm). Kretskorten kopplas ihop med 20-poliga flatkablar. Kretskortslayouter för alla kort kan beskådas i bilaga 5. 9

4 Mjukvara 4.1 Filformat 4.1.1 Information för skjutning Prototypen med de 19 kanonerna är uppdelade i tre grupper om 8-8-3. Varje grupp kanoner motsvaras av ett 8-bitars ord och varje enskild kanon i gruppen är tilldelad en bit i ordet. FIGUR 17. T.V. INDEXERING AV LUFTTRYCKSANONERNA. T.H. TILLDELNING AV POSITION I BINÄRT ORD AV LUFTTRYCKSANONERNA. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Binärt ord 1 8 7 6 5 4 3 2 1 Binärt ord 2 16 15 14 13 12 11 10 9 Binärt ord 3 19 18 17 Informationen om när kanonerna ska skjuta lagras i textfiler och har filändn.vbd (Virtual Bridge Database). Varje rad i en.vbd fil byggs upp på det sätt som syns nedan. [Binärt ord 1] [Binärt ord 2] [Binärt ord 3] [Binärt ord 1] [Binärt ord 2] [Binärt ord 3] osv... Varje binärt ord konverteras till ett decimalt ord och 3 rader utgör en tidsram. 1 tidsram=4ms 250 tidsramar/s 1 tidsram= (8+8+8 Bitar)=3 Byte 3x250= 750 Byte/s 4.1.2 Konfigurationsfil Konfigurationsfilen innehåller inställningsparametrar för reglering av utgångshastigheten hos lufttryckskanonerna. Filen är en vanlig text fil med ändn.cfg (Configuration File). Formatet är ett decimalt tal mellan 0-255 per rad. 10

4.3 Användargränssnittet För styrning av hårdvaran används ett program för Windows som vi kallar VBServer. Programmets huvudsakliga uppgift är att läsa in data från en vbd-fil och skicka det till styrkretsen. Programmet används även till att hämta information från styrkretsen. FIGUR 18. VBSERVER. Informationen om hastigheter och tryck från kanoner som har skjutit kan sparas i en logfil. Möjligheten att läsa information från styrkretsen har varit ett viktigt verktyg under utvecklingsarbetet. 4.4 Konfigurering av styrkretsen Styrkretsen konfigureras med parametrar för regleringen. Parametrarna läses från en fil som heter styrkrets.cfg och den måste ligga i samma katalog som programmet körs från. FIGUR 19. KONFIGURERING AV STYRKRETSEN. 11

5 Utvecklingsarbete Eftersom VHDL användes var det möjligt att påbörja utvecklingsarbetet utan att vara låst till en specifik typ av programmerbar krets. Till den den första versionen av styrelektroniken användes en CPLD vilken är en typ av programmerbar logik. VHDL koden för styrkretsens olika funktioner simulerades först och testades sedan var för sig implementerad i CPLD:n. Resultatet gav en bra beslutsgrund inför valet av programmerbar krets. För att hinna se bollarna i luften bör kanonernas utgångshastighet vara så låg som möjligt. Vid en lägre utgångshastighet måste kanonernas elevation ökas för att skjuta 40 meter, men då träffar bollarna taket. Takhöjden på 10 meter gjorde att den lägsta möjliga utgångshastigheten visade sig vara 22m/s. 5.1 Provskjutningar Det mesta av utvecklingsarbetet gjordes med en testkanon i lokaler vid Linköpings Universitet. Provskjutningarna fortsatte sedan med de 19 kanonerna i en nedlagd järnvägstunnel i Stockholm (3:e spåret). 5.2 Hårdvara 5.2.1 Utvecklingsverktyg För utveckling av FPGA:n användes utvecklingsmiljön Foundation från Xilinx, vilken innehåller alla nödvändiga verktyg för utveckling av deras kretsar. För vissa simuleringar användes även Modelsim. Kretskortslayouterna ritades med programmet WinBoard från Ivex. 5.2.2 Problem Det största problemet som uppstod under utvecklingsarbetet var att de tre orden som bildar en tidsram kom på fel plats. Efter omfattande felsökning med logikanalysator i olika delar av systemet lokaliserades felet till spikar på klocksignalen från parallellporten. Felet gjorde att samma ord ibland lästes två gånger av buffertminnet vilket gjorde att fel kanoner sköt. Spikarna på klocksignalen kom troligtvis från överhörning. Problemet åtgärdades genom att avkoppla klocksignalen med en liten kondensator. Ett annat problem var att hastighetsmätningen ibland inte fungerade. Under utvecklingsarbetet med hastighetsmätningen på testkanonen användes korta kablar mellan fotodiod och schmitt-trigger. Vid provskjutningarna i järnvägstunneln användes längre kablar och då uppstod problemet, med korta kablar fungerade hastighetsmätningen igen utan problem. Lufttrycksregulatorn som ska reglera trycket i lufttryckstanken visade sig vara feldimentionerad. Den krävde ett större luftflöde för att hålla ett konstant tryck. Vid 12

skjutning med många bollar per sekund, sjönk lufttrycket så mycket att en det inte gick att kompencera med en längre ventiltid för att få den önskade utgångshastigheten. I slutet av projektet byttes regulatorn till en bättre, men eftersom A/D omvandalaren och tryckgivaren var anpassade till den gamla tryckregulatorn så utnyttjades fördelen inte helt med den nya regulatorn. Tyvärr fanns det då ingen tid att göra modiferingar på styrsystemet. Samma kanon kan ha olika utgångshastighet även om samma tryck och öppningstid på ventilen användes. Skillnaden på utgångshastighet var upp till 0,5m/s. Möjliga orsaker till detta kan bero av bollarnas ojämnheter och kanonernas mekanik. Bollarna har en liten ojämnhet från tillverkningen och under provskjutningarna uppkom även andra omjämnheter. Detta kan påverka utgångshastigheten på grund av det blir större friktion mellan bollen och pipan. Kanonens mekanik kan också påverka utgångshastigheten. Friktionen varierar mellan kanonens rörliga delar på grund av rostangrepp och dålig passform. Vid konstant ventiltid och lufttryck så skiljer utgångshastigheten upp till 1m/s. 5.2.3 Reglering Under provskjutningarna användes en enkel reglering för att testa systemet. I ett slutgiltigt system kan en mer avancerad regleralgoritm enkelt implementeras i hårdvaran efter att systemet analyserats bättre. I den enkla regleringen som användes räknades ventiltiden ut på följande sätt: Ventiltid(n) = Vtp(p) + Vt0(n) där n=kanon nr. och p=lufttryck Genom att anpassa varje kanon till en meddelhastighet på 22m/s så fås en specifik ventiltid för varje kanon. Vt0 kompenserar för skillnaden dessa tider, se bilaga 10. Vtp är en kompensation för tyckförändringar. Trycket mäts och översätts till en tid enligt tabellen i bilaga 11. 5.3 Mjukvara för Windows Mjukvaran utvecklades parallellt med hårdvaran och är skriven i programmeringspråket C++. Som utvecklingsverktyg användes Visual C++ 6.0. Till prototypen av hårdvaran med CPLD:n utvecklades ett enkelt program vilket var till stor hjälp under utveckling av kommunikationen mellan dator och hårdvara. I programet kan man bland annat enkelt definiera den tid som ventilen ska vara öppen. Efter hand så fick programmet ytterligare funktioner som finns beskrivna i avsnitt 4.3. 13

6 Resultat Styrsystemet fungerar som det var tänkt enligt uppgiften. Resultatet är ett flexibelt styrsystem som enkelt kan modifieras och konfigureras. Hela systemet fungerar men bollarnas hastighet är för stor och precisionen är för dålig för att få den visuella upplevn som konstnären hade tänkt sig. Konstverket visades tyvärr inte på värsldsutställningen som planerat. Orsaken till detta var dels att vi blev försenade i konstruktionsarbetet och att den visuella upplevn blev ganska dålig. Istället valdes ett annat konstverk som utvecklades parallellt med detta projekt. Fortsatt utveckling av styrsystemet bör innehålla följande punkter: Upplösningen på A/D omvandlaren bör ökas för att utnyttja fördelen med den nya tryckregulatorn som diskuterades i avsnitt 5.2.2. Genom att anpassa A/D omvandlarens referensspänning till tryckgivarens nya spänningssving, kan full upplösning erhållas. Under förutsättning av att de mekaniska delarna förbättras, kan precisionen ökas genom att analysera systemet och utveckla en bra hastighetsreglering. Systemet bör kompletteras med felkontroll som förhindrar att bollar skjuts iväg om något fel i systemet inträffar. För att enkelt ta fram bollsekvenser behövs ett användarvänligt program för detta. Styrprogrammet bör vidareutvecklas, t.ex kompletteras med möjligheten att köra flera vbd-filer efter varandra i en sekvens. 14

CMOS SyncFIFO 64 x 8, 256 x 8, 512 x 8, 1,024 x 8, 2,048 x 8, 4,096 x 8 IDT72420 IDT72200 IDT72210 IDT72220 IDT72230 IDT72240 FEATURES: 64 x 8-bit organization (IDT72420) 256 x 8-bit organization (IDT72200) 512 x 8-bit organization (IDT72210) 1,024 x 8-bit organization (IDT72220) 2,048 x 8-bit organization (IDT72230) 4,096 x 8-bit organization (IDT72240) 10 ns read/write cycle time (IDT72420/72200/72210/72220/72230/ 72240) Read and Write Clocks can be asynchronous or coincidental Dual-Ported zero fall-through time architecture Empty and Full flags signal FIFO status Almost-Empty and Almost-Full flags set to Empty+7 and Full-7, respectively Output enable puts output data bus in high-impedance state Produced with advanced submicron CMOS technology Available in 28-pin 300 mil plastic DIP and 300 mil ceramic DIP For surface mount product please see the IDT72421/72201/72211/ 72221/72231/72241 data sheet Military product compliant to MIL-STD-883, Class B Industrial temperature range ( 40 C to +85 C) is available (plastic packages only) DESCRIPTION: The IDT72420/72200/72210/72220/72230/72240 SyncFIFO are very high-speed, low-power First-In, First-Out (FIFO) memories with clocked read and write controls. These devices have a 64, 256, 512, 1,024, 2,048, and 4,096 x 8-bit memory array, respectively. These FIFOs are applicable for a wide variety of data buffering needs, such as graphics, Local Area Networks (LANs), and interprocessor communication. These FIFOs have 8-bit input and output ports. The input port is controlled by a free-running clock (WCLK), and a Write Enable pin (WEN). Data is written into the Synchronous FIFO on every clock when WEN is asserted. The output port is controlled by another clock pin (RCLK) and a Read Enable pin (REN). The Read Clock can be tied to the Write Clock for single clock operation or the two clocks can run asynchronous of one another for dual clock operation. An Output Enable pin (OE) is provided on the read port for three-state control of the output. These Synchronous FIFOs have two endpoint flags, Empty (EF) and Full (FF). Two partial flags, Almost-Empty (AE) and Almost-Full (AF), are provided for improved system control. The partial (AE) flags are set to Empty+7 and Full-7 for AE and AF respectively. These FIFOs are fabricated using IDT s high-speed submicron CMOS technology. Military grade product is manufactured in compliance with the latest revision of MIL-STD-883, Class B. FUNCTIONAL BLOCK DIAGRAM WCLK WEN D0 - D7 INPUT REGISTER WRITE CONTROL LOGIC FLAG LOGIC EF AE AF FF WRITE POINTER RAM ARRAY 64 x 8, 256 x 8, 512 x 8, 1,024 x 8, 2,048 x 8, 4,096 x 8 READ POINTER READ CONTROL LOGIC OUTPUT REGISTER RESET LOGIC RS OE Q0 - Q7 RCLK REN 2680 drw 01 OCTOBER 2000 1 2000 Integrated Device Technology, Inc. DSC-2680/-

IDT72420/72200/72210/72220/72230/72240 CMOS SYNCFIFO 64 x 8, 256 x 8, 512 x 8, 1,024 x 8, 2,048 x 8, 4,096 x 8 MILITARY AND COMMERCIAL TEMPERATURE RANGE PIN CONFIGURATION D4 1 28 D5 D3 2 27 D6 D2 3 26 D7 D1 4 25 RS D0 5 24 WEN AF 6 23 WCLK AE 7 22 VCC GND 8 21 Q7 RCLK 9 20 Q6 REN 10 19 Q5 OE 11 18 Q4 EF 12 17 Q3 FF 13 16 Q2 Q0 14 15 Q1 2680 drw 02 PLASTIC THIN DIP (P28-2, order code: TP) SIDEBRAZE THIN DIP (C28-1, order code: TC) TOP VIEW PIN DESCRIPTIONS Symbol Name I/O Description D0 - D7 Data Inputs I Data inputs for a 8-bit bus. RS Reset I When RS is set LOW, internal read and write pointers are set to the first location of the RAM array, FF and AF go HIGH, and AE and EF go LOW. A reset is required before an initial WRITE after power-up. WCLK Write Clock I Data is written into the FIFO on a LOW-to-HIGH transition of WCLK when WEN is asserted. WEN Write Enable I When WEN is LOW, data is written into the FIFO on every LOW-to-HIGH transition of WCLK. Data will not be written into the FIFO if the FF is LOW. Q0 - Q7 Data Outputs O Data outputs for a 8-bit bus. RCLK Read Clock I Data is read from the FIFO on a LOW-to-HIGH transition of RCLK when REN is asserted. REN Read Enable I When REN is LOW, data is read from the FIFO on every LOW-to-HIGH transition of RCLK. Data will not be read from the FIFO if the EF is LOW. OE Output Enable I When OE is LOW, the data output bus is active. If OE is HIGH, the output data bus will be in a high-impedance state. EF Empty Flag O When EF is LOW, the FIFO is empty and further data reads from the output are inhibited. When EF is HIGH, the FIFO is not empty. EF is synchronized to RCLK. AE Almost-Empty Flag O When AE is LOW, the FIFO is almost empty based on the offset Empty+7. AE is synchronized to RCLK. AF Almost-Full Flag O When AF is LOW, the FIFO is almost full based on the offset Full-7. AF is synchronized to WCLK. FF Full Flag O When FF is LOW, the FIFO is full and further data writes into the input are inhibited. When FF is HIGH, the FIFO is not full. FF is synchronized to WCLK. VCC Power One +5 volt power supply pin. GND Ground One 0 volt ground pin. 2

marc 0 R Spartan and SpartanXL Families Field Programmable Gate Arrays January 6, 1999 (Version 1.4) 0 4 Preliminary Product Specification Introduction The Spartan TM Series is the first high-volume production FPGA solution to deliver all the key requirements for ASIC replacement up to 40,000 gates. These requirements include high performance, on-chip RAM, Core Solutions and prices that, in high volume, approach and in many cases are equivalent to mask programmed ASIC devices. The Spartan Series is the result of more than thirteen years of FPGA design experience and feedback from thousands of customers. By streamlining the Spartan feature set, leveraging advanced hybrid process technologies and focusing on total cost management, the Spartan Series delivers the key features required by ASIC and other high volume logic users while avoiding the initial cost, long development cycles and inherent risk of conventional ASICs. The Spartan Series currently has 10 members, as shown in Table 1. Spartan Series Features Note: The Spartan Series devices described in this data sheet include the 5 V Spartan family of devices and the 3.3 V SpartanXL family of devices. Next generation ASIC replacement technology - First ASIC replacement FPGA for high-volume production with on-chip RAM - Advanced process technology - Density up to 1862 logic cells or 40,000 system gates - Streamlined feature set based on XC4000 architecture - System performance beyond 80 MHz - Broad set of AllianceCORE and LogiCORE pre-defined solutions available - Unlimited reprogrammability - Low cost Table 1: Spartan and SpartanXL Series Field Programmable Gate Arrays System level features - Available in both 5.0 Volt and 3.3 Volt versions - On-chip SelectRAM TM memory - Fully PCI compliant - Low power segmented routing architecture - Full readback capability for program verification and internal node observability - Dedicated high-speed carry logic - Internal 3-state bus capability - 8 global low-skew clock or signal networks - IEEE 1149.1-compatible boundary scan logic Versatile I/O and packaging - Low cost plastic packages available in all densities - Footprint compatibility in common packages - Individually programmable output slew-rate control maximizes performance and reduces noise - Zero input register hold time simplifies system timing Fully supported by powerful Xilinx development system - Foundation series: Integrated, shrink-wrap software - Alliance series: Over 100 PC and workstation 3 RD party development systems supported - Fully automatic mapping, placement and routing - Interactive design editor for design optimization Additional SpartanXL Features 3.3V supply for low power with 5V tolerant I/Os Power down input Higher performance Faster carry logic More flexible high-speed clock network Latch capability in Configurable Logic Blocks Input fast capture latch Optional mux or 2-input function generator on outputs 12 ma or 24 ma output drive 5V/3.3V PCI compliant Enhanced Boundary Scan Express Mode configuration 4 Device Logic Cells Max System Gates Typical Gate Range (Logic and RAM)* CLB Matrix Total CLBs Number of Flip-Flops Max. Available User I/O XCS05 & XCS05XL 238 5,000 2,000-5,000 10 x 10 100 360 77 XCS10 & XCS10XL 466 10,000 3,000-10,000 14 x 14 196 616 112 XCS20 & XCS20XL 950 20,000 7,000-20,000 20 x 20 400 1,120 160 XCS30 & XCS30XL 1368 30,000 10,000-30,000 24 x 24 576 1,536 192 XCS40 & XCS40XL 1862 40,000 13,000-40,000 28 x 28 784 2,016 205 * Max values of Typical Gate Range include 20-30% of CLBs used as RAM. January 6, 1999 (Version 1.4) 4-3

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity styrkrets is port ( clk : in std_logic; ventil_out : out std_logic_vector(18 downto 0); fifo_data : in std_logic_vector(7 downto 0); fifo_clk : out std_logic; fifo_rst : out std_logic; fifo_re : buffer std_logic; fifo_ef : in std_logic; pp_control : in std_logic_vector(1 downto 0); pp_status : out std_logic_vector(4 downto 0); pp_clk : in std_logic; led : out std_logic_vector(7 downto 0); rst : in std_logic; ad_data : in std_logic_vector(7 downto 0); ad_rd : out std_logic; ad_int : in std_logic; foto1 : in std_logic_vector(18 downto 0); foto2 : in std_logic_vector(18 downto 0) ); end styrkrets; architecture styrkrets_arch of styrkrets is signal frame : std_logic_vector(23 downto 0); signal frame_cnt : integer range 0 to 8; signal frame_bit : std_logic_vector(18 downto 0); signal frame_index : integer range 0 to 3; signal ra : integer range 0 to 76; type minne is array(18 downto 0) of integer range 0 to 255; signal vt_cnt,vt,vt0 : minne; type fb is array(2 downto 0) of std_logic_vector(7 downto 0); signal frame_buff : fb; signal fifo_clk_cnt : integer range 0 to 2000; signal presure_data : std_logic_vector(7 downto 0); type memory is array(18 downto 0) of std_logic_vector(7 downto 0); type tabellminne is array(38 downto 0) of std_logic_vector(7 downto 0); signal presure_mem : std_logic_vector(7 downto 0); signal speed_mem, speed_cnt : memory; signal speed_clk_cnt : integer range 0 to 124;

signal speed_clk : std_logic; signal ad_rd_cnt : integer range 0 to 2005; signal pp_clk_det : std_logic_vector(1 downto 0); type memory_4 is array( 39 downto 0) of std_logic_vector(3 downto 0); signal mem_4 : memory_4; signal vt_clk_cnt : integer range 0 to 2000; signal init : bit; signal presure : integer range 0 to 255; signal vt_debug : integer range 0 to 255; signal vt_tmp : std_logic_vector(7 downto 0); signal ventiltid : std_logic_vector(7 downto 0); signal tryck : std_logic_vector(7 downto 0); signal gvt : integer range 0 to 255; signal gvt_debug : std_logic_vector(7 downto 0); signal fifo_ef_det : std_logic_vector(1 downto 0); signal ivt : tabellminne; signal ivt_index : integer range 0 to 39; signal ivt_cnt : integer range 0 to 7; signal p_measure_time : integer range 0 to 67; constant vt0_start : integer:=248; constant vt_start : integer:=50; signal regler_vt : integer range 0 to 255; constant speed : integer:=102; constant kvarts_ms : integer:=1000; constant halv_ms : integer:=2000; constant ms : integer:=4000; constant vt_min : integer:=68; constant vt_max : integer:=255; constant delta_vt : integer:=2; begin process (clk) begin if (clk = '1' and clk'event ) then -- startvarden--------------------------- if (rst='1' or init='0') then init<='1'; fifo_rst<='0'; ra<=0; vt(0)<=vt_min; vt(1)<=vt_min; vt(2)<=vt_min; vt(3)<=vt_min; vt(4)<=vt_min;

vt(5)<=vt_min; vt(6)<=vt_min; vt(7)<=vt_min; vt(8)<=vt_min; vt(9)<=vt_min; vt(10)<=vt_min; vt(11)<=vt_min; vt(12)<=vt_min; vt(13)<=vt_min; vt(14)<=vt_min; vt(15)<=vt_min; vt(16)<=vt_min; vt(17)<=vt_min; vt(18)<=vt_min; regler_vt<=0; fifo_rst<='1'; --ventiltids klocka-------------------------------- if vt_clk_cnt=halv_ms then vt_clk_cnt<=0; vt_clk_cnt<=vt_clk_cnt+1; --frame clock------------------------------------ if vt_clk_cnt=0 then frame_cnt<=frame_cnt+1; if frame_cnt=8 then frame_cnt<=0; --speed clock------------------------------------ if speed_clk_cnt<62 then speed_clk<='1'; speed_clk<='0'; if speed_clk_cnt=124 then speed_clk_cnt<=0; speed_clk_cnt<=speed_clk_cnt+1;

-- fifo clock-------------------------------------------------------- if fifo_clk_cnt<1000 then fifo_clk<='0'; fifo_clk<='1'; if fifo_clk_cnt=2000 then fifo_ef_det<=fifo_ef_det(0)&fifo_ef; fifo_clk_cnt<=0; fifo_clk_cnt<=fifo_clk_cnt+1; -- read frames from fifo--------------------------------------------- if pp_control="00" then if (fifo_re='0' and fifo_clk_cnt=1500) then frame_buff(frame_index) <=fifo_data; frame_index<=frame_index+1; if (fifo_ef_det="11" and frame_cnt=2) then fifo_clk<='0'; fifo_clk_cnt<=0; fifo_re<='0'; frame_index<=0; if frame_index=3 then fifo_re<='1'; --read vt from fifo-------------------------------------------------- if pp_control="01" then if (frame_cnt=2 and vt_clk_cnt=0) then ivt_cnt<=ivt_cnt+1; if ivt_cnt=7 then ivt_cnt<=0; if (fifo_re='0' and fifo_clk_cnt=1500) then ivt(ivt_index)<=fifo_data;

ivt_index<=ivt_index+1; if (fifo_ef_det="11" and ivt_cnt=4) then fifo_clk<='0'; fifo_clk_cnt<=0; fifo_re<='0'; ivt_index<=0; if ivt_index=38 then fifo_re<='1'; -- tryck-data fran ADC--------------------------------------------- if (ad_rd_cnt>200 and ad_rd_cnt<204 and (ad_int='0' or init='0')) then presure_mem<=ad_data; ad_rd<='0'; ad_rd<='1'; if ad_rd_cnt=205 then ad_rd_cnt<=0; ad_rd_cnt<=ad_rd_cnt+1; -- skicka hastigheter och tryck till datorn--------------------------- if pp_control="11" then ra<=0; if (pp_clk_det="01" and pp_control="10") then pp_status(3 downto 0)<=mem_4(ra); ra<=ra+1; pp_clk_det<=pp_clk_det(0)&pp_clk; if ra>=40 then

ra<=0; --reglering-------------------------------------- case presure_mem is when "01100010" => gvt <=conv_integer(ivt(0)); --98 when "01100011"=> gvt <=conv_integer(ivt(1)); --99 when "01100100" => gvt <=conv_integer(ivt(2)); --100 when "01100101" => gvt <=conv_integer(ivt(3)); --101 when "01100110" => gvt <=conv_integer(ivt(4)); --102 when "01100111" => gvt <=conv_integer(ivt(5)); --103 when "01101000" => gvt <=conv_integer(ivt(6)); --104 when "01101001" => gvt <=conv_integer(ivt(7)); --105 when "01101010" => gvt <=conv_integer(ivt(8)); --106 when "01101011" => gvt <=conv_integer(ivt(9)); --107 when "01101100" => gvt <=conv_integer(ivt(10)); --108 when "01101101" => gvt <=conv_integer(ivt(11)); --109 when "01101110" => gvt <=conv_integer(ivt(12)); --110 when "01101111" => gvt <=conv_integer(ivt(13)); --111 when "01110000" => gvt <=conv_integer(ivt(14)); --112 when "01110001" => gvt <=conv_integer(ivt(15)); --113 when "01110010" => gvt <=conv_integer(ivt(16)); --114 when "01110011" => gvt <=conv_integer(ivt(17)); --115 when others => null; end case;

if (vt_cnt(0)=p_measure_time and vt_clk_cnt=8) then vt(0)<=gvt+conv_integer(ivt(18)); tryck<=presure_mem; if (vt_cnt(1)=p_measure_time and vt_clk_cnt=8) then vt(1)<=gvt + conv_integer(ivt(19)); if (vt_cnt(2)=p_measure_time and vt_clk_cnt=8) then vt(2)<=gvt+conv_integer(ivt(20)); if (vt_cnt(3)=p_measure_time and vt_clk_cnt=8) then vt(3)<=gvt+conv_integer(ivt(21)); if (vt_cnt(4)=p_measure_time and vt_clk_cnt=8) then vt(4)<=gvt+conv_integer(ivt(22)); if (vt_cnt(5)=p_measure_time and vt_clk_cnt=8) then vt(5)<=gvt+conv_integer(ivt(23)); if (vt_cnt(6)=p_measure_time and vt_clk_cnt=8) then vt(6)<=gvt+conv_integer(ivt(24)); if (vt_cnt(7)=p_measure_time and vt_clk_cnt=8) then vt(7)<=gvt+conv_integer(ivt(25)); if (vt_cnt(8)=p_measure_time and vt_clk_cnt=8) then vt(8)<=gvt+conv_integer(ivt(26)); if (vt_cnt(9)=p_measure_time and vt_clk_cnt=8) then vt(9)<=gvt+conv_integer(ivt(27)); then if (vt_cnt(10)=p_measure_time and vt_clk_cnt=8) vt(10)<=gvt+conv_integer(ivt(28));

then then then then then then then then if (vt_cnt(11)=p_measure_time and vt_clk_cnt=8) vt(11)<=gvt+conv_integer(ivt(29)); if (vt_cnt(12)=p_measure_time and vt_clk_cnt=8) vt(12)<=gvt+conv_integer(ivt(30)); if (vt_cnt(13)=p_measure_time and vt_clk_cnt=8) vt(13)<=gvt+conv_integer(ivt(31)); if (vt_cnt(14)=p_measure_time and vt_clk_cnt=8) vt(14)<=gvt+conv_integer(ivt(32)); if (vt_cnt(15)=p_measure_time and vt_clk_cnt=8) vt(15)<=gvt+conv_integer(ivt(33)); if (vt_cnt(16)=p_measure_time and vt_clk_cnt=8) vt(16)<=gvt+conv_integer(ivt(34)); if (vt_cnt(17)=p_measure_time and vt_clk_cnt=8) vt(17)<=gvt+conv_integer(ivt(35)); if (vt_cnt(18)=p_measure_time and vt_clk_cnt=8) vt(18)<=gvt+conv_integer(ivt(36)); --ventilsignaler---------------------------------- if (vt_cnt(0)<vt(0) and ((frame_bit(0)='1' and frame_cnt=0) or vt_cnt(0)/=0)) then if (vt_clk_cnt=0 or vt_cnt(0)=0) then vt_cnt(0)<=vt_cnt(0)+1;

ventil_out(0)<='1'; ventil_out(0)<='0'; vt_cnt(0)<=0; frame_bit(0)<=frame(0); if (vt_cnt(1)<vt(1) and ((frame_bit(1)='1' and frame_cnt=0) or vt_cnt(1)/=0)) then if (vt_clk_cnt=0 or vt_cnt(1)=0) then vt_cnt(1)<=vt_cnt(1)+1; ventil_out(1)<='1'; ventil_out(1)<='0'; vt_cnt(1)<=0; frame_bit(1)<=frame(1); if (vt_cnt(2)<vt(2) and ((frame_bit(2)='1' and frame_cnt=0) or vt_cnt(2)/=0)) then if (vt_clk_cnt=0 or vt_cnt(2)=0) then vt_cnt(2)<=vt_cnt(2)+1; ventil_out(2)<='1'; ventil_out(2)<='0'; vt_cnt(2)<=0; frame_bit(2)<=frame(2); if (vt_cnt(3)<vt(3) and ((frame_bit(3)='1' and frame_cnt=0) or vt_cnt(3)/=0)) then if (vt_clk_cnt=0 or vt_cnt(3)=0) then vt_cnt(3)<=vt_cnt(3)+1; ventil_out(3)<='1'; ventil_out(3)<='0'; vt_cnt(3)<=0; frame_bit(3)<=frame(3); if (vt_cnt(4)<vt(4) and ((frame_bit(4)='1' and frame_cnt=0) or vt_cnt(4)/=0)) then if (vt_clk_cnt=0 or vt_cnt(4)=0) then

vt_cnt(4)<=vt_cnt(4)+1; ventil_out(4)<='1'; ventil_out(4)<='0'; vt_cnt(4)<=0; frame_bit(4)<=frame(4); if (vt_cnt(5)<vt(5) and ((frame_bit(5)='1' and frame_cnt=0) or vt_cnt(5)/=0)) then if (vt_clk_cnt=0 or vt_cnt(5)=0) then vt_cnt(5)<=vt_cnt(5)+1; ventil_out(5)<='1'; ventil_out(5)<='0'; vt_cnt(5)<=0; frame_bit(5)<=frame(5); if (vt_cnt(6)<vt(6) and ((frame_bit(6)='1' and frame_cnt=0) or vt_cnt(6)/=0)) then if (vt_clk_cnt=0 or vt_cnt(6)=0) then vt_cnt(6)<=vt_cnt(6)+1; ventil_out(6)<='1'; ventil_out(6)<='0'; vt_cnt(6)<=0; frame_bit(6)<=frame(6); if (vt_cnt(7)<vt(7) and ((frame_bit(7)='1' and frame_cnt=0) or vt_cnt(7)/=0)) then if (vt_clk_cnt=0 or vt_cnt(7)=0) then vt_cnt(7)<=vt_cnt(7)+1; ventil_out(7)<='1'; ventil_out(7)<='0'; vt_cnt(7)<=0; frame_bit(7)<=frame(7); if (vt_cnt(8)<vt(8) and ((frame_bit(8)='1' and frame_cnt=0) or vt_cnt(8)/=0)) then

if (vt_clk_cnt=0 or vt_cnt(8)=0) then vt_cnt(8)<=vt_cnt(8)+1; ventil_out(8)<='1'; ventil_out(8)<='0'; vt_cnt(8)<=0; frame_bit(8)<=frame(8); if (vt_cnt(9)<vt(9) and ((frame_bit(9)='1' and frame_cnt=0) or vt_cnt(9)/=0)) then if (vt_clk_cnt=0 or vt_cnt(9)=0) then vt_cnt(9)<=vt_cnt(9)+1; ventil_out(9)<='1'; ventil_out(9)<='0'; vt_cnt(9)<=0; frame_bit(9)<=frame(9); if (vt_cnt(10)<vt(10) and ((frame_bit(10)='1' and frame_cnt=0) or vt_cnt(10)/=0)) then if (vt_clk_cnt=0 or vt_cnt(10)=0) then vt_cnt(10)<=vt_cnt(10)+1; ventil_out(10)<='1'; ventil_out(10)<='0'; vt_cnt(10)<=0; frame_bit(10)<=frame(10); if (vt_cnt(11)<vt(11) and ((frame_bit(11)='1' and frame_cnt=0) or vt_cnt(11)/=0)) then if (vt_clk_cnt=0 or vt_cnt(11)=0) then vt_cnt(11)<=vt_cnt(11)+1; ventil_out(11)<='1'; ventil_out(11)<='0'; vt_cnt(11)<=0; frame_bit(11)<=frame(11); if (vt_cnt(12)<vt(12) and ((frame_bit(12)='1' and

frame_cnt=0) or vt_cnt(12)/=0)) then if (vt_clk_cnt=0 or vt_cnt(12)=0) then vt_cnt(12)<=vt_cnt(12)+1; ventil_out(12)<='1'; ventil_out(12)<='0'; vt_cnt(12)<=0; frame_bit(12)<=frame(12); if (vt_cnt(13)<vt(13) and ((frame_bit(13)='1' and frame_cnt=0) or vt_cnt(13)/=0)) then if (vt_clk_cnt=0 or vt_cnt(13)=0) then vt_cnt(13)<=vt_cnt(13)+1; ventil_out(13)<='1'; ventil_out(13)<='0'; vt_cnt(13)<=0; frame_bit(13)<=frame(13); if (vt_cnt(14)<vt(14) and ((frame_bit(14)='1' and frame_cnt=0) or vt_cnt(14)/=0)) then if (vt_clk_cnt=0 or vt_cnt(14)=0) then vt_cnt(14)<=vt_cnt(14)+1; ventil_out(14)<='1'; ventil_out(14)<='0'; vt_cnt(14)<=0; frame_bit(14)<=frame(14); if (vt_cnt(15)<vt(15) and ((frame_bit(15)='1' and frame_cnt=0) or vt_cnt(15)/=0)) then if (vt_clk_cnt=0 or vt_cnt(15)=0) then vt_cnt(15)<=vt_cnt(15)+1; ventil_out(15)<='1'; ventil_out(15)<='0'; vt_cnt(15)<=0; frame_bit(15)<=frame(15);

if (vt_cnt(16)<vt(16) and ((frame_bit(16)='1' and frame_cnt=0) or vt_cnt(16)/=0)) then if (vt_clk_cnt=0 or vt_cnt(16)=0) then vt_cnt(16)<=vt_cnt(16)+1; ventil_out(16)<='1'; ventil_out(16)<='0'; vt_cnt(16)<=0; frame_bit(16)<=frame(16); if (vt_cnt(17)<vt(17) and ((frame_bit(17)='1' and frame_cnt=0) or vt_cnt(17)/=0)) then if (vt_clk_cnt=0 or vt_cnt(17)=0) then vt_cnt(17)<=vt_cnt(17)+1; ventil_out(17)<='1'; ventil_out(17)<='0'; vt_cnt(17)<=0; frame_bit(17)<=frame(17); if (vt_cnt(18)<vt(18) and ((frame_bit(18)='1' and frame_cnt=0) or vt_cnt(18)/=0)) then if (vt_clk_cnt=0 or vt_cnt(18)=0) then vt_cnt(18)<=vt_cnt(18)+1; ventil_out(18)<='1'; ventil_out(18)<='0'; vt_cnt(18)<=0; frame_bit(18)<=frame(18); -- hastigheter----------------------------------------------------------------- if (foto2(0)='1' and (foto1(0)='0' or speed_cnt(0)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(0)<=speed_cnt(0)+1; speed_mem(0)<=speed_cnt(0); speed_cnt(0)<="00000000";

if (foto2(1)='1' and (foto1(1)='0' or speed_cnt(1)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(1)<=speed_cnt(1)+1; speed_mem(1)<=speed_cnt(1); speed_cnt(1)<="00000000"; if (foto2(2)='1' and (foto1(2)='0' or speed_cnt(2)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(2)<=speed_cnt(2)+1; speed_mem(2)<=speed_cnt(2); speed_cnt(2)<="00000000"; if (foto2(3)='1' and (foto1(3)='0' or speed_cnt(3)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(3)<=speed_cnt(3)+1; speed_mem(3)<=speed_cnt(3); speed_cnt(3)<="00000000"; if (foto2(4)='1' and (foto1(4)='0' or speed_cnt(4)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(4)<=speed_cnt(4)+1; speed_mem(4)<=speed_cnt(4); speed_cnt(4)<="00000000";

if (foto2(5)='1' and (foto1(5)='0' or speed_cnt(5)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(5)<=speed_cnt(5)+1; speed_mem(5)<=speed_cnt(5); speed_cnt(5)<="00000000"; if (foto2(6)='1' and (foto1(6)='0' or speed_cnt(6)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(6)<=speed_cnt(6)+1; speed_mem(6)<=speed_cnt(6); speed_cnt(6)<="00000000"; if (foto2(7)='1' and (foto1(7)='0' or speed_cnt(7)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(7)<=speed_cnt(7)+1; speed_mem(7)<=speed_cnt(7); speed_cnt(7)<="00000000"; if (foto2(8)='1' and (foto1(8)='0' or speed_cnt(8)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(8)<=speed_cnt(8)+1; speed_mem(8)<=speed_cnt(8); speed_cnt(8)<="00000000"; if (foto2(9)='1' and (foto1(9)='0' or speed_cnt(9)/ ="00000000")) then if speed_clk_cnt=0 then

speed_cnt(9)<=speed_cnt(9)+1; speed_mem(9)<=speed_cnt(9); speed_cnt(9)<="00000000"; if (foto2(10)='1' and (foto1(10)='0' or speed_cnt(10)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(10)<=speed_cnt(10)+1; speed_mem(10)<=speed_cnt(10); speed_cnt(10)<="00000000"; if (foto2(11)='1' and (foto1(11)='0' or speed_cnt(11)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(11)<=speed_cnt(11)+1; speed_mem(11)<=speed_cnt(11); speed_cnt(11)<="00000000"; if (foto2(12)='1' and (foto1(12)='0' or speed_cnt(12)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(12)<=speed_cnt(12)+1; speed_mem(12)<=speed_cnt(12); speed_cnt(12)<="00000000"; if (foto2(13)='1' and (foto1(13)='0' or speed_cnt(13)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(13)<=speed_cnt(13)+1; speed_mem(13)<=speed_cnt(13);

speed_cnt(13)<="00000000"; if (foto2(14)='1' and (foto1(14)='0' or speed_cnt(14)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(14)<=speed_cnt(14)+1; speed_mem(14)<=speed_cnt(14); speed_cnt(14)<="00000000"; if (foto2(15)='1' and (foto1(15)='0' or speed_cnt(15)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(15)<=speed_cnt(15)+1; speed_mem(15)<=speed_cnt(15); speed_cnt(15)<="00000000"; if (foto2(16)='1' and (foto1(16)='0' or speed_cnt(16)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(16)<=speed_cnt(16)+1; speed_mem(16)<=speed_cnt(16); speed_cnt(16)<="00000000"; if (foto2(17)='1' and (foto1(17)='0' or speed_cnt(17)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(17)<=speed_cnt(17)+1; speed_mem(17)<=speed_cnt(17); speed_cnt(17)<="00000000";

if (foto2(18)='1' and (foto1(18)='0' or speed_cnt(18)/ ="00000000")) then if speed_clk_cnt=0 then speed_cnt(18)<=speed_cnt(18)+1; speed_mem(18)<=speed_cnt(18); speed_cnt(18)<="00000000"; --------------------------------------------------------------------------------- end process; presure<=conv_integer(presure_mem); ventiltid<=conv_std_logic_vector(vt(18),8); frame<=frame_buff(2)&frame_buff(1)&frame_buff(0); p_measure_time<=conv_integer(ivt(37)); led<=ventiltid; mem_4(0)<=speed_mem(0)(3 downto 0); mem_4(1)<=speed_mem(0)(7 downto 4); mem_4(2)<=ventiltid(3 downto 0); mem_4(3)<=ventiltid(7 downto 4); mem_4(4)<=presure_mem(3 downto 0); mem_4(5)<=presure_mem(7 downto 4); mem_4(6)<=tryck(3 downto 0); mem_4(7)<=tryck(7 downto 4); end styrkrets_arch;

# Alla tider anges i halva millisekunder # Ventiltid Tryck 102 # 98 100 # 99 94 # 100 85 # 101 82 # 102 81 # 103 80 # 104 78 # 105 76 # 106 75 # 107 74 # 108 73 # 109 72 # 110 63 # 111 60 # 112 59 # 113 58 # 114 57 # 115 # Kompensation för skillnader mellan kanonerna # Tidstillägg Kanon 8 # 1 7 # 2 0 # 3 0 # 4 6 # 5 14 # 6 4 # 7 8 # 8 10 # 9 4 # 10 10 # 11 4 # 12 10 # 13 9 # 14 7 # 15 11 # 16 5 # 17 8 # 18 4 # 19 62 # Tid innan trycket mäts

EXPO 2000 HANNOVER 1.6 30.10 2000 Temat för den svenska paviljongen vid världsutställningen i Hannover sommaren 2000 är Kunskapens broar. Paviljongen är ritad av Greger Dahlström på FOJAB arkitekter i Malmö. Den präglas av stilren enkelhet, en svart ask man ena långsidan täckt i glas. Paviljongen kommer en bred presentation att göras av svensk design, mat och musik. Samarbeten pågår mellan Konstfack, KTH och Karolinska Institutet. Man räknar med 40 miljoner besökare av dessa tror man att ca 2 miljoner hittar till den svenska paviljongen. Statens konstråd har fått i uppgift att ta fram den konstnärliga huvudattraktionen, en illustration/kommentar till brotemat i paviljongens tak. Konstnären Christian Partos konstruerar tillsammans med formgivaren/uppfinnaren Peter Camitz en bågform som sträcker sig mellan de båda kortväggarna (ca 40 meter). Bågen består av kulor som skjuts ut från ena kortväggen och fångas upp vid den andra. Kulorna skjuts ut ur ett stort antal (200-400) eldrör. Utskjutningshastigheten är den samma men utskjutningstiderna varierar. På detta sätt kan man skapa rörliga två och tredimentionella bilder som flyttar sig genom luften, över betraktarens huvuden. Jämför flyttfåglarna som i V-form passerar förbi under hösten. Naturligtvis ett komplext och komplicerat projekt, som behöver spaltas upp i olika delar. Den mekaniska delen av projektet är under utveckling, vad vi skulle behöva hjälp med är styrsystemet. Systemet ska på ett enkelt sätt kunna styras från en dator. Man ska kunna rita händrna i luften på dataskärmen, systemet ska sedan översätta det ritade till signaler för skjutning. Utskjutningen görs elektroniskt, systemet ska innehålla allt från tangentbord till den signal som skjuter ut kulan. Tiden är knapp, sista maj ska allt fungera. Utställningen pågår i fem månader. Under den tiden måste systemet fungera. För att garantera detta hoppas vi kunna ordna någon form av projektanställning för två personer under utställningstiden. De ansvarar då för att hela systemet, även den mekaniska delen fungerar. För upplysningar kontakta Martin Wickström, projektledare vid Statens konstråd 08-30 59 65 alt 070-415 69 80 Christian Partos, konstnär 08-645 76 07 alt 073-654 81 07

2001-02-07 00:21:36 f=0.58 C:\Program\EAGLE\examples\exjobb.sch (Sheet: 1/1)