สารบัญ:
- ขั้นตอนที่ 1: เลือกไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 2: กำหนดค่าโมดูล CCP
- ขั้นตอนที่ 3: การกำหนดค่าโมดูล Timer2 (การลงทะเบียน TMR2)
- ขั้นตอนที่ 4: การกำหนดค่า PR2 (การลงทะเบียนช่วงเวลา Timer2)
- ขั้นตอนที่ 5: กำหนดค่าโมดูล CCPR1l
- ขั้นตอนที่ 6: เขียนภาพร่างบนตัวคุณ MPLAB X IDE รหัสที่ได้รับร้อง
วีดีโอ: สร้าง PWM Wave ด้วยไมโครคอนโทรลเลอร์ PIC: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
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 - โมดูลจับภาพ/เปรียบเทียบ/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 เป็นตัวจับเวลา 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 รหัสที่ได้รับร้อง
#รวม
โมฆะดีเลย์ (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 พร้อมบิตการกำหนดค่าที่เหมาะสม
ขอขอบคุณ
แนะนำ:
สร้าง Arduino MIDI Controller: 5 ขั้นตอน (พร้อมรูปภาพ)
สร้าง Arduino MIDI Controller: สวัสดีทุกคน! ในคำแนะนำนี้ฉันจะแสดงวิธีสร้างคอนโทรลเลอร์ MIDI ที่ขับเคลื่อนด้วย Arduino ของคุณเอง MIDI ย่อมาจาก Musical Instrument Digital Interface และเป็นโปรโตคอลที่ช่วยให้คอมพิวเตอร์ เครื่องดนตรี และฮาร์ดแวร์อื่นๆ สามารถสื่อสาร
สร้าง Macintosh Plus ROMs: 3 ขั้นตอน (พร้อมรูปภาพ)
สร้าง Macintosh Plus ROMs: คำแนะนำนี้จะแนะนำคุณตลอดกระบวนการ "ริป" ภาพ EPROM จากชิป Macintosh Plus ROM ของคุณและ (หรือ) "การเผาไหม้" ภาพไปยังชิปใหม่ กระบวนการโดยทั่วไปจะดำเนินการสองครั้งเพื่อสร้างทั้ง "
Capacitive Touch ด้วยไมโครคอนโทรลเลอร์ PIC16F886: 3 ขั้นตอน
Capacitive Touch ด้วยไมโครคอนโทรลเลอร์ PIC16F886: ในบทช่วยสอนนี้ เราจะอธิบายวิธีที่คุณสามารถใช้ไมโครคอนโทรลเลอร์ PIC16F886 เพื่อตรวจหาความแตกต่างของความจุ ซึ่งสามารถนำมาใช้ในภายหลังเพื่อบอกได้ว่ามีการกดทัชแพดหรือไม่ ควรทำความคุ้นเคยกับ pic microcontrollers ก่อนทำ
วิธีพิมพ์อักขระที่กำหนดเองใน LCD ด้วยไมโครคอนโทรลเลอร์ 8051: 4 ขั้นตอน
วิธีพิมพ์อักขระที่กำหนดเองใน LCD ด้วยไมโครคอนโทรลเลอร์ 8051: ในโครงการนี้ เราจะบอกคุณเกี่ยวกับวิธีการพิมพ์อักขระที่กำหนดเองใน LCD ขนาด 16 * 2 โดยใช้ไมโครคอนโทรลเลอร์ 8051 เราใช้ LCD ในโหมด 8 บิต เราทำเช่นเดียวกันกับโหมด 4 บิตได้เช่นกัน
การให้แสงสว่างไดโอดเปล่งแสง (LED) ด้วยไมโครคอนโทรลเลอร์ C Stamp: 5 ขั้นตอน
การจัดแสงไดโอดเปล่งแสง (LED) ด้วยไมโครคอนโทรลเลอร์ C Stamp: นี่เป็นโครงการออกแบบและกิจกรรมแรกจากคู่มืออ้างอิง CS310XXX (μC 101) โดย A-WIT Technologies, Inc. ในคำแนะนำนี้ เราจะให้แสงสว่าง ไดโอดเปล่งแสง (LED) พร้อมไมโครคอนโทรลเลอร์ C Stamp ซี&เอ็น