পিডাব্লুএম বিট রেজোলিউশন বাড়ান


9

আমি আরডুইনো ইউনিোর পিডব্লিউএম বিট রেজোলিউশন বাড়িয়ে দিতে চাই। এই মুহুর্তে এটি 8-বিট যা আমি খুব কম মনে করি। বাধা এবং বিলম্বের ক্ষমতা হারানো ছাড়া এটি কি সম্ভব?

Koen

সম্পাদনা করুন এই সেটআপটি 16-বিটের পুনঃসংশোধন সরবরাহ করে

void setupPWM16() {
    DDRB |= _BV(PB1) | _BV(PB2);        /* set pins as outputs */
    TCCR1A = _BV(COM1A1) | _BV(COM1B1)  /* non-inverting PWM */
        | _BV(WGM11);                   /* mode 14: fast PWM, TOP=ICR1 */
    TCCR1B = _BV(WGM13) | _BV(WGM12)
        | _BV(CS11);                    /* prescaler: clock / 8 */
    ICR1 = 0xffff;                      /* TOP counter value (freeing OCR1A*/
}
/* Comments about the setup
Changing ICR1 will effect the amount of bits of resolution.
ICR1 = 0xffff; (65535) 16-bit resolution
ICR1 = 0x7FFF; (32767) 15-bit resolution
ICR1 = 0x3FFF; (16383) 14-bit resolution etc....

Changing the prescaler will effect the frequency of the PWM signal.
Frequency[Hz}=CPU/(ICR1+1) where in this case CPU=16 MHz
16-bit PWM will be>>> (16000000/8)/(65535+1)=30.5175Hz
*/

/* 16-bit version of analogWrite(). Works only on pins 9 and 10. */
void analogWrite16(uint8_t pin, uint16_t val)
{
    switch (pin) {
        case  9: OCR1A = val; break;
        case 10: OCR1B = val; break;
    }
}

উত্তর:


15

আরডুইনো ইউনো একটি এটিমেগা 382 পি মাইক্রোকন্ট্রোলারের উপর ভিত্তি করে। এই চিপটিতে দুটি 8-বিট টাইমার রয়েছে, প্রতিটি দুটি পিডব্লিউএম চ্যানেল এবং একটি 16-বিট টাইমার, শেষ দুটি চ্যানেল ড্রাইভ করে।

আপনি 8-বিট টাইমারগুলির রেজোলিউশন বাড়াতে পারবেন না। তবে, আপনি আরডুইনো কোর লাইব্রেরিতে ব্যবহৃত 8-বিট মোডের পরিবর্তে 16-বিট টাইমারটি 16-বিট মোডে রাখতে পারেন। এটি আপনাকে 244 Hz (সর্বাধিক) এর হ্রাস ফ্রিকোয়েন্সি সহ দুটি 16-বিট পিডব্লিউএম চ্যানেল দেবে। আপনাকে সম্ভবত টাইমারটি নিজেই কনফিগার করতে হবে এবং সহজে ব্যবহারের সুবিধা থেকে উপকার পাবেন না analogWrite()বিশদর জন্য, এটিমেগা 328 পি ডাটাশিটে টাইমার 1 তে বিভাগটি দেখুন ।

আপডেট : এখানে একটি 16-বিটের একটি বাস্তবায়ন analogWrite()। এটি কেবল 9 এবং 10 পিনগুলিতে কাজ করে, কারণ এটি কেবলমাত্র 16-বিট টাইমারের সাথে যুক্ত পিন।

/* Configure digital pins 9 and 10 as 16-bit PWM outputs. */
void setupPWM16() {
    DDRB |= _BV(PB1) | _BV(PB2);        /* set pins as outputs */
    TCCR1A = _BV(COM1A1) | _BV(COM1B1)  /* non-inverting PWM */
        | _BV(WGM11);                   /* mode 14: fast PWM, TOP=ICR1 */
    TCCR1B = _BV(WGM13) | _BV(WGM12)
        | _BV(CS10);                    /* no prescaling */
    ICR1 = 0xffff;                      /* TOP counter value */
}

/* 16-bit version of analogWrite(). Works only on pins 9 and 10. */
void analogWrite16(uint8_t pin, uint16_t val)
{
    switch (pin) {
        case  9: OCR1A = val; break;
        case 10: OCR1B = val; break;
    }
}

আপনি লক্ষ্য করতে পারেন যে পাল্টা ক্রমের শীর্ষটি সুস্পষ্টভাবে কনফিগার করা হয়েছে। হ্রাস রেজোলিউশনের ব্যয়কে আপনি পিডব্লিউএম দ্রুততর করার জন্য এটি একটি ছোট মানতে পরিবর্তন করতে পারেন।

এবং এখানে এর উদাহরণের জন্য একটি উদাহরণ স্কেচ দেওয়া হয়েছে:

void setup() {
    setupPWM16();
}

/* Test: send very slow sawtooth waves. */
void loop() {
    static uint16_t i;
    analogWrite16(9, i);
    analogWrite16(10, 0xffff - i);
    i++;
    delay(1);
}

বাহ আপনাকে অনেক ধন্যবাদ, এটি আমার প্রয়োজন ঠিক। আমি চাই আমার পিডাব্লুএম রেজোলিউশনটি আমার সেন্সর রেজোলিউশনের মতোই হোক। আমি যদি আপনার কোডটি <আমার সম্পাদনা দেখুন> এ পরিবর্তন করি তবে এটি কি 13-বিট রেজুলেশন হবে? যদি তা হয় তবে ফ্রিকোয়েন্সি কত হবে? আমি এটির সাথে একটি ডিসি মোটর চালনা করব তাই 244Hz সামান্য কম হবে বলে আমার ধারণা
কোএনআর

@ কোএনআর: না, প্রেসক্যালারের রেজোলিউশনে কোনও প্রভাব নেই, উদ্দেশ্য হ'ল গণনা কমিয়ে আনা। প্রেসক্যালারটি 8 এ সেট করা আপনাকে 30.5 Hz এর PWM ফ্রিকোয়েন্সি দেয়। আপনি যদি 13 বিট রেজোলিউশন চান তবে সেট ICR1করে রাখুন 0x1fff, তবে আপনার ফ্রিকোয়েন্সি হবে 1953 হার্জেট (এফ_সিপিইউ / (টপ + 1)) 1 এর একটি প্রেসক্যালারের সাথে
এডগার বোনেট

ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ. আমার প্রশ্নটি সম্পাদনা করে যাতে এটি এই ভুলগুলিকে আচ্ছাদন করে। সুতরাং অন্যান্য লোকেরা এটি সরাসরি দেখতে পারে। ধন্যবাদ!
কোয়ানআর

1
@ অ্যাডগার বোনেট এটি দুর্দান্ত, তবে আমি কোনও এলইডি পুরোপুরি বন্ধ করে দিচ্ছি বলে মনে হচ্ছে না। আমি ব্যবহার করছি ICR1 = 0x03FFএবং 0 এ আমি নেতৃত্বাধীন আলো জ্বালানোর পর্যাপ্ত পরিমাণে একটি ছোট ডাল দেখছি। কোন ধারনা?
ডেভিভিড

1
@ ডেভিড: হ্যাঁ, আপনার শূন্য শুল্ক থাকতে পারে না। analogWrite16(pin, val)(ভ্যালু + 1) / আইসিআর 1 এর শুল্ক চক্র দেয়। একটি workaround হিসাবে, আরডুইনোস analogWrite()না if (val == 0) digitalWrite(pin, LOW); else if (val == 255) digitalWrite(pin, HIGH);। তবে তারপরে আপনি 1 / ICR1 এর শুল্কচক্র পেতে পারবেন না ...
এডগার বোনেট

3

কিছুটা ক্রমাঙ্কণের মাধ্যমে আপনি দুটি পিডব্লিউএম চ্যানেলের আউটপুটগুলির সাথে পৃথক পৃথক ওজন প্রতিরোধকের যোগফল যোগ করতে পারেন। চূড়ান্তভাবে আপনি 8 টি বিট রেজোলিউশন সরবরাহ করতে এবং আউটপুটটি 1/256 তম স্তরে স্কেল করতে এবং একটি আউটপুট ব্যবহার করতে পারেন যাতে 2 র্থ চ্যানেলটি একটি বিটের পরিসরকে কভার করে এবং আপনি (আবার ধারণাভাবে) 16 বিট রেজোলিউশন পান। অপরিশোধিত যত্ন এবং সমন্বয় ছাড়াই আপনি যা পেয়েছেন তা হতাশাব্যঞ্জক হয়ে উঠবে।
তবে ২ য় চ্যানেলটিকে 16 বা 32 দ্বারা ভাগ করে আপনি পিডব্লিউএম রেজোলিউশনের বেশ কয়েকটি অতিরিক্ত বিট যুক্ত করতে পারেন। কেবলমাত্র 2 পিডব্লিউএম চ্যানেল অ্যানালগ ফিল্টার আউটপুট যুক্ত করে আপনি একটি অতিরিক্ত বিট যুক্ত করেন (অপরিবর্তিত এমভি / বিটের জন্য সম্ভাব্য পরিসর দ্বিগুণ হয়ে যায়)।
মূলত (আবার) 2 দ্বারা প্রতিটি অতিরিক্ত বিভাজনের জন্য আপনি অতিরিক্ত বিট রেজোলিউশন পান, তবে এটি কেবল 4 বা 5 বা 6 অতিরিক্ত বিটগুলির জন্য সম্পন্ন করা যেতে পারে, স্কেলিং প্রতিরোধকের ক্রমবর্ধমান নির্ভুলতার প্রয়োজনীয়তা এবং আরও বেশি কঠিন ক্যালিগ্রেশন এবং ত্রুটিগুলির সর্বমর্যাদায় with ।

সংক্ষিপ্ত উদাহরণ।
যদি কোনও পিডব্লিউএমকে 1 এমভি পদক্ষেপে 0 - 255 এমভি বলার জন্য ছোট করে দেওয়া হয়, তবে সমান প্রশস্ততার সাথে দুটি পিডব্লিউএম যোগ করলে 1 এমভি পদক্ষেপে 0 - 510 এমভি পরিসর দেওয়া হবে give
যদি একটি পিডব্লিউএম 32 টির ফ্যাক্টর দ্বারা কমিয়ে আনা হয় তবে প্রাথমিক পিডব্লিউএম পরিসরে 255 এমভি যুক্ত করার পরিবর্তে এটি শীর্ষ প্রান্তে কেবল 8 এমভি যোগ করতে পারে (0.256.32 = 8 এমভি, তবে রেজোলিউশন 0.03125 (1/32 তম) এ হবে ) এমভি পদক্ষেপ।

এটি সম্ভবত নিরোধক সংমিশ্রণ এবং আরসি ফিল্টারিংয়ের মাধ্যমে নিখুঁতভাবে অর্জন করা যেতে পারে, তবে একটি ওপ অ্যাম্প গ্রীষ্মের ব্যবহার ফলাফলের ব্যাপক উন্নতি করবে।

এছাড়াও পিডব্লিউএম রিপলকে একটি সাধারণ আরসি ফিল্টার দিয়ে ফিল্টার করা যেতে পারে তবে একটি বাফার হিসাবে একটি ওপ্যাম্প ব্যবহার করা (বা এমনকি একটি একক ট্রানজিস্টর হিসাবে ইমিটার ফলোয়ার হিসাবে) আপনাকে কম পাসের ফিল্টারিংয়ের 3 বা 5 খুঁটি এবং অতিরিক্ত পিডব্লিউএম অর্জনের আরও ভাল সুযোগ দিতে পারে রেজল্যুশন। আমি পিডাব্লুএম আউটপুটগুলির "ফেজ কোহরেন্স" পরিদর্শন করেছি না তবে তারা তুলনামূলকভাবে লকস্টেপে চলেছে বলে আশা করি যাতে আপনি দুটি অসামঞ্জস্যিত তরঙ্গরূপ যুক্ত করার মসৃণ সুবিধা না পান।

প্রয়োজনে আরও মন্তব্য করা যায়। আগ্রহী কিনা জিজ্ঞাসা করুন।


এই চালাক! দেখে মনে হচ্ছে মোজির শব্দ সংশ্লেষ গ্রন্থাগার এটি "HIFI" মোড হিসাবে পরিচিত করার জন্য এই কৌশলটি ব্যবহার করে।
এডগার বোনেট

এটি পিডাব্লুএমের একজন দুর্দান্ত আমাদের। কিন্তু এই তরঙ্গরূপটি মসৃণ করবে না? আপনি আরসি ফিল্টার ব্যবহার করছেন বলে আমি এটি জিজ্ঞাসা করছি। এটি আমার প্রশ্নের মধ্যে উল্লেখ করা হয়নি তবে আমি এটি দিয়ে একটি ডিসি মোটর চালাচ্ছি <লজ্জা বোধ করে>। ইনপুট জন্য আপনাকে ধন্যবাদ!
কোএনআর

@ কোএনআর (ফিউইউইউ: আমি লজ্জিত হওয়ার মতো কিছুই দেখছি না) আপনার এডিসি আউটপুটটিতে আপনি কী ফ্রিকোয়েন্সি প্রতিক্রিয়া / পরিবর্তনের হার চান তা আমি জানি না। বা কেন আপনি এন বিট চান বা কত বড় যথেষ্ট। মোটরগুলি সাধারণত 8 টিরও বেশি বিটের মাধ্যমে কার্যকরভাবে নিয়ন্ত্রণ করা যায় না - আপনার যে অ্যাপ্লিকেশনটি রয়েছে তা কতটা নির্ভুলতার উপর নির্ভর করে। ইন্ডাক্ট্যান্সের কারণে মোটর একটি স্মুথিং ফিল্টারের অংশ হিসাবে কাজ করে। আপনার বলতে হবে কোন ধরণের মোটর এবং কীভাবে চালিত। এবং একটি সার্কিট ডায়াগ্রাম প্রয়োজনীয় সম্পর্কে। মোটর ছোট না হলে আপনার ড্রাইভার থাকে। পিডব্লিউএম বন্ধ থাকা অবস্থায় মোটর স্রোত পাস করার জন্য ব্রাশযুক্ত মোটর খাওয়ানো পিডব্লিউএমের অবশ্যই আ ক্যাচ ডায়োড থাকতে হবে। দুটি যোগ করা হচ্ছে ...
রাসেল ম্যাকমাহন

... এখানে পিডব্লিউএমগুলি অনুগ্রহজনকভাবে করণীয় তবে সার্কিটের বিশদগুলি জানা দরকার।
রাসেল ম্যাকমাহন

সতর্ক থাকুন! কিছু ক্ষেত্রে, কম পাসের আরসি দিয়ে পিডব্লিউএম মসৃণ করা বাঞ্ছনীয় নয়। উদাহরণস্বরূপ, আপনি যদি আরডুইনো আউটপুটটিকে কোনও মোসফেটের গেটে প্লাগ করেন তবে পরিষ্কার PWM দ্বারা চালিত হওয়া পর্যন্ত মোসফেট শীতল থাকবে। তবে আপনি যদি এটি মসৃণ করেন তবে মোসফেট আরও বেশি উত্তাপ ছড়িয়ে দিতে শুরু করবে। কখনও কখনও এটি একটি ভাল জিনিস না।
ফ্লোরিন আন্দ্রেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.