สารบัญ:

สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน

วีดีโอ: สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน

วีดีโอ: สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน
วีดีโอ: How to Generate PWM using PIC Microcontroller 2024, พฤศจิกายน
Anonim
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC
สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC

PWM คืออะไร?

PWM STANDS FOR PULSE WIDTH MODULATION เป็นเทคนิคที่ความกว้างของพัลส์จะแปรผัน

เพื่อให้เข้าใจแนวคิดนี้อย่างชัดเจน ให้พิจารณาพัลส์นาฬิกาหรือสัญญาณคลื่นสี่เหลี่ยมใดๆ โดยมีวัฏจักรหน้าที่ 50% ซึ่งหมายความว่าช่วง Ton และ Toff เท่ากัน ระยะเวลารวมที่สัญญาณสูงและระยะเวลาที่สัญญาณต่ำเรียกว่า Total ระยะเวลา.

สำหรับภาพที่แสดงด้านบนเวฟนี้มีรอบการทำงาน 50%

รอบการทำงาน = (เวลาเปิด / เวลาทั้งหมด)*100

ON time - เวลาที่สัญญาณสูง

เวลาปิด - เวลาศัตรูที่สัญญาณต่ำ เวลาทั้งหมด - ระยะเวลารวมของพัลส์ (ทั้งเวลาเปิดและปิด)

ขั้นตอนที่ 1: เลือกไมโครคอนโทรลเลอร์

การเลือกไมโครคอนโทรลเลอร์
การเลือกไมโครคอนโทรลเลอร์

การเลือกไมโครคอนโทรลเลอร์ที่เหมาะสมสำหรับโปรเจ็กต์ นี่เป็นส่วนสำคัญของสัญญาณ PWM ของโปรเจ็กต์ สามารถสร้างได้ในไมโครคอนโทรลเลอร์ที่มีช่องสัญญาณ PWM (การลงทะเบียน CCP) สำหรับโปรเจ็กต์นี้ ฉันกำลังวางแผนจะใช้ pic16f877 คุณสามารถดาวน์โหลดลิงค์แผ่นข้อมูลด้านล่าง

เอกสารข้อมูล PIC16F877a คลิกที่นี่

โมดูล CCP มีหน้าที่ในการผลิตสัญญาณ PWM CCP1 และ CCP2 ถูกมัลติเพล็กซ์กับ PORTC PORTC เป็นพอร์ตแบบสองทิศทางแบบกว้าง 8 บิต การลงทะเบียนทิศทางข้อมูลที่สอดคล้องกันคือ TRISC การตั้งค่าบิต TRISC (=1) จะทำให้ใช้พิน PORTC ที่สอดคล้องกันเป็นอินพุต การล้างบิต TRISC (=0) จะทำให้พิน PORTC ที่สอดคล้องกันเป็นเอาต์พุต

ทริสค์ = 0; //การล้างบิตนี้จะทำให้ PORTC เป็นเอาต์พุต

ขั้นตอนที่ 2: กำหนดค่าโมดูล CCP

กำหนดค่าโมดูล CCP
กำหนดค่าโมดูล CCP
กำหนดค่าโมดูล CCP
กำหนดค่าโมดูล CCP

CCP - โมดูลจับภาพ/เปรียบเทียบ/PWM

โมดูล Capture/Compare/PWM (CCP) แต่ละโมดูลประกอบด้วยรีจิสเตอร์ 16 บิต ซึ่งสามารถทำงานเป็น:

• การลงทะเบียนการจับภาพ 16 บิต

• รีจิสเตอร์เปรียบเทียบ 16 บิต

• การลงทะเบียน PWM Master/Slave Duty Cycle

กำหนดค่าการลงทะเบียน CCP1CON เป็นโหมด PWM

ลงทะเบียนรายละเอียด

CCPxCON รีจิสเตอร์นี้ใช้เพื่อกำหนดค่าโมดูล CCP สำหรับการดำเนินการ Capture/Compare/PWM

CCPRxL รีจิสเตอร์นี้เก็บบิต PWM 8-Msb บิต 2 บิตที่ต่ำกว่าจะเป็นส่วนหนึ่งของรีจิสเตอร์ CCPxCON

TMR2 Free running counter ซึ่งจะเปรียบเทียบกับ CCPR1L และ PR2 สำหรับการสร้างเอาต์พุต PWM

ตอนนี้ฉันจะใช้ไบนารีเพื่อแสดงบิตเพื่อกำหนดค่าการลงทะเบียน CCP1CON

อ้างถึงภาพด้านบน

CCP1CON = 0b00001111;

นอกจากนี้คุณยังสามารถจัดรูปแบบฐานสิบหก

CCP1CON = 0x0F; //การกำหนดค่าการลงทะเบียน CCP1CON สำหรับโหมด PWM

ขั้นตอนที่ 3: การกำหนดค่าโมดูล Timer2 (การลงทะเบียน TMR2)

การกำหนดค่าโมดูล Timer2 (รีจิสเตอร์ TMR2)
การกำหนดค่าโมดูล Timer2 (รีจิสเตอร์ TMR2)

Timer2 เป็นตัวจับเวลา 8 บิตพร้อมพรีสเกลเลอร์และตัวนับสเกล สามารถใช้เป็นฐานเวลา PWM สำหรับโหมด PWM ของโมดูล CCP การลงทะเบียน TMR2 สามารถอ่านและเขียนได้ และจะถูกล้างในการรีเซ็ตอุปกรณ์ใดๆ

แสดงการลงทะเบียน T2CON

พรีสเกลและมาตราส่วนหลังจะปรับความถี่เอาต์พุตของคลื่น PWM ที่สร้างขึ้น

ความถี่ = ความถี่สัญญาณนาฬิกา/(4*prescaler*(PR2-TMR2)*Postscaler*count)

โดยที่ Tout = 1/ความถี่

T2CON = 0b000000100;

สิ่งนี้จะสร้างคริสตัล 2.5 KHz @ 1Mhz หรือ 100KHz @ 4MHz (ในทางปฏิบัติ มีข้อ จำกัด สำหรับความถี่ PWM นี้อ้างอิงแผ่นข้อมูลเฉพาะสำหรับรายละเอียดเพิ่มเติม)

การแทนค่าฐานสิบหก

T2CON = 0x04; // เปิดใช้งาน T2CON โดยไม่มีการกำหนดค่า Prescaler และ Postscale

ขั้นตอนที่ 4: การกำหนดค่า PR2 (การลงทะเบียนช่วงเวลา Timer2)

โมดูล Timer2 มีการลงทะเบียนช่วงเวลา 8 บิต PR2 Timer2 เพิ่มขึ้นจาก 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 รหัสที่ได้รับร้อง

#รวม

โมฆะดีเลย์ (int a) // ทำหน้าที่สร้างการหน่วงเวลา {

สำหรับ (int i=0; i<a;i++)

{

สำหรับ(int j=0;j<144;j++);

}

}

เป็นโมฆะหลัก ()

{ ทริสค์ = 0; //การล้างบิตนี้จะทำให้ PORTC เป็นเอาต์พุต

CCP1CON = 0x0F; //การกำหนดค่าการลงทะเบียน CCP1CON สำหรับโหมด PWM

T2CON = 0x04; // เปิดใช้งาน T2CON โดยไม่มีการกำหนดค่า Prescaler และ Postscale

PR2 = 100; // ตั้งเวลารอบเป็น 100 สำหรับรอบการทำงานที่แตกต่างกันตั้งแต่ 0-100

ในขณะที่(1){

CCPR1L = 75; //สร้างรอบการทำงานล่าช้า 75%(1);

}

}

ฉันยังได้ทำการแก้ไขโค้ดเล็กน้อยเพื่อให้ความถี่ของคลื่น PWM ที่สร้างขึ้น

นี่คือรหัสจำลองในโพรทูสและคลื่น PWM เอาต์พุตแสดงอยู่ด้านล่าง ในการอัปโหลดสิ่งนี้บนบอร์ดพัฒนารูปภาพของคุณ ให้ใช้ #include พร้อมบิตการกำหนดค่าที่เหมาะสม

ขอขอบคุณ

แนะนำ: