- การทำความเข้าใจโมดูล ADC:
- แผนภูมิวงจรรวม:
- การเขียนโปรแกรม MSP430 ของคุณสำหรับ ADC:
- ทดสอบผลลัพธ์ของคุณ!
คุณสมบัติทั่วไปอย่างหนึ่งที่ใช้ในแอพพลิเคชั่นฝังตัวเกือบทุกตัวคือโมดูล ADC (ตัวแปลงอนาล็อกเป็นดิจิตอล) ตัวแปลงอนาล็อกเป็นดิจิตอลเหล่านี้ สามารถอ่านแรงดันไฟฟ้าจากเซ็นเซอร์อนาล็อกเช่นเซ็นเซอร์อุณหภูมิ, เซ็นเซอร์การเอียง, เซ็นเซอร์ปัจจุบัน, เซ็นเซอร์ Flex และอื่น ๆ อีกมากมาย ดังนั้นในบทช่วยสอนนี้เราจะเรียนรู้ วิธีใช้ ADC ใน MSP430G2 เพื่ออ่านแรงดันไฟฟ้าอนาล็อกโดยใช้ Energia IDE เราจะเชื่อมต่อโพเทนชิออมิเตอร์ขนาดเล็กเข้ากับบอร์ด MSP และจ่ายแรงดันไฟฟ้าที่แตกต่างกันไปยังขาอนาล็อกอ่านแรงดันไฟฟ้าและแสดงบน Serial Monitor
การทำความเข้าใจโมดูล ADC:
เชื่อฉันแทบจะไม่ต้องใช้เวลา 10 นาทีในการเชื่อมต่อและตั้งโปรแกรม MSP430G2 เพื่ออ่านแรงดันอนาล็อก แต่ขอให้เราใช้เวลาทำความเข้าใจโมดูล ADC ในบอร์ด MSP เพื่อให้เราสามารถใช้งานได้อย่างมีประสิทธิภาพในโครงการที่จะเกิดขึ้นทั้งหมดของเรา
ไมโครคอนโทรลเลอร์เป็นอุปกรณ์ดิจิทัลหมายความว่าสามารถเข้าใจได้เพียง 1 และ 0 เท่านั้น แต่ในโลกแห่งความเป็นจริงแทบทุกอย่างเช่นอุณหภูมิความชื้นความเร็วลม ฯลฯ เป็นแบบอะนาล็อก ในการโต้ตอบกับการเปลี่ยนแปลงอนาล็อกเหล่านี้ไมโครคอนโทรลเลอร์จะใช้โมดูลที่เรียกว่า ADC มีโมดูล ADC หลายประเภทที่ใช้ใน MSP ของเราคือSAR 8 channel 10-bit ADC
การประมาณตามลำดับ (SAR) ADC: SAR ADC ทำงานด้วยความช่วยเหลือของตัวเปรียบเทียบและการสนทนาเชิงตรรกะ ADC ประเภทนี้ใช้แรงดันอ้างอิง (ซึ่งเป็นตัวแปร) และเปรียบเทียบแรงดันไฟฟ้าขาเข้ากับแรงดันอ้างอิงโดยใช้ตัวเปรียบเทียบและความแตกต่างซึ่งจะเป็นเอาต์พุตดิจิตอลจะถูกบันทึกจากบิตที่สำคัญที่สุด (MSB) ความเร็วของการเปรียบเทียบขึ้นอยู่กับความถี่สัญญาณนาฬิกา (Fosc) ที่ MSP ทำงานอยู่
ความละเอียด 10 บิต: ADC นี้เป็น ADC แบบ 8 ช่อง 10 บิต ในที่นี้คำว่าช่อง 8 หมายความว่ามีหมุด ADC 8 ตัวซึ่งเราสามารถวัดแรงดันไฟฟ้าแบบอะนาล็อกได้ คำว่า 10 บิตหมายถึงความละเอียดของ ADC 10-bit หมายถึง 2 ยกกำลังสิบ (2 10) ซึ่งเป็น 1024 นี่คือจำนวนขั้นตอนตัวอย่างสำหรับ ADC ของเราดังนั้นช่วงของค่า ADC ของเราจะอยู่ระหว่าง 0 ถึง 1023 ค่าจะเพิ่มขึ้นจาก 0 ถึง 1023 ขึ้นอยู่กับค่าของแรงดันไฟฟ้าต่อขั้นตอนซึ่งสามารถคำนวณได้โดยใช้สูตรด้านล่าง
หมายเหตุ:โดยค่าเริ่มต้นใน Energia แรงดันอ้างอิงจะถูกตั้งค่าเป็น Vcc (~ 3v) คุณสามารถเปลี่ยนแรงดันอ้างอิงได้โดยใช้ตัวเลือก analogReference ()
ตรวจสอบวิธีการเชื่อมต่อ ADC กับไมโครคอนโทรลเลอร์อื่น ๆ:
- วิธีใช้ ADC ใน Arduino Uno
- การเชื่อมต่อ ADC0808 กับไมโครคอนโทรลเลอร์ 8051
- การใช้โมดูล ADC ของไมโครคอนโทรลเลอร์ PIC
- การสอน Raspberry Pi ADC
แผนภูมิวงจรรวม:
ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้วิธีการเชื่อมต่อ LCD กับ MSP430G2 แล้วตอนนี้เรากำลังจะเพิ่มโพเทนชิออมิเตอร์ให้กับ MSP430เพื่อจ่ายแรงดันไฟฟ้าแบบแปรผันและแสดงค่าแรงดันไฟฟ้าบน LCD หากคุณไม่ทราบถึงการเชื่อมต่อ LCD ให้ถอยกลับไปที่ลิงก์ด้านบนและอ่านต่อเนื่องจากฉันจะข้ามข้อมูลเพื่อหลีกเลี่ยงการกลับใจ แผนภาพวงจรที่สมบูรณ์ของโครงการได้รับด้านล่าง
อย่างที่คุณเห็นมีโพเทนชิโอมิเตอร์สองตัวที่ใช้ที่นี่ตัวหนึ่งใช้สำหรับตั้งค่าความคมชัดของ LCD ในขณะที่อีกตัวใช้เพื่อจ่ายแรงดันไฟฟ้าแบบแปรผันให้กับบอร์ด ในโพเทนชิออมิเตอร์นั้นปลายสุดด้านหนึ่งของโพเทนชิออมิเตอร์เชื่อมต่อกับ Vcc และปลายอีกด้านหนึ่งเชื่อมต่อกับกราวด์ พินกลาง (สายสีน้ำเงิน) เชื่อมต่อกับพิน P1.7 นี้P1.7 ขาจะให้แรงดันไฟฟ้าตัวแปรจาก 0V (พื้นดิน) เพื่อ 3.5V (Vcc) ดังนั้นเราต้องตั้งโปรแกรมพิน P1.7 เพื่ออ่านแรงดันไฟฟ้าตัวแปรนี้และแสดงบนจอ LCD
ใน Energia เราต้องรู้ว่าพิน P1.7 เป็นของช่องอนาล็อกใด? สามารถดูได้จากภาพด้านล่าง
คุณจะเห็นพิน P1.7 ทางด้านขวามือซึ่งพินนี้เป็นของ A7 (ช่อง 7) ในทำนองเดียวกันเราสามารถค้นหาหมายเลขช่องตามลำดับสำหรับพินอื่น ๆ ได้เช่นกัน คุณสามารถใช้พินใดก็ได้ตั้งแต่ A0 ถึง A7 เพื่ออ่านแรงดันไฟฟ้าแบบอะนาล็อกที่นี่ฉันเลือก A7
การเขียนโปรแกรม MSP430 ของคุณสำหรับ ADC:
การเขียนโปรแกรมMSP430ของคุณเพื่ออ่านแรงดันไฟฟ้าแบบอะนาล็อกนั้นง่ายมาก ในโปรแกรมนี้จะอ่านค่าอะนาล็อกและคำนวณแรงดันไฟฟ้าด้วยค่านั้นจากนั้นแสดงทั้งบนหน้าจอ LCD โปรแกรมที่สมบูรณ์สามารถพบได้ที่ด้านล่างของหน้านี้ดังต่อไปนี้ฉันกำลังอธิบายโปรแกรมในเกร็ดเล็กเกร็ดน้อยที่จะช่วยให้คุณเข้าใจที่ดีขึ้น
เราเริ่มต้นด้วยการกำหนดออกหมุดจอแอลซีดีสิ่งเหล่านี้กำหนดพินของ MSP430 ที่เชื่อมต่อกับพิน LCD คุณสามารถอ้างอิงการเชื่อมต่อของคุณเพื่อให้แน่ใจว่าหมุดเชื่อมต่อตามลำดับ
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
ต่อไปเราจะรวมไฟล์ส่วนหัวสำหรับจอ LCD สิ่งนี้เรียกไลบรารีซึ่งมีรหัสเกี่ยวกับวิธีที่ MSP ควรสื่อสารกับ LCD ไลบรารีนี้จะถูกติดตั้งใน Energia IDE ตามค่าเริ่มต้นดังนั้นคุณไม่จำเป็นต้องเพิ่มมัน ตรวจสอบให้แน่ใจว่าฟังก์ชัน Liquid Crystal ถูกเรียกด้วยชื่อพินที่เรากำหนดไว้ข้างต้น
# รวม
ภายในฟังก์ชั่น การตั้งค่า () ของ เราเราจะให้ข้อความแนะนำเพื่อแสดงบนหน้าจอ LCD ฉันไม่ได้ลงลึกมากนักเนื่องจากเราได้เรียนรู้วิธีใช้ LCD กับ MSP430G2 แล้ว
lcd.begin (16, 2); // เราใช้จอ LCD 16 * 2 lcd.setCursor (0,0); // วางเคอร์เซอร์ไว้ที่แถวที่ 1 คอลัมน์ที่ 1 lcd.print ("MSP430G2553"); // แสดงข้อความแนะนำ lcd.setCursor (0, 1); // ตั้งค่าเคอร์เซอร์เป็นคอลัมน์ที่ 1 แถวที่ 2 lcd.print ("- CircuitDigest"); // แสดงข้อความแนะนำ
สุดท้ายภายในที่ไม่มีที่สิ้นสุดของเรา ห่วง () ฟังก์ชั่นที่เราเริ่มต้นการอ่านแรงดันไฟฟ้าที่ให้มากับขา A7 ดังที่เราได้กล่าวไปแล้วไมโครคอนโทรลเลอร์เป็นอุปกรณ์ดิจิทัลและไม่สามารถอ่านระดับแรงดันไฟฟ้าได้โดยตรง การใช้เทคนิค SAR ระดับแรงดันไฟฟ้าจะถูกแมปตั้งแต่ 0 ถึง 1024 ค่าเหล่านี้เรียกว่าค่า ADC เพื่อให้ได้ค่า ADC นี้เพียงแค่ใช้บรรทัดต่อไปนี้
int val = analogRead (A7); // อ่านค่า ADC จากพิน A7
ที่นี่ฟังก์ชัน analogRead () ใช้เพื่ออ่านค่าอะนาล็อกของพินเราได้ระบุ A7 ไว้ข้างในเนื่องจากเราได้เชื่อมต่อแรงดันไฟฟ้าแปรผันกับพิน P1.7 ในที่สุดเราก็บันทึกค่านี้ในตัวแปรที่เรียกว่า " val " ประเภทของตัวแปรนี้เป็นจำนวนเต็มเนื่องจากเราจะได้รับค่าตั้งแต่ 0 ถึง 1024 เท่านั้นที่จะเก็บไว้ในตัวแปรนี้
ขั้นตอนต่อไปจะมีการคำนวณค่าไฟฟ้าจากค่าเอดีซีในการทำสิ่งนี้เรามีสูตรต่อไปนี้
แรงดันไฟฟ้า = (ค่า ADC / ความละเอียด ADC) * แรงดันอ้างอิง
ในกรณีของเราเรารู้แล้วว่าความละเอียด ADC ของไมโครคอนโทรลเลอร์ของเราคือ 1024 ค่า ADC ยังพบในบรรทัดก่อนหน้าและเก็บตัวแปรที่เรียกว่า val แรงดันอ้างอิงเท่ากับแรงดันไฟฟ้าที่ไมโครคอนโทรลเลอร์เป็นปฏิบัติการ เมื่อคณะกรรมการ MSP430 ถูกขับเคลื่อนผ่านสาย USB แล้วแรงดันไฟฟ้าปฏิบัติการที่3.6Vคุณยังสามารถวัดแรงดันไฟฟ้าที่ใช้งานได้โดยใช้มัลติมิเตอร์ผ่าน Vcc และขากราวด์บนบอร์ด ดังนั้นสูตรข้างต้นจึงเหมาะกับกรณีของเราดังที่แสดงด้านล่าง
แรงดันลอย = (float (val) / 1024) * 3.6; // สูตรในการแปลงค่า ADC เป็นแรงดันไฟฟ้า
คุณอาจจะสับสนกับ line float (val) นี้จะใช้ในการแปลงตัวแปร“วาล” จากชนิดข้อมูล int จะ“ลอย” ชนิดข้อมูลจำเป็นต้องมีการแปลงนี้เพราะถ้าเราได้ผลลัพธ์ของ val / 1024 ใน float เท่านั้นเราสามารถคูณได้ 3.6 หากได้รับค่าเป็นจำนวนเต็มค่าจะเป็น 0 และผลลัพธ์จะเป็นศูนย์ด้วย เมื่อเราคำนวณค่า ADC และแรงดันไฟฟ้าแล้วสิ่งที่เหลืออยู่ก็คือการแสดงผลบนหน้าจอ LCDซึ่งสามารถทำได้โดยใช้บรรทัดต่อไปนี้
lcd.setCursor (0, 0); // ตั้งค่าเคอร์เซอร์เป็นคอลัมน์ 0 บรรทัด 0 lcd.print ("ADC Val:"); lcd.print (วาล); // แสดงค่า ADC lcd.setCursor (0, 1); // ตั้งค่าเคอร์เซอร์เป็นคอลัมน์ 0 บรรทัดที่ 1 lcd.print ("Voltage:"); lcd.print (แรงดันไฟฟ้า); // แสดงแรงดันไฟฟ้า
ที่นี่เราได้แสดงค่า ADC ในบรรทัดแรกและค่าของแรงดันไฟฟ้าในบรรทัดที่สอง ในที่สุดเราก็หน่วงเวลา 100 มิลลิวินาทีและล้างหน้าจอ LCD นี่คือค่าที่จะได้รับการอัปเดตทุกๆ 100 ล้าน
ทดสอบผลลัพธ์ของคุณ!
ในที่สุดเราก็มาถึงส่วนที่สนุกนั่นคือการทดสอบโปรแกรมของเราและเล่นกับมัน เพียงแค่ทำการเชื่อมต่อตามที่แสดงในแผนภาพวงจร ฉันใช้เขียงหั่นขนมขนาดเล็กเพื่อทำการเชื่อมต่อและใช้สายจัมเปอร์เพื่อเชื่อมต่อเขียงหั่นขนมกับ MSP430 เมื่อเชื่อมต่อเสร็จแล้วฉันจะมีลักษณะดังนี้ด้านล่าง
จากนั้นอัปโหลดโปรแกรมที่ได้รับด้านล่างไปยังบอร์ด MSP430 ผ่าน Energia IDE คุณควรจะเห็นข้อความแนะนำบน LCD หากไม่ปรับความคมชัดของ LCD โดยใช้โพเทนชิออมิเตอร์จนกว่าคุณจะเห็นคำที่ชัดเจน ลองกดปุ่มรีเซ็ต หากสิ่งต่างๆเป็นไปตามที่คาดไว้คุณควรจะเห็นหน้าจอต่อไปนี้
ตอนนี้เปลี่ยนโพเทนชิออมิเตอร์และคุณควรเห็นแรงดันไฟฟ้าที่แสดงใน LCD แตกต่างกันไป ให้เราตรวจสอบว่าเรากำลังวัดแรงดันไฟฟ้าอย่างถูกต้องหรือไม่โดยใช้มัลติมิเตอร์เพื่อวัดแรงดันไฟฟ้าที่อยู่ตรงกลางของหม้อและพื้นดิน แรงดันไฟฟ้าที่แสดงบนมัลติมิเตอร์ควรใกล้เคียงกับค่าที่แสดงบนจอ LCD ดังแสดงในภาพด้านล่าง
ว่ามันเป็นเราได้เรียนรู้วิธีการวัดแรงดันไฟฟ้าแบบอะนาล็อกโดยใช้ ADC ของ MSP430 คณะกรรมการ ตอนนี้เราสามารถเชื่อมต่อเซ็นเซอร์อนาล็อกจำนวนมากกับบอร์ดของเราเพื่ออ่านค่าพารามิเตอร์แบบเรียลไทม์ หวังว่าคุณจะเข้าใจบทช่วยสอนและสนุกกับการเรียนรู้หากคุณมีปัญหาใด ๆ โปรดติดต่อผ่านส่วนความคิดเห็นด้านล่างหรือผ่านฟอรัม มาติดตามบทช่วยสอน MSP430 พร้อมหัวข้อใหม่