ايران ويج

نسخه‌ی کامل: کمک در مورد نوع حرکت سروو موتورها
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
من نمی تونم بفهمم خوب وقتی پالس میدیم به سروو حالا مثلا" 60 درجه می چرخه بعد چطوری بر می گرده؟ خودش بر می گرده؟
میشه با میکرو برش گردوند؟ من میخوام برای چرخ های جلوی روبات ازش استفاده کنم طوریکه 60 درجه به چپ و راست بچرخه
توروخدا زود بگید وقت دافاعم داره می رسه
خودش برنمیگرده
با توجه به پالسی که میدی میره رو یه مکان مشخص
باید با تغییر پالس (توسط میکرو) برگردونیش
اصولا باید چقدر بهش پالس بدیم تا بچرخه؟
بعد چقدر بدیم برگرده؟
دوستان من با یک مکافاتی این برنامه رو پیدا کردم ولی من فقط می خوام موتورم راست یا چپ یا وسط دوران کنه کسی میتونه این کد رو یه توضیح بده که فقط این کار رو انجام بده؟


کد:
$crystal = 1000000
Dim Servospeed As Integer
Dim Negservospeed As Integer
Dim I As Integer
Dim Centerservo As Integer
Dim Leftservo As Integer
Dim Rightservo As Integer

Config Pinb.4 = Output 'servo signal
Config Pinb.0 = Input '2ms throw button
Config Pinb.1 = Input '1ms throw button
Config Pinb.2 = Input 'fast button

Portb.4 = 0

Servospeed = 3
Negservospeed = -3
I = 0

Centerservo = 640
Rightservo = 430
Leftservo = 850

Wait 1

Loop:

If Pinb.0 = 0 Then
'Slow Speed
If Pinb.1 = 0 Then '1ms pulse out
For I = Centerservo To Rightservo Step Negservospeed
Pulseout Portb , 4 , I
Waitms 20
Next
End If

If Pinb.2 = 0 Then
For I = Centerservo To Leftservo Step Servospeed
Pulseout Portb , 4 , I
Waitms 20
Next
End If

If Pinb.1 = 1 And Pinb.2 = 1 Then
Pulseout Portb , 4 , Centerservo
Waitms 20
End If
Else
'Fast speed
If Pinb.1 = 0 Then '1ms pulses
Pulseout Portb , 4 , Rightservo
Waitms 20
End If

If Pinb.2 = 0 Then
Pulseout Portb , 4 , Leftservo '2ms pulses
Waitms 20
End If

If Pinb.1 = 1 And Pinb.2 = 1 Then '1.5ms pulses
Pulseout Portb , 4 , Centerservo
Waitms 20
End If
End If

Goto Loop

End
پیشنهاد می کنم خود فروم رو هم یه سرچ بزنین !
قبلا روش بحث شده !!!



ولی اینم راه اندازی سرو موتور : http://forum.iranled.com/showthread.php?...4#pid74104




سروو موتور:



سروو ها نوعی موتور بسیار پرقدرت است که میتواند حول یک زاویه خاص با دقت بالا بچرخند ، از سروو ها برای بازوی ربات و باز و بسته کردن درب و دریچه و ... استفاده میشود .

سروو ها دارای سه سیم میباشند که دوتای انها تغذیه و دیگری برای کنترل درجه چرخش مورد استفاده قرار میگیرد ( در صورتی که سررو شما دارای 5 سیم است ، دو تا از انها برای تغذیه مدار داخلی سروو و دوتای دیگر برای تغذیه خود سروو و سیم اخر برای کنترل میباشد .( بهتر است دیتا شیت سروو را از فروشنده دریافت کنید )

راه اندازی سروو در بسکام با دستور زیر انجام میشود:

کد php:
Config Servos Servo1 Portx.Servo2 Portx.Servon Portx.Reload Rl 

Config Servos = X : نشان دهنده تعداد سروو های استفاده شده میباشد که بیشترین تعداد میتواند 14 باشد.(به جای x تعداد گذاشته میشود مانند : Config Servos = 3 )

Servo1 = Portx.y :.پایه کنترل سروو به یکی از پین های میکرو که با Portx.y مشخص شده متصل میشود.

Reload : نشان دهنده زمانی است که میکرو دوباره اطلاعات مربوط به سرو ها را روی پین مورد نظر میفرستد(این زمان برحسب میکروثانیه است

نکته:
این دستور از تایمر صفر برای راه اندازی (تولید زمان روشن بودن سروو) استفاده میکن و هنگامی که سروو را پیکربندی کردید دیگر نمیتوانید از تایمر صفر استفاده کنید.

بعد از پیکر بندی سروو نوبت به راه اندازی ان است برای این کار از دستور زیر استفاده میشود:

کد php:
Servo(x) = 

X شماره سروو است که میتواند از 1 تا14 باشد و y ضرب در 10 زمان روشن بودن سروو را نشان میدهد، که میتواند یک متغییر یا عدد صحیح باشد.مانند

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Servos 
14 Servo1 Portd.0 Servo2 Portd.1 Servo3 Portd.2_
Servo4 Portd.3 Servo5 Portd.4 Servo6 Portd.5 Servo7 Portd.6_
 
Servo8 Portd.7 Servo9 Portc.7 Servo10 Portc.6 Servo11 Portc.5_
 
Servo12 Portc.4 Servo13 Portc.3 Servo14 Portc.2 Reload 100
Config Portd 
Output Portc Output
Enable Interrupts
Dim A 
As Word
A
=10
Do
Servo(1) = Wait 1
Servo
(2) = Wait 1
Servo
(3) = Wait 1
Servo
(4) = 15 Wait 1
Servo
(5) = 20 Wait 1
Servo
(6) = 25 Wait 1
Servo
(7) = 30 Wait 1
Servo
(8) = 35 Wait 1
Servo
(9) = 40 Wait 1
Servo
(10) = 45 Wait 1
Servo
(11) = 50 Wait 1
Servo
(12) = 55 Wait 1
Servo
(13) = 60 Wait 1
Servo
(14) = 65 Wait 1
Loop
End 

در مثال بالا تعداد 14 عدد سروو به میکرو مگا 16 متصل شده است ، مدت زمان روشن بودن سروو ها به ترتیب از سروو 1 به این شرح است:
10 و 50 و100 و150 و 200 و250 و 300 و 350 و 400 و450 و500 و550 و600 و650 میکرو ثانیه است.) یک سروو فقط در یک زاویه خاص میچرخد ، مثلا از 0 تا 270 درجه یا از 0 تا 360 درجه، زمان که در بالا گفته شد ، بیان میکند که چقدر طول میکشد تا سررو به یک زاویه خاص برسد ، برای فهمیدن این زمان باید به دیتاشیت سروو مراجعه کنید ،

مثلا نوعی سررو در هر 10 میکرو ثانیه .1 درجه حرکت میکند و زاویه چرخش ان از 0 تا 10 است، بنابراین برای رسیدن به زاویه 120 درجه باید به جای y عدد 120 را قرار دهیم، در صورتی که به جای y عدد بیشتر از 180قرار دهیم سروو روی 180 قفل میشود.بیشتر مقداری که به جای y میتوانید قرار دهید 255 است.

مدار مثال بالا:

[تصویر:  attachment.php?thumbnail=2189]
بابا کسی نیست بگه ایت قسمتا از کد چی میگه؟

If Pinb.1 = 0 Then '1ms pulse out
For I = Centerservo To Rightservo Step Negservospeed
Pulseout Portb , 4 , I

و

Pulseout Portb , 4 , Centerservo

Pulseout


فرم کلي اين دستور به شکل زير است:

کد php:
Pulseout PORTX Period 

با اين دستور ميتوان يک پالس بر روي پورت PORTX و پايه Y دلخواه با زمان تناوب Period دلخواه بر حسب ميکرو ثانيه ايجاد کرد ( پایه ای که پالس بر روي آن ايجاد مي شود بايد به عنوان خروجي تعريف شود)

در صورتي که از حلقه استفاده نکنيد ، دستور فقط يک با اجرا مي شود ، اين پالس مربعي است ( در واقع و ضعيت پايه از صفر به يک يا بلعکس تغيير مي کند) .
این دستور رو میدونم مهندس جان چیکار میکنه ولی مشکل من اینکه ببین مثلا" بلا گفته:
Servospeed = 3
Negservospeed = -3
I = 0

و

Centerservo = 640
Rightservo = 430
Leftservo = 850

بعد اومده گفته :

For I = Centerservo To Rightservo Step Negservospeed
Pulseout Portb , 4 , I

خوب این یعنی چی؟
اصلا" این عدد ها یعنی چی ؟ (ممنون که جواب پست رو میدی حداقل آدم یه هم صحبت پیدا میکنه واسه ادامه کار دل گرم میشه)
مهندس یکم تفکر کنی تابلو هستن اینها چی هستن !

کد:
Centerservo = 640
Rightservo = 430
Leftservo = 850

خوب مشخصه !

واسه هر موقعیت یه عدد انتساب داده !!
وسط 640
راست 430
چپ 850


کد php:
For Centerservo To Rightservo Step Negservospeed 
حالا گفته سروو از مرکز به سمت راست حرکت کنه !
سرعت رو هم مشخص کرده که با چی پله ای به سمت راست حرکت کنه !


کد php:
Pulseout Portb 
با این دستور هم رو پورت ب 4 پالس لازم برای سروو موتور رو تولید کرده !
البته این دستور به تنهایی کافی نیست .
چون به نظر من راه اندازی سروو موتور با این روش اصولی نیست ! ( هر چند کار می کنه )
چون پهنای پالس بالا و پایین اینجوری برابره !! در صورتی که برای راه اندازی اصولی سروو موتور باید پالس زیر به سروو موتور داده شود !

از خود دستورات بسکام مخصوص سروو استفاده می کرد بهتر بود !!!



[تصویر:  servo_pulse_width.png]

[تصویر:  fig1.jpg]

[تصویر:  pulse_code.jpg]

[تصویر:  servo_20pulse.jpg]

خدا پدر و مادرت رو بیامرزه دستت درد نکنه مهندس جان این راهنمایی های تو کامل و جامع ترین راهنمایی در مورد سرووها توی کل نت هست تا الان که من بهتر از این مطلب پیدا نکرده بودم.
یک دنیا ممنونم ازت یکی نیست بگه مهندس آی تی و چه به این کارا از دست این پروژه پایانی آخر دوره
بازم ممنونم ازت.