تولید PWM چند کانالی توسط AVR
در این قسمت از سری آموزش های “در کوچه پس کوچه های الکترونیک” با روش تولید PWM چند کانالی توسط AVR یا به عبارتی Multi channel PWM آشنا می شویم و بعد از فهمیدن روش کار ، با انواع کامپایلرها و زبان های Basic و C و ++C روش پیاده سازی چند کانالی PWM رو بررسی می کنیم. همونطور که می دونید میکروکنترلرهای موجود همگی حداقل دارای یک واحد PWM هستند. اما زمانی که در یک پروژه نیاز به تعداد زیادی کانال PWM باشد ، قطعا PWM سخت افزاری جوابگو نیست! پس راه حل چیست؟!
هسته ی واحد PWM در واقع یک تایمر بعلاوه چند رجیستر مقایسه کننده می باشد که اساس عملکرد آن و راه اندازیشان توسط میکروکنترلرهای مختلف در سری آموزش های ” الکترونیک با یک فنجان قهوه “ به تفصیل بیان خواهد شد و بحث آن در این جلسه نمی گنجد. اما در این سری از آموزش ها به قرار معمول به بررسی نکات و ترفندها می پردازیم و واحد PWM را نرم افزاری و چند کانالی پیاده سازی می کنیم.
ممکنه برای شما سوال پیش اومده باشه که حداکثر چند کانال به این روش می تونیم داشته باشیم؟ برای رسیدن به جواب سوال بالا و بحث های پیرامون این موضوع ویدئو زیر رو ببینید!
برای دیدن ویدئو با کیفیت بهتر از لینک های ذیل استفاده کنید: دریافت از مدیافایر

سلام وقت بخیر ممنون از زحمات شما لطفا فایل pdf از برنامه نوشته شده در سایت قرار بدید
با سلام
ممنون از نظر شما، انچام خواهد شد.
سلام. ببخشید فرکانس 50 کیلوهرتز را چطوری میشه روی این حالت پیاده کرد؟؟ از روش شما حساب میکنم به نتیجه نمیرسم. میشه راهنمایی بفرمایید. مممنون میشم.
سلام و درود.
در ویدئو راجع به ماکسیمم فرکانس قدری صحبت شده و یک رابطه ارائه شده، با کریستال 8 مگاهرتزی، از اونجایی که PWM ها به صورت نرم افزاری ساخته می شوند، به نظر می رسه که 50 کیلو هرتز فرکانس خیلی زیادی باشه!
دقت کنید که در PWM ، بین میزان فرکانس و تفکیک پذیری DutyCyle همیشه یک trade-off وجود داره!
با آرزوی موفقیت
با سلام من این برنامه را در کدویژن نوشتم ولی عمل نمی کنه می تونید این برنامه را ویرایش و به ایمیل من ارسال کنید
باتشکر.
#define CPU 8000000
#include
#include
#include
#include
int count=0;
int Npwm[8];
void main(void)
{
int i=0;
DDRD=1<<0|1<<1;
TIMSK=1<<0;
TCNT0=236;
TCCR0=1<<1;
#asm("sei")
while (1)
{
for(i=0;icount){
PORTD |=1;
}
else{
PORTD &=~(1);
}
if(Npwm[1]>count){
PORTD |=1<<1;
}
else{
PORTD &=~(1<count){
PORTD |=1<<2;
}
else{
PORTD &=~(1<count){
PORTD |=1<<3;
}
else{
PORTD &=~(1<count){
PORTD |=1<<4;
}
else{
PORTD &=~(1<count){
PORTD |=1<<5;
}
else{
PORTD &=~(1<count){
PORTD |=1<<6;
}
else{
PORTD &=~(1<count){
PORTD |=1<<7;
}
else{
PORTD &=~(1<99){
count=0;
}
TCNT0=236;
TCCR0=1<<1;
}
سلام.
ضبط و تولید و ویرایش هر کدام از این آموزش ها چندین ساعت بلکه روز ، زمان برده، این موضوع با 3 زبان برنامه نویسی خط به خط توضیح داده شده، در دو IDE روال کار نمایش داده شده ، پروژه شبیه سازی شده و عملکردش نشان داده شده، توضیحات برای کدویژن هم داده شده …
اگر ویدئو آموزشی رو کامل و با دقت ببینید مطمئنن می تونید جواب بگیرید. لطفا حداقل برای کار خودتون وقت بذارید …
موفق باشید.