Ik heb zo gauw geen plaatje voor je, maar: Mesa hangt de I/O op een losse dsPIC microcontroller die galvanisch geisoleerd is van de PC (en gevoed vanaf een aparte fieldbus-spanning), dus die gebruiken geen optocoupler per ingang of uitgang. Dat geintje kun je wel kopieren met
zoiets voor de outputs ipv een ULN28xx. Nadeel van die ULN is dat-ie stuk gaat als je per ongeluk een keer een kortsluitingkje maakt of als je magneetklepje toch net even teveel stroom trekt.
Dergelijke interface-IC's zijn er ook wel voor input. Als je dan enkel een SPI-busje over houd dan is isoleren van je FPGA met iets als een ISO6741 prima te doen.
Stepgen zou ik via een 74ACT244 of vergelijkbaar doen, en dan differentieel uitsturen. Die dingen zijn robuust, snel en kunnen aardig wat stroom leveren, wat niet onhandig is als je bedenkt dat er ooit best een capacitieve kabel aan kan hangen. Ze zijn zo snel dat ik een paar 33E weerstandjes in serie met de outputs zeker niet zou vergeten....
En waarom differentieel? Je moet de opto-LED in de drive niet alleen aanzetten, maar ook uitzetten. Dat gaat het vlotste door 'm tegen te sturen. Vaak is het dan bijvoorbeeld 200kHz single-ended, 500kHz differential. Met je FPGA kun je aardige stapfrequenties halen, zonde als je dan de servodrive gaat beperken tot 200kHz omdat je single-ended uitstuurt. Of <100kHz omdat je het open-collector doet met een darlington.
Voor je encoders kun je om het even welke RS422 receiver gebruiken die je zint. 10MHz halen ze allemaal wel. Als begin van je zoektocht: MAX14891.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'