შექმენით PWM ტალღა PIC მიკროკონტროლით: 6 ნაბიჯი
შექმენით PWM ტალღა PIC მიკროკონტროლით: 6 ნაბიჯი
Anonim
შექმენით PWM ტალღა PIC მიკროკონტროლით
შექმენით PWM ტალღა PIC მიკროკონტროლით
შექმენით PWM ტალღა PIC მიკროკონტროლით
შექმენით PWM ტალღა PIC მიკროკონტროლით
შექმენით PWM ტალღა PIC მიკროკონტროლით
შექმენით PWM ტალღა PIC მიკროკონტროლით

რა არის PWM?

PWM STANDS FOR PULSE WIDTH MODULATION არის ტექნიკა, რომლის მიხედვითაც პულსის სიგანე იცვლება.

ამ კონცეფციის გასაგებად განვიხილოთ საათის პულსი ან ნებისმიერი კვადრატული ტალღის სიგნალი, მას აქვს 50% სამუშაო ციკლი, რაც ნიშნავს რომ ტონი და ტოფის პერიოდი იგივეა. საერთო ხანგრძლივობა, რომლისთვისაც სიგნალი მაღალი იყო და ხანგრძლივობა, რომლის დროსაც სიგნალი დაბალი იყო, ეწოდება მთლიანი დროის მონაკვეთი.

ამ ტალღის ზემოთ ნაჩვენები სურათისთვის მოვალეობის ციკლი 50%

სამუშაო ციკლი = (ჩართვის დრო / საერთო დრო)*100

ჩართული დრო - დრო, რომლისთვისაც სიგნალი მაღალი იყო

OFF დრო - დროის მტერი, რომლის სიგნალი იყო დაბალი საერთო დრო - პულსის მთლიანი დროის პერიოდი (როგორც ჩართული, ასევე გამორთული დრო)

ნაბიჯი 1: მიკროკონტროლის შერჩევა

მიკროკონტროლის შერჩევა
მიკროკონტროლის შერჩევა

პროექტისათვის შესაბამისი მიკროკონტროლერის შერჩევა ეს არის პროექტის მნიშვნელოვანი ნაწილი PWM სიგნალები შეიძლება წარმოიქმნას მიკროკონტროლერებში PWM არხებით (CCP რეგისტრები). ამ პროექტისთვის მე ვგეგმავ გამყარებას pic16f877. შეგიძლიათ ჩამოტვირთოთ მონაცემთა ცხრილის ბმული მოცემულია ქვემოთ

PIC16F877a მონაცემთა ფურცელი დააწკაპუნეთ აქ

CCP მოდული პასუხისმგებელია PWM სიგნალის წარმოებაზე. CCP1 და CCP2 მულტიპლექსირებულია PORTC– ით. PORTC არის 8 ბიტიანი ფართო ორმხრივი პორტი. მონაცემების მიმართულების შესაბამისი რეგისტრი არის TRISC. TRISC ბიტის (= 1) დაყენება მიიღებს შესაბამის PORTC პინს როგორც შეყვანას. TRISC ბიტის (= 0) გასუფთავება გახდის შესაბამის PORTC პინს გამომავალს.

TRISC = 0; // ამ ბიტის გასუფთავება გახდება PORTC გამომავალი

ნაბიჯი 2: CCP მოდულის კონფიგურაცია

CCP მოდულის კონფიგურაცია
CCP მოდულის კონფიგურაცია
CCP მოდულის კონფიგურაცია
CCP მოდულის კონფიგურაცია

CCP - CAPTURE/COMPAREE/PWM MODULES

თითოეული Capture/Compare/PWM (CCP) მოდული შეიცავს 16 ბიტიან რეგისტრს, რომელიც შეიძლება მოქმედებდეს როგორც:

• 16-ბიტიანი Capture რეგისტრი

• 16 ბიტიანი შედარების რეგისტრი

• PWM Master/Slave Duty Cycle რეგისტრი

CCP1CON რეგისტრაციის კონფიგურაცია PWM რეჟიმში

რეგისტრაციის აღწერა

CCPxCON ეს რეგისტრი გამოიყენება CCP მოდულის კონფიგურაციისათვის Capture/Compare/PWM ოპერაციისათვის.

CCPRxL ეს რეესტრი ინახავს PWM- ის 8-Msb ბიტებს, ქვედა 2 ბიტი იქნება CCPxCON რეგისტრის ნაწილი.

TMR2 უფასო გაშვებული მრიცხველი, რომელიც შევადარებთ CCPR1L და PR2– ს PWM გამომუშავების შესაქმნელად.

ახლა მე გამოვიყენებ ბინარულს ბიტების წარმოსადგენად CCP1CON რეგისტრის კონფიგურაციისთვის.

მიმართეთ სურათს ზემოთ.

CCP1CON = 0b00001111;

თქვენ ასევე შეგიძლიათ hex ფორმატში

CCP1CON = 0x0F; // CCP1CON რეგისტრის კონფიგურაცია PWM რეჟიმში

ნაბიჯი 3: Timer2 მოდულის კონფიგურაცია (TMR2 რეგისტრაცია)

Timer2 მოდულის კონფიგურაცია (TMR2 რეგისტრაცია)
Timer2 მოდულის კონფიგურაცია (TMR2 რეგისტრაცია)

Timer2 არის 8-ბიტიანი ქრონომეტრი, წინასწარ შემფასებელი და პოსკალერიანი. ის შეიძლება გამოყენებულ იქნას როგორც PWM დროის ბაზა CCP მოდულის (ების) PWM რეჟიმში. TMR2 რეგისტრი იკითხება და იწერება და გაწმენდილია ნებისმიერ მოწყობილობაზე გადატვირთვისას.

ნაჩვენებია T2CON რეგისტრი

წინასწარი მასშტაბი და პოსკალორი დაარეგულირებს გამომუშავებული PWM ტალღის გამომავალ სიხშირეს.

სიხშირე = საათის სიხშირე/(4*prescaler*(PR2-TMR2)*Postcaler*count)

სადაც Tout = 1/სიხშირე

T2CON = 0b00000100;

ეს გამოიმუშავებს 2.5 KHz @ 1Mhz ან 100KHz @ 4MHz კრისტალს (პრაქტიკულად არსებობს შეზღუდვა ამ PWM სიხშირეზე მიმართეთ კონკრეტულ მონაცემთა ფურცელს უფრო დეტალურად)

hex წარმომადგენლობა

T2CON = 0x04; // ჩართეთ T2CON Prescaler და postcale კონფიგურაციის გარეშე

ნაბიჯი 4: PR2- ის კონფიგურაცია (Timer2 Period Register)

Timer2 მოდულს აქვს 8 ბიტიანი პერიოდის რეგისტრი, PR2. ტაიმერი 2 იზრდება 00h– დან, სანამ არ ემთხვევა PR2– ს და შემდეგ აღდგება 00h– მდე მომდევნო ზრდის ციკლზე. PR2 არის წასაკითხი და დასაწერი რეგისტრი. PR2 რეგისტრი ინიციალიზებულია FFh– ზე გადატვირთვისას.

PR2– ის შესაბამისი დიაპაზონის დადგენა საშუალებას მოგცემთ შეცვალოთ გენერირებული PWM ტალღის სამუშაო ციკლი

PR2 = 100; // დააწესეთ ციკლის დრო 100-ზე, სამუშაო ციკლის 0-100-დან შესაცვლელად

სიმარტივისთვის ვიყენებ PR2 = 100 -ს CCPR1L = 80 -ის დამზადებით; 80% სამუშაო ციკლის მიღწევა შესაძლებელია.

ნაბიჯი 5: დააკონფიგურირეთ CCPR1l მოდული

მას შემდეგ, რაც PR2 = 100 CCPR1l შეიძლება იყოს კონფიგურირებული სადმე 0-100 შორის სასურველი სამუშაო ციკლის მისაღებად.

ნაბიჯი 6: დაწერეთ ესკიზი თქვენზე MPLAB X IDE კოდი მოცემულია ქვემოთ

დაწერეთ ესკიზი თქვენზე MPLAB X IDE კოდი მოცემულია ქვემოთ
დაწერეთ ესკიზი თქვენზე MPLAB X IDE კოდი მოცემულია ქვემოთ

#ჩართეთ

void delay (int a) // ფუნქცია დაგვიანების შესაქმნელად {

for (int i = 0; i <a; i ++)

{

for (int j = 0; j <144; j ++);

}

}

ბათილია მთავარი ()

{TRISC = 0; // ამ ბიტის გასუფთავება გახდება PORTC გამომავალი.

CCP1CON = 0x0F; // CCP1CON რეგისტრის კონფიგურაცია PWM რეჟიმში

T2CON = 0x04; // ჩართეთ T2CON Prescaler და postcale კონფიგურაციის გარეშე.

PR2 = 100; // დააწესეთ ციკლის დრო 100-მდე სამუშაო ციკლის 0-100-დან ცვლისთვის

ხოლო (1) {

CCPR1L = 75; // გენერირებული მოვალეობის ციკლის 75% -იანი დაყოვნება (1);

}

}

მე ასევე შევიტანე მცირე მოდიფიკაცია კოდში ისე, რომ წარმოქმნილი PWM ტალღის სიხშირე

ეს არის კოდი იმიტირებული პროტეუსში და გამომავალი PWM ტალღა ნაჩვენებია ქვემოთ რომ ატვირთოთ ეს თქვენს სურათზე განვითარების დაფებზე გამოიყენეთ #ჩართეთ შესაბამისი კონფიგურაციის ბიტებით.

Გმადლობთ

გირჩევთ: