باسلام من میخوام یک موج مربعی بسازم با فرکانس متغیراز 2-25 کیلو و پهنای پالسه از 10 تا 90 درصد اما پالسم خطا داره و از 15 کیلو به بالا خطاش خیلی زیاد میشه با پهنای پالسه 10 درصد فرکانسمم تغییر میکنه چطوری میتونم خطاما کم کنم من با بیسکام برنامما نوشتم ممنون
اطلاعیه
Collapse
No announcement yet.
موج مربعی با فرکانس و پهنای پالسه متغیر
Collapse
X
-
پاسخ : موج مربعی با فرکانس و پهنای پالسه متغیر
نوشته اصلی توسط زوارباسلام من میخوام یک موج مربعی بسازم با فرکانس متغیراز 2-25 کیلو و پهنای پالسه از 10 تا 90 درصد اما پالسم خطا داره و از 15 کیلو به بالا خطاش خیلی زیاد میشه با پهنای پالسه 10 درصد فرکانسمم تغییر میکنه چطوری میتونم خطاما کم کنم من با بیسکام برنامما نوشتم ممنون
میشه برنامه رو بزارید تا ببینم ، اینطوری فکر می کنم من و دیگر دوستان بهتر می توانند راهنمایی کنند.
موفق باشید
-
پاسخ : موج مربعی با فرکانس و پهنای پالسه متغیر
اینم برنامم البته اون LOOKUP TABLE برای جبرانه خطا گذاشتم اما روش خوببی نیست وخودش مشکل ایجاد میکنه لطفا کمک کنید چه جوری میتونم این خطا را درست کنم ممنونم
$regfile = "m64def.dat"
$crystal = 8000000
Invert Alias Portd.3 'change to portx.x based on hardware
Noninvert Alias Portd.4 'change to portx.x based on hardware
Config Timer1 = Timer , Prescale = 1
Config Timer3 = Timer , Prescale = 1
Declare Sub Fduty
Config Portd = Output
Reset Noninvert 'non invert
Set Invert 'invert
Dim Ontime As Word , Offtime As Word , F As Word , T As Single , Dc As Byte
Dim Ton As Single , Toff As Single
'F = 6000
'Dc = 50
Enable Interrupts
Enable Timer1
Enable Timer3
On Timer1 Ovf1routin
On Timer3 Ovf3routin
'Home
Call Fduty
Do
Loop
End
Ovf1routin:
Stop Timer1
Reset Noninvert
Set Invert
Timer3 = Offtime
Start Timer3
Return
Ovf3routin:
Stop Timer3
Set Noninvert
Reset Invert
Timer1 = Ontime
Start Timer1
Return
'-------------------------------------Sub---------------------------------------
Sub Fduty
Stop Timer1
Stop Timer3
'---------------------------------CorrectionTable-------------------------------
'******************************************** ***********************************
Select Case F
Case 1000 To 1500 : F = F * 1.024417
Case 1600 To 2000 : F = F * 1.03922
Case 2100 To 2500 : F = F * 1.04904
Case 2600 To 3000 : F = F * 1.05924
Case 3100 To 3500 : F = F * 1.06802
Case 3600 To 4000 : F = F * 1.08084
Case 4100 To 4500 : F = F * 1.09362
Case 4600 To 5000 : F = F * 1.10316
Case 5100 To 5500 : F = F * 1.11434
Case 5600 To 6000 : F = F * 1.12196
Case 6100 To 6500 : F = F * 1.133104
Case 6600 To 7000 : F = F * 1.14196
Case 7100 To 7500 : F = F * 1.15304
Case 7600 To 8000 : F = F * 1.16502
Case 8100 To 8500 : F = F * 1.17496
Case 8600 To 9000 : F = F * 1.18242
Case 9100 To 9500 : F = F * 1.1976
Case 9600 To 10000 : F = F * 1.213
Case 10100 To 10500 : F = F * 1.21736
Case 10600 To 11000 : F = F * 1.2234
Case 11100 To 11500 : F = F * 1.2454
Case 11600 To 12000 : F = F * 1.248
Case 12100 To 12500 : F = F * 1.275
Case 12600 To 13000 : F = F * 1.261
Case 13100 To 13500 : F = F * 1.296
Case 13600 To 14000 : F = F * 1.302
Case 14100 To 14500 : F = F * 1.2905
Case 14600 To 15000 : F = F * 1.305
Case 15100 To 15500 : F = F * 1.3175
Case 15600 To 16000 : F = F * 1.344
Case 16100 To 16500 : F = F * 1.353
Case 16600 To 17000 : F = F * 1.343
Case 17100 To 17500 : F = F * 1.3475
Case 17600 To 18000 : F = F * 1.404
Case 18100 To 18500 : F = F * 1.424
Case 18600 To 19000 : F = F * 1.425
Case 19100 To 19500 : F = F * 1.4235
Case 19600 To 20000 : F = F * 1.44
Case 20100 To 20500 : F = F * 1.4555
Case 20600 To 21000 : F = F * 1.449
Case 21100 To 21500 : F = F * 1.462
Case 21600 To 22000 : F = F * 1.452
Case 22100 To 22500 : F = F * 1.4625
Case 22600 To 23000 : F = F * 1.495
Case 23100 To 23500 : F = F * 1.504
Case 23600 To 24000 : F = F * 1.512
Case 24100 To 24500 : F = F * 1.519
Case 24600 To 25000 : F = F * 1.525
Case 25100 To 25500 : F = F * 1.555
Case 25600 To 26000 : F = F * 1.56
End Select
'******************************************** ***********************************
'-------------------------------------------------------------------------------
T = 8000000 / F
Ton = Dc * T
Ton = Ton / 100
Toff = T - Ton
Ontime = 65536 - Ton
Offtime = 65536 - Toff
Timer1 = Ontime
Timer3 = Offtime
Start Timer1
End Sub Fduty
'---------------------------------EndSub----------------------------------------
دیدگاه
-
پاسخ : موج مربعی با فرکانس و پهنای پالسه متغیر
سلام به همه دوستان خسته نباشین ووقت همتون بخیر
راستش من می خوام بوسیله میکرو atmega 16و ir 2113و mosfet برق 12 dc رو به 12ac بتبدیل کنم و بعد انو با ترانس افزایش دهنده به 220 acتبدیل کنم و حالا دنبال یه مداری میگردم و یا اینکه اساتید یه مقاله ای کتابی سایتی چیزی رو معرفی کنند و یا زحمت عنوان کردن اینکه من باید برنامه میکرو رو بر چه منطقی و چطور بنویسم
من یه سخت افزار رو دیدم که با این روش کار میکرد ولی برنامه میکرو اونو میخوام نمی دونم برنامه رو از کجا شروع کنم و با اون سخت افزار تستش کنم با بسکام کار میکنم
خلاصه اینکه برای تبدیل 12 dcبه 12ac به چه نکاتی باید توجه کنم و یه توضیحی از نحوه عمل کرد ir2113و چطور راه اندازی اون بوسیله میکرو خیلی زیاد اطلاعات می خوام نه ؟ به هر حال پیشاپیش از همه شما عزیزان ممنون هستم
دیدگاه
-
پاسخ : موج مربعی با فرکانس و پهنای پالسه متغیر
زوار این راهی که میری به بیراهه میخوره هر کاری کنی نمیتونی دقیق در بیاری
تفکرت درسته و مشکلی نداره اما خیلی چیزهای دیگه هم هست که باید به سخت افزار avr توجه کرد!
که وقتی یک دستور اجرا میشود چه کارهایی میکند!
تازه این چیزی که شما گذاشتی با prescale=1 هست یعنی تضمینی برای کمترین خطا نیست من خودم با همین تایمر باورت نمیشه برنامه وحشتناکی نوشتم که وقتی فرکانس بهش میدادی به طور خودکار بهترین prescale رو انتخاب میکرد تا کمترین خطا داشته باشه و ....
البته شاید شما بتونی این کار رو کنی (الله اعلم!)
حالا من این رو برای شما بزارم :
قسمت تولید موج مربعی رو ببین !!!
بی نظیر هست تا حالا هیچ جایی و حتی کل اینترنت ندیدم دیوتی سایکل دیجیتال (به کار خودم افتخار میکنم!)
حاصل 3 ماه تلاش!
http://micro-project.blogfa.com/post-94.aspx
http://micro-project.blogfa.com/post-97.aspx
دیدگاه
دیدگاه