ايران ويج

نسخه‌ی کامل: چپ گرد راست گرد موتور در بسکام
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
من یک پروژه درایو موتور توی بسکام دارم که باهاش سرعت موتور کم و زیاد می کنم می خواهم چپگرد و راست گرد موتورهم به برنامه اضافه کنم(به وسیله فشردن کلیدی متصل به PB.1 ). باید چه کار کنم؟ من به زبان بیسک مسلط نیستم. کسی می تونه کمک کنه؟
اصل برنامه هم اینه
کد:
$crystal = 8000000
Config Portd = Output
Config Porta = Output
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7,_  
E = Portc.3 , Rs = Portc.2
Muxled Alias Porta.0
Minled Alias Porta.1
En1 Alias Portd.6
Aled Alias Porta.2
Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare A Pwm = Clear Down,_  
Compare B Pwm = Clear Down
Config Timer0 = Counter , Edge = Rising
Config Timer2 = Timer , Prescale = 1024
Enable Counter0
Enable Interrupts
Enable Timer0
Enable Timer2
Cls
Home
"Lcd " dc motor speed
Home Lower
"Lcd "   controling  
Wait 2
On Ovf0 Sh
On Ovf2 Edd
Dim A As Word , B As Byte , C As Word , I As Long
'//////////////////////
Enable Timer1
A = 500
Start Timer1
En1 = 1
B = 0
Start Timer2
Main:
Counter0 = 0
Start Timer2
Pwm1a = A
Pwm1b = 0                                                   'Used for 2 PWM channels                                    
Do
:Main1
If Pinb.4 = 0 Then Goto Afzayesh
If Pinb.3 = 0 Then Goto Kahesh
If Pinb.2 = 0 Then Goto Change
Loop



'////////////////////////
:Afzayesh
If A = 50 Then A = 0
A = A + 100
If A >= 1000 Then
A = 1000
Muxled = 1
Home
Cls
"Lcd " muximum range  
Wait 1
End If
If Minled = 1 Then Minled = 0
Aled = 1
Waitms 500
Aled = 0
B = 0
Goto Main
'///////////////////////
:Kahesh
If A > 100 Then
A = A - 100
If Muxled = 1 Then Muxled = 0
Aled = 1
Waitms 500
Aled = 0
B = 0
Goto Main
End If
A = 50
Minled = 1
Cls
Home
"Lcd " minimum range  
Aled = 1
Waitms 500
Aled = 0
Wait 1
Goto Main
'/////////////////////
:Change
Toggle En1
Aled = 1
Waitms 500
Aled = 0
Goto Main
End

:Edd
Incr I
If I > 30 Then
Stop Timer2
Cls : Home
C = 0
If B > 2 Then B = 1
C = B * 256
C = C + Counter0
C = C / 7
C = C * 60
"Lcd "speed is:" ; C ; "rpm
B = 0
I = 0
Counter0 = 0
Start Timer2
End If
Return

:Sh
Incr B
Counter0 = 0
Return
من این برنامرو نوشتم ولی زیاد مطمئن نیستم درست باشه
فقط با فشردن کلیدی متصل به B.1 به راست و B.2 به چپ میره
کد:
Config Portb.0 = Output
  Config Portb.3 = Output
   Config Portd.6 = Output
    Config Portd.7 = Output
     Config Portb.1 = Output
     Config Portb.2 = Output
    Do
    Main:
    If Pinb.1 = 1 Then Goto R2
    If Pinb.2 = 1 Then Goto L2
    If Pinb.1 = 0 And Pinb.2 = 0 Then Goto F
    Loop

  F:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 1023
Goto Main

L1:

Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 600
Pwm1b = 1023
Goto Main

R1:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 600
Goto Main
(۱۱-تير-۱۳۹۲, ۱۵:۵۳:۳۸)helma نوشته است: [ -> ]من این برنامرو نوشتم ولی زیاد مطمئن نیستم درست باشه
فقط با فشردن کلیدی متصل به B.1 به راست و B.2 به چپ میره
کد:
Config Portb.0 = Output
  Config Portb.3 = Output
   Config Portd.6 = Output
    Config Portd.7 = Output
     Config Portb.1 = Output
     Config Portb.2 = Output
    Do
    Main:
    If Pinb.1 = 1 Then Goto R2
    If Pinb.2 = 1 Then Goto L2
    If Pinb.1 = 0 And Pinb.2 = 0 Then Goto F
    Loop

  F:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 1023
Goto Main

L1:

Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 600
Pwm1b = 1023
Goto Main

R1:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 600
Goto Main
ممنون از پاسختون
راستش به PB1 PB2 PB3 PB4 کلید وصل هست که یکی برای افزایش سرعت، یکی برای کاهش ،یکی برای روشن و خاموش شدن موتور ویکی هم برای چپ گرد راست گرد هست. ضمن اینکه قسمتی از برنامه مربوط به اندازه گیری دور موتور بوسیلهopto counter هست.چون PCB مدارش رو زدم کلید دیگه نمی تونم بهش اضافه کنم.
(۱۱-تير-۱۳۹۲, ۱۵:۵۳:۳۸)helma نوشته است: [ -> ]من این برنامرو نوشتم ولی زیاد مطمئن نیستم درست باشه
فقط با فشردن کلیدی متصل به B.1 به راست و B.2 به چپ میره
کد:
Config Portb.0 = Output
  Config Portb.3 = Output
   Config Portd.6 = Output
    Config Portd.7 = Output
     Config Portb.1 = Output
     Config Portb.2 = Output
    Do
    Main:
    If Pinb.1 = 1 Then Goto R2
    If Pinb.2 = 1 Then Goto L2
    If Pinb.1 = 0 And Pinb.2 = 0 Then Goto F
    Loop

  F:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 1023
Goto Main

L1:

Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 600
Pwm1b = 1023
Goto Main

R1:
Set Portb.0
Reset Portd.7

Set Portb.3
Reset Portd.6

Pwm1a = 1023
Pwm1b = 600
Goto Main

یک سوال: این که در تموم حلقه ها (r1, l1, f) برنامه یکسانه. نباید برای راستگرد و چپگرد پینها به صورت برعکس set, reset بشن؟
این برنامه با استفاده از سرعت موتور ها کار میکنه یعنی برای چزخش به چپ سرعت موتور چپ کم میشه سرعت مور راست زیاد میشه و برای گردش به راست سرعت موتور راست کم میشه و سرعت موتور چپ کم میشه و روبات میتونه به راحتی به یک سمت بپیچه
(۰۸-شهریور-۱۳۹۲, ۱۱:۲۶:۱۷)hadikh73 نوشته است: [ -> ]این برنامه با استفاده از سرعت موتور ها کار میکنه یعنی برای چزخش به چپ سرعت موتور چپ کم میشه سرعت مور راست زیاد میشه و برای گردش به راست سرعت موتور راست کم میشه و سرعت موتور چپ کم میشه و روبات میتونه به راحتی به یک سمت بپیچه

اگر بخوام کاملا به یک سمت بچرخه یعنی در جهت مخالف دیگه نچرخه میتونم جای set , reset رو عوض کنم و اصلا روی سرعت مانور ندم. چون سرعت برام مهم نیست . و اصلا از pwm استفاده نکنم؟
بله شما می تونید کلا بی خیال PWM بشین و
اگر می خواهین به صورت کاملا معمولی بچرخین یکی از موتور ها رو خاموش کنین و با دیگری بچرخین
اگر می خواهین با سرعت زیاد بچرخین می تونید یک از موتور ها رو بر عکس کنین و با سرعت به جهت مخلف بچرخین
(۰۸-شهریور-۱۳۹۲, ۱۲:۲۴:۳۰)hadikh73 نوشته است: [ -> ]بله شما می تونید کلا بی خیال PWM بشین و
اگر می خواهین به صورت کاملا معمولی بچرخین یکی از موتور ها رو خاموش کنین و با دیگری بچرخین
اگر می خواهین با سرعت زیاد بچرخین می تونید یک از موتور ها رو بر عکس کنین و با سرعت به جهت مخلف بچرخین
پس با این رروش که گفتم درست کار میکنه دیگه؟ جابجا کردن set , reset?
نیازی به استفاده از تایمر هست؟
بله میشه
بستگی داره چطور بخواهین برنامه بنویسین در حالت عادی نه نیازی به تایمر نداره