สารบัญ:
- ขั้นตอนที่ 1: AD Converter คืออะไร?
- ขั้นตอนที่ 2: ทรัพยากรที่ใช้
- ขั้นตอนที่ 3: ESP32 ADC
- ขั้นตอนที่ 4: วงจรที่ใช้
- ขั้นตอนที่ 5: ลงชื่อเข้าใช้ที่ใช้
- ขั้นตอนที่ 6: ข้อมูลที่ได้รับจากออสซิลโลสโคป
- ขั้นตอนที่ 7: ข้อมูลที่ได้รับจาก Oscilloscope (ไฟล์ csv ใน Excel)
- ขั้นตอนที่ 8: ข้อมูลที่ได้รับจาก ADC
- ขั้นตอนที่ 9: ข้อมูลที่ได้รับจาก ADC - Excel
- ขั้นตอนที่ 10: เปรียบเทียบ Climb Ramps
- ขั้นตอนที่ 11: เท่ากับจำนวนตัวอย่าง
- ขั้นตอนที่ 12: เติมช่องว่าง - Trend Line
- ขั้นตอนที่ 13: เติมช่องว่าง - เส้นโค้งพหุนามเกรด 2
- ขั้นตอนที่ 14: การเติมช่องว่าง - การประเมินฟังก์ชัน
- ขั้นตอนที่ 15: การแปลงแรงดันออสซิลโลสโคปเป็นค่าเทียบเท่าเพื่อเปรียบเทียบกับ ADC
- ขั้นตอนที่ 16: เปรียบเทียบสองทางลาดที่ได้รับ
- ขั้นตอนที่ 17: พฤติกรรมของความแตกต่างในการอ่าน ADC (ข้อผิดพลาด)
- ขั้นตอนที่ 18: พฤติกรรมการอ่านความแตกต่างของ ADC - การค้นหาฟังก์ชันการแก้ไข
- ขั้นตอนที่ 19: การใช้ซอฟต์แวร์อื่น
- ขั้นตอนที่ 20: ค่าคงที่และการตั้งค่า ()
- ขั้นตอนที่ 21: วนซ้ำ () และฟังก์ชันการแก้ไข
- ขั้นตอนที่ 22: การใช้ฟังก์ชันแก้ไข PolySolve
- ขั้นตอนที่ 23: จับภาพด้วยการแก้ไข - พล็อตเตอร์ Serial
- ขั้นตอนที่ 24: ต้นทุนการคำนวณ
- ขั้นตอนที่ 25: รหัสทดสอบ - การตั้งค่า () และการเริ่มต้นวนรอบ ()
- ขั้นตอนที่ 26: รหัสทดสอบ - วนซ้ำ () และการประมวลผล
- ขั้นตอนที่ 27: รหัสทดสอบ - วนซ้ำ () - Results
- ขั้นตอนที่ 28: รหัสทดสอบ - ฟังก์ชั่นที่ใช้
- ขั้นตอนที่ 29: ไฟล์
วีดีโอ: คุณรู้เกี่ยวกับการปรับ ESP32 ADC หรือไม่: 29 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
วันนี้ฉันจะพูดถึงปัญหาทางเทคนิคเพิ่มเติม แต่สิ่งหนึ่งที่ฉันคิดว่าทุกคนที่ทำงานกับ ESP32 ควรรู้: ปัญหาของการปรับการอ่าน ADC (ตัวแปลงแอนะล็อกเป็นดิจิทัล) ฉันพบว่าสิ่งนี้สำคัญเพราะเมื่อทำ "การวัด" โดยเฉพาะอย่างยิ่งกับเครื่องมือที่มีเอาต์พุตแบบอะนาล็อก คุณต้องแน่ใจอย่างยิ่งว่าการอ่านนั้นดำเนินการอย่างถูกต้อง
ในวิดีโอวันนี้ เราจะทำการวัดโดยใช้ "ตัวแปลงอนาล็อก-ดิจิตอล" ของ ESP32 สังเกตความคลาดเคลื่อนของการแปลง และใช้วิธีการปรับ/สอบเทียบ ADC
ขั้นตอนที่ 1: AD Converter คืออะไร?
AD converter คือวงจรที่สามารถแปลงปริมาณแอนะล็อก (ต่อเนื่อง) เป็นค่าดิจิทัล (ไม่ต่อเนื่อง) นั่นหมายความว่าอย่างไร? หมายความว่าในขณะที่ค่าดิจิทัลสามารถสันนิษฐานได้เฉพาะค่าที่ไม่ต่อเนื่องที่เกิดจากการรวมกันของศูนย์และค่า แต่ปริมาณแอนะล็อกสามารถสมมติค่าใดก็ได้ภายในช่วง ตัวอย่างเช่น ถ้าเราวัดแรงดันไฟฟ้าของเซลล์ AA ในอุดมคติ เราจะสามารถหาค่าใดๆ ระหว่าง 0V ถึง 1.5V เนื่องจากเป็นปริมาณแอนะล็อก สถานะเอาต์พุตของหลอดไฟในอุดมคติต้องถือว่ามีเพียงสองสถานะ (ปิดหรือเปิด) ซึ่งเป็นขนาดที่ไม่ต่อเนื่อง เนื่องจากไมโครคอนโทรลเลอร์ทำงานโดยใช้ลอจิกแบบแยกส่วนนี้ เราจึงจำเป็นต้องมีวงจรที่สามารถแปลงปริมาณแอนะล็อกเป็นดิจิทัล (หรือแบบแยกส่วน)
ขั้นตอนที่ 2: ทรัพยากรที่ใช้
• การ์ด Lolin32 Lite หนึ่งใบ v1.0.0
• ออสซิลโลสโคป Tektronix TDS1001C สำหรับการจับภาพ
• สาย USB หนึ่งเส้นสำหรับ ESP32
• ออสซิลโลสโคป Hantek DSO4102C เป็นเครื่องกำเนิดสัญญาณ
ขั้นตอนที่ 3: ESP32 ADC
จากข้อมูลของ Espressif ชิป ESP32 อาจแสดงความแตกต่าง +/- 6% จากชิปตัวหนึ่งไปอีกตัวหนึ่งในผลลัพธ์ที่วัดได้
นอกจากนี้ การแปลงไม่มีคำตอบเชิงเส้นสำหรับทุกช่วงที่อ่านได้ Espressif มีวิธีการสอบเทียบและแนะนำให้ผู้ใช้ใช้วิธีอื่นหากเห็นว่าจำเป็นเพื่อให้ได้ความแม่นยำตามที่ต้องการ
เราจะทำการเก็บข้อมูล และจากนี้ เราจะแสดงการตอบสนองของ ADC และตัวอย่างการใช้กระบวนการทางคณิตศาสตร์เพื่ออ่านการปรับปรุง
มีหลายวิธี (ง่ายกว่าหรือซับซ้อนกว่า) ในการแก้ไขเหล่านี้ให้สำเร็จ การประเมินสิ่งที่เหมาะสมที่สุดสำหรับโครงการของคุณขึ้นอยู่กับคุณ
ที่แสดงนี้จะมีจุดประสงค์เพื่อเป็นตัวอย่างและพยายามระบุประเด็นที่น่าสนใจที่สามารถสังเกตได้ระหว่างการปรับ
ขั้นตอนที่ 4: วงจรที่ใช้
ฉันใช้ออสซิลโลสโคปกับเครื่องกำเนิดสัญญาณที่สูงถึง 25 MHz Hantek DSO4102C เราสร้างคลื่นที่อ่านโดย ESP A / D และออสซิลโลสโคป ข้อมูลที่รวบรวมถูกบันทึกไว้ใน csv และในสเปรดชีต ซึ่งฉันจะทิ้งไว้ที่ส่วนท้ายของบทความเพื่อดาวน์โหลด
ขั้นตอนที่ 5: ลงชื่อเข้าใช้ที่ใช้
เราเลือกสัญญาณสี่เหลี่ยมคางหมูความถี่ต่ำซึ่งช่วยให้สามารถเข้าถึงทางลาดที่วิ่งผ่านช่วงการแปลงทั้งหมด ซึ่งช่วยให้มีตัวอย่างจำนวนมากบนทางลาดเหล่านี้
ขั้นตอนที่ 6: ข้อมูลที่ได้รับจากออสซิลโลสโคป
ภาพที่จับได้ดำเนินการโดยออสซิลโลสโคป ข้อมูลถูกเก็บไว้ในไฟล์ csv สังเกตความโค้งเล็กน้อยบนทางลาดขึ้นและลงของสัญญาณ
ขั้นตอนที่ 7: ข้อมูลที่ได้รับจาก Oscilloscope (ไฟล์ csv ใน Excel)
เรามีตัวอย่างที่นี่
ขั้นตอนที่ 8: ข้อมูลที่ได้รับจาก ADC
ด้วยการเปลี่ยนอัตราการถ่ายโอนของซีเรียล เราสามารถดูข้อมูลที่ ADC จับได้ สังเกตการเสียรูปของสัญญาณสี่เหลี่ยมคางหมู
ข้อมูลที่สังเกตได้จากพล็อตเตอร์อนุกรม Arduino IDE
ขั้นตอนที่ 9: ข้อมูลที่ได้รับจาก ADC - Excel
การใช้อัตราที่สูงกว่าและเทอร์มินัลอนุกรม เราสามารถบันทึกค่าและนำไปใช้ใน Excel เพื่อการเปรียบเทียบของเรา
ขั้นตอนที่ 10: เปรียบเทียบ Climb Ramps
เราเปรียบเทียบทางลาดปีนเขาทั้งสองของที่จับทั้งสอง
สังเกตความโค้งที่เกิดขึ้นบนทางลาดทั้งสอง
โปรดทราบว่าสำหรับทางลาดเดียวกัน เรามีตัวอย่างของ ESP32 มากกว่าจากออสซิลโลสโคป
ขั้นตอนที่ 11: เท่ากับจำนวนตัวอย่าง
เนื่องจาก ESP32 ให้ตัวอย่างจำนวนมากกว่าออสซิลโลสโคป เราจึงต้องเทียบค่าเหล่านี้ เนื่องจากจะทำหน้าที่เป็นดัชนีเพื่อเปรียบเทียบเส้นโค้งทั้งสอง
สำหรับสิ่งนี้เราจะทำการเปรียบเทียบโดยตรง
เรามีตัวอย่าง 305 ตัวอย่างสำหรับทางลาดออสซิลโลสโคปและ 2365 ตัวอย่างสำหรับทางลาด ADC
เนื่องจากทางลาดอยู่ในช่วงเดียวกัน เราสามารถพูดได้ว่าเรามีตัวอย่าง ADC ประมาณ 7.75 ตัวอย่างสำหรับออสซิลโลสโคปแต่ละตัว
การคูณดัชนีของตัวอย่างออสซิลโลสโคปแต่ละตัวอย่างมีเส้นโค้งเดียวกัน แต่มีดัชนีที่เทียบเท่ากับ ADC และข้อมูลที่แจกจ่ายซ้ำ
ในการกรอกข้อมูลที่ขาดหายไปสำหรับตำแหน่งใหม่ เราจะใช้เส้นโค้งที่เหมาะกับข้อมูลที่ทราบทางสถิติ
ขั้นตอนที่ 12: เติมช่องว่าง - Trend Line
เลือกข้อมูลที่ทราบ (จุดสีน้ำเงิน) โดยคลิกแล้วคลิกปุ่มขวาเราเลือก: "เพิ่มเส้นแนวโน้ม …"
ในหน้าต่างที่ปรากฏขึ้น เราเลือกประเภทพหุนาม (ลำดับที่ 2 ก็เพียงพอแล้ว)
นอกจากนี้เรายังตรวจสอบตัวเลือก "ดูสมการในแผนภูมิ" และ "แสดงค่า R-squared ในแผนภูมิ"
เราคลิก "ปิด"
ขั้นตอนที่ 13: เติมช่องว่าง - เส้นโค้งพหุนามเกรด 2
Excel ให้ข้อมูลใหม่สองชิ้นแก่เรา สมการอันดับสองที่เหมาะสมกับข้อมูลมากที่สุด และสมการ R-squared ที่หาปริมาณความเพียงพอนี้
จำไว้ว่ายิ่งใกล้ 1 สมการยิ่งเหมาะสม
อย่าเจาะลึกถึงคณิตศาสตร์ที่เกี่ยวข้องกัน ลองใช้มันเป็นเครื่องมือ
ขั้นตอนที่ 14: การเติมช่องว่าง - การประเมินฟังก์ชัน
มาเติมช่องว่างการสุ่มตัวอย่างด้วยข้อมูลที่สร้างจากสมการกัน แล้วเปรียบเทียบทีละจุด
y = -9E-08x2 + 0, 0014x + 0, 1505
R² = 0, 9999
แรงดันออสซิลโลสโคป = -9E-08 * index2 + 0, 0014 * index + 0, 1505
ขั้นตอนที่ 15: การแปลงแรงดันออสซิลโลสโคปเป็นค่าเทียบเท่าเพื่อเปรียบเทียบกับ ADC
มาใช้ประโยชน์จากสิ่งนี้เพื่อแปลงค่าของแรงดันออสซิลโลสโคปเป็นค่า ADC ที่เทียบเท่ากัน
เนื่องจากค่าสูงสุดที่ได้รับใน ADP ของ ESP32 คือ 4095 ซึ่งเทียบเท่ากับค่าที่อ่านได้ 2.958V สำหรับดัชนีเดียวกัน เราสามารถพูดได้ว่า:
แต่ละโวลต์ในการวัดของออสซิลโลสโคปเท่ากับประมาณ 1384.4 หน่วยของ AD ดังนั้นเราจึงสามารถคูณการวัดทั้งหมดของออสซิลโลสโคปด้วยค่านี้
ขั้นตอนที่ 16: เปรียบเทียบสองทางลาดที่ได้รับ
การแสดงภาพความแตกต่างที่ได้จากการอ่านทั้งสองครั้ง
ขั้นตอนที่ 17: พฤติกรรมของความแตกต่างในการอ่าน ADC (ข้อผิดพลาด)
เส้นโค้งด้านล่างแสดงให้เห็นว่าความแตกต่างในการอ่านค่า ADC ทำงานอย่างไรตามฟังก์ชันของการวัด การรวบรวมข้อมูลนี้จะทำให้เราสามารถค้นหาฟังก์ชันการแก้ไขได้
ในการหาเส้นโค้งนี้ เราเพียงพลอตผลต่างที่พบในแต่ละหน่วยวัดเป็นฟังก์ชันของแต่ละตำแหน่งโฆษณาที่เป็นไปได้ (0 ถึง 4095)
ขั้นตอนที่ 18: พฤติกรรมการอ่านความแตกต่างของ ADC - การค้นหาฟังก์ชันการแก้ไข
เราสามารถกำหนดฟังก์ชันการแก้ไขใน Excel ได้โดยการเพิ่ม Trend Line ซึ่งขณะนี้มีระดับที่สูงขึ้น จนกว่าจะพอดีกับข้อมูลของเรา
ขั้นตอนที่ 19: การใช้ซอฟต์แวร์อื่น
ซอฟต์แวร์ที่น่าสนใจอื่นๆ สำหรับกำหนดเส้นโค้งคือ PolySolve ซึ่งสามารถใช้ได้โดยตรงที่ลิงก์: https://arachnoid.com/polysolve/ หรือดาวน์โหลดเป็นแอปพลิเคชัน Java
อนุญาตให้ประยุกต์ใช้การถดถอยพหุนามระดับสูงและการส่งฟังก์ชันที่จัดรูปแบบแล้ว เช่นเดียวกับฟังก์ชันอื่นๆ
ในการใช้งาน เพียงแค่ป้อนข้อมูลในกล่องข้อความแรก ข้อมูลต้องเป็นไปตามลำดับ X, Y คั่นด้วยเครื่องหมายจุลภาคหรือแท็บ ระมัดระวังในการใช้จุดเป็นจุดทศนิยมให้ถูกต้อง
แผนภูมิจะปรากฏในช่องถัดไปหากข้อมูลที่ป้อนมีรูปแบบที่ถูกต้อง
นี่คือวิธีที่เส้นโค้งข้อผิดพลาด ADC ของเราไป
หน้าต่างนี้จะแสดงผลลัพธ์ของการถดถอย ซึ่งรวมถึงข้อมูลความเพียงพอของฟังก์ชัน ซึ่งสามารถมีรูปแบบเอาต์พุตได้หลายวิธี: เป็นฟังก์ชัน C / C ++ รายการสัมประสิทธิ์ ฟังก์ชันที่เขียนด้วยภาษา Java เป็นต้น
หมายเหตุ: ให้ความสนใจกับตัวคั่นทศนิยม
ขั้นตอนที่ 20: ค่าคงที่และการตั้งค่า ()
ฉันชี้ให้เห็นที่นี่ GPIO ที่ใช้สำหรับการจับภาพแบบอะนาล็อก ฉันเริ่มต้นพอร์ตอนุกรม เช่นเดียวกับพินที่กำหนดไว้สำหรับการจับภาพแบบแอนะล็อก
const int pin_leitura = 36; // GPIO usado para captura analógica void setup() { Serial.begin(1000000); //Iniciciando a porta serial somente สำหรับ debug pinMode(pin_leitura, INPUT); //Pino utilizado para captura analógica }
ขั้นตอนที่ 21: วนซ้ำ () และฟังก์ชันการแก้ไข
เราทำการดักจับแรงดันไฟฟ้าที่ปรับแล้วและเราพิมพ์ค่าโดยมีหรือไม่มีการแก้ไขที่ถูกต้อง
วงเป็นโมฆะ () { int valor_analogico = analogRead (pin_leitura); //realiza a captura da tensão ajustada //Serial.print(valor_analogico + f(valor_analogico)); // imprime os valores สำหรับดีบัก (COM CORREÇÃO) Serial.print(valor_analogico); //imprimime os valores สำหรับดีบัก (SEM CORREÇÃO) Serial.print(", "); Serial.print(4095);//cria uma linha para marcar o valor máximo de 4095 Serial.print(", "); Serial.println(0); //cria uma linha para marcar o valor mínimo de 0 }
สังเกตในบรรทัดที่ 12 ว่าเรามีตัวเลือกในการพิมพ์ข้อมูลด้วยการเพิ่มฟังก์ชันผลต่าง f (analog_value)
ขั้นตอนที่ 22: การใช้ฟังก์ชันแก้ไข PolySolve
ที่นี่เราใช้ฟังก์ชัน PolySolve ภายใน Arduino IDE
/* โหมด: ปกติ พหุนามดีกรี 6, 2365 x, y คู่ข้อมูล สัมประสิทธิ์สหสัมพันธ์ (r^2) = 9, 907187626418e-01 ข้อผิดพลาดมาตรฐาน = 1, 353761109831e+01 รูปแบบเอาต์พุต: ฟังก์ชัน C/C++: ลิขสิทธิ์ © 2012, P. ลูตัส -- https://www.arachnoid.com สงวนลิขสิทธิ์. */ double f(double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2) + -3.470360275448e-07 * pow(x, 3) + 2.082790802069e- 10 * pow(x, 4) + -5.306931174991e-14 * pow(x, 5) + 4.787659214703e-18 * pow(x, 6); }
สังเกตการเปลี่ยนแปลงด้วยเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม
ขั้นตอนที่ 23: จับภาพด้วยการแก้ไข - พล็อตเตอร์ Serial
ขั้นตอนที่ 24: ต้นทุนการคำนวณ
ในการคำนวณพหุนาม โปรเซสเซอร์จำเป็นต้องจัดการกับงานนี้ ซึ่งอาจนำไปสู่ความล่าช้าในการดำเนินการ ขึ้นอยู่กับซอร์สโค้ดและกำลังในการคำนวณที่มี
ที่นี่ เราเห็นตารางผลลัพธ์ของการทดสอบโดยใช้พหุนามหลายดีกรี สังเกตความแตกต่างระหว่างเวลาที่ใช้ฟังก์ชัน pow () กับเวลาที่ไม่ได้ใช้
ขั้นตอนที่ 25: รหัสทดสอบ - การตั้งค่า () และการเริ่มต้นวนรอบ ()
ที่นี่เรามีรหัสที่ใช้ในการทดสอบของเรา
การตั้งค่าเป็นโมฆะ () { Serial.begin (1000000); // เริ่มต้น porta serial somente para debug } void loop () { float valor_analogico = 500.0; //um valor arbtrario float quantidade = 1,0000.0; //quantidade de chamadas float contador = 0.0; //คอนทาดอร์ เดอ ชามาดาส
ขั้นตอนที่ 26: รหัสทดสอบ - วนซ้ำ () และการประมวลผล
ฉันใช้ฟังก์ชัน micros () เพื่อรับค่าเป็นไมโครวินาที
//============= เริ่มต้นหรือประมวลผล float agora = micros (); //marca o instante เริ่มต้นในขณะที่ (contador <quantidade) { //v (valor_analogico); //função vazia //r(valor_analogico); //função com retorno //f0(valor_analogico); // Grau 0 //f1(valor_analogico); // Grau 1 //f2(valor_analogico); // Grau 2 //f3(valor_analogico); // Grau 3 //f4(valor_analogico); // Grau 4 //f5(valor_analogico); // Grau 5 //f6(valor_analogico); // Grau 6 //f13_semPow(valor_analogico); // Grau 13º SEM a função POW //f13_comPow(valor_analogico); //grau 13º COM a função POW contador++; } agora = (ไมโคร() - agora) / quantidade; //กำหนดหรือช่วงเวลา que se passou para cada iteração //============ ขั้นสุดท้าย o กระบวนการ
ขั้นตอนที่ 27: รหัสทดสอบ - วนซ้ำ () - Results
เราพิมพ์ค่าที่ส่งคืนจากฟังก์ชันเกรด 13 โดยมีและไม่มี POW เพื่อเปรียบเทียบ ตลอดจนช่วงการประมวลผล
// imprime o valor retornado da função de grau 13 com e sem POW สำหรับการเปรียบเทียบ Serial.print(f13_semPow(valor_analogico)); //grau 13º SEM a função POW Serial.print(" - "); Serial.print(f13_comPow(valor_analogico)); //grau 13º COM a função POW Serial.print(" - "); // imprime o ช่วงเวลาทำการประมวลผล Serial.println (agora, 6); }
ขั้นตอนที่ 28: รหัสทดสอบ - ฟังก์ชั่นที่ใช้
ฟังก์ชันว่าง (พร้อมผลตอบแทนเท่านั้น) ระดับ 0 และ 1
// FUNÇÃO VAZIAdouble v (double x) { } // FUNÇÃO SOMENTE COM RETORNO double r (double x) { return x; } // FUNÇÃO DE GRAU 0 double f0 (double x) { กลับ 2.202196968876e+02; } // FUNÇÃO DE GRAU 1 double f1 (double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x; }
ฟังก์ชั่นเกรด 2, 3 และ 4
// FUNÇÃO DE GRAU 2double f2 (double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2); } // FUNÇÃO DE GRAU 3 double f3(double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2) + -3.470360275448e-07 * pow(x, 3); } // FUNÇÃO DE GRAU 4 double f4(double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2) + -3.470360275448e-07 * pow(x, 3) + 2.082790802069e-10 * pow(x, 4); }
ฟังก์ชั่นเกรด 5 และ 6
// FUNÇÃO DE GRAU 5double f5 (double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow(x, 4) + -5.306931174991e-14 * pow(x, 5); } // FUNÇÃO DE GRAU 6 double f6(double x) { return 2.202196968876e+02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow(x, 2) + -3.470360275448e-07 * pow(x, 3) + 2.082790802069e-10 * pow(x, 4) + -5.306931174991e-14 * pow(x, 5) + 4.787659214703e-18 * pow(x, 6); }
ฟังก์ชันเกรด 13 โดยใช้ POW
// FUNÇÃO DE GRAU 13 USANDO O POWdouble f13_comPow (double x) { return 2, 161282383460e+02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * pow (x, 2) + -3, 968558178426e-06 * pow(x, 3) + 1, 047910519933e-08 * pow(x, 4) + -1, 479271312313e-11 * pow(x, 5) + 1, 220894795714e-14 * pow(x, 6) + -6, 136200785076e-18 * pow(x, 7) + 1, 910015248179e-21 * pow(x, 8) + -3, 566607830903e-25 * pow(x, 9) + 5, 000280815521e-30 * pow(x, 10) + 3, 434515045670e-32 * pow(x, 11) + -1, 407635444704e-35 * pow(x, 12) + 9, 871816383223e-40 * pow(x, 13); }
ฟังก์ชั่นเกรด 13 โดยไม่ต้องใช้ POW
// FUNÇÃO DE GRAU SEM USAR O POWdouble f13_semPow (double x) { return 2, 161282383460e+02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * x * x + -3, 968558178426e-06 * x * x * x + 1, 047910519933e-08 * x * x * x * x + -1, 479271312313e-11 * x * x * x * x * x + 1, 220894795714e-14 * x * x * x * x * x * x + -6, 136200785076e-18 * x * x * x * x * x * x * x + 1, 910015248179e-21 * x * x * x * x * x * x * x * x + -3, 566607830903e- 25 * x * x * x * x * x * x * x * x * x + 5, 000280815521e-30 * x * x * x * x * x * x * x * x * x * x + 3, 434515045670e- 32 * x * x * x * x * x * x * x * x * x * x * x + -1, 407635444704e-35 * x * x * x * x * x * x * x * x * x * x * x * x + 9, 871816383223e-40 * x * x * x * x * x * x * x * x * x * x * x * x * x; }
ขั้นตอนที่ 29: ไฟล์
ดาวน์โหลดไฟล์:
ไฟล์ PDF
ฉันไม่
สเปรดชีต
แนะนำ:
วิธีสร้างความรู้สึกปัจจุบันของ ADC: 5 ขั้นตอน
วิธีสร้างความรู้สึกในปัจจุบันของ ADC: ในคำแนะนำนี้ เราจะอธิบายวิธีการใช้ตัวแปลงอนาล็อกเป็นดิจิทัล (ADC) 8 บิตใน SLG46855V ที่สามารถตรวจจับกระแสโหลดและอินเทอร์เฟซกับ MCU ผ่าน I2C การออกแบบนี้สามารถใช้กับแอปพลิเคชันการตรวจจับกระแสต่างๆ เช่น
ค้นหาด้วยว่ารายงานสดโดยใช้ Chat Bot หรือไม่: 4 ขั้นตอน
ค้นหาด้วยว่ารายงานสดโดยใช้ Chat Bot: ผ่าน WhatsApp รับตัวแปร (ตำแหน่ง ความสูง ความกดดัน…) จาก NodeMCU ตามที่ร้องขอหรือส่งคำสั่งไปยัง NodeMCU ผ่าน API ของ Twilio สองสามสัปดาห์ ฉันได้ทำงานกับ API ของ Twilio โดยเฉพาะอย่างยิ่งสำหรับการรับส่งข้อความ WhatsApp และแม้กระทั่งสร้างแอป
7 ส่วนเพื่อแสดงค่า ADC #Arduino, #Arduino: 4 ขั้นตอน
7-segment to Display ADC #Arduino Values, #Arduino: ในบทความนี้ ผมจะจัดทำโครงการที่ยังคงเกี่ยวข้องกับบทความก่อนหน้านี้ คือการประมวลผลข้อมูล ADC ดังนั้นคุณไม่จำเป็นต้องมีจอภาพแบบอนุกรมเพื่อดูค่าของข้อมูล ADC ในบทความนี้ฉันจะทำให้การแสดงค่า ADC Value viewer ดังนั้นคุณไม่
อ่านค่า ADC จากโพเทนชิโอมิเตอร์: 4 ขั้นตอน
อ่านค่า ADC จากโพเทนชิโอมิเตอร์: ในบทความนี้ ผมจะแสดงวิธีอ่านค่า ADC จากโพเทนชิออมิเตอร์ ซึ่งเป็นพื้นฐานของการเขียนโปรแกรม Arduino ซึ่งกำลังอ่านค่าแอนะล็อกโดยใช้พินอนาล็อกที่ Arduino จัดหาให้ นอกจากการใช้โพเทนชิโอแล้ว ยังมีเซ็นเซอร์หลายตัวที่
เริ่มต้นใช้งาน ESP32 - การติดตั้งบอร์ด ESP32 ใน Arduino IDE - ESP32 Blink Code: 3 ขั้นตอน
เริ่มต้นใช้งาน ESP32 | การติดตั้งบอร์ด ESP32 ใน Arduino IDE | รหัสการกะพริบของ ESP32: ในคำแนะนำนี้ เราจะดูวิธีการเริ่มทำงานกับ esp32 และวิธีการติดตั้งบอร์ด esp32 ลงใน Arduino IDE และเราจะตั้งโปรแกรม esp 32 เพื่อเรียกใช้โค้ดกะพริบโดยใช้ arduino ide