باسلام
یک pwm در avr تولید میکنم اما وقتی چندین خط محاسبات را قرار میدهم، شکل خروجی تایمرTCNT1 به هم میریزد (خیلی کند و نامنظم میشود). چه کاری کنم که این تغییر ایجاد نشود؟
لازم به ذکر است که ورودی این محاسبات از 6 کانال ADC میکرو بدست می آیند.
محاسبات قرار داده شده به شکل زیر است:
""""""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;""
[code=c]
Va = Va * 3.41
Vb = Vb * 3.41
Vc = Vc * 3.41
Ia = Ia * 51.15
Ib = Ib * 51.15
Ic = Ic * 51.15
O1 = 0.82 * Va
O2 = 0.25 * Vc
X1 = O1 + O2
O1 = -0.41 * Vb
O2 = -0.32 * Vc
X2 = O1 + O2
O1 = X1 ^ 2
O2 = X2 ^ 2
Vp1 = O1 + O2
Vp1 = Vp1 ^ 0.5
Vp2 = X2 / X1
Vp2 = -vp2
Vp2 = Atn(vp2)
Y1 = 0.43 * Vc
O1 = 0.71 * Vb
O2 = -0.55 * Vc
Y2 = O1 + O2
O1 = Y1 ^ 2
O2 = Y2 ^ 2
Vq1 = O1 + O2
Vq1 = Vq1 ^ 0.5
Vq2 = Y2 / Y1
Vq2 = -vq2
Vq2 = Atn(vq2)
O1 = -0.49 * Va
O2 = -0.33 * Vb
O3 = 0.02 * Vc
O2 = O3 + O2
Z1 = O1 + O2
O1 = -0.66 * Va
O2 = 0.25 * Vb
O3 = -0.41 * Vc
O2 = O3 + O2
Z2 = O1 + O2
O1 = Z1 ^ 2
O2 = Z2 ^ 2
Ip1 = O1 + O2
Ip1 = Ip1 ^ 0.5
Ip2 = Z2 / Z1
Ip2 = -ip2
Ip2 = Atn(ip2)
O1 = 0.57 * Vb
O2 = -0.04 * Vc
T1 = O1 + O2
O1 = 0.66 * Va
O2 = -0.43 * Vb
O3 = -0.71 * Vc
O2 = O2 + O3
T2 = O1 + O2
O1 = T1 ^ 2
O2 = T2 ^ 2
Iq1 = O1 + O2
Iq1 = Iq1 ^ 0.5
Iq2 = T2 / T1
Iq2 = -iq2
Iq2 = Atn(iq2)
O3 = Vp2 + Ip2
O5 = Vp1 * Ip1
O1 = O5 * Cos(o3)
O4 = Vq2 + Iq2
O6 = Vq1 * Iq1
O2 = O6 * Cos(o4)
R1 = O1 + O2
O1 = O5 * Sin(o3)
O2 = O6 * Sin(o4)
R2 = O1 + O2
O1 = R1 ^ 2
O2 = R2 ^ 2
P1 = O1 + O2
P1 = P1 ^ 0.5
P2 = R2 / R1
P2 = -p2
P2 = Atn(p2)
O3 = Vp2 + Iq2
O4 = Vq2 + Ip2
O5 = Vp1 * Iq1
O6 = Vq1 * Ip1
O1 = O5 * Cos(o3)
O2 = O6 * Cos(o4)
S1 = O1 - O2
O1 = O5 * Sin(o3)
O2 = O6 * Sin(o4)
S2 = O1 - O2
O1 = S1 ^ 2
O2 = S2 ^ 2
Q1 = O1 + O2
Q1 = Q1 ^ 0.5
Q2 = S2 / S1
Q2 = -q2
Q2 = Atn(q2)
Pdc = Idc / 10
Pdc = 1032 * Pdc
O1 = Vp1 ^ 2
O2 = Vq1 ^ 2
M = O1 + O2
M = 1 / M
O3 = Vp1 * Pdc
O5 = Vq1 * Q1
O4 = Vq2 + Q2
O1 = O3 * Cos(vp2)
O2 = O5 * Cos(o4)
U1 = O1 - O2
U1 = M * U1
O1 = O3 * Sin(vp2)
O2 = O5 * Sin(o4)
U2 = O1 - O2
U2 = M * U2
O1 = U1 ^ 2
O2 = U2 ^ 2
Ica1 = O1 + O2
Ica1 = Ica1 ^ 0.5
Ica2 = U2 / U1
Ica2 = -ica2
Ica2 = Atn(ica2)
O3 = Vq1 * Pdc
O5 = Vp1 * Q1
O4 = Vp2 + Q2
O1 = O3 * Cos(vq2)
O2 = O5 * Cos(o4)
K1 = O1 + O2
K1 = M * K1
O1 = O3 * Sin(vq2)
O2 = O5 * Sin(o4)
K2 = O1 + O2
K2 = M * K2
O1 = K1 ^ 2
O2 = K2 ^ 2
Icb1 = O1 + O2
Icb1 = Icb1 ^ 0.5
Icb2 = K2 / K1
Icb2 = -icb2
Icb2 = Atn(icb2)
O1 = 0.82 * Ica1
A1 = O1 * Cos(ica2)
A2 = O1 * Sin(ica2)
O1 = 0.41 * U1
O1 = -o1
O2 = 0.71 * K1
B1 = O1 + O2
O1 = 0.41 * U2
O1 = -o1
O2 = 0.71 * K2
B2 = O1 + O2
O1 = 0.41 * U1
O1 = -o1
O2 = 0.71 * K1
C1 = O1 - O2
O1 = 0.41 * U2
O1 = -o1
O2 = 0.71 * K2
C2 = O1 - O2
O1 = A2 / 1000
D1 = Va - O1
D2 = A1 / 1000
O1 = D1 ^ 2
O2 = D2 ^ 2
Via1 = O1 + O2
Via1 = Via1 ^ 0.5
Via2 = D2 / D1
Via2 = -via2
Via2 = Atn(via2)
E1 = B2 / 1000
E1 = -e1
O1 = B1 / 1000
E2 = Vb + O1
O1 = E1 ^ 2
O2 = E2 ^ 2
Vib1 = O1 + O2
Vib1 = Vib1 ^ 0.5
Vib2 = E2 / E1
Vib2 = -vib2
Vib2 = Atn(vib2)
O1 = 0.64 * Vc
O1 = -o1
O2 = C2 / 1000
F1 = O1 - O2
O1 = 0.77 * Vc
O2 = C1 / 1000
F2 = O1 + O2
O1 = F1 ^ 2
O2 = F2 ^ 2
Vic1 = O1 + O2
Vic1 = Vic1 ^ 0.5
Vic2 = F2 / F1
Vic2 = -vic2
Vic2 = Atn(vic2)
[/code]
یک pwm در avr تولید میکنم اما وقتی چندین خط محاسبات را قرار میدهم، شکل خروجی تایمرTCNT1 به هم میریزد (خیلی کند و نامنظم میشود). چه کاری کنم که این تغییر ایجاد نشود؟
لازم به ذکر است که ورودی این محاسبات از 6 کانال ADC میکرو بدست می آیند.
محاسبات قرار داده شده به شکل زیر است:
""""""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;""
[code=c]
Va = Va * 3.41
Vb = Vb * 3.41
Vc = Vc * 3.41
Ia = Ia * 51.15
Ib = Ib * 51.15
Ic = Ic * 51.15
O1 = 0.82 * Va
O2 = 0.25 * Vc
X1 = O1 + O2
O1 = -0.41 * Vb
O2 = -0.32 * Vc
X2 = O1 + O2
O1 = X1 ^ 2
O2 = X2 ^ 2
Vp1 = O1 + O2
Vp1 = Vp1 ^ 0.5
Vp2 = X2 / X1
Vp2 = -vp2
Vp2 = Atn(vp2)
Y1 = 0.43 * Vc
O1 = 0.71 * Vb
O2 = -0.55 * Vc
Y2 = O1 + O2
O1 = Y1 ^ 2
O2 = Y2 ^ 2
Vq1 = O1 + O2
Vq1 = Vq1 ^ 0.5
Vq2 = Y2 / Y1
Vq2 = -vq2
Vq2 = Atn(vq2)
O1 = -0.49 * Va
O2 = -0.33 * Vb
O3 = 0.02 * Vc
O2 = O3 + O2
Z1 = O1 + O2
O1 = -0.66 * Va
O2 = 0.25 * Vb
O3 = -0.41 * Vc
O2 = O3 + O2
Z2 = O1 + O2
O1 = Z1 ^ 2
O2 = Z2 ^ 2
Ip1 = O1 + O2
Ip1 = Ip1 ^ 0.5
Ip2 = Z2 / Z1
Ip2 = -ip2
Ip2 = Atn(ip2)
O1 = 0.57 * Vb
O2 = -0.04 * Vc
T1 = O1 + O2
O1 = 0.66 * Va
O2 = -0.43 * Vb
O3 = -0.71 * Vc
O2 = O2 + O3
T2 = O1 + O2
O1 = T1 ^ 2
O2 = T2 ^ 2
Iq1 = O1 + O2
Iq1 = Iq1 ^ 0.5
Iq2 = T2 / T1
Iq2 = -iq2
Iq2 = Atn(iq2)
O3 = Vp2 + Ip2
O5 = Vp1 * Ip1
O1 = O5 * Cos(o3)
O4 = Vq2 + Iq2
O6 = Vq1 * Iq1
O2 = O6 * Cos(o4)
R1 = O1 + O2
O1 = O5 * Sin(o3)
O2 = O6 * Sin(o4)
R2 = O1 + O2
O1 = R1 ^ 2
O2 = R2 ^ 2
P1 = O1 + O2
P1 = P1 ^ 0.5
P2 = R2 / R1
P2 = -p2
P2 = Atn(p2)
O3 = Vp2 + Iq2
O4 = Vq2 + Ip2
O5 = Vp1 * Iq1
O6 = Vq1 * Ip1
O1 = O5 * Cos(o3)
O2 = O6 * Cos(o4)
S1 = O1 - O2
O1 = O5 * Sin(o3)
O2 = O6 * Sin(o4)
S2 = O1 - O2
O1 = S1 ^ 2
O2 = S2 ^ 2
Q1 = O1 + O2
Q1 = Q1 ^ 0.5
Q2 = S2 / S1
Q2 = -q2
Q2 = Atn(q2)
Pdc = Idc / 10
Pdc = 1032 * Pdc
O1 = Vp1 ^ 2
O2 = Vq1 ^ 2
M = O1 + O2
M = 1 / M
O3 = Vp1 * Pdc
O5 = Vq1 * Q1
O4 = Vq2 + Q2
O1 = O3 * Cos(vp2)
O2 = O5 * Cos(o4)
U1 = O1 - O2
U1 = M * U1
O1 = O3 * Sin(vp2)
O2 = O5 * Sin(o4)
U2 = O1 - O2
U2 = M * U2
O1 = U1 ^ 2
O2 = U2 ^ 2
Ica1 = O1 + O2
Ica1 = Ica1 ^ 0.5
Ica2 = U2 / U1
Ica2 = -ica2
Ica2 = Atn(ica2)
O3 = Vq1 * Pdc
O5 = Vp1 * Q1
O4 = Vp2 + Q2
O1 = O3 * Cos(vq2)
O2 = O5 * Cos(o4)
K1 = O1 + O2
K1 = M * K1
O1 = O3 * Sin(vq2)
O2 = O5 * Sin(o4)
K2 = O1 + O2
K2 = M * K2
O1 = K1 ^ 2
O2 = K2 ^ 2
Icb1 = O1 + O2
Icb1 = Icb1 ^ 0.5
Icb2 = K2 / K1
Icb2 = -icb2
Icb2 = Atn(icb2)
O1 = 0.82 * Ica1
A1 = O1 * Cos(ica2)
A2 = O1 * Sin(ica2)
O1 = 0.41 * U1
O1 = -o1
O2 = 0.71 * K1
B1 = O1 + O2
O1 = 0.41 * U2
O1 = -o1
O2 = 0.71 * K2
B2 = O1 + O2
O1 = 0.41 * U1
O1 = -o1
O2 = 0.71 * K1
C1 = O1 - O2
O1 = 0.41 * U2
O1 = -o1
O2 = 0.71 * K2
C2 = O1 - O2
O1 = A2 / 1000
D1 = Va - O1
D2 = A1 / 1000
O1 = D1 ^ 2
O2 = D2 ^ 2
Via1 = O1 + O2
Via1 = Via1 ^ 0.5
Via2 = D2 / D1
Via2 = -via2
Via2 = Atn(via2)
E1 = B2 / 1000
E1 = -e1
O1 = B1 / 1000
E2 = Vb + O1
O1 = E1 ^ 2
O2 = E2 ^ 2
Vib1 = O1 + O2
Vib1 = Vib1 ^ 0.5
Vib2 = E2 / E1
Vib2 = -vib2
Vib2 = Atn(vib2)
O1 = 0.64 * Vc
O1 = -o1
O2 = C2 / 1000
F1 = O1 - O2
O1 = 0.77 * Vc
O2 = C1 / 1000
F2 = O1 + O2
O1 = F1 ^ 2
O2 = F2 ^ 2
Vic1 = O1 + O2
Vic1 = Vic1 ^ 0.5
Vic2 = F2 / F1
Vic2 = -vic2
Vic2 = Atn(vic2)
[/code]
دیدگاه