ايران ويج

نسخه‌ی کامل: تولید موج pwm
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4
سلام علي آقا
برنامشو با كدويژن نوشتم.خيلي سادس ، فكر كنم خودتون متوجه بشين چيكار كردم .
درضمن فايل شبيه سازيشو براتون گذاشتم.
کد:
#include <mega32.h> //يا 16
#include <delay.h>
#define ADC_VREF_TYPE 0x20

unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}


void main(void)
{
unsigned int PWM;

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x08;

PORTD=0x00;
DDRD=0xB0;

TCCR0=0x69;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x81;

while (1)
      {
      PWM=read_adc(0);
      OCR1A=PWM;
      OCR1B=PWM;
      OCR2=0.9*PWM;
      OCR0=0.9*PWM;

      }
}
برنامه رو علی آقا(برقی) زحمت کشیدن، دیگه مشکلی نباید باشه!
منظور دوستان از فیلتر پایین گذر این بود
[تصویر:  Pwm1.gif]
حالا که اطمینان دارید خروجی PWM هست قبل از این که خروجی فرمان رو به ADC میکرو بدید، باید از این فیلتر عبور بدید تا یک ولتاژ آنالوگ به دست بیاد.
این صفحه هم یک ابزار کمکی برای محاسبه مقادیر فیلتر RC هست.

پیروز باشی
دو تا سوال دیگه AREF و AVCC چرا به تغذیه وصل شده؟ و فرق OCR1 که A و B داره با اون دو تای دیگه چیه؟
براي توليد PWM نيازي به AREF و AVCC نيست ... ، اما معمولا AVCC رو هميشه با VCC به منبع تغذيه وصل مي كنن ...
البته من اين كار رو نمي كنم !

هر تايمري كه توانايي توليد PWM رو داره ، خروجيه PWM رو از كانال هاي OCR مي دهه ...
بعضي ها 1 كانال ، بعضي ها 2 كانال و بعضي ها 3 كانال مي دن ..
اون A ,B داره وجود 2 كانال رو مشخص مي كنه و اون 1 ميگه كه اين كانال مربوط به timer 1 هست ...

موفق باشي.
يا علي.
(۱۹-آبان-۱۳۹۰, ۱۷:۳۷:۲۱)فروم باز نوشته است: [ -> ]دو تا سوال دیگه AREF و AVCC چرا به تغذیه وصل شده؟ و فرق OCR1 که A و B داره با اون دو تای دیگه چیه؟
سلام براي اينكه ولتاژ رفرنسمو aref گرفتم (براي adc). به خاطر همين بايد به vcc وصل ميكردم.
در مورد تايمر هم آقا شارين توضيح دادن.
در ضمن كافيه كه به جاي پتانسيومتر همون خروجي فيلترو بزاري . ولتاژ 0 درصد و 100 درصد رو بين دوتا ولتاژ مثلا a و b بزاري كافيه كه تو برنامه متغيير PWM رو به صورت پايين تغيير بدي:
کد:
PWM=(PWM-51*a)*5/(b-a)
سلام

بهتره یه توضیح در باره ی پروژه ام بدم.
من دارم رو یه پروژه هواپیما با کنترل از راه دور کار میکنم یه ماژول گرفتم برای کنترل موتور ها ولی این ماژول برای یه موتور طراحی شده یعنی یه pwm از کنترلر هواپیما میاد و مورد استفاده قرار میگیره ولی هواپیمای من چهار تا موتور داره حالا من میخوام خروجی pwm که این مدار به من میده و یکی هست رو چهار تا کنم به طوری که از طریق کد خودم بتونم روی pwm ها کنترل داشته باشم یعنی چهار تا pwm مجزا. IC استفاده شده هم Atmega2056 هست.
امیدوارم که توضیحات کافی بوده باشه.

حالا چند تا سوال :
1- ولتاژ 0 درصد و 100 درصد رو بين دوتا ولتاژ مثلا a و b بزاري یعنی چی؟
2- با این کد که ولتاژ رفرنسو aref گرفتید ولتاژ خروجی pwm اندازه ی ولتاژ ورودی pwm خواهد بود؟
3- همین کدی که گذاشتید به درد این کار میخوره یا باید تغییرتی توش داده بشه؟

با تشکر فراون.
از دوستان کسی نظری نداره؟
سلام.

نقل قول: از دوستان کسی نظری نداره؟

بنظرم بهترين كاري كه مي توني انجام بدي اينه ...

1- اول مطلب آموزشي درست و حسابي براي PWM گير بيار و خوب بخون.
2- سعي كن با استفاده از PWM نور يه LED رو به صورت عملي كنترل كني ( شدت نور رو كم و زياد كني ... ).
3- ديتاشيت Atmega2056 رو بخوني ( قسمت PWM )
4- با خيال راحت پروژه ي فعليت رو دنبال كن.

ان شاء الله زودتر به نتيجه مي رسي ...

موفق باشي.
يا علي.
نور led رو کم و زیاد میتونم بکنم دیتا شیت آی سی رو هم خوندم
ولی در مورد این پروژه همون طور که توضیح دادم میخوام یه pwm رو بکنم 4 تا و این آی سی که گفتم صد در صد این قابلیت رو داره فقط تو کد نویسیش مشکل دارم که ممنون میشم کمکم کنید.

با تشکر.
Atmega2056 پیداش نکردم. با چه برنامه کار می کنید. تو AVRstudio5.0.1163 هم ندیدم.
برای تنظیم PWM چند تا ریجستر هست که با توجه به DATAsheet میشه اون ها رو مقدار دهی کرد. و ازش تو هر برنامه ی با ASM خروجی گرفت. باید دیتاشیت رو بررسی کنید.
برگشتیم سر خونه ی اول اگه پست قبلی من رو نگاه کنید توضیح دادم که من تو نوشتن کدش مشکل دارم نه اینکه کلا بلد نباشم من روی کدی که علی آقا زحمتش رو کشیدن چند تا سوال پرسیدم و اون هم اینه که :

1- ولتاژ 0 درصد و 100 درصد رو بين دوتا ولتاژ مثلا a و b بزاري یعنی چی؟
2- با این کد که ولتاژ رفرنسو aref گرفتید ولتاژ خروجی pwm اندازه ی ولتاژ ورودی pwm خواهد بود؟

من دقیقا میخوام pwm های خروجی کپی pwm های ورودی باشند از آی سی های دیگه هم استفاده نکردم چون میخوام اگر که خواستم و یه موقعی احتیاج شد روی pwm ها کنترل داشته باشم بتونم این کار رو انجام بدم.

ان شا الله که این دفعه توسته باشم منظورم رو برسونم

با تشکر.
صفحه‌ها: 1 2 3 4