Myös korttimaksu toimii

LinuxCNC über-I/O

Aloittaja Kremmen, 04.02.14 - klo:09:18

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

Kremmen

Huomenta kaikki lastuajat,

Olen tässä iltapuhteiksi työstellyt ikuisuusprojekti-marsun sähkökuvia ja sekin homma alkaa olla voiton puolella. Tämä projektihan ei siis perustu tarpeeseen työstää metallia vaan harrastaa koneen rakentamista :) :) No, ehkä sillä lähitulevaisuudessa työstetäänkin, mutta asiaan:
Käväisin taas vähästä aikaa pläräämässä LinuxCNC:n wikiä, kun se on marsun ohjaussysteemi. Mulla on marsussa Mesan FPGA-kortti generoimassa servosignaalit ja yleistä I/O:ta. Haasteena on vaan, että I/O käy vähiin; marsussa on aika paljon ohjattavia leluja kun siinä on oma hydraulikoneikko, työkalunvaihtaja, 4-5 voitelupumppua eri kohteisiin, 2-vaihteinen kara erillisellä lukituksella ja tietty muljun, sumutuksen ja ilmapuhalluksen ohjaukset, sekvensseripoljin  ja varmaan vielä muutakin minkä tässä unohdan. Kaikkea pitää ohjata sekä käsin että automaattisesti, tietty. Ja kun kaikkea ihminen haluaa niin minä haluan marsuun kunnolliset fyysiset ohjainnamikat niinkuin "oikeissa" koneissa on, eikä mitään PC:n kuvaruudun virtuaalinappeja. Suunnittelin jo hommata toisen FPGA-kortin ja sille bobin, mutta törmäsinpä sattumalta tähän: http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Shift_Register_Port_Expander. Tuohan on loistava kyhäelmä, sillä saa jumalattomasti I/O:ta edullisesti. Äkkiä laskien rinnakkaisportissa on 12 lähtösignaalia ja 5 tulosignaalia. Kun I/O-laajennin tarvii 3 lähtöä ja 1 tulon niin yhteen porttiin saa 4 laajenninta, eli 4*16 = 64 I/O-signaalia! Noistahan rakentaa ihan mitä vaan. Tavalliseen PC:hen saa ainakin 2 rinnakkaisporttia joten vaikka stepperien tms pulssitukset onnistuu toisella ja I/O toisella kortilla.

Meinaan lähteä suorilta rakentamaan tuohon konseptiin sopivaa I/O-korttia ja sovitinta jolla käytettävät rinnakkaisportin I/O-pinnit ohjataan I/O-korteille. Eli max 4 kpl 16 in / 16 out -korttia per portti ja niiden eteen valitsin jolla signalointi ohjataan oikealle I/O-kortille.
Onko foorumilla kiinnostuneita tällaisesta? Nyt on mahdollisuus vaikuttaa asiaan ja ilmaista kiinnostuksensa. Oma tämänhetkinen ajatus on rakennella muutama erilainen I/O-adapteri vaikkapa yleiseen signalointiin (5-24V optoerotettu); 230VAC-ohjauksiin releillä (lähdöt) ja optoilla(tulot); mahdollisesti (ja jopa luultavasti) extenderi eli RS485-ajureilla tms toteutettu "jatkokaapeli" jolla I/O-adapteri voidaan viedä kauemmas PC:stä, vaikka toiselle puolelle konetta. Itse ainakin tarvitsen sellaista - marsu kun on aika iso.
Aikataulu tälle olisi "kevään kuluessa" eli ei ihan tarkkaan osaa vielä sanoa, mutta mitään suurta mysteeriä tuossa ei ole.
Liitteenä kuva joka saattaa selventää, tai sitten ei...

Elikkä tuommoinen on lähdössä liikkeelle, kuka haluaa hypätä kelkkaan niin mainitkoon asiasta. Periaate on sama kuin meikän muissakin projekteissa, eli omakustannushinnalla liikkeellä, ja vehkeet rakennetaan laatukomponenteista asiaa kumminkaan liioittelematta. Ei näistä mitään hirmu hintaisia kapineita ole tulossa, tarvittava kama on lopulta kohtuullisen edullista.
Kaikki kommentit on tervetulleita ja toivottuja ihan siitä riippumatta haluatteko lähteä mukaan. Itse mietin mm. sellaista, että pitäisikö tehdä 5-24V logiikalle optio jossa on galvaanisesti erotettu apujännitteen syöttö (siis niin, että signalointi on erillään mahdollisesti tarvittavasta apujännitteestä). Varmaan kohta mietin montaa muutakin juttua mutta palataa niihin jos/kun asia etenee.
Nothing sings like a kilovolt
Dr W. Bishop

pave

No terve Kremmen!
Tässä taitaa olla johdatusta. Ostin nimittäin pienen Terco-jyrsimen, jossa Linuxcnc valmiiksi asennettuna ja tämä ohjaa siis kolmea stepperiä. Laitoin tähän kiinankaran tamulla. Tamua ohjailen ensin ihan sen omasta nippeleistä, mutta aloin jo miettimään, millaisen kortin sitä tilaisi.
Lisäksi olen miettinyt josko tulevaisuudessa laittaisi kaksi akselia lisää, olis hyllyssä geckot ja servot valmiina. Eikös tällä sun kortilla pystyis ohjaamaan viittä akselia ja karan tamua? Jos kyllä niin kiinnostaa ja kiirettä ei tosiaankaan ole.

Kremmen

Sen verran pitää olla varovainen, että tämän systeemin kautta ei varmaan kannata yrittää stepperien tai servojen pulssitusta. Jos nyt luetun ymmärtäminen toimi niin LinuxCNC:n wiki-sivuilla puhuttiin noin kilohertsin kellotustaajuudesta, eli se jaettuna karkeasti 16:lla (I/O-kanavien määrä) olisi siinä 62 Hz. Riittää kyllä yleiskäyttöisen I/O:n päivitystahdiksi, mutta eihän tuolla taajuudella voi steppereitä askeltaa. Konehan olisi hidas kuin jääkauden eteneminen...
Yhdestä LPT-portista saa 4 pulssikanavaa ulos, sitten loppuu pinnit. Jos ollaan oikein viekkaita niin toisesta LPT-portista voi napata pari signaalia niin, että saa vielä viidennen pulssikanavan ja loput menisi sitten I/O-käyttöön. Jos tämä oli ajatus niin voin ottaa sen mietintään, mutta pikkasen mutkistaa systeemiä.
Vaatisiko tamu analogiohjesignaalin vai pulssituksen? Pulssit menisi samalla ajatuksella, mutta analogsignaali tarttisi jonkun pwm- tai pdm-suodattimen. Niitäkin voidaan kyhätä.
Odotellaan vähän josko tulee muitakin kommentteja ja edetään sitten ajatuksessa.
Nothing sings like a kilovolt
Dr W. Bishop

pave


Kremmen

Kun LinuxCNC:ssä voi aika vapaasti ohjata noita signaaleja I/O-laitteiden loogisiin pinneihin, niin tämmöinen ajatus vaikuttaisi toimivalta ratkaisulta:
- konseptiin mukaan LPT-porttiin laitetaan kiinni splitteri, joka ohjaa sarja-I/O:n kanavat 4 Ethernet-kaapeliin. Kuhunkin tulee differentiaalisignaalina lähjtevä ja tuleva datakanava, siirtokello ja siirtolatchien aktivointipulssi. Tämän lisäksi 3 erillistä johdinta +12V, +5V ja COMmon. Viimeksimainitut otetaan PC:ltä vakiomallisen levypoweriliittimen kautta.
Mitä tässä nyt tapahtuu on, että efektiivisesti LPT-portin 3 lähtöä ja 1 tulo on kytketty kuhunkin splitattuun kanavaan. Ei mikään luonnonlaki määrää, että kanavassa pitää olla juuri sarja-I/O-laite perässä.

Niinpä tehdään kanavaan sopiva analogivahvistin joka ottaa sisään pwm-signaalia ja muuntaa sen 0 - 10V analogisignaaliksi. Kaksi muuta lähtösignaalia voivat olla haluttuja ohjaussignaaleja, esim enable+suunta tai käynti etteen/käynti taqakse. Ihan sen mukaan mitä VFD odottaa saavansa. Samoin se ainoa tulokanava voidaan käyttää haluttuun signaaliin, vaikka "at speed" tai alarm tai mitä nyt vaan.

Toinen vaihtoehto on hoitaa kaikki tilasignalointi muiden sarja-I/O-adapterien kautta ja varata yksi kanava kokonaan analogilähdöille. Tällöin niitä saisi samalle kortille 3 kpl kun ottaa kaikki lähtökanavat käyttöön.

Miltäs tuo kuullostaisi?
Nothing sings like a kilovolt
Dr W. Bishop

porepe

Mistään mitään tiedä mutta pakko kysyä mikset käytä modbussia? Ladderilla suora tuki käsittääkseni. Ja silloin tuo io lauta kävis vaikka mihin ;D
Petri Junnila
Mynämäki

Kremmen

No miksipä ei, joskin Modbus on huomattavasti monimutkaisempi - tämä serIO on ääliöyksinkertainen. Jos mä vähän avaan:

-Modbus on "aito" dataväylä joka määrittelee sekä fyysisen kerroksen (eli käytännössä RS485 tai sinne päin) että linkkikerroksen saantimenetelmineen. Tätä varten kaikilla modbus-nodeilla pitää olla oma osoite jonka ne tunnistavat ja jota master käyttää kun sillä on asiaa nodelle. Väylällä noudatetaan määriteltyä saantimenetelmää mikä käytännössä tarkoittaa, että vain yksi node kerrallaan voi puhua väylään.
-Sanomat ovat tyypitettyjä ja hyötykuorma on joko teksti- tai binäärimuotoista dataa. Datalle on siten tietenkin vaihtelevia keskenään yhteensopimattomia esitysmuotoja
-Modbus-väylä voidaan toteuttaa Ethernetillä tai sarjakanavalla. Ainakaan sarjakanavalla ei päästä lähellekään sellaisiin vauhteihin, että esim servon/tamun pwm-ohjaus olisi käytännössä mahdollista.
-Modbus on aikanaan suunniteltu ohjelmoitavien logiikoiden yhteyskanavaksi ja semmoiseen se sopii, jos/kun signaloinnin ajastusvaatimukset ei ole nuukia. Rele-I/O:ta modbussillakin pystyy tottakai hoitamaan hienosti.

Mutta kun sen saman pystyy tekemään tällä serIO-"protokollalla" yhtä hyvin ja paremmin ilman mitään overheadia. On totta, että modbussilla voi tehdä suoraviivaisesti tuhannen I/O-pisteen systeemin, mutta kun ei tässä olla sellaiseen pyrkimässä. Eli ei ole vaatimus. SerIO on suoraviivainen - ei mitään väylien konfigurointeja eikä mitään sanomaliikenteen törmäystenhallintaa eikä ajastusongelmia - ei mitään sellaista. Valitset vaan HAL IO:ssa pinnin johon/josta haluat kaman ulos/sisään ja kun pinni on kiinnitetty oikean kanavan oikeaan lokeroon niin se on siinä. Helppo käsittää ja helppo toteuttaa.

Splitterikortti ei tee mitään muuta kuin ottaa yhden LPT-portin fyysisen pinnin ja muuttaa sen lähteväksi / tulevaksi differentiaalisignaaliksi joka kestää häiriöitä. Oletusarvoisesti signaalit jaetaan tasan 4 kanavaan, mutta splittauksesta voi tehdä eri versioita helposti. Toisessa päässä voi olla joko serIO-käytännön mukainen I/O-laite tai kuten edellä maalailin, niin jotain ihan muuta. Kuten nyt vaikkapa pwm-ohjattu analogilähtö. LinuxCNC:n päässä ei edelleenkään tarvitse kuin ohjata pwm-signaali haluttuun LPT-portin pinniin niin sieltä se tulee kanavasta ulos toisessa päässä. RS485-signalointi vaan mahdollistaa pwm-signaalin kuskaamisen kauemmaksikin häiriövapaasti. (Olen juuri piirtämässä input-tasoriippumatonta pwm-demodulaattori/vahvistinta josta näyttää tulevan aika hyvä. Käytän sitä varmaan itsekin vielä ja voisi olla pavelle ja muillekin tarvitsijoille jotain iloa siitä).

Nämä on minun syitäni miksi suosin tässä yhteydessä simppeliä ratkaisua. Ei se mitenkään poissulje, etteikö modbussia voi ajatella myös, mutta mennään siihen jos jollakulla on aitoa tarvetta.
Nothing sings like a kilovolt
Dr W. Bishop

porepe

#7
Jo selkes idea... mites noiden io nopeuksien kanssa?

Pistämpä kuitenkin linkin jos joku ei ollut tietoinen.
käy esim tamujen ohjaamiseen...


http://wiki.linuxcnc.org/cgi-bin/wiki.pl?ClassicLadder_Ver_7.124
Petri Junnila
Mynämäki

Kremmen

Lainaus käyttäjältä: porepe - 07.02.14 - klo:12:55
Jo selkes idea... mites noiden io nopeuksien kanssa?

Pistämpä kuitenkin linkin jos joku ei ollut tietoinen.
käy esim tamujen ohjaamiseen...


http://wiki.linuxcnc.org/cgi-bin/wiki.pl?ClassicLadder_Ver_7.124

Modbssin tapauksessa on kaksi i/o-nopeutta: väylän bittinopeus ja tehollinen signalointinopeus (eli kuinka monta bittiä sekunnissa saadaan infoa siirtymään HAL IO:sta toimilaitteelle). Kaikki modbus-laitteet jakavat yhteisen väylän, joten signalointinopeus on enintään väylän tehollinen bittinopeus jaettuna asemien lukumäärällä  keskimääräinen sanomapituus huomioiden. Tosin master voi tietty päättää ketä orjaa suosii että kiireiselle nodelle voi lähettää päivityksiä useammin. Mutta väylän tehollista bittinopeutta ei voi ylittää eikä rehellisesti edes saavuttaa per node jos nodeja on yli yksi. Ja sarjalinjan maksiminopeus on se 155 kbps jonka kaikki nodet jakaa keskenään.
Tuossa serIO:ssa ei ole mitöään erityistä ylärajaa; linjadriverit ja siirtorekisterit kellottaa helposti megahertsejä ja yli, että se on enempi kiinni siitä mitä Linux ja RTAI jaksaa vääntää. Useita kilohertsejä nyt kumminkin, niin että vaikka juuri tuo pwm-ohjaus kyllä onnistuu tällä systeemillä.
Nothing sings like a kilovolt
Dr W. Bishop

porepe

Tänne ainakin yks paletti testattavaksi jahka valmistuu...
Petri Junnila
Mynämäki

Kremmen

Okei :) palaamme asiaan jahka alkaa olla jotain konkreetista käsissä.
Nothing sings like a kilovolt
Dr W. Bishop

Isto

Varmaan riippuu mesa- kortin mallista mutta eiköhän ne kaikki nykyään pysty käyttämään sarjaväylää myös.
Ainakin 5i25 + 7i76/7i77 on käytetty suoraan vain steppigeneraattorit ja enkooderi. Loppu IO menee noiden kahden välillä sarjadatana ja lisäkortilla (7i76/77) on PIC hoitamassa liikenteen ja IO:t ulkomaailmaan.
Mesalta taitaa saada kevyempiäkin sarjakortteja kuin nuo 76/77.

Mutta itse tekeminen on aina plussaa, kerro ihmeessä miten onnistuu.
Taidan kokeilla itsekin koska pikkukaivertimessa ohjaimena on läppäri johon ei saa lisää portteja millään...

Kremmen

Joo varmasti näin ja itsekin käytän Mesan kortteja omassa projektissa. Tässä serialIO:ssa vaan on se hyvä puoli että se ei tarvitse "mitään" sovitinkorttia PC:n päässä. Toki moderneista koneista LPT-portti puuttuu mutta monessa se vielä on ja adapterin saa halvalla.

Tämä projekti on sikäli hyvä, että lopputulos ei ole onnistumisen varassa - tällä samalla tekniikalla olen tehnyt useita kapistuksia, tälläkin foorumilla viimeksi joillekin tutun karan kierroslukumittarin, jossa näytön päivitys toimi samalla periatteella. Kyse on lähinnä siitä koska kerkiää pyöräyttää koko suunnittelu- ja toteutussyklin läpi.
Nothing sings like a kilovolt
Dr W. Bishop

Kremmen

Tämäkin homma etenee. Über-I/O -laajentimen speksit tällä hetkellä:

Alijärjestelmä joka toteuttaa LinuxCNC:n sarjadatakanavaan perustuvan porttilaajentimen.
Kts http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Shift_Register_Port_Expander.

Alijärjestelmään kuuluu ainakin seuraavat osat:

1: Breakout-kortti
2: Digitaali-I/O -laajennin (16 in, 16 out)
3: 3-kanavainen PWM-analogilähtö (0...10V / -10...+10V)


Breakout-kortti jakaa PC:n rinnakkaisportin signaloinnin 4 kanavaan (3 lähtevää signaalia ja 1 tuleva per kanava) joista jokaiseen voidaan kytkeä tällainen laajennin tai jotain aivan muuta.
Breakout-kortin ja laajentimen välinen signalointi on toteutettu differentiaalisilla RS485-linjaohjaimilla joilla saadaan hyvä häiriönsieto suurilla siirtonopeuksilla. Kaapelointina käytetään standardi Cat5 Ethernet-piuhaa ja liittimiä. Kukin laajenninkortti tarvitsee +5V ja +12V apujännitteet. Nämä on ajateltu otettavaksi PC:ltä breakoutille käyttäen standardi levyaseman poweriliitintä. Kullekin lajenninkortille viedään apujännitteet samanlaisiin liittimiin. Breakout-kortin apujännitelähdöt on sulakesuojattu.
Vaihtoehtoiseti apujännitteet voi tuoda muualtakin, kunhan syötöillä on PC:n kanssa yhteinen maataso ja jännitteet on valmiiksi reguloitu +5 ja +12V:iin.

Digitaali-I/O-laajennin
1: Lähdöt:
Kaikki 16 lähtöä on käytössä. Lähdöt on jaoteltu seuraavasti:

1a: 4 kpl potentiaalivapaata relelähtöä ( 1 sulkeutuva kosketin max 277VAC/30VDC/5A) . Kahdesa ensimmäisessä relelähdössä on kalustusvaihtoehto: haluttaessa voidaan tilalle kalustaa Omron G8P-tehorele (250VAC/28VDC/30A).

1b: 12 kpl optoerotettuja open drain-tyyppisiä NFET-lähtöjä max 100V/1,5A. Lähdöillä on apujännite hilaohjausta varten siten, että ne on ryhmitelty 4 + 8 (4 ensimmäisellä yhteinen apujännite, 8 viimeisellä samoin). Haluttaessa apujännitteet voidaan ketjuttaa kortilla johdotuksen yksinkertaistamiseksi. Minimiapujännite on 5V, maksimi 48V. Fetit voivat ohjata eri jännitteisiä piirejä kunhan niillä on ryhmittäin yhteinen maataso keskenään ja apujännitteen kanssa.

2: Tulot:
Kaikki 16 tuloa ovat käytössä. Tulot on ryhmitelty seuraavasti:

2a: 8 kpl optoerotettuja digitalituloja. Tulopiirit ovat kelluvia ja kaikki toisistaan ja kortin elektroniikasta galvaanisesti erotettuja. Piirit on varustettu Schmitt-triggerillä hitaiden reunojen värähtelyn estämiseksi. Tulopiirin jännitettä voi sovittaa opton etuvastusta muuttelemalla.

2b: 8 kpl galvaanisesti erottamattomia digitaalituloja. Tulot on suojattu ylijännitteitä ja piikkejä vastaan, mutta ne jakavat maatason keskenään ja kortin elektronikan kanssa. Tulot on tarkoitettu potentiaalivapaiden kosketintietojen keräilyyn mutta niitä voi harkiten käyttää mihin vaan kunhan pidetään huoli ettei synny liiallisia kiertovirtoja maajohtimissa.

PWM-analogilähtö
3 optoerotettua analogilähtöä jotka voidaan erikseen konfiguroida toimimaan joko 0 ... +10V tai -10V ... +10V alueella. Kunkin kanavan lähtöjännite on suoraan suhteellinen vastaavan kanavan pwm-modulaatioasteeseen missä 0 vastaa alinta konfiguroitua lähtöjännitettä ja 100% ylintä. Näiden välillä jännite on lineaarisesti suhteellinen modulaatioasteeseen.

Ottaisin mielelläni vastaan kommentteja jos jotakuta kiinnostaa aiheeseen paneutua.
Piirikaaviot on vielä pikkasen työn alla, voin laittaa nekin jakoon kohtapuoliin jos ketä kiinnostaa moinen.

Nothing sings like a kilovolt
Dr W. Bishop

PekkaNF

Mielenkiintoinen projekti. Kytkis kiinnostaa, erityisesti tuo galvaanisesti erotettu PWM ja muukin I/O. On se hyvä kun joku saa jotain aikaa.

Mitä tossa voi olla väylän pituus?

I2C näyttää mielenkiintoiselta, mutta joku tyhmä orja vetää lopulta jommankumman linjan turpeeseen ja pitää siellä...eikös Modbus poista niskoittelevan orjan kierrosta? Lukeakseni väylän pituus jotain alle metrin.

MCP23017-E/SP
http://www.abelectronics.co.uk/docs/stock/raspberrypi/iopi/IOPi-schematic.pdf

PekkaNF


Powered by EzPortal
SMF spam blocked by CleanTalk