نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه

آموزش آرم میکروکنترلر lpc1768 جلسه ۱۱ pwm

به نام خدا : خداروشکر میکنم که تونستم بلاخره این مطلبو بنویسم، آخه مطلب نوشتن سخته، حالا ان شاء الله شما هم نویسنده میشید و چیزایی که بلدید رو به اشتراک میزارید و اون وقت حرف منو متوجه میشید؛ الان من تا این جلسه ۱۱ آرم که نوشتم نظرات شاید ۲۰ تا نشه اون تاژه شاید، بگذریم، تو این مطلب به فصل ۲۴ ام دیتاشیت سری میزنیم و یادش میگیریم، عنوان این فصل (Pulse Width Modulator (PWM هستش، که با توجه به عنوان این فصل، کار ما کنترل عرض پالس هستش، یا همون کنترل Duty Cycle هستش کل کار ما تو این مطلب ( همون کنترل ولتاژ )، و کاری به فرکانس و تنظیمش تو این مطلب به اون صورت نداریم هر چند که میتونیم تنظبم کنیم فرکانس رو هم؛ حالا برا این مورد در ته مطلب در قسمت توضیح توابع کتابخونه، توضیح بیشتر میدم. ( آموزش آرم میکروکنترلر lpc1768 جلسه ۱۱ pwm )
آموزش آرم میکروکنترلر lpc1768 جلسه ۱۱ pwm

آموزش آرم میکروکنترلر lpc1768 جلسه ۱۱ pwm


 

پیشنیاز این مطلب : به نظرم بهتره قبل از خوندن این مطلب، دو مطلب تایمر زیر رو بخونید :

  1. آموزش آرم میکروکنترلر lpc1768 جلسه ۷ timer counter ق۱
  2. آموزش آرم میکروکنترلر lpc1768 جلسه ۷ timer counter ق۲

 
مطالب مرتبط با این مطلب :

  1. LPC1768 - PWM
  2. آموزش PWM در میکروکنترلر LPC1768

 
پروژه های این مطلب : 

  1. پروژه led rgb با میکروکنترلر lpc1768 و سی شارپ
  2. پروژه کنترل دور موتور dc با میکرو lpc1768 و l298n
  3. کنترل دور موتورهای multi-phase که AC هستن!!! ( این پروژه بمونه برا بعد، باید برم موتور AC و درایورش رو بخرم که فعلا نخریدم هنوز ^_^ )

 
هزینه این مطلب : چیزایی که بلدید رو تو نت به اشتراک بزارید ( نترسید دیگران هم چیزایی که شما بلدین رو یاد بگیرن اتفاق خاصی نمیوفته )
 
توجه : اون قسمت های صورتی رنگ بعضیاشون مربوطه به بحث موتور های multi-phase ( بحث دو لبه ) که فعلا نیازتون نیست منم مطالعه نکردم و پروژه ای باهاشون نبستم، فعلا اینا رو بیخیال شید، یه سری هم توضیحات بود که انگلیسی من جواب نداد، نخوندن اینا هم مشکلی ایجاد نمیکنه، اصل کار رجیسترها هستش که توضیح دادم.

 

PWM چیست و توضیح Duty Cycle

برا این کار بهتره فیلم زیر، که آماده کردم براتون رو ببینید :
http://www.aparat.com/v/n4veM

 
 

پیکربندی ابتدایی PWM

پیکربندی ابتدایی PWM

واجد جانبی PWM به کمک رجیسترهای زیر پیکربندی میشه.

  1. Power : در رجیستر PCONP ( جدول ۴۶ )، بیت PCPWM1 رو تنظیم کنید ( اول کاری که باید انجام بدیم اینه که برق این واحد رو روشن کنیم )
    توجه : در هنگام ریست، واحد PWM فعال میشه به صورت خودکار ( بیت PCPWM1  از رجیستر PCONP فعال میشه، لذا نیازی نیست ما برق این واحد رو فعال کنیم چون خودش به صورت خودکار فعال میشه، ولی خب بهتره ما فعالش کنیم!-نظر من نویسنده- )
  2. Peripheral clock : در رجیستر PCLKSEL0 ( جدول ۴۰ )، PCLK_PWM1 رو انتخاب کنید. ( بعد از روشن کردن برق، باید کلاک این واحد رو تنظیم کنیم )
  3. Pins : پایه های PWM رو انتخاب کنید به کمک رجیسترهای تعیین نقش پایه ها یعنی رجیستر PINSEL؛ برا تعیین مد پایه های PWM هم از رجیستر PINMODE میتونید استفاده کنید ( بعد از تنظیم برق و کلاک، باید پایه های مورد نیازمون رو نقششون رو PWM تنظیم کنیم که برا این مورد در جلسات اولیه آموزشش رو قرار دادم )
  4. Interrupts : رجیسترهای PWM1MCR ( جدول ۴۰ ) و PWM1CCR ( جدول ۴۵۰ ) و PWM1CCR ( جدول ۴۵۱ ) برای رخدادهای match و capture هستند؛ بعد از تنظیم رجیسترهای وقفه مدنظر، باید به کمک NVIC وقفه این واحد رو فعال کنیم ( استفاده از وقفه اختیاری هستش و اجباری نیست >>> اختیاری اجباری هم نیست ^_^، آخه دیدین تو دانشگو بعضی درسا اختیاری هستش ولی مجبوری برشون داری چون درس دیگه ای ارائه نمیشه، از این بابت گفتم اختیاری اجباری ^_^ )
 
خصوصیات PWM میکروکنترلر LPC1768

خصوصیات PWM میکروکنترلر LPC1768

  1. عملیات تایمر/کانتر ممکنه از یکی از پایه های ورودی capture به عنوان منبع clock استفاده کنه. ( یعنی پایه های کپچر pwm و timer یکسانه؟ به خاطره همین بود که نمیشد همزمان از دوتا پایه کپچر تایمر استفاده کرد؟ )
  2. وجود ۷ رجیستر match که اجازه میده تا ۶ تک edge یا ۳ تا دوبل edge کنترل بشن بوسیله خروجیهای PWM ( تک edge با دوبل edge چه فرقی داره؟ ) یا ترکیبی از این دوتا؛ رجیسترهای match همچنین به ما این اجازه ها رو میدن :
    - Continuous operation with optional interrupt generation on match
    - متوقف شدن تایمر در match با تولید وقفه اختیاری ( میتونیم رخ دادن یا ندادن وقفه رو تعیین کنیم، رخ دادن یا ندادنش دست ما هستش )
    - ریست شدن تایمر در match با تولید وقفه اختیاری
  3. میتونیم به عنوان یه تایمر استاندارد استفاده کنیم از این واحد، حتی اگه مد PWM فعال نباشه.
  4. وجود دو کانال ورودی کپچر ۳۲ بیتی با قابلیت تولید وقفه ( کپچر چیه و کارش چیه و ... رو در مطلب تایمر/کانتر توضیح دادم قبلا )
  5. وجود یه تایمر/شمارنده ۳۲ بیتی با یه prescaler ( این که چی هستش و کارش چیه رو قبلا در مطلب تایمر/کانتر جلسه اول فک کنم، توضیح دادم ) ۳۲ بیتی قابل برنامه ریزی.
  6. قابلیت تعیین و تغییر فرکانس ( هر ۶ تا PWM بلاجبار باید یه فرکانس داشته باشن و نمیشه برا هر کانال PWM یه فرکانس مجزا داشت ) و دیوتی سایکل
  7. پشتیبانی از حالت single edge و double edge برای خروجی های PWM
  8. چون بیشتر کار ما تو PWM کنترل دیوتی سایکل هستش لذا وقتی مقدار رجیسترهای MRn رو اعمال کردیم، برا این که برابری بتونه رخ بده باید اجازه رخ دادن براری رو صادر کنیم ( این موضوع تو بحث تایمر وجود نداشت ولی تو pwm بلاجبار مجبوریم این کار رو بکنیم، برا دونستن دلیلش هم به بلوک دیاگرام pwm که در ادامه مطلب قرار میدم مراجعه کنید) که این کار توسط رجیستر LER انجام میده که مخفف PWM Latch Enable Register هستش و فعال ساز لچ هستش این رجیستر ( حالا اگه دوست دارید بدونید لچ چیه و کارش چیه به درس مدار منطقی مراجعه کنید که فیلم و کتبش تو نت هستش هم رایگان و هم پولی )
    در حالت Single edge : در شروع شمارش، پایه ها high میشن و وقتی شمارنده به MRn ( که n مقداری بین ۱ تا ۶ دارد ) برسه خروجی تاگل میشه ( low میشه ) و وقتی شمارنده به MR0 رسید، شمارنده ریست میشه و دوباره مقدار پایه MRn یک ( high ) میشه و...
    در حالت Double edge :

Double edge controlled PWM outputs can have either edge occur at any position within a cycle. This allows for both positive going and negative going pulses.
• Double edge controlled PWM outputs can be programmed to be either positive going or negative going pulses.
• Match register updates are synchronized with pulse outputs to prevent generation of erroneous pulses. Software must "release" new match values before they can become effective.

 
توضیح PWM

توضیح PWM

PWM بر مبنای یه تایمر استاندارد هستش که تمام خصوصیات تایمر رو به ارث برده، ۶ تا پایه pwm داریم رو میکروکنترلر؛ و بر مبنای ۷ رجیستر برابری کار میکنه و قابلیت تغییر فرکانس و D.C رو هم داریم.
۷ تا رجیستر match با نام های MR0 تا MR6 داریم که از رجیستر MR0 برا تعیین فرکانس موج های PWM استفاده میکنیم ( PWM cycle rate )؛ که شمارنده تایمر وقتی به این مقدار برسه باید ریست بشه ( اینو خودمون باید تنظیم کنیم که وقتی شمارنده با MR0 برابر شد، شمارنده ریست بشه )، با بقیه رجیسترهای match هم Duty Cycle موج PWM کانال های ۱ تا ۶ رو تنظیم میکنیم.

سوال ۱ : چطوری با رجیستر MR0 میای و فرکانس کانال های ۱ تا ۶ PWM رو تعیین میکنی؟ و چطور به کمک MR1 تا MR6 دیوتی سایکل ها رو تنظیم میکنی؟
جواب ۱ : خب یه شمارنده تایمر داریم به نام TC، کارش اینه که از ۱ میشموره تا ۴۲۹۴۹۶۷۲۹۵ و ما میایم رجیسترها رو طوری تنظیم میکنیم که وقتی TC با MR0 برابر شد، بیاد و مقدار TC رو ریست کنه؛ حالا مثلا ما مقدار MR0 رو ۲۵۶ تنظیم میکنیم، و مقدار MR1 رو ۱۲۸ تنظیم میکنیم، حالا شمارنده میشموره و در شروع شمارش همون طور که قبلا گفتم مقدار پایه ها ( در اینجا PWM-1 ) رو ۱ میکنه و وقتی شمارنده با MRn ( در این مثال ما MR1 ) برار شد خروجی تاگل میشه ( در اینجا ۰ میشه ) و وقتی شمارنده با MR0 برابر شد، مقدار شمارنده ریست میشه و دوباره مقدار پایه ها یک میشن؛ خب حالا به کمک MR0 میایم و این زمان دوره تناوب موج PWM مون رو تعیین میکنیم؛ مثلا مقدارش رو میزاریم رو ۱۰۰۰، وقتی شمارنده مقدارش ۱ میشه، پایه PWM-1 مقدارش HIGH میشه و وقتی به ۱۲۸ رسید، PWM-1 مقدارش ۰ میشه و وقتی شمارنده به ۱۰۰۰ رسید مقدارش ریست میشه و ۱ میشه و دوباره مقدار پایه ۱ میشه؛ میینید که الان به اندازه ۱۲۸ تا کلاک مقدار پایه ۱ بوده و از ۱۲۸ تا ۱۰۰۰ که تقریبا میشه ۸۷۲ تا کلاک خروجی PWM-1 مقدارش ۰ بوده - میبینید که به کمک MR0 زمان یه دوره تناوب موج PWM رو میشه کنترل کرد، یعنی فرکانس PWM رو کنترل میکنیم، و به کمک MRn ها و این که کی پایه وضعیتش تغییر کنه هم دیوتی سایکل رو تعیین میکنیم ( همون این که چند درصد موج مقدارش ۱ باشه و چند درصد مقدارش ۰ یا همون کنترل ولتاژ ) ----- امیدوارم متوجه شده باشید، اگه نشدید باید نموداری توضیح بدم براتون که بهترین روش هم همینه ولی چطوری نموداری توضیح بدم نمیدونم  و بلد نیستم - کسی اگه نرم افزار خوبی سراغ داره و روش خوبی بگه.
 
سوال ۲ : چرا از ۱ میشموره تا ۴۲۹۴۹۶۷۲۹۵؟ مگه نباید شمارش از ۰ شروع بشه؟
جواب ۲ : چون رجیستر ها تو آرم ۳۲ بیتی هستن و ۲ به توان ۳۲ میشه ۴۲۹۴۹۶۷۲۹۶ و چون شمارش از ۰ شروع میشه تو میکرو نوشتم ۴۲۹۴۹۶۷۲۹۵؛ حرفت درسته ولی اگه سراغ رجیستر TCR بیت ۳ امش برید میبیتید که وقتی مد PWM رو فعال کنیم شمارش از ۱ شروع میشه و نه ۰؛ لذا به این دو دلیل من نوشتم شمارنده از ۱ تا ۴۲۹۴۹۶۷۲۹۵ میشموره، وسلام!
 
سوال ۳ : خب ما با MR0 فرکانس موج های PWM رو تنظیم میکنیم، حالا چطور بفهمم که مقدار فرکانس رو بر روی چند تنظیم کردم و یا مثلا مقدار فرکانس رو میخوام رو X تنظیم کنم، مقدار MR0 رو چطوری حساب کنم؟
جواب ۳ : سوال خوبی بود، شکل زیر رو ببین ( نحوه محاسبه فرکانس pwm )  :
در شکل زیر من فرکانس میکرو رو ۱۰۰ میگ در نظر گرفتم، شما فرکانس بردتون هر چقدر هستش همون مقدار رو قرار بدید و محاسبات رو انجام بدید؛ تقسیم فرکانسی تایمر رو هم ۴ به دلخواه انتخاب کردم، شما هر تقسیم فرکانسی که دوست داشتید انتخاب کنید.
نحوه محاسبه فرکانس pwm
 
سوال ۴ : خب مثلا من خواستم دیوتی سایکل رو ۵۰% یا ۳۰% تنظیم کنم، چطوری این کار بکنم؟
جواب ۴ : ریاضیت تو حلقم، خب اول اینو توضیح بدم شاید خیلی ها ندونن، وقتی میگیم دیوتی سایکل X% یعنی این که X درصدش ۱ باشه و بقیه ۰؛ خب همون طور که من گفتم خروجی pwm ما اول مقدارش ۱ هستش و وقتی برابری رخ میده مقدارش ۰ میشه و وقتی ریست میشه دوباره ۱ میشه و ... لذا مقدار ۱ بودن از فرمول زیر به دست میاد که باید این مقدار رو به رجیستر MRn مد نظرمون بدیم ( در شکل زیر منظور از X مقدار Duty Cycle هستش که من ۱۰۰ اش هم گزاشتم شما فقط عددش رو جایگزاری کنید ) :
فرمول محاسبه Duty Cycle
 
سوال ۵ : خب سطح ولتاژ رو چطوری حساب کنیم؟
جواب ۵ : سوالایی میپرسی ها ^_^؛ خب وقت دیوتی سایکل رو داریم، محاسبه ولتاژ کاری نداره، خب با توجه به این که سطح ولتاژ میکرو ۳٫۳ ولته، داریم ( مثل فرمول بالا، در فرمول زیر هم منظور از X همون دیوتی سایکل یا همون مقدار ۱ بودن موج PWM هستش ) :
فرمول محاسبه ولتاژ pwm

Multiple single edge controlled PWM outputs will all have a rising edge at the beginning of each PWM cycle, when an PWMMR0 match occurs. Three match registers can be used to provide a PWM output with both edges controlled. Again, the PWMMR0 match register controls the PWM cycle rate. The other match registers control the two PWM edge positions. Additional double edge controlled PWM outputs require only two match registers each, since the repetition rate is the same for all PWM outputs. With double edge controlled PWM outputs, specific match registers control the rising and falling edge of the output. This allows both positive going PWM pulses (when the rising edge occurs prior to the falling edge), and negative going PWM pulses (when the falling
edge occurs prior to the rising edge).

شکل زیر، بلوک دیاگرام PWM رو نشون میده؛ میبینید که تقریبا همون بلوک دیاگرام تایمر/کانتر هستش فقط اون ۶ تا لچ موجود در سمت راست عکس زیر اضافه شده ( همون مستطیل های سمت راست شکل زیر ^_^ )
LPC1768 PWM block diagram

 
توضیح و آموزش این قسمت بمونه برا جلسات بعدی - فعلا نیاز نیست

Sample waveform with rules for single and double edge control

A sample of how PWM values relate to waveform outputs is shown in Figure 121.

PWM output logic is shown in Figure 120 that allows selection of either single or double edge controlled PWM outputs via the muxes controlled by the PWMSELn bits.

The match register selections for various PWM outputs is shown in Table 444.

This implementation supports up to N-1 single edge PWM outputs or (N-1)/2 double edge PWM outputs, where N is the number of match registers that are implemented.

PWM types can be mixed if desired.

lpc1768 Sample PWM waveforms

The waveforms show one PWM cycle and demonstrate PWM outputs under the following conditions:
The timer is configured for PWM mode (counter resets to 1).
Match 0 is configured to reset the timer/counter when a match event occurs.
Control bits PWMSEL2 and PWMSEL4 are set.
The Match register values are as follows:
MR0 = 100 (PWM rate)
MR1 = 41, MR2 = 78 (PWM2 output)
MR3 = 53, MR4 = 27 (PWM4 output)
MR5 = 65 (PWM5 output)

Set and reset inputs for PWM Flip-Flops
 

Rules for Single Edge Controlled PWM Outputs

۱٫ All single edge controlled PWM outputs go high at the beginning of a PWM cycle unless their match value is equal to 0.
۲٫ Each PWM output will go low when its match value is reached. If no match occurs (i.e. the match value is greater than the PWM rate), the PWM output remains continuously high.

Rules for Double Edge Controlled PWM Outputs

Five rules are used to determine the next value of a PWM output when a new cycle is about to begin:
۱٫ The match values for the next PWM cycle are used at the end of a PWM cycle (a time point which is coincident with the beginning of the next PWM cycle), except as noted in rule 3.
۲٫ A match value equal to 0 or the current PWM rate (the same as the Match channel 0 value) have the same effect, except as noted in rule 3. For example, a request for a falling edge at the beginning of the PWM cycle has the same effect as a request for a falling edge at the end of a PWM cycle.
۳٫ When match values are changing, if one of the "old" match values is equal to the PWM rate, it is used again once if the neither of the new match values are equal to 0 or the PWM rate, and there was no old match value equal to 0.
۴٫ If both a set and a clear of a PWM output are requested at the same time, clear takes precedence. This can occur when the set and clear match values are the same as in, or when the set or clear value equals 0 and the other value equals the PWM rate.
۵٫ If a match value is out of range (i.e. greater than the PWM rate value), no match event occurs and that match channel has no effect on the output. This means that the PWM output will remain always in one state, allowing always low, always high, or "no change" outputs.

 
توضیح پایه های PWM

توضیح پایه های PWM

جدول زیر لیست پایه های PWM رو نشون داد و یه کوچولو هم توضیح داده خیر سرش ^_^
lpc1768 pwm Pin summary
[PWM1.[1:6 : شیش تا پایه های خروجی PWM ماااااااااا
[PCAP1.[0:1 : پایه های ورودی کپچر، که تو مطلب آموزش تایمر، کپچر رو زیارت کردیم قبلا،
 
توجه : نام پایه های کپچر در مبحث TIMER/COUNTER به صورت CAP بود و در مبحث PWM به صوت PCAP نوشته میشود.
 

Effective processing of the externally supplied clock to the counter has some limitations.

Since two successive rising edges of the PCLK clock are used to identify only one edge on the CAP selected input, the frequency of the CAP input can not exceed one quarter of the PCLK clock.

Consequently, duration of the high/low levels on the same CAP input in this case can not be shorter than 1/(2 PCLK).

پایه های PWM یک تا شش :

PWM1[1] : P2.0 , P1.18
PWM1[2] : P2.1 , P1.20 , P3.25
PWM1[3] : P2.2 , P1.21 , P3.26
PWM1[4] : P2.3 , P1.23
PWM1[5] : P2.4 , P1.24
PWM1[6] : P2.5 , P1.26

پایه های کپچر PWM : برید حالشو ببرید، لیست پایه های کپچر pwm رو در شکل زیر براتون درست کردم که لیست پایه ها به همراه شماره پایه ها رو میتونید ببینید، نکته قابل توجه اینه که دو تا پایه PCAP1.0 داریم که از هر کدوم که دوست داشتیم میتونیم استفاده کنیم.
پایه های کپچر PWM

 
معرفی مختصر تمام رجیسترهای PWM میکروکنترلر LPC1768

معرفی مختصر تمام رجیسترهای PWM میکروکنترلر LPC1768

تابع PWM1 دارای ۲۱ رجیستر هستش ( یا حضرت عباس ^_^ - البته اگه دقت کنید انگار همون رجیسترهای تایمر کانتر هستن که قبلا آموزشش رو دادم - یعنی چیز تکراری داریم یاد میگیریم و لذا سخت نیست - سختیش برا منه که باید یه سری چیز تکراری رو دوباره بگم *_* ) که در زیر لیستشون رو میبینید و بعدش دونه دونه توضیحشون میدم مختصرا و بعد توضیحات کامالشون رو دونه دونه میدم :
lpc1768 PWM1 register map
IR : رجیستر وقفه، این رجیستر میتونه نوشته بشه برا پاک کردن وقفه ها، به کمک این رجیستر میتونیم وقفه های معلق رو تشخیص بدیم. ( کلا کارش با وقفه ها هستش، بقیش مهم نیسن ^_^ )
TCR : رجیستر کنترل تایمر PWM، این رجیستر کارش کنترل تابع تایمر/کانتر هستش؛ به کمک این رجیستر میتونیم تایمر/کانتر رو ریست یا غیر فعال کنیم.
TC : تایمر/کانتر؛ این رجیستر ۳۲ بیتی، در هر PR+1 تا کلاک از PCLK مقدارش یه واحد زیاد میشه، این رجیستر به کمک رجیستر TCR کنترل میشه.
PR : رجیستر Prescale؛ مقدار Prescale مد نظر ما در این رجیستر ذخیره میشه و میتونیم مقدارش رو هم بخونیم ( این رجیستر R/W هستش )؛ همون طور که در شکل بالا میبینید، مقدا اولیه این رجیستر ۰ هستش لذا در پروژه ها نیازی نیست مقدارش رو دوباره ۰ کنیم ولی خب ۰ کردنش ظرر نداره برا فهم پروژه خوبه، هر طور حال میکنید همون طور عمل کنید ^_^؛ نحوه فراخونی این رجیستر در کیل به صورت زیر هستش ( چون در زیر توضیح نمیدم، نحوه فراخونیشو در کامپایلر کیل همینجا قرار میدم ) :

PC : شمارنده Prescale؛ این شمارنده مقدارش افزایش پیدا میکنه، تا به PR برسه، وقتی رسید، مقدار TC یه واحد زیاد میشه و مقدار PC ریست(پاک یا ۰) میشه
توجه : به کمک دو رجیستر Prescale ( دو تا رجیستر بالا ) میتونیم زمان هر کلاک رجیستر TC رو تعیین و تنظیم کنیم که توضیحات بیشتر رو در مطلب آموزش تایمر دادم قبلا.
MCR : رجیستر کنترل Match؛ رجیستر MCR مورد استفاده قرار میگیره برای کنترل این که در صورت رخ دادن یه Match، یه وقفه تولید بشه و یا TC ریست بشه.
[MR[0:6 : رجیستر برابری n ( ان عددی بین ۰ تا ۶ هستش )؛ MRn میتونه فعال بشه در رجیستر MCR برای ریست کردن TC، متوقف کردن TC و PC، و/یا تولید یه وقفه وقتی که مقدارش با TC برابر میشه؛ بعلاوه،
نحوه فراخونی این رجیسترها در کیل به صورت زیر هستش ( در ادامه مطلب، این رجیستر ها رو توضیح نمیدم، لذا همینجا نحوه فراخونیشون رو میگم ) :

CCR : رجیستر کنترل Capture؛ این رجیستر نوع edge پایه های ورودی کپچر و رخ دادن یا ندادن وقفه رو تعیین میکنه.
[CR[0:3 : رجیستر کپچر n ( ان عددی بین ۰ تا ۳ هستش )؛ مقدار TC درون CRn قرار میگیره، وقتی که رخدادی ( که نوع Edge اش رو به کمک رجیستر CCR تعیین کردیم ) روی پایه ورودی کپچر CAPn.0 رخ بده.
PCR : رجیستر کنترل PWM؛ فعال کردن خروجی های PWM و انتخاب نوع کانال که single edge باشه یا double edge
LER : رجیستر فعال ساز لچ؛ به کمک این رجیستر در هر بار تغییر رجیستر MRn اجازه رخ دادن برابری جدید رو صادر میکنیم.
CTCR : رجیستر کنترل شمارش؛ برا انتخاب مد ( تایمر یا شمارنده/کانتر ) به کار میره و اگه مد شمارنده انتخاب شده بود، نوع edge رو تعیین میکنه این رجیستر.

 
( PWM Interrupt Register ( PWM1IR - 0x4001 8000

( PWM Interrupt Register ( PWM1IR - 0x4001 8000

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر وقفه های PWM؛ همون طور که در جدول زیر ( جدول ۴۴۷ ) میبینید، کلا ۹ تا بیت داریم و بقیه رزرو شده هستش، و از این ۹ تا هم ۲تاش پرچم وقفه کپچر ورودی ۰ و ۱ هستش و بقیه پرچم وقفه های match کانال ۰ تا ۶؛
اگه وقفه ای رخ بده : اون وقت بیت متناظر باهاش در رجیستر PWMIR مقدارش ۱ میشه؛ در غیر این صورت در حالت عادی مقدار بیت ها ۰ هستش.
نوشتن مقدار ۱ : نوشتن مقدار ۱ در هر بیت از این رجیستر، وقفه متناظر رو Reset میکنه.
نوشتن مقدار ۰ : نوشتن مقدار ۰ در هر بیت از این رجیستر هیچ تاثیری نداره.
PWM Interrupt Register - PWM1IR
بیت های (۰ تا ۳) و (۸ تا ۱۰) : پرچم وقفه های match کانال ۰ تا ۶
بیت ۴ و ۵ : پرچم وقفه کپچر ورودی ۰ و ۱
بقیه بیت ها : رزرو شده.

 
( PWM Timer Control Register ( PWM1TCR 0x4001 8004

( PWM Timer Control Register ( PWM1TCR 0x4001 8004

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر کنترل تایمر PWM
PWM Timer Control Register - PWM1TCR
بیت ۰ ( Counter Enable ) : فعال/غیرفعال کردن شمارنده.
۰ : شمارنده ها غیر فعال میشن.
۱ : شمارنده تایمر PWM و شمارنده PWM Prescale برای شمارش فعال میشن.
 
بیت ۱ ( Counter Reset ) :
۰ : پاک کردن ( غیر فعال کردن ) Reset
۱ : Reset کردن شمارنده تایمر و Prescale مربوط به PWM، بعد از نوشتن مقدار ۱ در این بیت، در لبه مثبت بعدی کلاک PCLK، شمارنده ها ریست میشن.
توجه : تا زمانی که این بیت ۱ هستش، شمارنده ها همینطوری تا قیامت هی Reset میشن، لذا باید بعد از ۱ کردن این بیت ( Reset کردن شمارنده ها )، بلافاصله مقدارش رو ۰ کنیم.
 
بیت ۲ : رزرو شده.
 
بیت ۳ ( PWM Enable ) :
۰ : مد تایمر فعال میشه ( counter resets to 0 )
۱ : مد pwm فعال میشه ( counter resets to 1 )

PWM mode causes the shadow registers to operate in connection with the Match registers.

A program write to a Match register will not have an effect on the Match result until the corresponding bit in PWMLER has been set, followed by the occurrence of a PWM Match 0 event.

Note that the PWM Match register that determines the PWM rate (PWM Match Register 0 - MR0) must be set up prior to the PWM being enabled.

Otherwise a Match event will not occur to cause shadow register contents to become effective.

 
(PWM Count Control Register (PWM1CTCR - 0x4001 8070

(PWM Count Control Register (PWM1CTCR - 0x4001 8070

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر کنترل شمارش؛ برا انتخاب مد ( تایمر یا شمارنده/کانتر ) به کار میره و اگه مد شمارنده انتخاب شده بود، نوع edge رو تعیین میکنه این رجیستر.
PWM Count control Register - PWM1CTCR
بیت ۰ و ۱ ( Counter/ Timer Mode ) :
۰ : مد تایمر؛ مقدار TC افزایش پیدا میکنه وقتی که شمارنده Prescale برابر رجیستر Prescale بشه.
۱ : مد کانتر؛ مقدار TC افزایش پیدا میکنه در rising edges روی ورودی PCAP ( که این ورودی به وسیله بیت های [CTCR[2:3 انتخاب شده )
۲ : مد کانتر؛ مقدار TC افزایش پیدا میکنه در falling edges روی ورودی PCAP ( که این ورودی به وسیله بیت های [CTCR[2:3 انتخاب شده )
۳ : مد کانتر؛ مقدار TC افزایش پیدا میکنه در هر دو edge روی ورودی PCAP ( که این وردی به وسیله بیت های [CTCR[2:3 انتخاب شده ) >>> طبق بیت های ۲و۳ همین رجیستر این حالت اصلا رخ نمیده - پس چرا این حالت ۳ وجود داره؟ 
 
بیت ۲ و ۳ ( Count Input Select ) : وقتی که بیت های ۰:۱ همین رجیستر بر روی مقدار ۰ تنظیم نشده باشن، این دو بیت، پایه PCAP رو انتخاب میکنن که سیگنال افزایش دهنده مقدار TC به این پایه اعمال میشه.
۰ : PCAP1.0
۱ : PCAP1.1
توجه : حالت های دیگه رزو شده هستن.

 
(PWM Match Control Register (PWM1MCR - 0x4001 8014

(PWM Match Control Register (PWM1MCR - 0x4001 8014

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر کنترل PWM Match ( رخ دادن برابری دو چیز در PWM ) مورد استفاده قرار میگیره برا کنترل اتفاقات بعد رخ دادن برابری، وقتی که رجیسترهای PWM Match با شمارنده تایمر PWM برابر بشه.
Match Control Register - PWM1MCR
توجه : در تمام بیت های زیر، با دادن مقدار ۰، ویژگی مدنظر غیر فعال میشه و با دادن مقدار ۱، ویژگی فوق فعال میشه.
 
بیت ۰ ( PWMMR0I ) : وقفه روی PWMMR0؛ وقتی که PWMMR0 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۱ ( PWMMR0R ) : ریست در PWMMR0؛ وقتی که PWMMR0 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۲ ( PWMMR0S ) : توقف در PWMMR0؛ وقتی که PWMMR0 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۳ ( PWMMR1I ) : وقفه روی PWMMR1؛ وقتی که PWMMR1 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۴ ( PWMMR1R ) : ریست در PWMMR1؛ وقتی که PWMMR1 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۵ ( PWMMR1S ) : توقف در PWMMR1؛ وقتی که PWMMR1 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۶ ( PWMMR2I ) : وقفه روی PWMMR2؛ وقتی که PWMMR2 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۷ ( PWMMR2R ) : ریست در PWMMR2؛ وقتی که PWMMR2 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۸ ( PWMMR2S ) : توقف در PWMMR2؛ وقتی که PWMMR2 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۹ ( PWMMR3I ) : وقفه روی PWMMR3؛ وقتی که PWMMR3 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۱۰ ( PWMMR3R ) : ریست در PWMMR3؛ وقتی که PWMMR3 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۱۱ ( PWMMR3S ) : توقف در PWMMR3؛ وقتی که PWMMR3 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۱۲ ( PWMMR4I ) : وقفه روی PWMMR4؛ وقتی که PWMMR4 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۱۳ ( PWMMR4R ) : ریست در PWMMR4؛ وقتی که PWMMR4 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۱۴ ( PWMMR4S ) : توقف در PWMMR4؛ وقتی که PWMMR4 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۱۵ ( PWMMR5I ) : وقفه روی PWMMR5؛ وقتی که PWMMR5 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۱۶ ( PWMMR5R ) : ریست در PWMMR5؛ وقتی که PWMMR5 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۱۷ ( PWMMR5S ) : توقف در PWMMR5؛ وقتی که PWMMR5 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۱۸ ( PWMMR6I ) : وقفه روی PWMMR6؛ وقتی که PWMMR6 با PWMTC برابر شد، یه وقفه تولید بشه.
بیت ۱۹ ( PWMMR6R ) : ریست در PWMMR6؛ وقتی که PWMMR6 با PWMTC برابر شد، PWMTC ریست بشه.
بیت ۲۰ ( PWMMR6S ) : توقف در PWMMR6؛ وقتی که PWMMR6 با PWMTC برابر شد، PWMTC و PWMPC متوقف بشن و [PWMTCR[0 هم صفر بشه.
 
بیت ۲۱ تا ۳۱ : رزرو شده.

 
(PWM Capture Control Register (PWM1CCR - 0x4001 8028

(PWM Capture Control Register (PWM1CCR - 0x4001 8028

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر کنترل کپچر مورد استفاده قرار میگیره برا کنترل این که کدوم یکی از ۴ تا رجیستر کپچر مقدار شمارنده تایمر درونش بارگزاری بشه، وقتی یه رخداد کپچر رخ داد، و یا یه وقفه تولید شد به وسیله رخداد کپچر؛ تنظیم هر دو لبه بالا و پایین رونده، یه حالت صحیح و درستی هستش و الزاما نباید فقط یکی از این دو لبه برا پایه های کپچر انتخاب شود و میتونید هر دو لبه رو انتخاب کنید؛ در توضیحات زیر منظور از n شماره تایمر ۰ یا ۱ هستش ( تایمر ۰ و ۱ از کجا اومد؟ )
توجه : اگه مد "شمارنده" انتخاب شده بود برای ورودی CAP در CTCR، سه بیت مروبط به ورودی مد نظر از این رجیستر باید بر روی مقدار ۰۰۰ تنظیم شود؛ اما ورودی کپچر و/یا وقفه میتونن انتخاب بشن برای ۳ ورودی کپچر دیگر.
PWM Capture Control Register - PWM1CCR
توجه : در زیر، با دادن مقدار ۰ ویژگی مربوطه غیر فعال میشه و با دادن مقدار ۱ ویژگی فوق فعال میشه.
 
بیت ۰ ( Capture on CAPn.0 rising edge ) : حساس کردن پایه CAPn.0 به rising edge؛ وقتی این لبه روی پایه CAPn.0 رخ بده، مقدار TC درون CR0 قرار میگیره.
بیت ۱ ( Capture on CAPn.0 falling edge ) : حساس کردن پایه CAPn.0 به falling edge؛ وقتی این لبه روی پایه CAPn.0 رخ بده، مقدار TC درون CR0 قرار میگیره.
بیت ۲ ( Interrupt on CAPn.0 event ) : وقتی رخدادی روی پایه CAPn.0 اعمال شد و مقدار TC درون CR0 ذخیره شد، اون وقت یه وقفه رخ بده.
بیت ۳ ( Capture on CAPn.1 rising edge ) : حساس کردن پایه CAPn.1 به rising edge؛ وقتی این لبه روی پایه CAPn.1 رخ بده، مقدار TC درون CR1 قرار میگیره.
بیت ۴ ( Capture on CAPn.1 falling edge ) : حساس کردن پایه CAPn.1 به falling edge؛ وقتی این لبه روی پایه CAPn.1 رخ بده، مقدار TC درون CR1 قرار میگیره.
بیت ۵ ( Interrupt on CAPn.1 event ) : وقتی رخدادی روی پایه CAPn.1 اعمال شد و مقدار TC درون CR1 ذخیره شد، اون وقت یه وقفه رخ بده.
 
بیت ۶ تا ۳۱ : رزرو شده.

 
(PWM Control Register (PWM1PCR - 0x4001 804C

(PWM Control Register (PWM1PCR - 0x4001 804C

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

رجیستر کنترل PWM؛ این رجیستر برا فعال کردن و انتخاب حالت هر کانال PWM مورد استفاده قرار میگیره.
PWM Control Register - PWM1PCR
بیت ۰ و ۱ : استفاده نشده ( کاری به این دو بیت نداریم )
 
توجه : در ۵ تا بیت زیر، با دادن مقدار ۰ به هر بیت، حالت single edge برا اون خروجی فعال میشه و با دادن مقدار ۱، حالت double edge فعال میشه.
بیت ۲ ( PWMSEL2 ) : تعیین فعال بودن مد کنترل single edge یا double edge برای خروجی PWM2
بیت ۳ ( PWMSEL3 ) : تعیین فعال بودن مد کنترل single edge یا double edge برای خروجی PWM3
بیت ۴ ( PWMSEL4 ) : تعیین فعال بودن مد کنترل single edge یا double edge برای خروجی PWM4
بیت ۵ ( PWMSEL5 ) : تعیین فعال بودن مد کنترل single edge یا double edge برای خروجی PWM5
بیت ۶ ( PWMSEL6 ) : تعیین فعال بودن مد کنترل single edge یا double edge برای خروجی PWM6
توجه مهم : این که تک لبه چه فرقی با دو لبه داره رو بعدا آموزش و پروژه هاش رو آماده میکنم، فعلا بیخیال بشید و تو این مطلب فعلا فقط با تک لبه کار داریم.
 
بیت ۷ و ۸ : رزرو شده ( کاری به این دو بیت نداریم )
 
توجه : در ۶ تا بیت زیر، با دادن مقدار ۱ به هر بیت، PWM مربوطه فعال میشه و با دادن مقدار ۰، غیر فعال میشه.
بیت ۹   ( PWMENA1 ) : فعال/غیرفعال کردن خروجی PWM1
بیت ۱۰ ( PWMENA2 ) : فعال/غیرفعال کردن خروجی PWM2
بیت ۱۱ ( PWMENA3 ) : فعال/غیرفعال کردن خروجی PWM3
بیت ۱۲ ( PWMENA4 ) : فعال/غیرفعال کردن خروجی PWM4
بیت ۱۳ ( PWMENA5 ) : فعال/غیرفعال کردن خروجی PWM5
بیت ۱۴ ( PWMENA6 ) : فعال/غیرفعال کردن خروجی PWM6
 
بیت ۱۵ تا ۳۱ : استفاده نشده ( کاری به این دو بیت نداریم )

 
(PWM Latch Enable Register (PWM1LER - 0x4001 8050

(PWM Latch Enable Register (PWM1LER - 0x4001 8050

نحوه دسترسی به این رجیستر در کیل به صورت زیر هستش ( کسانی که IAR کار کردن، اگه کد نحوه دسترسی به این رجیستر رو دارن بفرستن لطفا )

 

The PWM Latch Enable Registers are used to control the update of the PWM Match registers when they are used for PWM generation.

When software writes to the location of a PWM Match register while the Timer is in PWM mode, the value is captured, but not used immediately.

When a PWM Match 0 event occurs (normally also resetting the timer in PWM mode), the contents of shadow registers will be transferred to the shadow registers if the corresponding bit in the Latch Enable Register has been set.

At that point, the new values will take effect and determine the course of the next PWM cycle.

Once the transfer of new values has taken place, all bits of the LER are automatically cleared.

Until the corresponding bit in the PWMLER is set and a PWM Match 0 event occurs, any value written to the PWM Match registers has no effect on PWM operation.

For example, if PWM2 is configured for double edge operation and is currently running, a typical sequence of events for changing the timing would be:
• Write a new value to the PWM Match1 register.
• Write a new value to the PWM Match2 register.
• Write to the PWMLER, setting bits 1 and 2 at the same time.
• The altered values will become effective at the next reset of the timer (when a PWM Match 0 event occurs).
The order of writing the two PWM Match registers is not important, since neither value will be used until after the write to LER.

This insures that both values go into effect at the same time, if that is required.

A single value may be altered in the same way if needed.

The function of each of the bits in the LER is shown in Table 453.
PWM Latch Enable Register - PWM1LER

بیت ۰ ( Enable PWM Match 0 Latch ) : این بیت رو من تو بلوک دیاگرام pwm گشتم پیدا نکردم - حالا این بیت چه لچی رو فعال مکنه الله اعلم!؟؟؟ شاید تو لحث pwm دو لبه کاربرد داره - نمیدونمممممممممممممممممممم دقیقااااااااااااااا.
بیت ۱ ( Enable PWM Match 1 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادنMR1 باید این بیت رو ۱ کنیم )
بیت ۲ ( Enable PWM Match 2 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادن MR2 باید این بیت رو ۱ کنیم )
بیت ۳ ( Enable PWM Match 3 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادن MR3 باید این بیت رو ۱ کنیم )
بیت ۴ ( Enable PWM Match 4 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادن MR4 باید این بیت رو ۱ کنیم )
بیت ۵ ( Enable PWM Match 5 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادن MR5 باید این بیت رو ۱ کنیم )
بیت ۶ ( Enable PWM Match 6 Latch ) : صدور فرمان اجازه رخ دادن برابری. ( در صورت تغییر دادن MR6 باید این بیت رو ۱ کنیم )
بیت ۷ تا ۳۱ : رزرو شده.

 
کتابخانه راه اندازی pwm میکروکنترلر lpc1768

کتابخانه راه اندازی pwm میکروکنترلر lpc1768

تو نت یه کتابخونه برا pwm پیدا کردم، منم از خدا خاسته همونو چکش کاری کردم و تغیراتی دادم و یه چیز کرم کردم و یه چیز اضافه و کتابخونه زیر رو ازش در ابردم؛ لیست توابع این کتابخونه به صورت زیر هستش :

در زیر دونه دونه توابع زیر رو توضیح میدم :
 

به کمک این تابع، pwm رو راه اندازی میکنیم.
cycleTime : به کمک این پارامتر، مقدار فرکانس کانال ها رو تعیین میکنیم ( مقدار دیوتی سایکل که تنظیم میکنیم باید از این مقدار کمتر یا مساوی باشه و بیشتر نباید باشه )
 

به کمک این تابع مقدار دیوتی سایکل کانال ها رو تنظیم میکنیم.
pin : نام پایه هایی که میخوایم D.C شون رو تغییر بدیم در این قسمت ذکر میکنیم، برا این کار باید نام پایه های مد نظرمون رو با هم اور کنیم و در این پارامتر قرار بدیم، نام کانال ها به صورت زیر تعریف شده :

PWM_1
PWM_2
PWM_3
PWM_4
PWM_5
PWM_6

dutyCycle : به کمک این پارامتر هم مقدار D.C کانال ها رو تعیین میکنیم؛ مقدار این پارامتر باید از پارامتر cycleTime تابع PWM_Init کمتر یا مساوی باشید.
 

به ترتب فعال کردن کردن شمارنده، غیر فعال کردن شمارنده و ریست کردن شمارنده هستن که از هیچ کدوم ما استفاده نمیکنیم!
 

فعال و غیر فعال کردن مد PWM؛ با این توابع کاری نداریم، همون تابع PWM_Init رو که استفاده کنیم، تو این تابع تمام این کارا انجام میشه.
 

اون پایه هایی که میخوایم در نقش PWM باشن رو به تابع PWM_Start میدیم ( پایه ها رو اور میکنیم و میدیم به این تابع، مثلا PWM_1 | PWM_2  )؛ اگه هم بخواین پایه ای رو از نقش PWM خارج کنید که از تابع PWM_Stop استفاده میکنیم ( روش مقدار دهی هم مثل تابع PWM_Start  هستش )
 

فعلا کاری نداریم به این دو تابع.
 

راه اندازی کامل PWM تو سه سوت :

  1. ابتدا تابع PWM_Init رو فراخونی میکنیم و به کمکش فرکانس پایه های PWM رو تعیین میکنیم
  2. و بعد تابع PWM_Start و پایه هایی که میخوایم برن تو نقش PWM رو به کمک این تابع تعیین میکنیم
  3. و در آخر هم هر جا که دوست داشتیم ( نیاز داشتیم ) هم تابع PWM_SetDutyCycle زو فراخونی میکنیم و D.C پایه های PWM مد نظرمون رو تغییر میدیم.

وسلام - ۳ تا تابع، راه اندازی کل PWM، بقیه توابع رو هم اصلا استفاده نکنید، برید حالشو ببرید، برا این مطلب ۲-۳ هفته وقت صرف کردم - امیدوارم بدردتون بخوره.

 

 
امیدوارم این مطلب براتون مفید بوده باشه، فعلا یا علی،
قبلش سه تا کلیپ زیر رو ببینید پشیمون نمیشید ( ببینید تا ببیند تو کشورتون چی داره میگذره، اگه نه مثل سیب زمنیی بیخیالید که اون بحثش جداس ولی اگه نه مهمه براتون حتما ۳ کلیپ زیر رو نگاه کنید که جمعا ۹ دقیقه میشه، هر کلیپ ۳ دقیقه تقریبا، حجمش هم کمه، ببینید و به خونواده هاتون هم نشون بدید تا بدونن و آگاه بشن، اینا رو هیچ وقت تو تلوزیون ما پخش نمیکنن، دلیلش هم معلومه!!! بودجه صدا و سیما رو کی میده؟ ^_^ آره دیگه، اینطوریه، فیلم های زیر رو ببیند – یا علی تا مطلب بعد )،
در ضمن این مطلب ۶۵۰۰ واژه هستش، نه کپی مطالب سایت های خارجیه – نه کپی سایت های فارسی زبون، نه عمه خدا بیامرزم ترجمه کرده، بلکه نشستم دیتاشیت رو خوندم و از بعضی از دوستان ( از جمله آقای محمدرضا سربندی کمک گرفتم ) و در عمل پروژه هایی رو بستم و اینجا گزاشتم، درسته مطلب کمبود هایی داره و مشکلاتی قبول دارم ولی مثل بعضیا پولی نکردم مطلب رو ( که البته اونایی هم که پولی میکنن یه جورایی چون خرجشون نمیرسه و به فکر درامدن این کارو کردن، ما هم از شکممون زدیم و این همه هزینه پروژه ها میکنیم وگرنه کیه که پول رو دوست نداشته باشه و نیاز نداشته باشه بهش ) و بعضی ها هم که ناقص و در حد ۳۰۰-۴۰۰ واژه اومدن این مطلبو آموزش داد ( که اونم جای تقدیر داره، خیلی ها همین کارو هم نکردن )، اما یه عده هستن که بلدن و خوب هم بلدن ولی نمیان یاد بدن به ملت ( حالا دلایل خاص خودشون رو دارن، وقت نداریم و …. به هر حال انگار ما بیکاریم )، اینا رو شما لحاظ کنید، ان شاء الله شما جزو دسته آخر نباشید، چیزی که بلدید رو یاد بدید، بیش از این وقتتون رو نمیگیرم، عزت زیاد، یا علی.

اقتصاد مقاومتی، حرف یا عمل؟ ( خنده دار، ببنید حتما )
سردار قاسمی در سومین سالگرد شهید بیضائی تبریز۹۵ ( این کلیک و دو کلیپ زیر رو هم حتما حتما ببینید، تو عمرا همچین چیزی رو جایی بتونید پیدا کنید )
سخنرانی کوبنده حاج سعید قاسمی در مورد هاشمی رفسنجانی
 
================================
بروزرسانی در پنج شنبه – ۱ آذر ۱۳۹۷
کتابخونه بالا رو اصلاح کردم، الان این کتابخونه زیر برای ++C قابل استفاده هستش ( کتابخونه بالا برا C بود )، تو این کتابخونه اکثر توابع رو اصلاح کردم تا کار ساده بشه که در ادامه توضیح میدم.
قبل این که برم سراغ کتابخونه این دوتا عکس رو ببینید ( روشون کلیک کنید و در اندازه اصلی ببینید )، یکم توضیحات و محاسبات توش نوشتم ببینید ضرر نداره ( ضرر بیشتر به قیافش میاد ظرر باشه تا ضرر – نه خداییش؟ خخخ )
pwm میکروکنترلر lpc1768
pwm میکروکنترلر lpc1768
خب با این توضیحات توی عکس بالا و اون دست خط … من، میریم سراغ توضیح توابع کتابخونه :
توجه 1 : فرکانس تمام 6 تا کانال pwm یکسان هستش ( این که هر کانال pwm یه فرکانس جدا داشته باشه اینطور نی ) و فقط میتونید DC هر کنال رو جدا تعریف کنید.
لیست توابع این کتابخونه به صورت زیر هستش :

که ما فقط با توابع زیر کار داریم ( با بقیه کاری نداریم ) :

شیء این کلاس هر به صورت زیر هستش، که میتویند تعیین کنید هر PWM رو کدوم پایه تنظیم بشه، مثلا ( همون طور که اولای مطلب گفتم ) PWM1 دو تا پایه داره تو میکرو، که میتونید از هر کدوم که دوس داشتید استفاده کنید، مثلا من میخوام از P2_0 استفاده کنم که برا این کار میام هنگام تعریف شیء از کلاس PWM در پروژم، شیء رو مقدار دهی میکنم که پارامتر های شیء کلاس PWM به صورت زیر هستش  :

توجه : برای این کار باید کلاس GPIO رو در پروژتون فراخونه کنید ( قبلا از ایجاد شیء از کلاس PWM )

خب بریم سراغ توضیح توابع :
تابع init : پارامتر N همون طور که گفتم “مقسم فرکانسی” هستش و PWM_Freq هم فرکانس 6 تا کانال PWM هستش.
تابع setFreq : شاید بعد از راه اندازی اولیه کتابخونه pwm ( بعد از استفاده از تابع init ) نیاز باشه که فرکانس pwm رو تغییر بدید که این تابع میتونه کمک کنه.
تابع setDutyCycle : برای تنظیم DC هستش که دو تا ورودی داره، pwm_number شماره ی PWM ما هستش : PWM1 تا PWM6 که از هر کدوم خواستیم استفاده کنیم عددش رو داخل این پارامتر میزاریم ( مثلا عدد 2 بزاریم یعنی PWM2 ) و پارامتر dutyCycle_Percent هم مقدار DC ما بر حسب درصد هستش ( مثلا بخواین 50 درصد باشه DC تون، باید عدد 50 بزارید، لذا مقدار این پارامتر بین 0 تا 100 هستش )
تابع start و stop : برای شروع/پایان کار PWM هستش، که در ورودی شماره PWM رو قرار میدم ( عدد 1 تا 6 )
 
مثال : 

 
توجه : پایه های P1_18 و P1_20 و P1_21 و P1_23 برا استفاده به عنوان PWM، اگه پروگرامر J-LINK به کامپیوتر وصل باشه و بردتون، “هدربرد LPC1768 شرکت ECA” باشه، تا زمانی که J-LINK به PC وصل هستش، این پایه ها کار نمیکنن، شماتیک هدربرد ECA رو که بررسی کردم به این صورت بود : به پایه P1_18 قطب منفی یک LED وصله و قطب مثبت LED هم به VCC وصله؛ به پایه P1_20 و P1_21 و P1_23 چیزی وصل نبود؛ لذا بعید میدونم مشکل از هدربرد ECA باشه، چون وقتی پروگرامر J-LINK از مدار خارج میشه مشکل حل میشه، موردی که هستش اینه که سوکت مربوط به پروگرامر اصلا به این 4 تا پایه ای که در بالا گفتم وصل نیستش، دیتاشت هم بررسی کردم چیزی پیدا نکردم، کسی علت این مشکلو میدونه بگه لطفا.
 

پسورد فایل های سایت :
www.dmf313.ir
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
ارسال دیدگاه
11

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. مهمان

    احمد

    سلام داداش می بخشید مزاحم می شم به نظرت با فرکانس چکار کنیم ما بایداز چند فرکانس مختلف استفاده کنیم ولی اینجا فرکانسش فقط 100 کیلو هست mr0فقط 100 هست برای کل پی دبلو ام ها می در واقع چند فرکانس همزمان می خوایم من فقظ مشگلم اینه یعنی هر پی دبلیو امی بایک فرکانس دلخاهی

    1397/01/09
    10:45
  2. مهمان

    مهدی

    موفق باشی،دمتم گرم!یا علی!

    1396/12/13
    02:27
  3. مهمان

    ناشناس

    سلام و تشکر
    پسورد فایل چیه

    1396/09/05
    03:42
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      با حروف کوچیک
      www.dmf313.ir

      1396/09/05
      10:14
  4. مهمان

    علیرضا خلج

    سلام
    واقعا کارتون بی نظیره سایتای ایرانی مطالب زاید زیاد دارن و معمولا ادمو به سمت سایت های خارجی ترقیب میکنن اما وجود مچین سایتی(dmf313) واقعا فوق العادس و تمامی نکات مهم و همه مطالب کاربردین اجرتون با خدا
    اللهم عجل لویکل فرج

    1396/06/23
    11:40
  5. مهمان

    مجید

    cycle time واحدش چیه و اینکه محدوده d.c چنده

    1396/06/06
    02:11
  6. مهمان

    میلاد

    خدا خیرت بده من که اگه خدایی نکرده به یک جایی هم برسم خودمو مدیون سایت شمامیدونم

    1395/11/28
    07:16
    • نویسنده این مطلب

      مهدی دمرچیلو

      خواهش میکنم – وظیفم رو انجام میدم.

      1395/11/28
      09:20
  7. مهمان

    طاها

    سلام.ممنون از بابت اموزش میکرو.دمت گرم.یه انتقاد داشتم از دوستانی که مطالب میکرو را بلد هستن و دارن از اموزشش پول در میارن.تو سایتهای مختلف بعضا اموزش میکرو هست که ازش استفاده کرد اما فوت گوزه گریشو نمیگن که بقیه استفاده کنن.بخدا روزی شما رو خدا میده نترسین که بقیه هم یاد بگیرن.من در مورد همین میکرو ۱۷۶۸ خیلی سرچ کردم اما مطالب در حد پروژه های ساده بود.اساتید محترم کمک کنن به بقیه که تشنه یادگیری میکرو هستن.جای دوری نمیره.اجرتون محفوظه.توقع مادیشونو کمترکنن کشورمون به اساتیدی مثل شماها نیاز داره.مصاحبه پرفسور سمیعی رو ببینید برا اموزش مغز و اعصاب بصورت رایگان چکار کرده از افریقا تا اسیا دکتر پرورش داده.یا حق
    دست در دست هم دهیم به مهر – میهن خویش کنیم آباد
    مهندس مهدی لطفا این نظر مطرح کنید

    1395/11/14
    12:39
  8. مهمان

    mohammad

    سلام
    از بابت این پست تشکر می کنم
    شما می تونید یک پست آموزشی درباره ارتباط میکرو avr به lpc1768 ارائه دهید.
    اگر ممکن است برای ایمیل من ارسال کنید
    تشکر از شما

    1395/11/11
    08:13
  9. مهمان

    سینا

    تشکر برادر خدا خیرت دهد .خسته نباشید مطالب سایت تون بسیار خوب و آموزنده هستش.

    1395/11/08
    10:00