K16F887 interface met Profilab Expert

Gepost door Jeroen Vreuls op zaterdag 1 april 2023

De hardware

Wie wel eens met Profilab Expert 4.0 gewerkt heeft, weet dat er verschillende interfaces te koop zijn. Denk aan de Velleman interfaces, Kolter, Hygrosens, BMC, ELV, enzovoort. De Velleman interfaces zijn wel de bekendste, zoals de K8055, K8056, K8061 en de K8000. Die kaarten werken op zich goed, maar je gebruikt vaak niet alles wat er mee kan.

Nu kunnen we zelf ook zoiets maken en dan helemaal naar eigen wens, dus wat je het vaakst gebruikt. Ik ga hier een voorbeeld geven hoe je zoiets kunt doen.

We gaan de interface via de USB-poort bedienen, serieel dus. Als controller gaan we een PIC16F887 gebruiken samen met een USB-serieel adapter met FTDI chipset. Andere types willen nog wel eens problemen geven met de communicatie tussen PC en controller. Tussen de USB-serieel adapter gebruik ik altijd een interface printje met optocouplers voor de galvanische scheiding.

Hieronder zie je het schema plus de print van het geheel. Als optocoupler heb ik twee maal de PC817 gebruikt en dat werkt goed met de standaard 9600 baud instelling, veel hoger heb ik niet nodig voor dit doeleinde.

Seriële galvanische scheidingSeriële galvanische scheiding

Print seriële galvanische scheidingPrint seriële galvanische scheiding

Je kunt uiteraard ook het printje weg laten en de USB-serieel adapter direct op de TX en RX pinnen aansluiten van de gebruikte controller. Maar persoonlijk heb ik het liever galvanisch gescheiden.

De controller staat op een print met allemaal Molex connectoren, zodat je makkelijk van alles en nog wat aan kunt sluiten op de print. Ook zit er een ICSP connector op, zodat je de controller makkelijk kunt programmeren.

Er zit ook een aansluiting op speciaal voor een display en dat is best makkelijk, ook om eventueel data te bekijken wat ontvangen wordt vanuit Profilab. Zo kun je goed controleren of de verzonden data klopt.

Hieronder het gebruikte controllerboard.

Het K16F887 controllerboardHet K16F887 controllerboard

Je kunt zien dat alle poorten apart naar buiten komen via de drie polige Molex stekkers, maar dat de poorten A, E, C, D en B ook gecombineerd op een meerpolige stekker zitten. Alleen de C-poort heeft een 5-polige stekker, die wordt speciaal gebruikt om bijvoorbeeld een motorcontroller mee aan te sturen. Op de C-poort zitten namelijk twee PWM-poorten, de andere C-poorten zitten apart op driepolige Molex stekkers.

Op iedere stekker zit een 5 V DC en een 0 V DC aansluiting, plus een in- of een uitgang naar keuze. De 0 en 5 V DC is met name makkelijk voor het aansluiten van sensoren, schakelaars en bijvoorbeeld drukknoppen. Ik gebruik deze print als interface, maar je kunt er ook een speciale print voor ontwerpen natuurlijk.

Een print vergelijkbaar met bijvoorbeeld de K8055, met daarop bijvoorbeeld een ULN2803 voor de uitgangen. De ingangen zou je via optocouplers kunnen doen en via de PWM-uitgangen zou je met een TLV271 opamp een analoge uitgang kunnen maken.

Analoge uitgang

Hier een voorbeeld hoe je dat kunt doen.

PWM naar analoog converterPWM naar analoog converter

Hier wordt van een 5 V PWM-signaal een analoog signaal gemaakt van 0 tot 10 V. De versterkingsfactor is hier twee maal. De versterkingsfactor wordt bepaald door R2 en R3. Als je meer versterking nodig hebt dan moeten R2 en R3 aangepast worden.

Als je bijvoorbeeld een analoog signaal van 0 tot 12 V nodig hebt, dan wordt de waarde van R2 18 kΩ en de waarde van R3 wordt 13 kΩ. De versterkingsfactor wordt dan 2,385 maal. De uitgangsspanning van de opamp zit dan tussen de 0 en 11.9 V.

Als je geen versterking nodig hebt, dan kun je pin 2 en pin 6 doorverbinden. Dan wordt de opamp een spanningsvolger. Als je zoiets wil maken heb je wel een rail-to-rail opamp nodig, anders kom je niet aan de maximale uitgangsspanning die je wil hebben.

De combinatie R1 en C1 vormt hier een low-pass filter, dit zorgt ervoor dat er een constante spanning op pin 3 van de opamp komt.

Relaiskaarten

Als je meer vermogen aan de uitgang van de opamp wil hebben, kun je daar ook nog een transistor achter zetten. Zelf gebruik ik deze schakeling nog al eens om bijvoorbeeld een frequentie regelaar aan te sturen via een microcontroller of voor andere zaken die een analoog signaal nodig hebben.

Als uitgangen maak ik gebruik van een relaiskaart, die kun je kopen van heel veel merken en in alle prijsklassen. Ik heb er een paar van Conta-Clip, dat zijn behoorlijk dure relaiskaarten. Je stuurt de relais aan met een 5 V DC signaal en de spoelspanning van de relais is 24 V DC. Je hebt daarbij dus twee spanningen nodig.

Er zijn ook veel goedkopere kaarten, den bijvoorbeeld aan de relaiskaarten die je voor een Arduino kunt krijgen. Zo'n kaart heb je al voor ongeveer € 20,-. Je moet wel oppassen wat je er mee gaat schakelen, als dat bijvoorbeeld de netspanning (230 V AC) is, moet je wel kijken of dat de relais daar geschikt voor zijn. Dit geldt ook voor de relaiskaart zelf, denk hier dan aan de kruipweg van de sporen op de print.

Hier een plaatje van zo'n print voor een Arduino.

Een relaiskaartEen relaiskaart

Als je hier bijvoorbeeld 12 of 24 V mee moet schakelen, kun je zoiets prima gebruiken. Houd er ook rekening mee dat je kijkt hoeveel stroom de relais mogen schakelen, zorg er voor dat je daar niet overheen gaat.

Ingangen

Voor de ingangen gebruik ik gewoon standaard schakelaars, die zonder optocoupler op de ingangspinnen aan worden gesloten. Wel twist ik altijd de bedrading en mocht er lange bedrading tussen de schakelaar nodig zijn, dan wordt er een optocoupler voor gezet met een filter. Op deze manier dus:

Ingang voor de controllerIngang voor de controller

Door de waardes van R1 en R2 aan te passen krijg je een ander filter waarde. Op deze manier krijg je een storingsvrij signaal op de ingang van je controller. Maar voor huis tuin en keuken dingen is dit uiteraard niet nodig. Hieronder nog een paar plaatjes van de vertraging via het filter. Hier is ook de condensatorwaarde aangepast. Hier is de condensator 10 nF. De vertraging is hier ongeveer 21 µs.

Vertraging met een 10 nF condensatorVertraging met een 10 nF condensator

En hier is de condensatorwaarde 100 nF. De vertraging is hier ± 0,12 ms.

Vertraging met een 100 nF condensatorVertraging met een 100 nF condensator

Je ziet hier dus duidelijk het verschil in signaal, door nu een beetje te spelen met de weerstandswaarde en condensatorwaarde kun je het ingangssignaal beïnvloeden. Maar de combinatie met de 100 nF condensator met één van de weerstand combinaties, type-1, type-2 of type-3 is ruim voldoende voor een storingsvrije werking.