ตัวควบคุม PWM แรงดันต่ำบนไมโครคอนโทรลเลอร์พร้อมตัวบ่งชี้ ตัวควบคุมกำลังบนไมโครคอนโทรลเลอร์ ATtiny2313 - ตัวควบคุมกำลัง - แหล่งจ่ายไฟ

สวัสดีผู้อ่าน Muska ทุกคน!
ต้องขอบคุณเว็บไซต์ที่ยอดเยี่ยมนี้ ทำให้ฉันได้รับสิ่งที่มีประโยชน์และความรู้มากมาย และในการตอบสนอง ฉันจึงตัดสินใจเขียนรายงานฉบับแรกเกี่ยวกับอุปกรณ์ที่พัฒนาขึ้นใหม่ ในระหว่างการพัฒนาอุปกรณ์ ฉันพบปัญหาหลายประการและแก้ไขได้สำเร็จ บางทีคำอธิบายของโซลูชันบางอย่างอาจช่วยเพื่อนร่วมงานมือใหม่บางคนในความคิดสร้างสรรค์ของพวกเขาได้
ในการผลิตแผงวงจรพิมพ์ ฉันได้ซื้อสว่านขนาดเล็กและขาตั้งมาเพื่อเปลี่ยนสว่านให้เป็นเครื่องเจาะขนาดเล็ก ความจำเป็นในการดำเนินการนี้เกิดขึ้นหลังจากใช้สว่านหักขนาด 0.5-1 มม. จำนวนหนึ่งกับไขควงและเดรเมลของจีน แต่เมื่อปรากฎว่าเครื่องมือดังกล่าวเป็นไปไม่ได้หากไม่มีตัวควบคุมความเร็ว ผู้ควบคุมกฎตัดสินใจทำเองโดยได้รับความรู้ใหม่ไปพร้อมกัน

ฉันมีประสบการณ์วิทยุสมัครเล่นเพียงเล็กน้อย เมื่อตอนเป็นเด็ก โดยใช้หนังสือของ Borisov ฉันประกอบเครื่องรับและไฟเลี้ยวหลายตัวโดยใช้เครื่องมัลติไวเบรเตอร์ จากนั้นก็มีงานอดิเรกและกิจกรรมอื่นๆ ตามมา
และโดยบังเอิญ ฉันสังเกตเห็น Arduino ซึ่งเป็นโมเดลจำลองสถานีตรวจอากาศและหุ่นยนต์ที่มีชื่อเสียง และฉันต้องการทำให้ทุกสิ่งที่ฉันสามารถทำได้โดยอัตโนมัติ โดยใช้ไมโครคอนโทรลเลอร์ ขนาดของคอนโทรลเลอร์เรียงตามลำดับขนาดและความง่ายในการบูรณาการจากมากไปน้อย - Arduino UNO, Arduino Pro Mini จากนั้นเป็น ATMega328P จำนวนหนึ่ง และสำหรับอุปกรณ์ที่เล็กที่สุดและง่ายที่สุด ฉันซื้อ ATtiny85
ฉันซื้อ Tinkies มากว่าปีที่แล้วแล้ว พวกมันก็นั่งรอถึงตาของมัน

สั่งซื้อภาพหน้าจอ


(มีการสั่งหดด้วยความร้อนด้วยดังนั้นราคารวมจึงสูงกว่า)


เอ็มเคมาถึงตามปกติโดยใส่ถุงกันกระแทกเด็ก โดยมารวมกันเป็นกลุ่มในถุงพลาสติกแยก มันคงจะดีกว่านี้แน่นอนในกล่องแข็งหรือโฟม แต่ถึงอย่างนั้นก็ไม่มีอะไรงอและทุกอย่างทำงานได้

ตอนแรกฉันบัดกรีวงจรบนเขียงหั่นขนม แต่หลังจากอ่านเกี่ยวกับ LUT แล้วฉันก็รู้ว่าการประกอบทุกอย่างบนแผงวงจรพิมพ์ปกติค่อนข้างเป็นไปได้และสะดวกกว่ามาก
ฉันยังเริ่มรวบรวมเครื่องมือที่มีประโยชน์อย่างค่อยเป็นค่อยไป เช่น MD-3 microdrill พร้อมหัวจับคอลเล็ตและเครื่องเจาะรูขนาดเล็ก แน่นอนว่าเป็นไปได้ที่จะซื้อเฉพาะปลอกรัดและเลือกเครื่องยนต์จากที่ไหนสักแห่ง แต่ฉันตัดสินใจซื้อแบบสำเร็จรูปที่ร้านค้าในพื้นที่

เราพิมพ์การออกแบบด้วยเลเซอร์บนกระดาษภาพถ่าย Lomond ผิวมันสำหรับการพิมพ์อิงค์เจ็ท แต่การใส่กระดาษที่ไม่ได้ตั้งใจลงในเครื่องพิมพ์ใหม่นั้นน่ากลัว ฉันพบคำเตือนทางออนไลน์ว่ากระดาษอิงค์เจ็ทที่เคลือบมันอาจละลาย ติดเตา และทำให้เครื่องพิมพ์เสียหายได้ เพื่อให้แน่ใจว่าฉันทำการทดลอง - ฉันรีดหัวแร้งที่ให้ความร้อนถึง 200C บนพื้นผิวของกระดาษนี้ (ฉันไม่เคยพบอุณหภูมิที่แน่นอนของเตา แต่ประมาณนั้น) กระดาษบิดเบี้ยวเล็กน้อย แต่ไม่มีอะไรละลายหรือติดอยู่ - ซึ่งหมายความว่าสามารถใช้ในเครื่องพิมพ์ได้

ฉันรีดภาพวาดลงบนกระดานแล้วล้างกระดาษออก รูปแบบของตัวนำคุณภาพสูงมากและชั้นกระดาษมันที่ติดอยู่ยังคงอยู่บนกระดาน ผู้เขียนเทคโนโลยีแนะนำให้ถอดมันออกด้วยเทปพันสายไฟที่มีความเหนียวเล็กน้อย แต่ไม่ว่าฉันจะพยายามแค่ไหน ความเงาก็ไม่ถูกเอาออกเลย หรือตัวนำหลุดออกมาตามไปด้วย คำจารึกก็ถูกถ่ายโอนไปยังเทปไฟฟ้าทันที เมื่อต้องทนทุกข์ทรมานฉันก็เอาสว่านและเการะหว่างตัวนำเพื่อดึงความเงาเกือบทั้งหมดออก เรื่องนี้ละเอียดอ่อนและน่าเบื่อคุณต้องคิดอะไรบางอย่างขึ้นมา จากนั้นเมื่อสร้างกระดานที่สองและสามฉันมองหาวิธีที่จะกำจัดความมันเงาที่น่ารังเกียจ แต่การพิมพ์ทั้งบนหน้านิตยสารหรือบนกระดาษที่มีกาวในตัวไม่ได้ให้คุณภาพของการวาดภาพ เบลอหรือหลุด แต่ฉันรู้ว่าไม่จำเป็นต้องทำความสะอาดความมันของกระดาษภาพถ่ายให้เป็นศูนย์ - ก็เพียงพอแล้วที่จะเกาอย่างน้อยเล็กน้อยระหว่างรางเพื่อเข้าถึงสารละลายของทองแดงและในบางสถานที่ก็ถูกแกะสลักโดยไม่มีรอยขีดข่วนผ่าน ความมันวาว

ฉันตัดสินใจกัดทองแดงด้วยสารละลายไฮโดรเจนเปอร์ออกไซด์และกรดซิตริกซึ่งเป็นองค์ประกอบที่เข้าถึงได้มากที่สุด สามารถดูตัวเลือกทางเคมีที่เป็นไปได้สำหรับการกัดด้วยการคำนวณได้ที่นี่

ฉันเอาเปอร์ออกไซด์จากชุดปฐมพยาบาลซื้อมาเมื่อ 3 ปีที่แล้ว วันหมดอายุประมาณ 2 ปี ฉันคิดว่ามันหมดไปแล้วใช้งานไม่ได้เลย อย่างไรก็ตาม ฉันคิดผิด กระดานถูกแกะสลักอย่างรวดเร็ว - ในเวลาประมาณสามนาที นี่คือผลลัพธ์:

แทร็กหนึ่งได้รับความทุกข์ทรมานจากรอยขีดข่วนด้วยสว่าน แต่ได้รับการบูรณะโดยการกัดตะกั่วของตัวต้านทาน แถมรูเล็กๆจากการลองใช้เทปพันสายไฟ ฉันจำเป็นต้องได้ปากกามาร์กเกอร์ที่เหมาะสม แต่ในระหว่างนี้ ให้ทาวานิชทุกครั้งที่ทำได้

ฉันกระป๋องบอร์ดด้วยหัวแร้งโดยใช้เปีย บัดกรีชิ้นส่วน




ขาตั้งทองเหลืองทรงสูงที่ขันเกลียวเข้าหากันทั้งสองด้านของบอร์ดผ่านรูสำหรับติดตั้งเป็นสิ่งที่สะดวก คุณสามารถวางบอร์ดโดยไม่ต้องมีเคสทั้งสองด้านบนโต๊ะระหว่างการติดตั้งและแก้ไขจุดบกพร่องโดยไม่ต้องกลัวว่าจะบุบหรือลัดวงจร

ส่วนที่ต้องใช้แรงงานมากที่สุดคือการรวบรวมข้อมูลและประสานเอาต์พุต LED ที่ด้านตัวนำ ฉันตัดสินใจใช้ด้านบัดกรีเป็นด้านหน้า เพราะ... ความสูงของชิ้นส่วนนั้นเล็กกว่ามากและการส่งผ่านเพลาตัวต้านทานแบบแปรผันผ่านบอร์ดจะลดความยาวให้เหลือตามความยาวที่ต้องการ

ฉันไม่ได้บัดกรีตัวเก็บประจุ C2 ในแผนภาพที่เชื่อมต่อกับการรีเซ็ตเพราะว่า แม้ว่าจะเพิ่มความน่าเชื่อถือในการสตาร์ทอุปกรณ์ แต่ก็สามารถรบกวนการกระพริบของ MK ได้

ไมโครคอนโทรลเลอร์ถูกบัดกรีครั้งสุดท้าย หลังจากเชื่อมต่อบอร์ดเข้ากับแหล่งจ่ายไฟ และตรวจสอบให้แน่ใจว่าไม่มีสิ่งใดไหม้ในทันที และตัวปรับเสถียรจะจ่ายไฟมาตรฐาน 5V ไม่มีอะไรเริ่มสูบบุหรี่ ดังนั้นเราจึงเชื่อมต่อโปรแกรมเมอร์เข้ากับพิน ICSP และอัปโหลดเฟิร์มแวร์ทดสอบ

เราจะเขียนเฟิร์มแวร์สำหรับอุปกรณ์ในสภาพแวดล้อมการเขียนโปรแกรม Arduino ซึ่งหลายคนคุ้นเคย หลังจากเพิ่มการรองรับไมโครคอนโทรลเลอร์ ATtiny แล้ว ดาวน์โหลดและแตกไฟล์ลงในโฟลเดอร์ Arduino/ฮาร์ดแวร์

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

ทุกอย่างทำงานตามที่คาดไว้ ยกเว้นสิ่งหนึ่ง - ปุ่มที่เชื่อมต่อกับช่องเดียวกันโดยมีไฟ LED สีเขียวไม่สามารถอ่านได้ และไฟ LED ก็สว่างกว่าสีแดงอย่างเห็นได้ชัด การวัดโดยผู้ทดสอบแสดงให้เห็นว่าในสถานะ PB0 มีกระแสไฟมากกว่า 20mA ไหลผ่าน LED เป็นเอาต์พุต และมีกระแสไฟตกเพียง 2.1V เท่านั้น และในสถานะอินพุตที่มีการดึงขึ้นภายในที่ขา จะมีไฟเพียง 1.74V เมื่อปล่อยปุ่ม และ 0.6V เมื่อกดปุ่ม ไม่น่าแปลกใจที่อ่าน 0 อย่างต่อเนื่อง ไฟ LED สีเขียวแรงดันต่ำโดยไม่เรืองแสงแม้แต่จะระบายแรงดันไฟฟ้าที่ขาเมื่อกระแสไมโครแอมแปร์ไหล ตอนนี้เป็นที่ชัดเจนแล้วว่าเหตุใด LED 2 ดวงจึงเชื่อมต่อเป็นอนุกรมในบทความต้นฉบับ

แต่การใส่ LED ตัวที่สองเพื่อให้ส่องภายในกล่องอย่างโง่เขลาเหมือนบัลลาสต์ (และคุณไม่จำเป็นต้องมี 2 อันที่เหมือนกันบนแผงด้านหน้าด้วย) ดูเหมือนจะเป็นวิธีแก้ปัญหาที่ค่อนข้างคดเคี้ยว ฉันคิดว่าฉันจะเพิ่มแรงดันไฟฟ้าในวงจร LED ได้อย่างไรและจำลักษณะแรงดันไฟฟ้าปัจจุบันของซีเนอร์ไดโอดได้ หากเราเชื่อมต่อซีเนอร์ไดโอด 2V แบบอนุกรมโดยมี LED อยู่ตรงข้าม (เพื่อให้ทำงานได้ตามปกติบนสาขาย้อนกลับของคุณสมบัติแรงดันไฟฟ้าปัจจุบัน) เราก็จะได้สิ่งที่เราต้องการอย่างแน่นอน เมื่อไฟ LED สว่างขึ้นที่กระแส 10 mA ซีเนอร์ไดโอดจะทะลุผ่านและไม่รบกวนการไหลของกระแส แต่จะรักษาแรงดันไฟฟ้าที่ตกคร่อมให้คงที่ในระดับที่กำหนดเท่านั้น คุณเพียงแค่ต้องเปลี่ยนตัวต้านทาน จำกัด กระแสบนพื้นฐานที่คุณต้องระงับแรงดันไฟฟ้า Ures = 5V-2.1V-2.0V = 0.9V x 10mA เช่น R=90 โอห์ม และเมื่อขาถูกสลับไปที่อินพุตด้วยการดึงขึ้น - เนื่องจากความชันของกิ่งลักษณะ I-V จนกระทั่งการแยกทางแยก ซีเนอร์ไดโอดจึงเทียบเท่ากับตัวต้านทานความต้านทานสูงและจะลดลงประมาณ 2V อีกครั้ง เพิ่มแรงดันไฟที่ขา MK เมื่อปล่อยปุ่มเป็น 4V ซึ่งอ่านว่า TRUE แล้ว เมื่อคุณกดปุ่มขาจะถูกดึงไปที่ 5V โดยตัวต้านทานภายในที่มีความต้านทานประมาณ 40KOhm (ตามการคำนวณของฉัน) และไปที่กราวด์โดยตัวต้านทาน 5KOhm (ซึ่งจะข้ามวงจร LED) เช่น จะมีค่า 0.6V เท่ากันและถือเป็น FALSE
ฉันบัดกรีซีเนอร์ไดโอดแบบอนุกรมกับตัวต้านทานและปุ่มก็ทำงานได้ตามปกติ

ตอนนี้ถึงคราวที่ต้องตรวจสอบการทำงานของ PWM แล้วปัญหาก็เกิดขึ้นที่นี่เช่นกัน คำสั่ง Arduino มาตรฐาน AnalogWrite(leg, fill) ไม่ต้องการทำงาน ซึ่งหมายความว่ามีบางอย่างผิดปกติกับห้องสมุดวัยรุ่น การดูเอกสารข้อมูลใน MK และอินเทอร์เน็ตมีประโยชน์

มันน่าสนใจ:
- สามารถเอาต์พุตช่องสัญญาณ PWM 2 ช่อง (OC0A, OC0B) ไปยังพิน 5, 6 (PB0, PB1) โดยแต่ละช่องทำงานด้วยการตั้งค่าการเติมของตัวเอง (แต่ความถี่เดียวกัน) จากตัวจับเวลา 0
- ช่องสัญญาณ PWM ที่สามที่ทำงานจากตัวจับเวลา 1 สามารถส่งออกไปยังพิน 2, 3 (PB3, PB4) และสัญญาณ PWM โดยตรง (OC1B) สามารถส่งออกไปที่ขา 3 และเวอร์ชันผกผัน (/OC1B) สามารถส่งออกไปที่ ขา 2 แต่ผลลัพธ์จะไปที่ขาที่ 3 เท่านั้นหรือทั้งสองอย่างพร้อมกัน แต่เราต้องการ PWM ที่ขา 2 อย่างน้อยก็กลับด้าน (เรากลับด้านในซอฟต์แวร์) ดังนั้นเราจะต้องกำหนดค่าเอาต์พุตที่ขา 2 และ 3 และสัญญาณจะไม่ผ่านไปยังขา 3 เพียงเพราะว่าได้รับการประกาศว่าเป็น ป้อนข้อมูล.

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

ฉันยังสังเกตเห็นด้วยว่าเมื่อรีเซ็ต Timer 1 การทำงานของฟังก์ชัน millis() จะหยุดชะงัก - ปรากฎว่า Timer 1 ถูกใช้เป็นค่าเริ่มต้นสำหรับนาฬิกาภายใน แต่คุณสามารถรีเซ็ตเวลาเป็น Timer 0 ได้โดยใช้คำจำกัดความมาโครใน ไฟล์ Arduino\hardware\tiny\cores\tiny\core_build_options
/* ด้วยเหตุผลหลายประการ Timer 1 เป็นตัวเลือกที่ดีกว่าสำหรับตัวจับเวลาเป็นมิลลิวินาทีบนโปรเซสเซอร์ "85 */ #define TIMER_TO_USE_FOR_MILLIS 0
นี่คือสิ่งที่เราจะใช้ เนื่องจาก Timer 0 ในโปรเจ็กต์นี้ไม่มีค่าใช้จ่ายใดๆ ทั้งสิ้น

ยังมีคำถามเกิดขึ้นเกี่ยวกับช่วงการตั้งค่าความเร็วที่อ่านจากตัวต้านทานแบบปรับค่าได้ ผู้เขียนวงจรดั้งเดิมได้เพิ่มตัวต้านทานคงที่ 36K อนุกรมพร้อมกับตัวแปร 10K เพื่อให้โค้ด ADC พอดีกับช่วง 0-255 ในความเป็นจริงมันกลายเป็น 0-230 และค่าสูงสุดลอยตัว แต่ฉันต้องการให้ 0-255 ตรงกับการตั้งค่าเต็มสเกลด้วย PWM 8 บิต ในการทำเช่นนี้ฉันได้ลบแรงดันไฟฟ้าคงที่ออกแล้วแทนที่ด้วยจัมเปอร์ที่ +5V ADC เริ่มอ่านช่วงทั้งหมดและบิตที่มีนัยสำคัญน้อยที่สุด 4 บิตถูกยกเลิกโดยทางโปรแกรม และเหตุใดจึงต้องมีรายละเอียดเพิ่มเติม?

หลังจากทดสอบช่องอินพุต/เอาท์พุต เราจะโหลดเฟิร์มแวร์การต่อสู้ลงในไมโครคอนโทรลเลอร์ ซึ่งเขียนด้วยภาษา C ในสภาพแวดล้อม Arduino ตามซอร์สโค้ด BASIC ของผู้สร้างวงจรดั้งเดิม

ข้อความโปรแกรม

// Attiny85 ที่ 1MHz // อย่าลืมตั้งเวลา 0 สำหรับมิลลิวินาที ฯลฯ ! // Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0 #include // การเชื่อมต่อ #กำหนด MODE_LED_PIN PIN_B0 #กำหนด MODE_BUT_PIN MODE_LED_PIN #กำหนด PWM_LED_PIN PIN_B3 #กำหนด AM_PIN PIN_B1 #กำหนด SP_PIN A1 #กำหนด CUR_PIN A2 // สถานะ #กำหนด MODE_MANUAL 0 #กำหนด MODE_WAITING 1 #กำหนด MODE_SETUP_XX 2 #กำหนด MODE_SETUP_MAX 3 #กำหนด MOD อี_สตาร์ท 4 #define MODE_DRILLING 5 #define MODE_STOP 6 // ตัวแปรไบต์ Mode = MODE_MANUAL; ไบต์ ModeLedVal = ต่ำ; ไบต์ SetPoint = 0; int CurrentFiltered = 0; ไบต์ CurrentU8 = 0; ไบต์ AMButton; ไบต์ AMButtonFlt = ต่ำ; ModeButton ไบต์แบบคงที่; ไบต์คงที่ ModeButtonFlt = สูง; // ค่าเริ่มต้นสำหรับไบต์คงที่ ModeButtonOld = LOW; // ทริกเกอร์ข้อยกเว้นเมื่อเริ่มต้นไบต์คงที่ SetupStep = false; BlinkFromMs แบบยาวที่ไม่ได้ลงนาม; StartFromMs ยาวที่ไม่ได้ลงนาม; ModeFromMs แบบยาวที่ไม่ได้ลงนาม; ไบต์ W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff; เป็นโมฆะ PWM3_init() ( // ตั้งค่า PWM บน PB3 (พิน 2) โดยใช้ตัวจับเวลา 1 TCCR1 = _BV (CS11) | _BV (CS10); // พรีสเกลเลอร์ /4 GTCCR = _BV (COM1B0) | _BV (PWM1B); // ล้าง OC1B เมื่อเปรียบเทียบ OCR1B = 255; // รอบการทำงานเริ่มต้น 0% (ใช้เอาต์พุตผกผัน!) OCR1C = 255; // ความถี่ PWM = 1KHz (1,000,000 /4 /256) เป็นโมฆะ analogWrite_PB3 (uint8_t Duty_value) ( ​​​​// analogWrite บน PIN_B3 OCR1B = 255-duty_value; // เติม 0-255 (0-100%) (เราใช้เอาต์พุตแบบผกผัน!) ) ไบต์ ScanButton(void) ( // อ่านปุ่มที่เชื่อมต่อกับเอาต์พุตเดียวด้วย LED // เร่ง เวอร์ชันที่มีการคืนค่าเอาต์พุตและไม่มีการปิด PWM ค่าไบต์ port_bak; port_bak = PORTB; // บันทึกเอาต์พุต DDRB &= ~(1<ช่วงเวลา))( \ outvar = varname;\ )\ )\ else (\ __lastChange_##varname=millis();\ ) // การตั้งค่าเริ่มต้นเป็นโมฆะ () ( pinMode(MODE_LED_PIN, OUTPUT); // สถานะหลัก - ตัวบ่งชี้ pinMode (PWM_LED_PIN, OUTPUT); PWM3_init(); // การเรียกคืนการตั้งค่าจาก EEPROM หากมี (EEPROM.read(11)==0xAA) ( Wxx = EEPROM.read(0); Wmax = EEPROM.read(1) ; Uon = EEPROM.read(2); Uoff = EEPROM.read(3); ) else ( // ค่าเริ่มต้น Wxx = 1; Wmax = 255; Uon = 255; // ไม่รวมการเริ่มต้นก่อนการตั้งค่า Uoff = 0 ; ) // การเร่งความเร็วอย่างราบรื่นไปที่การปรับไม่ได้ใช้งานหรือแบบแมนนวลถ้า (digitalRead(AM_PIN)==HIGH) W0 = Wxx; else ( W0 = 255- (analogRead(SP_PIN) >> 2); // 0-255, ตัวต้านทานแบบแปรผันที่เราหมุน ออกมาเป็นแบบผกผัน) W1 = 0; for(W=0 ; W<=W0; W++) { analogWrite_PB3(W); W1 = W1 + 4; delay(W1); } delay(800); Mode = MODE_WAITING; } // Рабочий цикл void loop() { // Индикация текущего режима морганием switch (Mode) { case MODE_MANUAL: ModeLedVal = LOW; // выключено break; case MODE_WAITING: (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; // в полнакала break; case MODE_START: case MODE_DRILLING: case MODE_STOP: ModeLedVal = HIGH; // на полную break; case MODE_SETUP_XX: if ((millis()-BlinkFromMs >400)) ( // ไม่ค่อยมี (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; BlinkFromMs = millis(); ) แตก; กรณี MODE_SETUP_MAX: ถ้า ((มิลลิวินาที()-BlinkFromMs > 100)) ( // บ่อยครั้ง (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; BlinkFromMs = millis(); ) แตก; ) digitalWrite (MODE_LED_PIN, ModeLedVal); // สวิตช์สลับอัตโนมัติ / แมนนวลในอัตโนมัติเปิดและอ่าน AMButton สูง = digitalRead (AM_PIN); ดีเด้ง(AMButton, AMButtonFlt, 200); // ปุ่มการตั้งค่าอ่านตามขั้นตอนพิเศษเพราะว่า เมื่อรวมกับ LED เมื่อกดจะอ่านว่า LOW ModeButton = ScanButton(); ดีเด้ง(ModeButton, ModeButtonFlt, 200); SetupStep = (ModeButtonFlt==ต่ำ) && (ModeButtonOld==สูง); ModeButtonOld = ModeButtonFlt; // Spinner SetPoint = 255- (อ่านแบบอะนาล็อก (SP_PIN) >> 2); // 0-255 ตัวต้านทานผันแปรของเรากลายเป็นแบบผกผัน // กระแสมอเตอร์ // ตัวกรองหลักคือเชน RC 36K+68nF (ค่าคงที่เวลา 2.5 ms, ความถี่คัตออฟ 65 Hz) // แต่ในกรณีนี้ เรา จะเสริมด้วยซอฟต์แวร์ // IIR low-pass filter ของลำดับแรก y(i) = y(i-1) + alpha*(x(i)-y(i-1)) // (หรือที่เรียกว่า Exponential Moving ค่าเฉลี่ย, EMA) // ในตัวกรองแทนที่จะลอยเราใช้ int ความแม่นยำที่เพิ่มขึ้นซึ่งเราเลื่อนไปทางซ้ายด้วย 5 บิตอิสระ (เครื่องหมายจะมีประโยชน์) // แทนที่การคูณด้วยค่าสัมประสิทธิ์เศษส่วนอัลฟ่าด้วยการเปลี่ยนแปลง ไปทางขวา // (6 = /64 = *0.016) 100 รอบ - 80% ของค่า, 200 รอบ - 96% ของค่า, 369 รอบ - 99.6% ของค่า // (5 = /32 = *0.031 ) 50 รอบ - 80% ของค่า, 100 รอบ - 96% ของค่า, 179 รอบ - 99.6% ของค่า // (4 = /16 = *0.063) 25 รอบ - ค่า 80 %, 50 รอบ - 96% ค่า 90 รอบ - ค่า 99.6% // (3 = /8 = *0.125) 12 รอบ - ค่า 80%, 25 รอบ - ค่า 96%, 45 รอบ - ค่า 99.6% // งานช่วง = ADC 110 μs + โปรแกรม = 0.2 ms // เวลาคงที่ = 8 * 0.2 ms = 1.6 ms, ความถี่ตัด 625 Hz CurrentFiltered = CurrentFiltered + (((analogRead(CUR_PIN)<< 5) - CurrentFiltered) >> 3); // เพื่อความสะดวกในการใช้งาน ลดเหลือ 0-255 // (เลื่อนกลับ 5 บิต และละทิ้ง 2 บิตที่สำคัญที่สุด เนื่องจากทุกสิ่งที่น่าสนใจ (ไม่ได้ใช้งาน)<1В) CurrentU8 = byte (CurrentFiltered >> 5); // ถ้า >1V เพื่อไม่ให้สับสนกับอันเล็กๆ ถ้า ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255; // สถานะสวิตช์เครื่อง (Mode) ( case MODE_MANUAL: // ควบคุมเองด้วยปุ่ม analogWrite_PB3(SetPoint); if (SetupStep) Mode = MODE_SETUP_XX; if (AMButtonFlt==HIGH) ( // เมื่อเปลี่ยนมาใช้เครื่องเราจะ ชะลอความเร็ว analogWrite_PB3(Wxx); StartFromMs = millis(); Mode = MODE_STOP; ) พัง; case MODE_WAITING: // รอให้กระแสเพิ่มขึ้นถ้า (CurrentU8 > Uon) ( // เริ่ม StartFromMs = millis(); analogWrite_PB3(Wmax ); Mode = MODE_START; ) if (SetupStep ) Mode = MODE_SETUP_XX; if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_START: // หมุนขึ้น if (millis()-StartFromMs > 300) Mode = MODE_DRILLING; if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break ; case MODE_DRILLING: // Drill, รอให้กระแสลดลงถ้า (CurrentU8< Uoff) { // Тормозим analogWrite_PB3(Wxx); Mode = MODE_STOP; } if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_STOP: // Тормозим и ждем пока выйдем на ток ХХ if (CurrentU8 < Uon) { // Замедлились if (millis()-StartFromMs >300) // โหมดที่เชื่อถือได้ = MODE_WAITING; ) อื่น ๆ ( StartFromMs = มิลลิวินาที (); ) ถ้า (AMButtonFlt==LOW) Mode = MODE_MANUAL; หยุดพัก; case MODE_SETUP_XX: // การตั้งค่าความเร็วรอบเดินเบา Wxx = SetPoint; อะนาล็อกWrite_PB3(Wxx); ถ้า (SetupStep) ( Uon = ไบต์(1.1 * CurrentU8); EEPROM.write(0,Wxx); EEPROM.write(2,Uon); Mode = MODE_SETUP_MAX; ) แตก; กรณี MODE_SETUP_MAX: // การตั้งค่าความเร็วสูงสุด Wmax = SetPoint; analogWrite_PB3(Wสูงสุด); ถ้า (SetupStep) ( Uoff = ไบต์ (1.1 * CurrentU8); EEPROM.write (1, Wmax); EEPROM.write (3, Uoff); EEPROM.write (11.0xAA); // เบรค analogWrite_PB3 (Wxx); StartFromMs = มิลลิวินาที(); Mode = MODE_STOP; ) หยุด; ค่าเริ่มต้น: โหมด = MODE_WAITING; กลับ; ) )


เราเชื่อมต่อตัวต้านทาน 5 วัตต์ 2.2 โอห์มแบบแบ่ง เพื่อป้องกันวงจรจากแรงดันไฟกระชากแบบเหนี่ยวนำที่ขอบท้ายของ PWM เราเชื่อมต่อไดโอด Schottky SS34 ขนานกับมอเตอร์ และเพื่อระงับสัญญาณรบกวนจากสวิตช์ที่คดเคี้ยว เราเชื่อมต่อตัวเก็บประจุ 100nF และเราเริ่มการทดสอบการควบคุมมอเตอร์สว่าน

เสียงหอนจนฟันของ PWM ที่ 4KHz (1MHz/256) สังเกตเห็นได้ชัดทันที เราเพิ่มการตั้งค่าตัวแบ่ง /4 - รู้สึกดีขึ้นทันทีแม้ว่าเสียงแหลมจะไม่หายไป แต่ด้วยเหตุผลบางอย่าง 1KHz จึงทนได้ง่ายกว่ามากแม้จะใช้งานเป็นเวลานานก็ตาม

ในโหมดแมนนวล ความเร็วของมอเตอร์ปกติจะถูกควบคุมตั้งแต่ 0-100% แต่ในวงจรป้อนกลับ ADC อัตโนมัติ มันจะอ่านค่า MAX เสมอและไม่มีอะไรทำงาน ระหว่างทางฉันสังเกตเห็นว่าบอร์ดส่งเสียงบี๊บดังแม้จะปิดมอเตอร์แล้วก็ตาม อะไรนะ?

เรานำผู้ทดสอบ ขุดออสซิลโลสโคปออกมา และเริ่มศึกษาสิ่งที่เราส่งออกและสิ่งที่เราได้รับ และเราก็อ้าปากค้าง ในการสับเปลี่ยน แทนที่จะเป็นคลื่นเบาๆ ของกระแสผ่านการเหนี่ยวนำ ที่จุดเริ่มต้นของพัลส์ PWM เราจะเห็นเข็มขนาดสิบโวลต์ ซึ่งหมายความว่ากระแสพัลส์หลายสิบแอมแปร์ไหลผ่านการสับเปลี่ยน! และถึงแม้จะดับเครื่องยนต์แล้วก็ตาม ไม่น่าแปลกใจที่บอร์ดดังขึ้น แต่อะไรจะทำให้วงจรสมบูรณ์โดยไม่มีเครื่องยนต์? ตัวเก็บประจุขนาดเล็ก 100nF! มันสามารถและจะระงับการรบกวนเมื่อเปลี่ยนขดลวด แต่สำหรับตอนนี้จะจัดให้มีการลัดวงจรระยะสั้นในแต่ละช่วง PWM! สรุป - ตัวเก็บประจุลดเสียงรบกวนเข้ากันไม่ได้กับการควบคุม PWM และการควบคุมโดยใช้ shunt ต้องถอดออก

จากนั้นฉันก็รู้ว่าไฟกระชากแรงดันสูงเหล่านี้ไปเกือบจะตรงไปยัง ADC ของ tinka (เนื่องจากมีเครื่องตรวจจับแอมพลิจูดตัวเก็บประจุที่ขาจะถูกชาร์จด้วยแรงดันไฟฟ้าสูงสุดในเข็มและเก็บไว้อย่างปลอดภัยเนื่องจาก การคายประจุทำได้โดยการรั่วของไดโอดเท่านั้น) ทิงก้าดูเหมือนจะยังไม่ตาย แต่ขาของเธอเป็นอะไรไปล่ะ? อุปกรณ์แสดงแรงดันคงที่ที่ขา 5.2V สูงกว่าแรงดันไฟจ่าย แต่ที่เหลือไปไหน? เราจำได้ว่า - ในการต่อสู้กับแรงดันไฟฟ้าเกิน เราได้ฝึกไดโอดบนแหล่งจ่ายไฟ "+" และ "-" เป็นพิเศษ ซึ่งจะทำให้กระแสไฟส่วนเกินไหลเข้าสู่แหล่งจ่ายไฟ แต่ไดโอดในตัวนั้นอ่อนแอและคุณไม่ควรพึ่งพามันมากนัก

เราถอดตัวเก็บประจุเจ้ากรรมออกวัดแรงดันไฟฟ้าด้วยเท้าของเรา - ใช้งานได้! ไมโครคอนโทรลเลอร์ที่เชื่อถือได้ผลิตโดย Atmel! เห็นได้ชัดว่าความจุของตัวเก็บประจุต่ำช่วยให้ประจุไฟฟ้าไหลผ่านได้เล็กน้อย

หากไม่มีตัวเก็บประจุ เข็มก็หายไป บอร์ดหยุดเล่นเพลง ดูเหมือนว่าขาจะวัดแอมพลิจูดของกระแสพัลส์ PWM จริงๆ เราเริ่มขั้นตอนการตั้งค่าและพยายามเจาะ ดูเหมือนทุกอย่างจะเป็นอย่างที่ควรจะเป็น - เมื่ออยู่ในโหลดจะเพิ่มความเร็ว เมื่อสว่านหลุดออกมาจะรีเซ็ต แต่ไม่เพียงเท่านั้น - หลาย ๆ ครั้งต่อนาทีมันจะเร่งความเร็วและลดความเร็วลงตามธรรมชาติโดยไม่มีภาระ ยังไม่ชัดเจนว่าทำไม เครื่องมือจึงไม่แสดงอะไรเลย ไม่ว่าขาจะไหม้ หรือความจุของสายไฟทำให้เกิดเข็มที่มองไม่เห็นเหมือนกับคอนเดอร์ หรือการรบกวนมาจากตัวสะสมตัวเดียวกัน

ที่นี่ฉันตัดสินใจที่จะจัดการกับปัญหาอย่างรุนแรง เพราะฉันสังเกตเห็นว่าไม่มีวงจรอื่นใดที่ใช้ตัวตรวจจับจุดสูงสุด ในทางตรงกันข้ามค่าอินทิกรัลของกระแสที่ส่งผ่านตัวกรอง RC จะถูกควบคุมทุกที่ และการวัดดังกล่าวไม่มีความไวต่อการรบกวนในรูปแบบของการปล่อยก๊าซเดี่ยวอย่างแม่นยำ เราแทนที่ไดโอดด้วยตัวต้านทาน - และเครื่องตรวจจับแอมพลิจูดจะเปลี่ยนเป็นฟิลเตอร์ความถี่ต่ำผ่าน

แรงดันไฟฟ้าที่เปลี่ยนโดย ADC ลดลงทันทีตามลำดับความสำคัญ - แรงดันไฟฟ้าที่มีประสิทธิภาพจะต่ำกว่าแอมพลิจูดมากในกรณีของสัญญาณในรูปแบบของคลื่นแบนโดยมีการหยุดชั่วคราวระหว่างกัน เราต้องจับแรงดันไฟฟ้าประมาณ 0.2 V แน่นอนว่าคุณสามารถเพิ่มความต้านทานของสับเปลี่ยนได้ แต่เราใช้ PWM เพื่อให้ความร้อนในบรรยากาศหรือไม่? และด้วยการเติมและโหลด PWM ขนาดใหญ่บนมอเตอร์ คุณจึงสามารถรับแรงดันไฟฟ้าเกินได้ ดังนั้นคุณจะต้องทำงานกับ U ที่ไม่ได้ใช้งานต่ำ

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

แผนภาพอุปกรณ์สุดท้าย:


อุปกรณ์ถูกติดตั้งในตัวเครื่อง ซึ่งมีบทบาทในการติดตั้งระบบไฟฟ้าแบบปิดผนึก “กล่องรวมสัญญาณพลาสติก Tuso ที่ไม่มีซีล 120x80x50 มม., IP55 สีเทา 67052 Ruvinil Russia” ฉันต้องการหาอันที่เรียบกว่านี้ แต่ไม่พบอะไรที่เหมือนกับ 110*60*30 เพื่อไม่ให้มาลัยอยู่บนโต๊ะ ฉันจึงบิดตัวควบคุมที่มีแหล่งจ่ายไฟเป็นอันเดียว อิฐนั้นดูดีมาก แต่เราไม่สามารถพกพามันไปในกระเป๋าของเราได้ และถึงแม้ว่าหลังจากเจาะรูไปสองสามรู แต่ไม่มีความร้อนที่สังเกตเห็นได้ชัดเจนของสวิตช์คีย์ฟิลด์ การแบ่งส่วนและตัวกันโคลงเมื่อสัมผัส ฉันก็เจาะช่องระบายอากาศเล็กน้อยที่ผนังด้านล่างและด้านหลัง







ตั้งแต่นั้นมา เครื่องจักรที่มีตัวควบคุมได้มีส่วนร่วมในการสร้างบอร์ดเพิ่มอีก 2 แผง (คุณสามารถดูได้ว่าต้องใช้การเจาะเท่าใดตามคำว่า "AVR Fusebit Doctor" ฉันพอใจกับงานของมันมาก

ฉันต้องการทราบด้วยว่าดอกสว่านคาร์ไบด์จาก Ali มีก้านขนาด 3.2 มม. และคอลเล็ตมีเพียง 3.0 และ 3.5 - สว่านไม่พอดีกับอันหนึ่งและไม่ได้ยึดเข้ากับอีกอัน ฉันพันลวดทองแดงรอบสว่านแล้วสอดเข้าไปใน 3.5 มม. แต่มันก็ไม่สวย ถ้าใครเจอคอลเล็ต 3.2 เส้นผ่านศูนย์กลาง 6 มม. (ทุกจุดมีแต่เดรเมลเท่านั้นและกราวด์หางเหลือ 5 มม.) ช่วยบอกหน่อยค่ะ

เมื่อเปลี่ยนดอกสว่าน ต้องทำซ้ำขั้นตอนการตั้งค่าอีกครั้ง - เห็นได้ชัดว่ากระแสมอเตอร์ได้รับผลกระทบจากโมเมนต์ความเฉื่อยที่แตกต่างกันของสว่านธรรมดาแบบ "ผอม" และสว่านคาร์ไบด์ที่มีก้านหนาขึ้น แต่ทำได้รวดเร็วและไม่น่ารำคาญ ผู้ที่สนใจสามารถเพิ่มโปรไฟล์การเจาะบันทึกลงในเฟิร์มแวร์ได้ :)

ฉันพบคำแนะนำซ้ำแล้วซ้ำเล่าให้เจาะกระดานใต้ชั้นน้ำเพื่อไม่ให้หายใจเอาเศษแก้วเข้าไป ฉันไม่สามารถรับได้ การหักเหของแสงในน้ำรบกวนการวางตำแหน่งที่แม่นยำของสว่านเมื่ออยู่สูง และเกจวัดสายตาไม่อยู่ในแนวเดียวกัน และเมื่อเจาะลงไปในน้ำ ระลอกคลื่นก็เริ่มปรากฏขึ้นและมองไม่เห็นอะไรเลย จำเป็นต้องตั้งสว่านที่หยุดไว้แล้วเปิดใหม่หรือไม่? เป็นผลให้ฉันแค่วางชามน้ำไว้ข้างๆ และจุ่มกระดานเป็นระยะเพื่อให้เปียกและล้างขี้เลื่อยออกไป ในกรณีนี้ขี้เลื่อยชื้นและไม่บินโดยรวบรวมเป็นกรวยเหนือรู

และการพูดนอกเรื่องโคลงสั้น ๆ อีกครั้งเกี่ยวกับสิ่งตรึงตราขนาดเล็ก

ฉันตัดสินใจติดตั้งขั้วต่อสายไฟประเภท “DS-225, ปลั๊กไฟบนแผงควบคุม” ลงในอุปกรณ์ เพื่อยึดให้แน่น ต้องใช้สกรูและน็อตที่มีเกลียวขนาด 2.5 มม. ในตู้กับข้าวไม่มีอะไรเหมาะสม ฉันก็จำได้ว่าอีกส่วนหนึ่งต้องใช้สกรูขนาด 2 มม. ซึ่งหมายความว่าคุ้มค่าที่จะเติมชุดรัดของคุณเพื่อที่ครั้งต่อไปคุณจะได้ไม่ต้องบินไปอีกด้านหนึ่งของภูมิภาคเพื่อหาถั่ว ฉันไม่เคยเจออะไรที่เล็กกว่า M3 ในร้านฮาร์ดแวร์เลย ดังนั้นฉันจึงต้องหาร้านเฉพาะทาง

ร้านสะดวกซื้อแห่งแรกกลายเป็นร้านลูกโซ่
ข้างในดวงตาของฉันพลุ่งพล่านจากสิ่งที่มีประโยชน์ทุกประเภท แต่โชคไม่ดี - สกรูที่เล็กที่สุดมีความยาวเท่ากันเพียง M2.5 แต่ไม่มีน็อตและแหวนรองสำหรับพวกมัน! ฉันประทับใจกับการขายถั่วแยกกันในราคา 2 รูเบิลต่อชิ้นและการเททุกสิ่งที่ซื้อลงในถุงเสื้อยืดใบเดียว (ไม่มีถุงเล็กสำหรับขนาดที่แตกต่างกัน) ขอย้ำอีกครั้งว่าการซื้อขนาดต่างๆ ไว้จะมีราคาแพง

ร้านกรูอีกแห่งมาช่วยเหลือ -
ที่นี่มีทุกอย่างในสต็อก ตั้งแต่ M1.6 ที่มีช่องและหัวที่แตกต่างกัน ขายเป็นชิ้นและตามน้ำหนัก และในราคาที่ต่ำกว่าคู่แข่งรายก่อนๆ คุณเพียงแค่ต้องไปที่ร้านโกดังบนถนน Plekhanov ไม่เช่นนั้นฉันจะไปที่ร้านใกล้สถานีรถไฟใต้ดิน Perovo ก่อนและรู้สึกประหลาดใจมากกับราคาที่ประกาศ และปรากฎว่าพวกเขามีเพียงสแตนเลสและสำหรับตัวยึดธรรมดาคุณต้องไปที่เขตอุตสาหกรรมบนแถบถ่ายโอน

ฉันกำลังวางแผนที่จะซื้อ +67 เพิ่มในรายการโปรด ฉันชอบรีวิว +76 +152

มีไทริสเตอร์คลาสสิกและวงจรควบคุม triac แบบคลาสสิกจำนวนมาก แต่ตัวควบคุมนี้ถูกสร้างขึ้นบนฐานองค์ประกอบที่ทันสมัยและนอกจากนี้ยังเป็นแบบอิงเฟสเช่น ไม่ส่งแรงดันไฟหลักครึ่งคลื่นทั้งหมด แต่เพียงบางส่วนเท่านั้นจึงจำกัดกำลังเนื่องจาก triac เปิดเฉพาะที่มุมเฟสที่ต้องการเท่านั้น

เมื่อเปิดวงจรเป็นครั้งแรก ไฟแสดงส่วนจะสว่างเป็นหมายเลข 0 การเปิดและปิดทำได้โดยการกดปุ่มไมโครสวิตช์สองปุ่มพร้อมกันค้างไว้ การปรับมากหรือน้อย - โดยกดแต่ละครั้งแยกกัน หากคุณไม่กดสวิตช์สลับใด ๆ หลังจากการกดครั้งสุดท้ายหลังจากสองชั่วโมงตัวควบคุมจะปิดเองตัวบ่งชี้จะยังคงกะพริบที่ระดับการทำงานสุดท้ายของการใช้พลังงานจนกว่าจะถึงตอนนั้น

เมื่ออุปกรณ์ถูกตัดการเชื่อมต่อจากเครือข่าย ระดับพลังงานเอาต์พุตสุดท้ายจะถูกจดจำ ซึ่งจะถูกตั้งค่าโดยอัตโนมัติในครั้งถัดไปที่เปิดเครื่อง การปรับจะดำเนินการในช่วงตั้งแต่ 0 ถึง 9 จากนั้นจาก A ถึง F นั่นคือมีขั้นตอนการปรับทั้งหมด 16 ขั้นตอน

หม้อน้ำในภาพด้านบนมีขนาดค่อนข้างใหญ่ การออกแบบช่วยให้มีตัวเลือกที่เล็กลง แต่ฉันไม่มีอย่างอื่นเลย เมื่อฉันเปิดอุปกรณ์เป็นครั้งแรก 0 กะพริบบนหน้าจอ วงจรไม่ตอบสนองต่อการกดปุ่ม ด้วยการแทนที่ตัวเก็บประจุของแหล่งจ่ายไฟด้วยค่าเล็กน้อยที่ 1,000 uF ปัญหาก็หายไป

รูปแบบแผงวงจรพิมพ์และเฟิร์มแวร์ไมโครคอนโทรลเลอร์อยู่ในไฟล์เก็บถาวรเดียวที่ลิงก์ด้านบน

วงจรนี้ใช้เพื่อควบคุมกำลังไฟฟ้าในโหลดได้อย่างราบรื่น วิธีการควบคุมจะขึ้นอยู่กับวิธีการควบคุมเฟสของไตรแอค สาระสำคัญอยู่ที่การข้ามส่วนหนึ่งของครึ่งวงจรของแรงดันไฟหลักสลับ กระแสที่เข้าสู่โหลดจะเป็นสัดส่วนกับอินทิกรัลของสัญญาณที่ได้รับ พื้นฐานของการออกแบบคือไมโครคอนโทรลเลอร์ PIC16F1823

อุปกรณ์รองรับการทำงานแบบแอคทีฟ (หลอดไส้ เครื่องทำความร้อน) และโหลดแบบเหนี่ยวนำ ไมโครคอนโทรลเลอร์ถูกโอเวอร์คล็อกจากออสซิลเลเตอร์ภายใน สัญญาณการซิงโครไนซ์กับเครือข่ายมาจากบริดจ์ตัวเรียงกระแสไปยังอินพุตของตัวเปรียบเทียบภายในของไมโครคอนโทรลเลอร์ผ่านตัวกรองบน ​​R10, C5, R9, R8, C3 แรงดันอ้างอิงของตัวเปรียบเทียบมาจาก DAC ภายในของไมโครคอนโทรลเลอร์และมีค่าเท่ากับประมาณ 0.6 V ซึ่งตั้งค่าไว้เมื่อกำหนดค่า MK เพื่อกำจัดอิทธิพลของความจุ C6 ต่อการซิงโครไนซ์จึงใช้ไดโอด D6 ข้อบ่งชี้ทำบน E30561 ด้วยแคโทดทั่วไป

โครงสร้างอุปกรณ์ประกอบอยู่บนแผงวงจรพิมพ์สองแผ่น อันหนึ่งมีปุ่มตัวบ่งชี้และควบคุมและอีกอันคือ MK แหล่งจ่ายไฟและไตรแอค บอร์ดเชื่อมต่อโดยใช้สาย MGTF

ด้วยหม้อน้ำสำหรับ triac (HS-135-38) ดังรูป กำลังโหลดสูงสุดคือประมาณ 500 W. ดังนั้นจึงมีการสร้างที่นั่งบนแผงวงจรพิมพ์สำหรับหม้อน้ำนี้

เฟิร์มแวร์สำหรับ MK สร้างขึ้นในสภาพแวดล้อม MPLAB ในภาษา C สำหรับคอมไพเลอร์ HI-TECH PICC 9.83 คุณสามารถดาวน์โหลดแผงวงจรพิมพ์ เฟิร์มแวร์ และโปรเจ็กต์ MPLAB ได้จากลิงก์ด้านบน

การออกแบบได้รับการควบคุมโดยใช้ triac ประเภท BT138 ซึ่งควบคุมผ่านเอ็มเค จอแสดงผล LED ดิจิตอลแสดงจำนวนไทรแอกที่เปิดอยู่ในปัจจุบัน ส่วนลอจิคัลของวงจรได้รับพลังงานจากแหล่งจ่ายไฟซึ่งพื้นฐานคือตัวปรับแรงดันไฟฟ้า DA1 7805

วงจรนี้เหมาะอย่างยิ่งสำหรับการปรับกำลังเอาต์พุตแยกกันสำหรับโหลดสองแบบที่แตกต่างกัน เช่น เครื่องทำความร้อน โคมไฟ มอเตอร์ไฟฟ้า กำลังโหลดสูงสุดขึ้นอยู่กับประเภทของสวิตช์ที่สวิตช์ ในแผนภาพด้านล่าง ทรานซิสเตอร์ KT819 ทำหน้าที่เช่นนี้ แต่อาจมีตัวเลือกอื่น ขึ้นอยู่กับกำลังไฟที่ต้องการของโหลดทั้งสอง อุปกรณ์จะสร้างสัญญาณพัลส์ที่ส่งไปยังสวิตช์ไฟใดๆ

อุปกรณ์สร้างสัญญาณพัลส์โดยสามารถปรับความกว้างของพัลส์ได้ 256 องศาเท่ากัน ในการควบคุมวงจรจะใช้ความต้านทานแบบแปรผันซึ่งเชื่อมต่อกับพอร์ต RVZ และ RV4 ของ MK โดยทำงานร่วมกับ ADC ATtiny13 วัดค่าความต้านทานของตัวต้านทานแบบแปรผันและตั้งค่าความกว้างพัลส์ของสัญญาณพัลส์เอาท์พุตที่จะไปยังสวิตช์ที่ควบคุมการจ่ายไฟให้กับโหลดเฉพาะ นั่นคือโดยการหมุนตัวควบคุมความต้านทานแบบแปรผัน กำลังจะถูกปรับ การปรับนี้เมื่อเปรียบเทียบกับการปรับโดยใช้ปุ่ม "น้อยลง" และ "เพิ่มเติม" จะสะดวกกว่าในการใช้งานเนื่องจากมีประสิทธิภาพ มีขั้วต่อ ISP6 สำหรับตั้งโปรแกรมอุปกรณ์ เมื่อตั้งโปรแกรมเราจะตั้งค่าฟิวส์ตามค่าเริ่มต้นโดยทำงานกับเครื่องกำเนิดสัญญาณนาฬิกา RC ภายในที่ความถี่ 9.6 MHz คุณสามารถดาวน์โหลดไฟล์เก็บถาวรด้วยซอร์สโค้ดของเฟิร์มแวร์ได้จากลิงค์ด้านบน

การปรับความเร็วของมอเตอร์ไฟฟ้าในเทคโนโลยีอิเล็กทรอนิกส์สมัยใหม่นั้นทำได้โดยการเปลี่ยนแรงดันไฟฟ้าอย่างที่เคยทำมาก่อน แต่โดยการจ่ายพัลส์กระแสที่มีระยะเวลาต่างกันให้กับมอเตอร์ไฟฟ้า PWM ซึ่งเพิ่งได้รับความนิยมอย่างมาก ใช้เพื่อวัตถุประสงค์เหล่านี้ ( ปรับความกว้างพัลส์) หน่วยงานกำกับดูแล วงจรเป็นแบบสากล - ยังควบคุมความเร็วรอบเครื่องยนต์ ความสว่างของหลอดไฟ และกระแสไฟในเครื่องชาร์จด้วย

วงจรควบคุม PWM

แผนภาพด้านบนใช้งานได้ดีแนบมาด้วย

สามารถเพิ่มแรงดันไฟฟ้าได้ถึง 16 โวลต์โดยไม่ต้องเปลี่ยนวงจร วางทรานซิสเตอร์ตามกำลังโหลด

สามารถประกอบได้ ตัวควบคุมพีเอ็มดับเบิลยูและตามวงจรไฟฟ้านี้ด้วยทรานซิสเตอร์แบบไบโพลาร์ธรรมดา:

และหากจำเป็น แทนที่จะติดตั้งทรานซิสเตอร์คอมโพสิต KT827 ให้ติดตั้งเอฟเฟกต์สนาม IRFZ44N พร้อมตัวต้านทาน R1 - 47k Polevik ที่ไม่มีหม้อน้ำจะไม่ร้อนที่โหลดสูงสุด 7 แอมแปร์

การทำงานของตัวควบคุม PWM

ตัวจับเวลาบนชิป NE555 จะตรวจสอบแรงดันไฟฟ้าบนตัวเก็บประจุ C1 ซึ่งถูกถอดออกจากพิน THR ทันทีที่ถึงค่าสูงสุด ทรานซิสเตอร์ภายในจะเปิดขึ้น ซึ่งทำให้ขา DIS สั้นลงกราวด์ ในกรณีนี้ ศูนย์ตรรกะจะปรากฏที่เอาต์พุต OUT ตัวเก็บประจุเริ่มคายประจุผ่าน DIS และเมื่อแรงดันไฟฟ้าที่กลายเป็นศูนย์ระบบจะเปลี่ยนไปสู่สถานะตรงกันข้าม - ที่เอาต์พุต 1 ทรานซิสเตอร์จะปิด ตัวเก็บประจุเริ่มชาร์จอีกครั้งและทุกอย่างจะเกิดซ้ำอีกครั้ง

ประจุของตัวเก็บประจุ C1 เป็นไปตามเส้นทาง: “R2->ต้นแขน R1 ->D2” และการคายประจุตามเส้นทาง: D1 -> แขนท่อนล่าง R1 -> DIS เมื่อเราหมุนตัวต้านทานผันแปร R1 เราจะเปลี่ยนอัตราส่วนของความต้านทานของแขนส่วนบนและล่าง ซึ่งตามนั้นจะเปลี่ยนอัตราส่วนของความยาวพัลส์เป็นการหยุดชั่วคราว ความถี่ถูกกำหนดโดยตัวเก็บประจุ C1 เป็นหลักและขึ้นอยู่กับค่าความต้านทาน R1 เล็กน้อย ด้วยการเปลี่ยนอัตราส่วนความต้านทานประจุ/คายประจุ เราจะเปลี่ยนรอบการทำงาน ตัวต้านทาน R3 ช่วยให้แน่ใจว่าเอาต์พุตถูกดึงไปที่ระดับสูง - จึงมีเอาต์พุต open-collector ซึ่งไม่สามารถกำหนดระดับสูงได้อย่างอิสระ

คุณสามารถใช้ไดโอดตัวเก็บประจุที่มีค่าประมาณเดียวกันกับในแผนภาพ การเบี่ยงเบนภายในลำดับความสำคัญเดียวไม่ส่งผลกระทบอย่างมีนัยสำคัญต่อการทำงานของอุปกรณ์ ตัวอย่างเช่น ที่ 4.7 นาโนฟารัดที่ตั้งไว้ใน C1 ความถี่จะลดลงเหลือ 18 kHz แต่แทบจะไม่ได้ยินเลย

หากหลังจากประกอบวงจรแล้ว ทรานซิสเตอร์ควบคุมคีย์เกิดความร้อน เป็นไปได้มากว่าจะไม่เปิดอย่างสมบูรณ์ นั่นคือมีแรงดันไฟฟ้าตกคร่อมทรานซิสเตอร์มาก (เปิดบางส่วน) และกระแสไหลผ่าน ส่งผลให้มีการกระจายพลังงานจำนวนมากเพื่อให้ความร้อน ขอแนะนำให้ขนานวงจรที่เอาต์พุตกับตัวเก็บประจุขนาดใหญ่มิฉะนั้นจะร้องเพลงและควบคุมได้ไม่ดี เพื่อหลีกเลี่ยงการผิวปาก ให้เลือก C1 เสียงผิวปากมักจะมาจากมัน โดยทั่วไป ขอบเขตของการใช้งานนั้นกว้างมาก การใช้เป็นตัวควบคุมความสว่างสำหรับหลอดไฟ LED กำลังสูง แถบ LED และสปอตไลท์จะมีแนวโน้มที่ดีเป็นพิเศษ แต่จะเพิ่มเติมในครั้งต่อไป บทความนี้เขียนขึ้นโดยได้รับการสนับสนุนจาก ear, ur5rnp, stalker68

บ่อยครั้งที่จำเป็นต้องสามารถควบคุมกระแสที่ไหลผ่านหลอดไฟหรือองค์ประกอบความร้อนได้ เนื่องจากโหลดเป็นแบบต้านทาน วิธีแก้ปัญหาที่ง่ายที่สุดคือการประกอบตัวควบคุม PWM ขนาดเล็ก (จากภาษาอังกฤษ PWM - การมอดูเลตความกว้างพัลส์) เนื่องจากวงจรอย่างง่ายที่ใช้ตัวจับเวลา NE555 ไม่เป็นที่สนใจจึงตัดสินใจพัฒนาและประกอบวงจรของเราเองซึ่งค่อนข้างคล้ายกัน

วงจรแม้จะมีไมโครคอนโทรลเลอร์ PIC18LF2550 แต่ก็ทำซ้ำได้ง่ายมากและสามารถแบ่งออกเป็น 3 ส่วน:

เครื่องกำเนิดพีเอ็มดับเบิลยู

ไมโครคอนโทรลเลอร์จะสร้างพัลส์ที่ชัดเจนของรูปร่างและรอบการทำงานที่ต้องการ ซึ่งช่วยให้วงจรง่ายขึ้นอย่างมาก มีปุ่มสองปุ่มสำหรับเพิ่มและลดพลังงาน ไปที่พิน 3 และ 5 ของชิป PIC18LF2550 ไฟ LED จะกะพริบช้าลงหรือเร็วขึ้น ขึ้นอยู่กับความกว้างของพัลส์ ดังนั้นคุณจึงสามารถประเมินรอบการทำงานได้ด้วยสายตา หากไฟ LED สว่างเต็มที่ กำลังไฟจะเป็น 100% และหากดับลง รอบการทำงานจะเป็น 0%

แหล่งจ่ายไฟไมโครคอนโทรลเลอร์

โคลง MK คือ 3.3 โวลต์ดังนั้นขึ้นอยู่กับทรานซิสเตอร์เอาต์พุตคุณสามารถใช้แหล่งพลังงานได้ตั้งแต่ 3.7 ถึง 25 โวลต์ ความถี่ในการสลับคือ 32 kHz และระยะเวลาพัลส์แบ่งออกเป็น 256 ขั้นตอน รวมถึงการเปิดและปิดแบบเต็ม

โหลดสวิตช์

ไดรเวอร์สำหรับทรานซิสเตอร์ MOSFET คือ 2N3904 ปกติ พาวเวอร์ทรานซิสเตอร์นั้นอาจเป็น MOSFET N-channel ที่เหมาะสมก็ได้ โดยไม่จำเป็นต้องเหมือนกับในวงจร 80NF55L

คอนโทรลเลอร์ PWM 8 บิต 4 แชนเนลเวอร์ชันนี้ได้รับการออกแบบโดยใช้ไมโครคอนโทรลเลอร์ ATmega16 อุปกรณ์ประกอบด้วยอินเทอร์เฟซ RS232 สำหรับควบคุมจากคอมพิวเตอร์ อินเทอร์เฟซสำหรับแป้นพิมพ์ 12 ปุ่ม และช่องอะนาล็อก 10 บิต 4 ช่องสำหรับเชื่อมต่อโพเทนชิโอมิเตอร์ มีจอ LCD 4 บรรทัดเพื่อแสดงโหมดการทำงานและพารามิเตอร์ปัจจุบัน นอกจากนี้ ตัวควบคุม PWM ยังมี: เอาต์พุต 4 เอาต์พุตไปยัง LED สำหรับระบุโหมดการควบคุม (สามารถใช้เป็นเอาต์พุตเอนกประสงค์ได้), เอาต์พุตเอนกประสงค์ 3 เอาต์พุต

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

ลักษณะสำคัญของอุปกรณ์:

  • PWM 4 แชนเนล, ความละเอียด 8 บิต, ความถี่ PWM - 31 kHz;
  • อินเทอร์เฟซ RS232 สำหรับการควบคุมและการตรวจสอบจากพีซี
  • การออกแบบวงจรอย่างง่ายที่มีองค์ประกอบภายนอกจำนวนน้อยที่สุด
  • แป้นพิมพ์ 12 ปุ่ม;
  • ความเป็นไปได้ของการปรับแบบอะนาล็อก
  • มากถึง 7 สายเอาต์พุตเอนกประสงค์;
  • จอ LCD 4 บรรทัด;
  • การควบคุมจอแสดงผล LCD ผ่านทางอินเทอร์เฟซแบบอนุกรม
  • เมนูที่กำหนดเอง
  • การตั้งค่าที่ยืดหยุ่น
  • การใช้ซอฟต์แวร์บัฟเฟอร์ FIFO เพื่อเร่งการทำงาน

เอาต์พุตวัตถุประสงค์ทั่วไป (รวมถึงไฟ LED แสดงสถานะ) ควบคุมจากคอมพิวเตอร์ (RS232) ผู้ใช้ยังสามารถอ่านประวัติการกดแป้นพิมพ์บนแป้นพิมพ์ได้ (การกดแป้น 32 ครั้งล่าสุดหรือทันทีหลังจากกดแป้น)

ด้วยการตั้งค่าที่ยืดหยุ่นดังกล่าว การเลือกการตั้งค่าที่เหมาะสมทำให้ตัวควบคุม PWM สามารถใช้งานได้หลากหลายและเป็นอุปกรณ์สแตนด์อโลน การออกแบบใช้ไมโครคอนโทรลเลอร์ ATmega16 ซึ่งเป็นจำนวนองค์ประกอบภายนอกขั้นต่ำ เนื่องจากไมโครคอนโทรลเลอร์ควบคุมและจัดการทั้งหมดเอง ผู้ใช้สามารถใช้เฉพาะส่วนประกอบที่จำเป็นเท่านั้น เช่น สามารถยกเว้นตัวบ่งชี้ LCD ได้หากไม่จำเป็น

แผนภาพลอจิกของอุปกรณ์

แผนผังของอุปกรณ์

วิธีแก้ปัญหาวงจรนั้นง่ายมาก ในการโอเวอร์คล็อกไมโครคอนโทรลเลอร์ ให้เลือกตัวสะท้อนเสียงควอทซ์ 8 MHz ประกอบแหล่งจ่ายไฟ +5.0 V บนตัวกันโคลงในตัว LM7805 ตัวเหนี่ยวนำ 10 μH และตัวเก็บประจุ 100 nF สร้างตัวกรองที่ป้องกันการแทรกซึมของการรบกวนเมื่อเปิดสวิตช์ วงจรอนาล็อก ตัวแปลงระดับตรรกะ MAX232 ใช้เพื่อใช้อินเทอร์เฟซแบบอนุกรม ไฟแสดงสถานะ LCD บนชิปเซ็ต Hitachi (HD44780) ที่มีความละเอียด 20x4 หรือ 40x2 ชุดควบคุมแบ็คไลท์ตัวบ่งชี้นั้นใช้กับทรานซิสเตอร์ MJE3055T (สามารถใช้อะนาล็อกที่ราคาถูกกว่าได้) เมทริกซ์แป้นพิมพ์ มาตรฐาน 4×3

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

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

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

สำหรับตัวอย่างการใช้งานจริงของอุปกรณ์และการควบคุม PWM ของอุปกรณ์ภายนอกต่างๆ ดังแผนภาพต่อไปนี้ ตัวอย่างนี้แสดงโซลูชันวงจรสำหรับเชื่อมต่อมอเตอร์พัดลม, LED ที่ทรงพลังในตระกูล และตัวแปลงแรงดันไฟฟ้าแบบ PWM บนเครื่องขยายสัญญาณการทำงาน LM358 เป็น 4 ช่องสัญญาณ PWM นอกจากนี้ LED ยังเชื่อมต่อเพื่อให้สามารถทดสอบสายเอาท์พุตเอนกประสงค์ได้

ตัวอย่างการใช้งานขั้นตอนเอาต์พุตของตัวควบคุม PWM

กำลังโหลด...กำลังโหลด...