- پی ڈبلیو ایم سگنل کیا ہے؟
- GPIO پنوں پر PWM پیدا کرنے کے لئے پروگرامنگ PIC
- سرکٹ ڈایاگرام
- نقلی
- پی آئی سی مائکروکنٹرولر کا استعمال کرتے ہوئے سروو موٹر کو کنٹرول کرنے کیلئے ہارڈ ویئر سیٹ اپ
پی ڈبلیو ایم سگنل جنریشن ہر ایمبیڈڈ انجینئرز ہتھیاروں میں ایک اہم ذریعہ ہے ، وہ امدادی موٹر کی پوزیشن کو کنٹرول کرنے ، کنورٹرز / انورٹرز میں کچھ پاور الیکٹرانک آئی سی سوئچ کرنے اور یہاں تک کہ ایک سادہ ایل ای ڈی چمک کنٹرول کے ل for بہت ساری ایپلی کیشنز کے ل. کام آتے ہیں۔ پی آئی سی مائکروکانٹرولرز میں موازنہ ، کیپچر اور پی ڈبلیو ایم (سی سی پی) ماڈیولز کا استعمال کرکے مطلوبہ رجسٹر ترتیب دے کر پی ڈبلیو ایم سگنل تیار کیے جاسکتے ہیں ، ہم نے پہلے ہی یہ سیکھا ہے کہ پی آئی سی پی ڈبلیو ایم ٹیوٹوریل میں یہ کیسے کرنا ہے۔ لیکن اس طریقہ کار میں ایک کافی خرابی ہے۔
PIC16F877A ، صرف پنوں RC1 اور RC2 پر PWM سنکیتوں کو پیدا کر سکتے ہیں کہ ہم مسابقتی کمیشن ماڈیولز استعمال کرتے ہیں تو. لیکن ہمیں ایسے حالات کا سامنا کرنا پڑ سکتا ہے ، جہاں ہمیں پی ڈبلیو ایم کی فعالیت کیلئے مزید پنوں کی ضرورت ہوتی ہے۔ مثال کے طور پر میرے معاملے میں ، میں اپنے روبوٹک بازو پروجیکٹ کے لئے 6 آر سی سرو موٹرز کو کنٹرول کرنا چاہتا ہوں جس کے لئے سی سی پی ماڈیول نا امید ہے۔ ان منظرناموں میں ہم جی پی آئی او پنوں کو ٹائمر ماڈیولز کا استعمال کرکے پی ڈبلیو ایم سگنل تیار کرنے کے لئے پروگرام کر سکتے ہیں ۔ اس طرح ہم کسی بھی مطلوبہ پن کے ساتھ زیادہ سے زیادہ پی ڈبلیو ایم سگنل تیار کرسکتے ہیں۔ ہارڈ ویئر کے دوسرے ہیکس بھی ہیں جیسے ملٹی پلسر آئی سی کا استعمال کرتے ہیں ، لیکن ہارڈ ویئر پر کیوں سرمایہ لگائیں جب پروگرامنگ کے باوجود اسی کو حاصل کیا جاسکتا ہے۔ تو ہم اس ٹیوٹوریل میں سیکھیں گے کہ PIC GPIO پن کو PWM پن میں کس طرح تبدیل کرنا ہے اور اس کی جانچ کرنے کے لئے ہم اسے ڈیجیٹل آسکلوسکوپ کے ذریعہ پروٹوس پر نقل کریں گے۔پی ڈبلیو ایم سگنل کا استعمال کرتے ہوئے سروو موٹر کی پوزیشن پر قابو پالیں اور اس کے ڈیوٹی سائیکل کو مختلف پوٹنٹومیٹر میں مختلف کرکے تبدیل کریں۔
پی ڈبلیو ایم سگنل کیا ہے؟
تفصیلات میں جانے سے پہلے ، آئیے پی ڈبلیو ایم سگنل کیا ہیں اس پر تھوڑا سا برش کریں۔ پلس کی چوڑائی ماڈیولیشن (PWM) ایک ڈیجیٹل سگنل ہے جو عام طور پر کنٹرول سرکٹری میں استعمال ہوتا ہے۔ یہ سگنل ایک وضاحتی وقت اور رفتار میں اعلی (5v) اور کم (0v) مرتب کیا گیا ہے۔ جس وقت کے دوران سگنل زیادہ رہے گا اسے "وقت پر" کہا جاتا ہے اور جس وقت کے دوران سگنل کم رہتا ہے اسے "آف ٹائم" کہا جاتا ہے ۔ پی ڈبلیو ایم کے لئے دو اہم پیرامیٹرز ہیں جیسا کہ ذیل میں بحث کی گئی ہے:
PWM کے ڈیوٹی سائیکل
وقت کا فیصد جس میں پی ڈبلیو ایم سگنل ہائی (وقت پر) رہتا ہے ، کو ڈیوٹی سائیکل کہا جاتا ہے۔ اگر سگنل ہمیشہ ہی رہتا ہے تو یہ 100٪ ڈیوٹی سائیکل میں ہوتا ہے اور اگر یہ ہمیشہ ہی بند رہتا ہے تو یہ 0٪ ڈیوٹی سائیکل ہے۔
ڈیوٹی سائیکل = ٹائم آن کریں / (ٹائم آن کریں + ٹرن آف ٹائم)
متغیر نام |
سے مراد |
پی ڈبلیو ایم_ فریکوئینسی |
پی ڈبلیو ایم سگنل کی تعدد |
ٹی ٹوٹل |
پی ڈبلیو ایم کے ایک مکمل سائیکل کے ل taken کل وقت |
ٹی چوٹ |
پی ڈبلیو ایم سگنل کے وقت |
T_OFF |
پی ڈبلیو ایم سگنل کا وقت ختم |
ڈیوٹی_ سائیکل |
PWM سگنل کا ڈیوٹی سائیکل |
تو اب ، ریاضی کرتے ہیں.
یہ وہ معیاری فارمولے ہیں جہاں تعدد صرف وقت کا باہمی حصول ہوتا ہے ۔ تعدد کی قیمت کا فیصلہ صارف کے ذریعہ اس کی درخواست کی ضرورت کے مطابق کرنا ہوتا ہے۔
ٹیٹوٹال = (1 / پی ڈبلیو ایم_ فریکوینسی)
جب صارف ڈیوٹی سائیکل کی قیمت میں تبدیلی کرتا ہے تو ، ہمارے پروگرام کو خود بخود اس کے مطابق Tटका وقت اور T_OFF وقت کو ایڈجسٹ کرنا چاہئے۔ لہذا مذکورہ فارمولوں کو ڈیوٹی_کائکل اور T_TOTAL کی قدر کی بنیاد پر Tmitted حساب کرنے کے لئے استعمال کیا جاسکتا ہے ۔
Tटका = (ڈیوٹی_کل * T_TOTAL) / 100
چونکہ ایک مکمل چکر کے لئے پی ڈبلیو ایم سگنل کا کل وقتی وقت اور وقت کا مجموعہ ہوگا۔ جیسا کہ اوپر دکھایا گیا ہے ہم آف ٹائم ٹام TFF کا حساب لگاسکتے ہیں ۔
T_OFF = T_TOTAL - Tटका
ان فارمولوں کو ذہن میں رکھتے ہوئے ہم PIC مائکرو قابو پانے والے پروگرام کو شروع کرسکتے ہیں۔ پروگرام میں PIC ٹائمر ماڈیول اور PIC ADC ماڈیول شامل ہوتا ہے تاکہ PWM سگنل تیار کیا جا based جو ADC ویلیو فارم POT کے مطابق مختلف ڈیوٹی سائیکل پر مشتمل ہوتا ہے۔ اگر آپ ان ماڈیولز کو استعمال کرنے میں نئے ہیں تو پھر ہائپر لنکس پر کلک کرکے مناسب ٹیوٹوریل پڑھنے کی سختی سے سفارش کی جاتی ہے۔
GPIO پنوں پر PWM پیدا کرنے کے لئے پروگرامنگ PIC
مکمل پروگرام ہے اس ٹیوٹوریل کے لئے ہمیشہ کی طرح کی ویب سائٹ کے نچلے حصے میں پایا جا سکتا ہے. اس سیکشن میں آئیے سمجھیں کہ پروگرام واقعتا how کیسے لکھا جاتا ہے۔ تمام پروگراموں کی طرح ، ہم ترتیب بٹس کو ترتیب دے کر شروع کرتے ہیں۔ میں نے اسے اپنے لئے ترتیب دینے کے لئے میموری ویوز کا اختیار استعمال کیا ہے۔
// CONFIG #pragma config FOSC = HS // Oscillator Selection Bits (HS oscillator) #pragma config WDTE = OFF // واچ ڈاگ ٹائمر بٹ (WDT غیر فعال) #Pragma config PWRTE = آف // پاور اپ ٹائمر بٹ (PWRT) غیر فعال) # پراگما کنفگریشن BOREN = ON // براؤن آؤٹ ری سیٹ کریں قابل بٹ (BOR فعال) # پراگما کنفگریشن LVP = آف // کم وولٹیج (سنگل سپلائی) میں سرکٹ سیریل پروگرامنگ بٹ (RB3 ڈیجیٹل I / O ہے) ، پروگرامنگ کے لئے ایم سی ایل آر پر ایچ وی کا استعمال لازمی ہے) # پیراگما کنفیگریشن سی پی ڈی = آف // ڈیٹا ایپراوم میموری کوڈ پروٹیکشن بٹ (ڈیٹا ای ای پی آر او کوڈ پروٹیکشن آف) # پیراگما کنفگریشن WRT = OFF // فلیش پروگرام میموری تحریری قابل بٹس (تحریری تحفظ تحریر؛ تمام پروگرام میموری EECON کنٹرول کے ذریعہ لکھا جاسکتا ہے) # پیراگما کنفیگریشن سی پی = آف // فلیش پروگرام میموری کوڈ پروٹیکشن بٹ (کوڈ پروٹیکشن آف) // # پراگما کنفیگریشن بیانات میں پروجیکٹ فائل شامل ہونا چاہئے۔ // آن اور آف کے لئے # ڈیفائن کے بجائے پروجیکٹ اینیمز کا استعمال کریں۔ # شامل کریں
پھر ہم ہارڈویئر میں استعمال ہونے والی گھڑی کی فریکوئنسی کا تذکرہ کرتے ہیں ، یہاں میرا ہارڈ ویئر 20 میگا ہرٹز کرسٹل استعمال کرتا ہے ، آپ اپنے ہارڈ ویئر کی بنیاد پر قیمت درج کرسکتے ہیں۔ اس کے بعد پی ڈبلیو ایم سگنل کی فریکوینسی ویلیو ہے۔ چونکہ میرا مقصد یہ ہے کہ کسی شوق آر سی सर्वो موٹر کو کنٹرول کرنا ہے جس میں 50 ہ ہرٹج کی پی ڈبلیو ایم فریکوئنسی کی ضرورت ہوتی ہے۔
# وضاحت _XTAL_FREQ 20000000 # KHz (50Hz) میں پی ڈی ڈبلیو ایم_ فریکوئینسی 0.05 //
اب ، جب ہمارے پاس فریکوئینسی کی قیمت ہے تو ہم مذکورہ بالا زیر بحث فارمولوں کا استعمال کرکے ٹیٹوٹال کا حساب لگاسکتے ہیں۔ ملی سیکنڈ میں وقت کی قیمت حاصل کرنے کے لئے نتیجہ 10 کی طرف سے غوطہ لگایا گیا ہے۔ میرے معاملے میں T_TOTAL کی مالیت 2 ملی سیکنڈ ہوگی۔
انٹ ٹی ٹیٹوٹل = (1 / پی ڈبلیو ایم_ فریکوینسی) / 10؛ // تعدد سے کل وقت کا حساب لگائیں (ملی سیکنڈ میں) // 2msec
اس کے بعد ، ہم پوٹینومیٹر کی پوزیشن کو پڑھنے کے لئے اے ڈی سی ماڈیولز کی ابتدا کریں جیسا کہ ہمارے اے ڈی سی پی آئی سی ٹیوٹوریل میں زیر بحث آیا ہے۔ اگلا ہمارے پاس مداخلت کی خدمت کا معمول ہے جو ہر بار بلایا جائے گا ، ٹائمر اوور فلوز ہم بعد میں اس کی طرف واپس آجائیں گے ، اب کے لئے اہم کام کی جانچ پڑتال کریں۔
مرکزی تقریب کے اندر ہم ٹائمر ماڈیول تشکیل دیتے ہیں ۔ یہاں میں نے ٹائمر ماڈیول کو ہر 0.1 ملی میٹر کے لئے اوور فلو کے لئے تشکیل دیا ہے۔ ذیل کے فارمولوں کا استعمال کرکے اس وقت کی قیمت کا حساب لگایا جاسکتا ہے
ریگولیو = 256 - ((تاخیر * فاسک) / (پریسلر * 4)) سیکنڈ میں تاخیر اور ہرٹج میں ایف او ایس سی
میرے معاملے میں 0،0001 سیکنڈ (0.1 ملی میٹر) تاخیر کے ساتھ 64 کے پریسکلر اور 20MHz کے فاسک کے ساتھ میرے رجسٹر (ٹی ایم آر0) کی قیمت 248 ہونی چاہئے۔ لہذا ترتیب اس طرح دکھائی دیتی ہے
/ ***** ٹائمر کیلئے پورٹ کنفیگریشن ****** / آپشن _ جی = 0b00000101؛ بیرونی فریق کے ساتھ // ٹائمر0 اور 64 بطور نسخہ // اس کے علاوہ پل اپ کو بھی قابل بناتا ہے TMR0 = 248؛ // 0.0001s کے لئے وقت کی قیمت لوڈ کریں؛ delayValue 0-256 کے درمیان ہوسکتی ہے صرف TMR0IE = 1؛ // PIE1 رجسٹر GIE = 1 میں ٹائمر مداخلت بٹ کو فعال کریں ۔ // عالمی مداخلت PEIE = 1 کو فعال کریں ؛ // پیریفرل رکاوٹ کو قابل بنائیں / *********** ______ *********** /
پھر ہمیں ان پٹ اور آؤٹ پٹ کی ترتیب ترتیب دینی ہوگی۔ یہاں ہم PWM سگنلوں کو آؤٹ پٹ کرنے کے لئے اے ڈی سی ویلیو اور PORTD پن کو پڑھنے کے لئے اے این0 پن کا استعمال کر رہے ہیں۔ لہذا ان کو آؤٹ پٹ پن کے طور پر شروع کریں اور کوڈ کی نیچے والی لائنوں کا استعمال کرکے ان کو کم بنائیں۔
/ ***** بندرگاہ ترتیب I / O ****** / TRISD = 0x00؛ // ایم سی یو کو ہدایت دیں کہ پورٹ ڈی پر تمام پنوں آؤٹ پٹ پورٹ ہے = 0x00؛ // تمام پنوں کو 0 / *********** _____ *********** / میں شروع کریں
لامحدود جبکہ لوپ کے اندر ، ہمیں ڈیوٹی سائیکل سے آن ٹائم (ٹی ٹیک) کی قیمت کا حساب لگانا ہوگا۔ وقت پر اور ڈیوٹی سائیکل ہم اندر سے بار بار یہ کروں تاکہ برتن کی پوزیشن کی بنیاد پر مختلف ہوتی ہے جبکہ اس کو ذیل میں دکھایا گیا لوپ. 0.0976 وہ قدر ہے جس کو 100 حاصل کرنے کے ل 10 1024 کے ساتھ ضرب بنانا ہوتا ہے اور ٹیٹھیٹک کا حساب لگانے کے لئے ہم نے ملی سیکنڈ میں قیمت حاصل کرنے کے لئے اسے 10 سے ضرب کیا ہے۔
جبکہ (1) { POT_val = (ADC_Read (0))؛ // ADC ڈیوٹی_ سائیکل = (POT_val * 0.0976) کا استعمال کرتے ہوئے POT کی قدر پڑھیں ۔ // نقشہ 0 سے 1024 سے 0 سے 100 ٹیٹومیٹ = ((ڈیوٹی_ سائیکل * ٹیٹوٹل) * 10/100)؛ // ملی سیکنڈ میں فارمولہ یونٹ کا استعمال کرتے ہوئے وقت پر حساب دیں __ ڈیلا_ ایم ایس (100)؛ }
چونکہ ہر 0.1ms کے لئے ٹائمر زیادہ بہاؤ پر طے ہوتا ہے ، لہذا ٹائمر انٹریپٹ سروس روٹین ISR کو ہر 0.1ms کے لئے بلایا جائے گا ۔ سروس روٹین کے اندر ہم متغیر نامی متغیر استعمال کرتے ہیں اور اسے ہر 0.1 سیکنڈ میں بڑھا دیتے ہیں۔ اس طرح ہم ایف ٹریک کو ٹریک کرسکتے ہیں۔ پی آئی سی مائکروکانٹرولر میں مداخلتوں کے بارے میں مزید معلومات کے ل the ، لنکوں پر عمل کریں
اگر (TMR0IF == 1) // ٹائمر کے جھنڈے کو ٹائمر اوور فلو کی وجہ سے متحرک کیا گیا ہے -> ہر 0.1ms { TMR0 = 248 کے لئے اوور فلو سیٹ ہو set // ٹائمر کی قیمت لوڈ کریں TMR0IF = 0؛ // صاف ٹائمر مداخلت والے پرچم کی گنتی ++؛ // ہر 0.1ms لئے دھیرے بڑھتا شمار -> شمار / 10 MS میں شمار کی قیمت دے گا }
آخر میں اب وقت آگیا ہے کہ Tedia اور T_OFF کی قدر کی بنیاد پر GPIO پن کو ٹوگل کریں ۔ ہمارے پاس گنتی متغیر ہے جو ملی سیکنڈ میں وقت سے باخبر رہتا ہے۔ تو ہم نے وقت سے بھی کم ہے تو چیک کرنے کے لئے کہ متغیر کا استعمال کرتے وقت پر ہاں تو پھر ہم پر نہیں تو ہم اسے بند کر دیا GPIO پن رکھنے کے لئے اگر، اور رکھنے کے اسے نئی سائیکل شروع ہوتا ہے جب تک بند کر دیا گیا. یہ ایک پی ڈبلیو ایم سائیکل کے کل وقت سے موازنہ کرکے کیا جاسکتا ہے۔ ایسا کرنے کا کوڈ نیچے دکھایا گیا ہے
اگر (گنتی <= (ٹیٹم)) // اگر وقت سے کم وقت RD1 = 1؛ // GPIO آن کریں ورنہ RD1 = 0؛ // دوسری صورت میں GPIO کو بند کردیں اگر (گنتی> = (T_TOTAL * 10)) // جب تک کہ ایک نیا سائیکل گنتی شروع نہ ہو اسے بند کرو = 0؛
سرکٹ ڈایاگرام
پی آئی سی مائکروکન્ટٹرولر کے جی پی آئی او پن کے ساتھ پی ڈبلیو ایم کو پیدا کرنے کے لئے سرکٹ ڈایاگرام واقعی آسان ہے ، صرف پی سی سی کو آیسیلیٹر سے پاور کریں اور پوٹینومیٹر کو اے این0 اور سرو موٹر کو پن کرنے کے لئے آر ڈی 1 کو جوڑیں ، ہم پی ڈبلیو ایم سگنل حاصل کرنے کے لئے جی پی آئی او پن کا استعمال کرسکتے ہیں ، میں نے منتخب کیا ہے۔ RD1 بالکل بے ترتیب۔ پوٹینومیٹر اور سروو موٹر دونوں ہی 5 وی کے ذریعہ چلتے ہیں جو 7805 سے باقاعدہ ہیں جیسا کہ سرکٹ ڈایاگرام میں ذیل میں دکھایا گیا ہے۔
نقلی
اس پروجیکٹ کو نقل کرنے کے لئے میں نے اپنا پروٹیوس سافٹ ویئر استعمال کیا۔ ذیل میں دکھایا گیا سرکٹ بنائیں اور کوڈ کو اپنے نقلی سے منسلک کریں اور اسے چلائیں۔ ہمارے پروگرام کے مطابق آپ کو RD1 GPIO پن پر پی ڈبلیو ایم سگنل ملنا چاہئے اور پوٹینومیٹر کی پوزیشن کی بنیاد پر پی ڈبلیو ایم کے ڈیوٹی سائیکل کو کنٹرول کرنا چاہئے۔ نیچے دیئے گئے GIF سے پتہ چلتا ہے کہ جب پوڈینٹومیٹر کے ذریعہ ADC کی قیمت میں تبدیلی کی جاتی ہے تو PWM سگنل اور امدادی موٹر کیسے جواب دیتے ہیں ۔
پی آئی سی مائکروکنٹرولر کا استعمال کرتے ہوئے سروو موٹر کو کنٹرول کرنے کیلئے ہارڈ ویئر سیٹ اپ
میرا مکمل ہارڈ ویئر سیٹ اپ نیچے دکھایا گیا ہے ، ان لوگوں کے لئے جو میرے سبق پر عمل پیرا ہیں اس بورڈ کو واقف نظر آنا چاہئے ، یہ وہی بورڈ ہے جو میں نے اب تک اپنے تمام سبق میں استعمال کیا ہے۔ اگر آپ کو یہ جاننے میں دلچسپی ہے کہ میں نے اسے کیسے بنایا ہے تو آپ چمکتے ہوئے ایل ای ڈی سبق کا حوالہ دے سکتے ہیں۔ بصورت دیگر صرف سرکٹ ڈایاگرام کی پیروی کریں اور سب کو ٹھیک کام کرنا چاہئے۔
پروگرام اپ لوڈ کریں اور پوٹینومیٹر کو مختلف کریں اور آپ کو پوٹینومیٹر کی پوزیشن کی بنیاد پر پوزیشن کو تبدیل کرتے دیکھنا چاہئے۔ منصوبے کا مکمل کام اس صفحے کے آخر میں دیئے گئے ویڈیو میں دکھایا گیا ہے ۔ امید ہے کہ آپ اس منصوبے کو سمجھ گئے ہوں گے اور تعمیر کرنے میں خوشی محسوس کریں گے ، اگر آپ کے پاس بخشش ہے تو ، انھیں فورم پر بلا جھجھک پوسٹ کریں اور میں جواب دینے میں پوری کوشش کروں گا۔
میں متعدد سرو موٹروں کو قابو کرنے کے اختیارات شامل کرکے اور اس سے ایک روبوٹک بازو بنا کر ، اس منصوبے کو آگے بڑھانے کا ارادہ کر رہا ہوں ، جس سے ہم پہلے ہی بنائے ہوئے اردوینو روبوٹک بازو کی طرح ہی ہوں گے۔ تو تب تک دیکھیں یار !!