sw = 0 for i in range(len(pw)): error = pw[i] - sw u = pid.run(error, Ts=Ts) sw = dc2.dlsim(u)[0] y_out[i, :] = sw pylab.figure(2) pylab.plot(pw) pylab.plot(y_out[:, 0]) #Clearing the previous states dc2.x0 = None sinW = sinwave(Ts=Ts, mtime=1, freq=1, amp=6000) pw = sinW.signal() y_out = zeros((len(pw), 1)) u_out = zeros((len(pw), 1)) sw = 0 for i in range(len(pw)): error = pw[i] - sw u = pid.run(error, Ts=Ts) sw = dc2.dlsim(u)[0] y_out[i, :] = sw u_out[i, :] = u pylab.figure(3) pylab.plot(pw) pylab.plot(y_out[:, 0])
# # for i in range( len( mtime ) ): # u = array( [[200.], [2.]] ) # yo[i, :] = pmsm.dlsim( u, Ts = Ts )[1][:, 0] # if( i % 1000 ) == 0: # print "%d of %d" % ( i, len( mtime ) ) # # pylab.figure() # pylab.plot( yo[:, 2] ) # # pylab.show() #Control signals # squareW = squarewave( Ts = Ts, mtime = 10 , freq = 0.2, amp = 30 ) # sw = squareW.signal() sinW = sinwave( Ts = Ts, mtime = 1, freq = 2, amp = 30 ) sw = sinW.signal() ct = CT() #Number of horizon N = 2 ( Ak, Bk, Ck, Dk ) = pmsm.mdss( x, Ts ) dlqr = DSTLQR( Ak, Bk, Ck, N ) w_s = zeros( ( len( sw ), 1 ) ) U_s = zeros( ( len( sw ), 2 ) ) x_s = zeros( ( len( sw ), 5 ) ) error = zeros( ( len( sw ), 1 ) ) w_est = zeros( ( len( sw ), 1 ) )
if __name__ == "__main__": dc2 = dcmotor() Ts = 0.0001 ekf = dKF(x0=zeros((3, 1))) mtime = arange(0, 0.01, Ts) yo = zeros((len(mtime), 1)) xk = zeros((len(mtime), 3)) xe = zeros((len(mtime), 3)) noise = zeros((len(mtime), 3)) error = zeros((len(mtime), 3)) (A, B, C, D) = dc2.dss(Ts) sinW = sinwave(Ts=Ts, mtime=0.01, freq=100, amp=20) pw = sinW.signal() H = array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) for i in range(len(mtime)): u = pw[i] # u = array([[1.]]) y_k, x_k = dc2.dlsim(u, Ts=Ts); yo[i, :] = y_k xk[i, :] = x_k.conj().T z_K = copy(x_k) z_K[1] = 0 z_K[0] = z_K[0] + random.uniform(-0.5, 0.5)
if __name__ == "__main__": dc2 = dcmotor() Ts = 0.0001 ekf = dKF(x0=zeros((3, 1))) mtime = arange(0, 0.01, Ts) yo = zeros((len(mtime), 1)) xk = zeros((len(mtime), 3)) xe = zeros((len(mtime), 3)) noise = zeros((len(mtime), 3)) error = zeros((len(mtime), 3)) (A, B, C, D) = dc2.dss(Ts) sinW = sinwave(Ts=Ts, mtime=0.01, freq=100, amp=20) pw = sinW.signal() H = array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) for i in range(len(mtime)): u = pw[i] #u = array([[1.]]) y_k, x_k = dc2.dlsim(u, Ts=Ts) yo[i, :] = y_k xk[i, :] = x_k.conj().T z_K = copy(x_k) z_K[1] = 0 z_K[0] = z_K[0] + random.uniform(-0.5, 0.5)
for i in range( len( mtime ) ): u = array( [1.] ) yo[i, :] = dc2.dlsim( u, 0, Ts = Ts )[0]; pylab.plot( yo[:, 0] ) #------------------------------------------------------------------------------ # DC motor PID controller #------------------------------------------------------------------------------ # Clearing the previous states dc2.x0 = None; sinW = sinwave( Ts = Ts, mtime = 0.1, freq = 10, amp = 200 ) pw = sinW.signal() # Defining the torque torque = concatenate( ( ones( ( 1, pw.shape[0] / 4 ) ) * 2.0, ones( ( 1, 3 * pw.shape[0] / 4 ) ) * 1.0 ), axis = 1 ); y_out = zeros( ( len( pw ), 1 ) ) u_out = zeros( ( len( pw ), 1 ) ) sw = 0; for i in range( len( pw ) ): # Calculate the error error = pw[i] - sw; # Calculating the control signal u = pid.run( error, Ts = Ts ) if( abs( u ) > 220 ): u = sign( u ) * 220;
for i in range( len( pw ) ): error = pw[i] - sw; u = pid.run( error, Ts = Ts ) sw = dc2.dlsim( u )[0]; y_out[i, :] = sw pylab.figure( 2 ) pylab.plot( pw ) pylab.plot( y_out[:, 0] ) #Clearing the previous states dc2.x0 = None; sinW = sinwave( Ts = Ts, mtime = 1, freq = 1, amp = 6000 ) pw = sinW.signal() y_out = zeros( ( len( pw ), 1 ) ) u_out = zeros( ( len( pw ), 1 ) ) sw = 0; for i in range( len( pw ) ): error = pw[i] - sw; u = pid.run( error, Ts = Ts ) sw = dc2.dlsim( u )[0]; y_out[i, :] = sw u_out[i, :] = u pylab.figure( 3 ) pylab.plot( pw )