راه اندازی pwm بردهای کوبی

با سلام و درود
PWM مخفف واژه‌ی Pulse Width Modulation و به معنای “مدولاسیون پهنای پالس” است pwm تکنیکی برای کنترل ولتاژِ پایه‌ی خروجی است.که بیشترین استفاده آن برای کنترل سرعت موتورهای DC است که در اینجا وارد جزئیات آن نمی شویم.

برای راه اندازی pwm برد کوبی باید ماژول pwm-sunxi روی کرنل ایمیج شما فعال باشد این ماژول بر روی ایمیج های اصلی خود سایت کوبی برد lubuntu 12.04 فعال است برای صحت عملکرد آن می توانید با دستور lsmod از فعال بودن این ماژول اطمینان حاصل کنید.
اگر تست کردیدو ماژول وجود نداشت و مطمئن هستید در این ایمیج pwm کامپایل شده است باید ماژول را با دستور modprobe بارگذاری کنید:
lsmod


در مرحله بعد باید چک شود ببینید که کلاس pwm در ایمیج شما وجود داشته باشد.

ls /sys/class/pwm-sunxi/pwm0

اگر خروجی داشتید این کلاس موجود است.
در کوبی 1 و 2 یک pwm0 موجود است که پورت PB2 است برای چک کردن پورت pwm با دستور زیر می توانید بررسی کنید:

cat /sys/class/pwm-sunxi/pwm0/pin

در زیر یک سیکل پالس pwm می بینید:
pwm1
برای کار با pwm لازم است با یک سری اصطلاحات آشنا باشید فرض می گیریم شما با این اصطلاحات آشنا هستید و وارد جزئیات آن نمی شویم.در اینجا مقادیر کلاس pwm-sunxi را بررسی می کنیم:
pulse
این مقدار بیانگر high یا low بودن پورت pwm قبل از شروع pwm است که سیگنال خروجی را 1 منطقی یا 0 منطقی می کند

echo 1 > /sys/class/pwm-sunxi/pwm0/puls

run
این مقدار شروع و توقف سیگنال pwm را مشخص می کند.

echo 1 > /sys/class/pwm-sunxi/pwm0/run

echo 0 > /sys/class/pwm-sunxi/pwm0/run

period
این متغییر دوره تناوب یک سیکل را می سازد که می تواند هم بر حسب فرکانس هم بر حسب زمان مقدار دهی شود.
مثلا:

echo 125khz > /sys/class/pwm-sunxi/pwm0/period

یک سیکل با فرکانس 125 کیلو هرتز تولید کرده ایم که می تواند بر حسب هرتز هم تعیین شود.

echo 100ms > /sys/class/pwm-sunxi/pwm0/period

در این جا این سیکل بر حسب زمان 100 میلی ثانیه تولید کردیم که می تواند به واحد های ns و us هم باشد.
duty(دیوتی سایکل یا سیکل وظیفه)
این متغییر مقدار سیکل وظیفه را مشخص می کند.
خوب کاربرد دیوتی سایکل همه می دانید که برای کنترل ولتاژ خروجی استفاده می شود

echo 50ms > /sys/class/pwm-sunxi/pwm0/duty

در اینجا سیکل وظیفه 50 درصد در نظر گرفته شده است که طبق زمان تعیین گردیده است
که به صورت زیر هم می توان تعریف کرد

echo 50 > /sys/class/pwm-sunxi/pwm0/duty_percent

polarity(قطبیت)
این مقدار low و high بودن سیکل وظیفه را تایین می کند
در صورتی که high باشد سیکل وظیفه مثبت است

echo 1 > /sys/class/pwm-sunxi/pwm0/polarity

pwm2

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

echo 0 > /sys/class/pwm-sunxi/pwm0/polarity

pwm3

یک مثال برای اینکه با طریقه مقدار دهی آشنا شوید:

echo 125khz > /sys/class/pwm-sunxi/pwm0/period
echo 25 > /sys/class/pwm-sunxi/pwm0/duty_percent
echo 1 > /sys/class/pwm-sunxi/pwm0/polarity
echo 1 > /sys/class/pwm-sunxi/pwm0/run

الان ما یک فرکانس 125khz با سیکل وظیفه 25 درصد مثبت ایجاد کردیم و آن را استارت کردیم.

این آموزش با ایمیج Lubuntu 12.04 desktop تست شده است و کاملا درست کار می کند.

موفق باشید

برچسب خورده : , , , , , , , . Bookmark the پیوند یکتا.

11 Responses to راه اندازی pwm بردهای کوبی

  1. ahrovan میگوید :

    تشکر – ولی یه سوال مطرح میشه :: آیا راهندازی pwm برای sunxi برای هر سری متفاوت خواهد بود،منظور -م برای cubie1 , cubie2 هست? چون برای cubie1 با عنوان sun4i و برای cubie2 با sun7i مشخص میشه – اگه مشکلی نیست سوال دوم اینکه ، در صورت فعال نبودن ماژول ،آیا امکان اضافه کردن به کرنل هست؟

    • نوری زاده میگوید :

      با سلام
      بله شما درست می فرمایید ساختارها در کوبی 1 و 2 اینگونه است و در مورد pwm هم صدق می کند در این مورد ایمیج های اصلی خود سایت کوبی lubuntu این ماژول را برای کوبی برد 1 و کوبی 2 قرار داده است که طبق رجیستر های سخت افزاری کامپایل شده و تست شده است امکان اضافه کردن ماژول وجود دارد اما من به شما توصیه می کنم اگر قصد راه اندازی pwm را دارید از ایمیج های رسمی سایت کوبی lubuntu 12.04 استفاده کنید که خود سازنده آن را کامپایل کرده است زیرا اضافه کردن ماژول به کرنل آن چیزی که شما فکر می کنید نیست و به این سادگی ها امکان پذیر نیست چون علاوه بر دانش نرم افزاری احتیاج است شما رجیستر های سخت افزاری خود را بشناسید تا بتونید برای اون ماژول تعریف کنید در هر صورت از لینک زیر می توانید سورس ماژول pwm-sunxi بگیرید و به کرنل اضافه کنید
      https://github.com/dwilkins/pwm-sunxi
      موفق باشید

  2. ahrovan میگوید :

    منظور از Armv71 دبیان نسخه 7.1 هست،در کل آموزشی که هست برای cubian هم قابل اجراست؟ لینک زیر ::
    .linux-sunxi.org/nightly/linux-sunxi/
    که برای هر سری مجموعه گذاشته،آیا میتونه کاربری داشته باشه،اصولا مشکل در ساخت ایمیج هست،پس آیا روی ایمیج آماده میشه از این ماژول ها استفاده کرد ..؟

    و سوال پایانی اینکه در مورد کتابخانه های C اطلاعی دارین،که همین مثالی که گفتین توسط C برنامه ریزی و اجرا بشه ؟ تشکر فراوان

    • نوری زاده میگوید :

      منظور arm71 ساختار پردازنده ما است ایمیج ما linaro 13.04 همون lubuntu 12.04 سایت کوبی برد است .
      در مورد کوبیان شخصا تست نکرده ام اما می دونم کوبیان در آپدیت جدید خود pwm و ماژول pwm-sunxi کامپایل کرده است اما مثل اینکه تست نشده است و یکسری باگ دارد
      برای عملکرد درست pwm بهتر است از ایمیج lubuntu استفاده کنید که آزمایش خود را پس داده و نمره قبلی گرفته …
      کوبیان خیلی خوب دارد عمل می کند اما به نظر من نمی تواند روی کامپایل و راه اندازی پورت ها زیاد مانور دهد چون سازنده برد نیست البته زمان همه چیز را به ما نشان می دهد …

      در مورد کتابخانه C بهترین مرجع همون pwm-sunxi.c سورس ماژول است البته به نظر من نیازی نیست از کتابخانه استفاده کنید به راحتی با همین api ها یا به اصطلاح shell script می تونید از c دسترسی مستقیم به pwm داشته باشید که فکر می کنم ساده تر هم است اگر فرصت شود من تا آخر این هفته یک آموزش در مورد استفاده از این ماژول در php و C را قرا می دهم.

      موفق باشید

  3. ahrovan میگوید :

    با سلام و امید دارم سولات زیادم موجب رنجش شما نشه:: در مورد اینتر فیس pwm خوش بین هستیم،ولی اینترفیس های دیگه ی بورد مثل uart , spi,ir,ps2,… و timer ها و interrupt فعلن قابل دسترسی هستن ؟؟ – اگه نه برای دسترسی به اونا چه کارایی میشه کرد؟ البته اگه راضی نباشیم برای نسخه ی بعدی lubuntu صبر کنیم !

    همچنین بعد تغییر حالت mux برای pio – کاربری پیش فرض input& output برای gpio تغییر کرده،به کاربری تعریف شده ی دیگه ای تغییر میکنه،در این حالت راه انداز برای پین مورد نظر هم تغییر میکنه ؟ پس در تعریف pwm مثال شما می بایست ابتدا Script.bin رو دستکاری کنید؟

    آیا طبق معمول با استفاده از timer ها میشه در کوبی به عنوان pwm استفاده کرد؟
    ///
    با تشکر ، همچنین سعی میکنم بیشتر در پست های مرتبط سوال مطرح کنم

    • نوری زاده میگوید :

      با سلام
      من خیلی خیلی خوشحال می شوم که شما سوال مطرح می کنید و پیگیر آموزشات هستید باعث دلگرمی من است ;)
      دوست من سوالات شما خیلی کلی است پورت uart-ir-pwm در حال حاضر تقریبا راه اندازی و کانفیگ شده اند
      در مورد بقیه پورت ها هم به زودی کانفیگ می شود من در حال حاضر دارم روی DAC و SPI کار می کنم به زودی با کمک گروه پشتیبانی و همکاران ویکی
      پورت های مختلف را راه اندازی میکنیم …

      من متوجه گفته شما در مورد gpio نشدم یعنی چی که io تغییر می کنه و به کاربری تعریف شده تغییر می کنه؟
      در ایمیج lubuntu script.bin به صورت پیش فرض برای pwm تعریف شده است و نیازی به دستکاری آن نیست در مورد timer هم اگه منظور شما در بستر نرم افزاری و برنامه نویسی است من بعید می دونم بتونید با delay دوره تناوب و سیکل وظیفه تولید کنید فقط می توانید عملکرد pwm در یک فرکانس ثابت و مدت زمان مشخص شبیه سازی کنید
      شما با gpio هم می توانید pwm تولید کنید در همین حد شبیه سازی …

  4. ahrovan میگوید :

    با سلام – و خسته نباشید

    سوال دارم که تکمیل کننده سوال قبلیم هست :: در صفحه ی :
    http://linux-sunxi.org/A10/PIO
    داریم ::
    PB02 PWM0
    با توجه به این موضوع میبایست در فایل Script.bin برای انتخاب MUX 2 این پین اقدام شود،شما در پاسخ های قبلی به فعال بودن پیش فرض pwm اشاره کردید،ولی بعد بررسی فایل Script.bin برای lubuntu تنها pwm مربوط به lcd دیده شد،اما در مورد PB02 تعریف خاصی برای MUX 2 لحاظ نشده ::
    سوال1:: آیا ماژول pwm-sunxi اتوماتیک این تعریف رو جدای از فایل Script.bin لحاظ میکنه ؟
    سوال2:: PI03 PWM1 در a20 موجود هست،آیا ماژول pwm-sunxi با توجه به اینکه نسخه ی خاصی از sunxi رو مد نظر قرار نداده و نام گذاری عمومی شده (مثال :: sun7i برای a20 و sun5i برا A10) – آیا قابل استفاده در sun7i برای دو pwm موجود 0,1 هست؟

    با تشکر از مساعدت شما

  5. Ahrovan میگوید :

    با سلام – در مورد دستور modprobe – که مورد استفاده قرار دادین – آیا مستقیما برای نصب ماژول مورد استفاده قرار میگیره – در این صورت به فایل خاصی احتیاج هست ?

    • نوری زاده میگوید :

      سلام
      شما با دستور modprobe می توانید ماژول مورد نظر را که روی ایمیج کامپایل شده است فعال کنید برای فعال سازی و اجرای یک ماژول از دستور modprobe استفاده می شود

  6. keec میگوید :

    اموزشی در مورد beagle bone قرار داده نشده؟!!!!

پاسخ دهید