اطلاعیه

Collapse
No announcement yet.

راه اندازی سروو موتور با استفاده از تایمر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی سروو موتور با استفاده از تایمر

    سلام عرض میکنم خدمت مهندسای انجمن
    یه سوال دارم لطف کنید جوابمو بدین
    قطعه کد زیر با ااستفاده از بسکام برای کنترل 2تا سروو موتوره :
    'Servo Motor
    '-----------------------
    $regfile = "m48def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = _
    Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0
    Config Lcd = 16 * 2
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portc = Input
    '--------------------------
    Clkpr = &H80
    Clkpr = &H00
    '-------------Timer1 As PWM
    Tccr1a = &HA2
    Tccr1b = &H1A
    Tcnt1h = &H00
    Tcnt1l = &H00
    Icr1h = &H3A
    Icr1l = &H98
    Ocr1ah = &H05
    Ocr1al = &HDC
    Ocr1bh = &H05
    Ocr1bl = &HDC
    '--------------------------
    Declare Function Lcd_show_position()as Byte
    '--------------------------
    Dim Pwm1 As Word
    Dim Pwm2 As Word
    Dim Pwm_temp As Word
    Dim L As Byte
    Dim M1 As Byte , M2 As Byte
    '--------------------------
    Pwm1 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    Pwm2 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm1
    '--------------------------
    Cursor Off
    Cls
    Lcd "Start"
    Waitms 500
    Cls
    Lcd "Servo1> Deg"
    Lowerline
    Lcd "Servo2> Deg"
    Waitms 500
    L = Lcd_show_position()
    '--------------------------
    Do
    M1 = Pinc And &H03
    M2 = Pinc And &H0C
    '--------------------------
    Select Case M1
    Case 2:
    If Pwm1 < 2400 Then
    Incr Pwm1
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    L = Lcd_show_position()
    End If
    Case 1:
    If Pwm1 > 600 Then
    Decr Pwm1
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    L = Lcd_show_position()
    End If
    End Select
    '--------------------------
    Select Case M2
    Case 8:
    If Pwm2 < 2400 Then
    Incr Pwm2
    Pwm_temp = Pwm2
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm2
    L = Lcd_show_position()
    End If
    Case 4:
    If Pwm2 > 600 Then
    Decr Pwm2
    Pwm_temp = Pwm2
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm2
    L = Lcd_show_position()
    End If
    End Select
    '---------------------------
    If Pinc.4 = 0 Then
    Cls
    Lcd "Servo1> Deg"
    Lowerline
    Lcd "Servo2> Deg"
    Pwm1 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    Pwm2 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm1
    L = Lcd_show_position()
    End If
    Loop
    End
    '--------------------------
    Function Lcd_show_position() As Byte
    Dim P1 As Integer
    Dim P2 As Integer
    P1 = Pwm1 - 600
    P1 = P1 / 10
    P2 = Pwm2 - 600
    P2 = P2 / 10
    Locate 1 , 9
    Lcd " "
    Locate 1 , 9
    Lcd P1
    Locate 2 , 9
    Lcd " "
    Locate 2 , 9
    Lcd P2
    End Function

    می خوام بدون این کد دقیقا چیکار میکنه؟
    Clkpr = &H80
    Clkpr = &H00
    سوال بعد اینکه مقادیری که روبروشه جریانش چیه؟اصلا کلا جریان مقادیری که به صورته هگزادسیمال هست چیه؟!!!
    لطف میکنید اگه جوابمو بدین

    #2
    پاسخ : راه اندازی سروو موتور با استفاده از تایمر

    نوشته اصلی توسط mrssb.legend
    سلام عرض میکنم خدمت مهندسای انجمن
    یه سوال دارم لطف کنید جوابمو بدین
    قطعه کد زیر با ااستفاده از بسکام برای کنترل 2تا سروو موتوره :
    کد:
    'Servo Motor
    '-----------------------
    $regfile = "m48def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = _
    Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0
    Config Lcd = 16 * 2
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portc = Input
    '--------------------------
    Clkpr = &H80
    Clkpr = &H00
    '-------------Timer1 As PWM
    Tccr1a = &HA2
    Tccr1b = &H1A
    Tcnt1h = &H00
    Tcnt1l = &H00
    Icr1h = &H3A
    Icr1l = &H98
    Ocr1ah = &H05
    Ocr1al = &HDC
    Ocr1bh = &H05
    Ocr1bl = &HDC
    '--------------------------
    Declare Function Lcd_show_position()as Byte
    '--------------------------
    Dim Pwm1 As Word
    Dim Pwm2 As Word
    Dim Pwm_temp As Word
    Dim L As Byte
    Dim M1 As Byte , M2 As Byte
    '--------------------------
    Pwm1 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    Pwm2 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm1
    '--------------------------
    Cursor Off
    Cls
    Lcd "Start"
    Waitms 500
    Cls
    Lcd "Servo1> Deg"
    Lowerline
    Lcd "Servo2> Deg"
    Waitms 500
    L = Lcd_show_position()
    '--------------------------
    Do
    M1 = Pinc And &H03
    M2 = Pinc And &H0C
    '--------------------------
    Select Case M1
    Case 2:
    If Pwm1 < 2400 Then
    Incr Pwm1
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    L = Lcd_show_position()
    End If
    Case 1:
    If Pwm1 > 600 Then
    Decr Pwm1
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    L = Lcd_show_position()
    End If
    End Select
    '--------------------------
    Select Case M2
    Case 8:
    If Pwm2 < 2400 Then
    Incr Pwm2
    Pwm_temp = Pwm2
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm2
    L = Lcd_show_position()
    End If
    Case 4:
    If Pwm2 > 600 Then
    Decr Pwm2
    Pwm_temp = Pwm2
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm2
    L = Lcd_show_position()
    End If
    End Select
    '---------------------------
    If Pinc.4 = 0 Then
    Cls
    Lcd "Servo1> Deg"
    Lowerline
    Lcd "Servo2> Deg"
    Pwm1 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1ah = Pwm_temp
    Ocr1al = Pwm1
    Pwm2 = 1500
    Pwm_temp = Pwm1
    Shift Pwm_temp , Right , 8
    Ocr1bh = Pwm_temp
    Ocr1bl = Pwm1
    L = Lcd_show_position()
    End If
    Loop
    End
    '--------------------------
    Function Lcd_show_position() As Byte
    Dim P1 As Integer
    Dim P2 As Integer
    P1 = Pwm1 - 600
    P1 = P1 / 10
    P2 = Pwm2 - 600
    P2 = P2 / 10
    Locate 1 , 9
    Lcd " "
    Locate 1 , 9
    Lcd P1
    Locate 2 , 9
    Lcd " "
    Locate 2 , 9
    Lcd P2
    End Function
    می خوام بدون این کد دقیقا چیکار میکنه؟
    Clkpr = &H80
    Clkpr = &H00
    سوال بعد اینکه مقادیری که روبروشه جریانش چیه؟اصلا کلا جریان مقادیری که به صورته هگزادسیمال هست چیه؟!!!
    لطف میکنید اگه جوابمو بدین
    سلام

    توی بعضی از مدلهای AVR امکاناتی گذاشتن که بشه فرکانس ورودی رو تقسیمش کنید و این باعث میشه توی مصرف انرژی که در گاهی اوقات که نیازی به پردازش اضافه نیست از این امکان استفاده میکنیم و مصرف انرژی را پایین می آوریم ...
    برای تنظیم کردن این مقسم فرکانسی ابتدا باید از دستور بالایی استفاده کنیم و سپس دستور پایینی که نشانگر اینه که روی چه مقسم فرکانسی قرار بگیره ...
    مثلا در اینجا مقسم فرکانسی یک است ...
    توی دیتاشیتش هم مطالعه کنید گفته که مقادیرش چقدر باشه روی چه مقسمی تنظیم میشه ....

    موفق باشید
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه

    لطفا صبر کنید...
    X