Laten we aannemen dat je een Arduino hebt die je hebt afgesproken om een signaal te samplen met een samplefrequentie van 1 / T dat vervolgens wordt verwerkt door je controller. Laten we ook aannemen dat de verwerkingstijd voor uw controller klein is in vergelijking met T, bijv. 0.1 / T
Ten eerste moet u de overdrachtsfunctie van de controller converteren naar discrete tijd. Er zijn veel manieren om dit te doen. Matlab heeft een handige c2d () -functie. Een manier waarop u dit op papier kunt doen (niet de beste manier), is door de methode van Euler te gebruiken.
s = (z-1) / T waarbij T de bemonsteringsperiode is .
Een overdrachtsfunctie omzetten dan: (s + a) / (s + b) => (z- (1-aT)) / (z- (1-bT))
Dus nu heb je een TF in z zoals: Y (z) / X (z) = (zc) / (zd) waar Y de uitvoer is en X is de input.
Om dit in een controller te implementeren heb je dit nodig als differentievergelijking in termen van vertragingen. Dus converteer de vergelijking naar een functie van (z ^ -1) wat een vertraging is:
Y (z) / X (z) = (1-cz ^ -1) / (1 -dz ^ -1)
en herschrijf als: Y (Z) (1-dz ^ -1) = X (z) (1-cz ^ -1 )
Y (Z) -dY (z) .z ^ -1 = X (z) -cX (z) .z ^ -1
en verander naar bemonsteringstijd door z ^ -1 te behandelen als een vertraging: y (n) - dy (n-1) = x (n) - cx (n-1)
herschikken: y (n) = dy (n-1) + x (n) - cx (n-1)
U kunt dit eenvoudig implementeren in de Arduino door te beseffen dat y (n-1) de vorige waarde is van y (n) en op dezelfde manier voor x (n), en x (n) de waarde is die wordt ingevoerd naar de controller; d.w.z. de referentie minus de uitvoer van de ADC.