Opa verteld:VHDL probleem,

Plaats reactie
pascal
Berichten: 153
Lid geworden op: za jan 18, 2020 9:36 pm

Opa verteld:VHDL probleem,

Bericht door pascal »

Geen vraag maar een uitdaging met een oplossing.
Voor mijn werk was ik bezig met het aansluiten van een aantal temperatuur sensors op een FPGA die dingen maken gebruik van een I2C Interface (wat ook een van de reden was om een FPGA te gebruiken) en om de temperatuur data eruit te halen moesten een aantal berichtjes uitgewisseld worden.
Daarvoor had ik vervolgens een state machiene (in mijn geval een basic microprocessor) geimplementeerd zodat elk I2C device zijn eigen ding kon doen.
Klinkt allemaal heel indrukwekkend, maar het is net als jongleren, als je dat kan weet je ook dat het niet bijster moeilijk is.
Aldus kwam de data vanuit de temperatuur sensor in de FPGA en had ik besloten dat om praktische reden in software elders het wel fijn zou zijn als
de temperatuur gewoon geconverteerd werd naar graden Celsius * 10 zoals ik in het hele systeem toepas, want ik gebruik enkel positieve integers en de wens was binnen een halve graad 'C nauwkeurig dus dan zorg je daar voor.
Pascal begint te tiepen, te solderen, te synthesizen en te compileren en ja hoor het werkt.
Totdat ik een live test deed.
Ineens bleek dan onder de 6.5'C de temperatuur weer omhoog begon te lopen ondanks dat het koel element vrolijk door ding.
Ook bleek bij verwarming dat bij pakweg 30'C de temperatuur ook 'hay ware ging' en de verwarming door ding tot een absoluut fatale 50'C (moest 37'C zijn)

Typisch gevalletje van Oops.

Dus: NO MORE OOPS (C) Will Smith

Al snel had ik door wat er aan de hand was.
Om te temperatuur te converteren naar 'C was er een berekening nodig met gebroken getallen (floating point)
Omdat ik echter enkel gehele getallen gebruikte die ook nog eens maal 10 moesten zijn bleek dat ik bij de berekening meer dan 20bits nodig had.
Standaard kent VHDL 20bits (signed) berekeningen en aldus werd bij de grensgevallen het resultaat geinverteerd.

Ik heb het opgelost door bij de berekening de 'scalling' aan te passen en ben daardoor gelimiteerd tot temperaturen tussen 1 en 45 'C ruim binnen het gestelde doel.

Heeft niets met Linux te maken maar was een leuke uitdaging.
Vivo ergo onus
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

Ik denk datje het anders aan had moeten pakken, je berekening vereenvoudigen of je input variabele bewerken. 20 bits signed te weinig voor een getal met 2 significante cijfers?
pascal
Berichten: 153
Lid geworden op: za jan 18, 2020 9:36 pm

Re: Opa verteld:VHDL probleem,

Bericht door pascal »

Berekening volgende de datasheet van SiliconLabs T ('C) = (175.72 * TEMPCODE16Bits / 65536) -46.85
Oftewel 175.72 * meetwaarde_van_0_tot_1 - 46.85
Ik heb de laagste nibble weggehaald omdat 0.1'C nauwkeurigheid voor mij voldoende is, en vervolgens de getallen aangepast waardoor de berekening net lukt.
Uiteraard Had ik ook met veel kleinere getallen kunnen werken om vervolgens helemaal aan het einde de schaal weer aante passen naar 'C
Maar goed de eerste oplossing werkt, systeem is uitgebreid en sucsesvol getest.
Vond het wel opmerkelijk dat een vrij rudimentaire temperatuur regeling een verloop van een e-kromme oplevert.
Vooral de vloeistof die op deze manier verwarmd en gekoeld word heeft een temp verloop precies volgens die zelfde e-kromme (wat ik dan weer wel heel voor de hand liggend vind)
't is een beetje een gedoe om plaatjes te posten anders kon ik het mooi laten zien.
Vivo ergo onus
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

Ik snap niet precies wat je bedoelt met "vrij rudimentaire temperatuurregeling", als zijnde een regeling zoals PID een regelkring is, maar dan simpeler?
Wat leverde dan de exponentieel op? De uitgang?
De temperatuur van de vloeistof zal iig qua tijdstip achterlopen op de kromme. Maar ik snap je exponentieel niet, dat is namelijk instabiel en dan regel je dus niet.
Een perfecte regeling is natuurlijk van x naar y zo stijl mogelijk zonder overshoot en dan dus na i tijd is de temperatuur horizontaal.
Wat je normaal snel hebt is een kromme naar de eindtemperatuur, maar dan oscillaties met overshoot en dergelijke. Wat je bij elektronica ook hebt zeg maar.
En dat maakt de PID regeling wel geinig, maar ook die is lastig in te regelen.
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

https://i.imgur.com/D3iQZD1.jpg
Zoiets zeg maar.
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

https://i.imgur.com/RCNVvJD.jpg
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

https://i.imgur.com/QRQegQH.jpg
Meer dan 500 pagina's over regeltechniek :P
pascal
Berichten: 153
Lid geworden op: za jan 18, 2020 9:36 pm

Re: Opa verteld:VHDL probleem,

Bericht door pascal »

Omdat het om een peltier element gaat en er zowel verwarmd als gekoeld moet worden tot vooraf gedefinieerde temperaturen heb ik twee 'schakelingen' gebruikt.
Die vergelijken de gemeten temp met de gewenste en zet aan de hand daarvan het peltier element aan of uit.
|Ik geloof dat we he nu over een PI of een PD regelaar hebben (dat ben ik ff kwijt) maar dat is het ook niet precies omdat het systeem geclocked word.
dwz er word niet continu gemeten en geregeld maar per tijds eenheid. de behaalde nauwkeurigheid is boven verwachting.. ga ik dus niet meer aan prutsen.
Vivo ergo onus
Gebruikersavatar
vi coactus
Berichten: 196
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: Opa verteld:VHDL probleem,

Bericht door vi coactus »

Heb ik ook eens een regelaar voor gemaakt.
Digitaal regelen is weer een ander hoofdstuk. Staat allemaal in mn boek waarvan de 1e druk ouder is dan jij bent :p
Het is ook helemaal afhankelijk van het doel. Ik moest vriestrajecten maken om te kijken wanneer welke kristalstructuur dominant was bij een polymorfe stof. Omdat elke iets andere eigenschappen heeft.
Plaats reactie