تحريك ثلاث محاور والوصول بهم إلى نقطة ما في نفس الوقت

إنضم
6 يونيو 2006
المشاركات
25
مجموع الإعجابات
0
النقاط
0
السلام عليكم ورحمة الله
كيف يمكن تحريك ثلاث محاور (X, Y, Z) عن طريق (Stepper motors) والوصول بهم إلى نقطة واحدة في نفس الوقت مع اختلاف القيم؟

إذا كانت القيم مضاعفات لبعضها لا توجد مشكلة هنا ,مثلا:
X=15, Y=10, z=5.
المحرك X يتحرك ثلاث أضعاف المحرك Z والمحرك Y يتحرك ضعفي المحرك Z
لكن إن لم يكن كذلك مثلا (X=17, Y=10, z=3) ستواجهني مشكلة هنا وهي كيف أعطي قيم كسرية كنبضات (Pulses) للمحركات؟ (تتحرك Stepper Motors بناء على النبضات, كل نبضة من الكمبيوتر أو الكنترولر تساوي خطوة).
بارك الله فيكم.
 
التعديل الأخير:

مواضيع مماثلة

وليد الحديدي

عضو جديد
إنضم
24 أغسطس 2006
المشاركات
315
مجموع الإعجابات
21
النقاط
0
أخي الكريم ، لا أعرف أين المشكلة ألا يمكنك أن تعطي مثلاً 3 نبضات لأحد المحركات و في نفس الوقت تعطي 10 للآخر و 17 للثالث من خلال برنامجك ؟
أرجو توضيح السؤال
و على العموم إذا كنت تريد التحكم بماكنة بثلاثة محاور فهناك الكثير من البرامج الجاهزة لهذا الغرض و يمكنها التحكم باكثر من 3 محاور
 

حسام الحلبي

عضو جديد
إنضم
27 نوفمبر 2007
المشاركات
1
مجموع الإعجابات
0
النقاط
0
يمكن ذلك عن طريق استخدام مخفضات (كل 100 دورة من المحرك تعادل دورة واحدة على خرج المخفض مثلاً) وهذا أمر ضروري جداً في تطبيقات التحكم.

ومن الممكن أيضاً أن يكون هناك خطأ ولكنه سيصبح صغير ويمكن اهماله.
 
إنضم
6 يونيو 2006
المشاركات
25
مجموع الإعجابات
0
النقاط
0
السلام عليكم
ما هي مشكلتك أخي نزار مع السؤال؟ أعتقد أنه واضح.
هل يمكن أن توضح ما هو الشيء الذي لا تفهمه من السؤال؟
بارك الله فيك على اهتمامك!
 

hammoda

عضو جديد
إنضم
12 ديسمبر 2006
المشاركات
12
مجموع الإعجابات
1
النقاط
0
السلام عليكم :6:
فهمت عليك أخ عثمان
وأنا أبحث عن الحل مثلك
والمشكلة أن الأوامر عندي تخرج من Plc
أما ان كانت تخرج من كمبيوتر فيمكن أن يوجد برامج جاهزة لهذا العمل كما قال الأخ وليد
 

abadazah

عضو جديد
إنضم
9 فبراير 2007
المشاركات
7
مجموع الإعجابات
0
النقاط
0
انسى موضوع النبضات الان وركز على خوارزمية تعطيك قيم مطلقة وليس نبضات حيث ان الخوارزمية تحتاج منك ادخال (الموقع الحالي للثلاث محاور , الموقع المطلوب للثلاث محاور) وهذايعبر عنه بقيمة طبعا لتعطيك خرج مثلا على هذا النحو

اذا كان الموقع الحالى للثلاث محاور صفر والموقع المطلوب(x = 10 , y = 5 , z = 1) فإن الخرج سوف يكون على النحو التالي:

x=1 y=1 z=0
x=2 y=1 z=0
x=3 y=2 z=0
x=4 y=2 z=0
x=5 y=3 z=0
x=6 y=3 z=1
x=7 y=4 z=1
x=8 y=4 z=1
x=9 y=5 z=1
x=10 y=5 z=1
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
الكود
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
يتبع ......................
 

abadazah

عضو جديد
إنضم
9 فبراير 2007
المشاركات
7
مجموع الإعجابات
0
النقاط
0
void 3D_line(long int x1, long int y1, long int z1, long int x2, long int y2, long int z2)
{
long int i, dx, dy, dz, l, m, n, x_inc, y_inc, z_inc, err_1, err_2, dx2, dy2, dz2;

dx = x2 - x1;
dy = y2 - y1;
dz = z2 - z1;
x_inc = (dx < 0) ? -1 : 1;
l = abs(dx);
y_inc = (dy < 0) ? -1 : 1;
m = abs(dy);
z_inc = (dz < 0) ? -1 : 1;
n = abs(dz);
dx2 = l << 1;
dy2 = m << 1;
dz2 = n << 1;

if ((l >= m) && (l >= n)) {
err_1 = dy2 - l;
err_2 = dz2 - l;
for (i = 0; i < l; i++) {
output(x1,y1,z1);
if (err_1 > 0) {
y1 += y_inc;
err_1 -= dx2;
}
if (err_2 > 0) {
z1 += z_inc;
err_2 -= dx2;
}
err_1 += dy2;
err_2 += dz2;
x1 += x_inc;
}
} else if ((m >= l) && (m >= n)) {
err_1 = dx2 - m;
err_2 = dz2 - m;
for (i = 0; i < m; i++) {
output(x1,y1,z1);
if (err_1 > 0) {
x1 += x_inc;
err_1 -= dy2;
}
if (err_2 > 0) {
z1 += z_inc;
err_2 -= dy2;
}
err_1 += dx2;
err_2 += dz2;
y1 += y_inc;
}
} else {
err_1 = dy2 - n;
err_2 = dx2 - n;
for (i = 0; i < n; i++) {
output(x1,y1,z1);
if (err_1 > 0) {
y1 += y_inc;
err_1 -= dz2;
}
if (err_2 > 0) {
x1 += x_inc;
err_2 -= dz2;
}
err_1 += dy2;
err_2 += dx2;
z1 += z_inc;
}
}
output(x1,y1,z1);
}
/// end
اي شروحات اضافية انا في خدمة المسلمين///
 
أعلى