การใช้เลเยอร์โปรโตคอล CAN ในซอฟต์แวร์


12

พื้นหลัง

ฉันกำลังพัฒนาโครงการที่ต้องการรายละเอียดของไมโครคอนโทรลเลอร์ขนาดเล็กของ:

  • 8 ADCs 12 บิต, 10kHz
  • RAM ขนาด 1kB
  • 48-QFN หรือมีขนาดเล็กกว่า
  • โปรโตคอลการสื่อสารที่ป้องกันเสียงรบกวนและแก้ไขข้อผิดพลาด 20kbps

ข้อกำหนดการประมวลผลสัญญาณค่อนข้างต่ำและส่วนใหญ่สามารถส่งออกไปยังตัวประมวลผลหลักในระบบ สามคุณสมบัติแรกนั้นง่ายต่อการตอบสนองและสามารถทำได้ในปริมาณที่น้อยกว่า $ 2 อย่างไรก็ตามการสื่อสารจะเกิดขึ้นในสภาพแวดล้อมที่มีเสียงดังมากดังนั้นเครือข่ายที่มีเสียงดังเช่น LIN และ I2C จึงไม่ทำงาน ข้อโต้แย้งเพิ่มเติมต่อ LIN คือฉันต้องการเรียกใช้ทั้งหมดที่ 5V หรือ 3.3V และตัวรับส่งสัญญาณ LIN ต้องการ 12V และต้องมีตัวควบคุมเพิ่มเติมหรือสายต่อบอร์ดเซ็นเซอร์ ตอนแรกฉันเลือก CAN สำหรับงานนี้ อย่างไรก็ตามคอนโทรลเลอร์สามารถเพิ่มค่าใช้จ่ายได้เป็นอย่างมากและฉันอยากรู้ว่าซอฟต์แวร์นี้สามารถทำได้หรือไม่

CAN Physical Layer

ข้อมูลจำเพาะของ CAN จะกำหนด Data Link และ Physical Layer ของโมเดลอ้างอิงเครือข่าย OSI 8-pin ICs ราคาไม่แพงจำนวนมากเช่นNXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551และTI SN65HVD1050มีอยู่เพื่อใช้เลเยอร์ทางกายภาพ การนำเลเยอร์ทางกายภาพมาใช้กับตัวแปลง D / A หรือ op-amps อาจทำได้ยากหากไม่สามารถทำได้ดังนั้นไอซีเหล่านี้จึงมีมูลค่า $ 1 หรือมากกว่านั้น

CAN Data Link / เลเยอร์โปรโตคอล

สำหรับเลเยอร์ดาต้าลิงค์ไมโครคอนโทรลเลอร์บางตัวเพิ่มโมดูลโปรโตคอล CAN ลงบนเลเยอร์การสื่อสาร UART, I2C และ SPI พื้นฐาน อย่างไรก็ตามสิ่งเหล่านี้มีราคาแพงกว่าชิปพื้นฐานอย่างมาก

การตรวจสอบต้นทุนของโมดูลโปรโตคอล CAN

หากต้องการยืนยันการอ้างสิทธิ์ต่อไปนี้เป็นไมโครไซต์ยอดนิยมในรุ่น CAN และรุ่นที่ไม่ใช่ CAN จาก:

  • ATmega16 - ATMEGA16M1 (พร้อม CAN): $ 3.87, ATMEGA168A (ไม่สามารถ): $ 3.23
  • dsPIC - DSPIC33FJ64MC802 (พร้อม CAN): $ 6.14, DSPIC33FJ64GP202 (ไม่สามารถ): $ 5.48
  • PIC18 - PIC18F2480 (พร้อม CAN): $ 6.80, PIC18F24J10 (ไม่สามารถ): $ 2.10
  • Cortex-M3 - STM32F103C4T6A (พร้อม CAN): $ 6.50, STM32F100C4T6B (ไม่มี CAN): $ 2.73

เพื่อความเป็นธรรมฉันจะเปรียบเทียบไมโครคอนโทรลเลอร์กับขนาดหน่วยความจำเท่ากันเท่านั้นอย่างไรก็ตามรุ่นที่ไม่สามารถใช้งานได้หลายรุ่นนั้นมีขนาดหน่วยความจำขนาดเล็กให้น้อยลง คอนโทรลเลอร์ CAN ภายนอกเช่นMicrochip MCP2515มีราคาเกือบ 2 ดอลลาร์ดังนั้นจึงเห็นได้ชัดว่าคุ้มค่ากว่าที่จะรวม CAN เข้ากับไมโครคอนโทรลเลอร์ถ้าคุณมีตัวเลือก

ที่น่าสนใจคือส่วน ATmega นั้นเป็นส่วนที่ติดตั้ง CAN ที่ถูกที่สุดในสินค้าคงคลังของ Digikey

หน้าที่ของชั้นโปรโตคอล CAN

โมดูล CAN ที่พบในไมโครคอนโทรลเลอร์ dsPIC ทำสิ่งต่อไปนี้:

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

ดูเหมือนว่าจะทำได้ในซอฟต์แวร์

คำถาม

เลเยอร์โปรโตคอลซอฟต์แวร์สามารถใช้กับข้อกำหนดของ CAN กับไมโครคอนโทรลเลอร์ที่ติดตั้ง UART ราคาไม่แพงและตัวรับส่งสัญญาณ CAN ได้หรือไม่ ถ้าเป็นเช่นนั้นมีการใช้งานโอเพนซอร์ซอยู่หรือไม่?

อีกวิธีหนึ่งสามารถใช้ตัวรับส่งสัญญาณกับ UART เพื่อใช้โปรโตคอลที่กำหนดเองได้หรือไม่? ฉันตกลงกับโทโพโลยีหลักเดียว ฉันเข้าใจว่าการตัดสินโดยอนุญาโตตุลาการอาจทำได้ยากในโปรโตคอลที่กำหนดเอง


CAN ก็เป็น 12v เช่นกันเนื่องจากได้รับการพัฒนาเพื่อใช้กับยานยนต์
เคนนี

@Kenny - ระดับแรงดันไฟฟ้าที่ใช้กับตัวรับส่งสัญญาณข้างต้นคือ 5V
Kevin Vermeer

หากคุณกำลังจะพิจารณาชุด STM32F ฉันขอแนะนำชิ้นส่วน NXP นี้ด้วยหรือไม่ มันเป็นแกน Cortex-M0 search.digikey.com/scripts/DkSearch/…
Jon L

@ จอน - สิ่งเหล่านั้นไม่ได้อยู่ในการพิจารณาและ M0 น่าจะเหมาะสำหรับกรณีการใช้งานนี้ - อย่างไรก็ตามพิจารณาชิ้นส่วนNuvoton M052LANก็เป็น Cortex-M0 และประมาณครึ่งราคาในราคา ($ 1.21 เทียบกับ $ 2.35) แต่ ไม่มีโมดูล CAN ความแตกต่างของราคานั่นคือแรงจูงใจของฉัน
Kevin Vermeer

คุณอาจต้องการพิจารณาอันดับการดำเนินงานด้วย ชิ้นส่วนส่วนใหญ่ที่มีการสนับสนุน CAN จะเป็นอุตสาหกรรมหรือยานยนต์เทียบกับการค้าสำหรับรุ่นที่ไม่ใช่ CAN
ทำเครื่องหมาย

คำตอบ:


11

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

อย่างไรก็ตามราคาของคุณสูง ฉันเพิ่งตรวจสอบและ dsPIC 33FJ64GP802 ในแพ็คเกจ QFN ขายในราคา 3.68 USD ใน microchipdirect สำหรับ 1,000 ชิ้น ราคาจะลดลงสำหรับปริมาณการผลิตจริง

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

ที่เพิ่ม:

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

คุณต้องการทำได้ที่ 20 kbit / s นั่นเป็นอัตราที่ช้ามากสำหรับ CAN ซึ่งสูงถึง 1Mbit / s เป็นเวลาอย่างน้อย 10 วินาที ในการให้ดาต้าพอยน์หนึ่งกับคุณมาตรฐานการส่งสัญญาณ NMEA 2000 shipboard คือเลเยอร์บน CAN ที่ 200 kbits / s และนั่นหมายถึงการย้ายจากปลายด้านหนึ่งของเรือรบขนาดใหญ่ไปอีกอันหนึ่ง

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

มีสองสถานะการส่งสัญญาณบนรถบัส CAN ถอยและโดดเด่น ถอยคือสิ่งที่เกิดขึ้นเมื่อไม่มีอะไรขับรถบัส เส้นทั้งสองถูกดึงเข้าด้วยกันรวมเป็น 60 Ω CAN บัสปกติที่ใช้งานโดยชิปทั่วไปเช่น MCP2551 ควรมีเทอร์มินัล 120 at ที่ปลายทั้งสองดังนั้นรวม 60 Ωดึงทั้งสองสายที่แตกต่างกันอย่างอดทน รัฐที่โดดเด่นคือเมื่อทั้งสองเส้นถูกแยกออกจากกันอย่างแข็งขันบางแห่งประมาณ 900mV จากรัฐถอยถ้าฉันจำได้ถูกต้อง โดยพื้นฐานแล้วนี่เป็นเหมือน open Collector bus ยกเว้นว่ามันจะถูกนำไปใช้กับคู่ที่ต่างกัน รถบัสอยู่ในสถานะถอยถ้า CANH-CANL <900mV และโดดเด่นเมื่อ CANH-CANL> 900mV รัฐที่โดดเด่นเป็นสัญญาณ 0 และถอย 1

เมื่อใดก็ตามที่โหนด "เขียน" a 1 ไปยังบัส (ปล่อยให้ไป) มันจะตรวจสอบเพื่อดูว่าโหนดอื่นกำลังเขียน 0 เมื่อคุณพบบัสในสถานะที่โดดเด่น (0) เมื่อคุณคิดว่าคุณกำลังส่งและ บิตปัจจุบันที่คุณส่งคือ 1 หมายความว่ามีคนอื่นกำลังส่งด้วย การชนจะเกิดขึ้นก็ต่อเมื่อผู้ส่งทั้งสองไม่เห็นด้วยและกฎก็คือผู้ที่ส่งสถานะถอยกลับจะปิดและยกเลิกข้อความของตน โหนดที่ส่งสถานะที่โดดเด่นไม่ทราบว่าสิ่งนี้เกิดขึ้น นี่คือวิธีการอนุญาโตตุลาการทำงานบน CAN บัส

กฎอนุญาโตตุลาการ CAN บัสหมายความว่าคุณจะต้องดูรถบัสผ่านทุกบิตที่คุณส่งเป็น 1 เพื่อให้แน่ใจว่ามีคนอื่นไม่ได้ส่ง 0 การตรวจสอบนี้มักจะทำประมาณ 2/3 ของวิธีลงในบิต และเป็นข้อ จำกัด พื้นฐานของความยาว CAN บัส ยิ่งอัตราบิตช้าลงยิ่งมีเวลาสำหรับการแพร่กระจายกรณีที่เลวร้ายที่สุดจากปลายด้านหนึ่งของบัสไปยังอีกด้านหนึ่งดังนั้นจึงสามารถใช้บัสได้นาน การตรวจสอบนี้จะต้องทำทุกบิตที่คุณคิดว่าคุณเป็นเจ้าของรถบัสและกำลังส่ง 1 บิต

ปัญหาอีกประการหนึ่งคือการปรับอัตราบิต โหนดทั้งหมดบนบัสต้องยอมรับอัตราบิตอย่างใกล้ชิดกว่า RS-232 เพื่อป้องกันความแตกต่างของนาฬิกาขนาดเล็กจากการสะสมเป็นข้อผิดพลาดที่สำคัญแต่ละโหนดจะต้องสามารถทำบิตที่ยาวหรือสั้นกว่าเล็กน้อยเล็กน้อย ในฮาร์ดแวร์สิ่งนี้ถูกนำไปใช้โดยการรันนาฬิกาบางแห่งที่เร็วกว่าอัตราบิต 9x ถึง 20x รอบของนาฬิกาเร็วนี้เรียกว่าควอนตัมเวลา มีหลายวิธีในการตรวจสอบว่าจุดเริ่มต้นของบิตใหม่กำลังเร่ร่อนไปตามที่คุณคิดว่าควรจะเป็น การใช้งานฮาร์ดแวร์แล้วเพิ่มหรือข้ามควอนตัมครั้งเดียวในบิตเพื่อซิงค์อีกครั้ง มีวิธีอื่น ๆ ที่คุณสามารถใช้งานได้ตราบใดที่คุณสามารถปรับให้มีความแตกต่างเล็ก ๆ ในช่วงระหว่างเวลาบิตที่คุณคาดหวังและเวลาบิตที่วัดได้จริง

ไม่ว่าจะด้วยวิธีใดกลไกเหล่านี้ต้องการสิ่งต่าง ๆ ในเวลาต่าง ๆ ภายในเวลาไม่นาน การกำหนดเวลาแบบนี้จะยุ่งยากมากในเฟิร์มแวร์หรือต้องการให้บัสทำงานช้ามาก สมมติว่าคุณใช้ระบบควอนตัมเวลาในเฟิร์มแวร์ที่ 20 kbits / s อย่างน้อยควอนตัมเวลา 9 ต่อบิตนั่นจะต้องมีการขัดจังหวะ 180 kHz แน่นอนว่าเป็นไปได้ด้วยบางอย่างเช่น dsPIC 33F แต่จะกินส่วนสำคัญของโปรเซสเซอร์ ที่อัตราการเรียนการสอนสูงสุด 40 MHz คุณจะได้รับ 222 รอบคำสั่งต่อการขัดจังหวะ ไม่ควรใช้เวลานานในการตรวจสอบทั้งหมด แต่อาจจะประมาณ 50-100 รอบซึ่งหมายความว่าโปรเซสเซอร์ 25-50% จะใช้สำหรับ CAN และจะต้องยึดเอาทุกอย่างที่ทำงานอยู่ ที่ป้องกันไม่ให้แอปพลิเคชันจำนวนมากโปรเซสเซอร์เหล่านี้มักจะทำงาน เช่นพัลส์โดยการควบคุมพัลส์ของแหล่งจ่ายไฟแบบสวิตชิ่งหรือไดรเวอร์มอเตอร์ เวลาแฝง 50-100 รอบต่ออินเทอร์รัปต์อื่น ๆ จะเป็นการแสดงที่สมบูรณ์สำหรับหลาย ๆ สิ่งที่ฉันทำกับชิปเช่นนี้

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

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

ฉันไม่เห็นว่าสิ่งนี้ทำให้รู้สึก


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

ที่ปริมาณ 1,000 ฉันพบราคา $ 3.12 สำหรับ dsPIC33FJ64GP202 จาก microchipdirect - ความแตกต่างมูลค่ารวมของ $ 560! อย่างน้อยก็น่าลอง ฉันอ้างถึงราคาต่อชิ้นเพียงเพราะมันง่ายกว่าที่จะรับตัวเลขสำหรับแต่ละชิ้นโดยไม่ต้องกังวลกับการหมุนวนปริมาณบรรจุภัณฑ์มาตรฐานและอื่น ๆ
Kevin Vermeer

2
@ เควินราคาปริมาณต่ำไม่ได้เป็นสัดส่วนกับราคาปริมาณสูงเสมอไป ฉันไม่ทราบว่าคุณวางแผนที่จะทำสิ่งเหล่านี้จำนวนเท่าใด แต่ $ 560 จะไม่เริ่มจ่ายสำหรับงานวิศวกรรมที่ต้องทำในเฟิร์มแวร์ ฉันจะเพิ่มเพื่อตอบคำอธิบายของปัญหาที่คุณจะต้องเผชิญ
Olin Lathrop

WTF !? ฉันเพิ่งเพิ่มบางสิ่งลงในคำตอบของฉันและย่อหน้าส่วนใหญ่ก็หายไป มีบรรทัดว่างเปล่าในหน้าต่างแก้ไขที่ฉันพิมพ์
Olin Lathrop

1
คำตอบคือใช่คุณทำได้ แต่ฉันเห็นด้วยกับแลงโดยสิ้นเชิง ฉันทำงานเต็มเวลาจริง ๆ ในสาขานี้ ฉันใช้ชิป dsPIC33FJ256 เวลาที่ใช้ในการเขียนสิ่งต่าง ๆ จะเป็นไปตามแนวทางของการใช้ประโยชน์จากการใช้ฮาร์ดแวร์ที่ทำเพื่อคุณ ไม่ต้องพูดถึงว่าอะไรก็ตามที่คุณทำในฮาร์ดแวร์จะต้องมีการวางแผนอย่างรอบคอบเหนือสิ่งต่าง ๆ นอกจากนี้ฉันสงสัยว่าคุณกำลังดูโปรโตคอลระดับสูงอื่น ๆ เช่น ISO14229 หรือ OSEK / Autosar NetworkManagement ต้องการหรือไม่
Eric M

2

เราใช้PIC18F25K80 แม้ว่าจะไม่มี DSP แต่ก็มีปริมาณ ~ $ 2 มันเกือบจะเป็นตัวทดแทนโดยตรงสำหรับ PIC18F2480 ที่คุณพูดถึง เราใช้คอมไพเลอร์CCSและสแต็คซอฟต์แวร์ของพวกเขาสำหรับ CAN ซึ่งอาจถูกพอร์ตจาก Microchip มันทำงานได้ดีสำหรับทุกสิ่งที่ฉันต้องการและพยายาม


ไม่ได้ค้นหา ECAN ชื่อ Silly Microchip แต่ฉันจะต้องอ่านให้ละเอียดมากขึ้นในครั้งต่อไป! อย่างที่ฉันพูดความต้องการในการประมวลผลสัญญาณของฉันต่ำดังนั้นฉันไม่คิดว่าฉันต้องการ DSP ที่แท้จริง
Kevin Vermeer

2

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

ฉันอาจจะใช้ไมโครคอนโทรลเลอร์กับโมดูล CAN และส่งเพิ่มอีก $ 2 หรือคุณคิดเกี่ยวกับโปรโตคอลอื่นที่เข้ากันได้กับ UART เช่นModbus over RS-485หรือไม่


คุณอ่านถูกต้องแล้ว ฉันอ่านหนังสือฝึกอบรมเกี่ยวกับ CAN อย่างละเอียดแล้ว ดูเหมือนว่าทุกข้อความจะต้องมีการประมวลผลล่วงหน้าสำหรับ CRC แต่ส่วนที่เหลือของแพ็กเก็ตควรเหมือนกันและฉันจะต้องตรวจสอบสายรับเพื่อหาข้อขัดแย้ง มันไม่ยากอย่างที่คนอื่นคิด แต่ฉันจะทำตามคำแนะนำของคุณ
Kevin Vermeer

ฉันชอบ Modbus เหนือความคิด RS485 แต่ ปรากฏว่าตัวรับส่งสัญญาณส่วนใหญ่เป็นแหล่งจ่ายไฟ 5V ฉันรู้สึกว่ามันจำเป็นต้องมีแรงดันไฟฟ้าอินพุต +/- เช่น RS232 จะต้องดูว่า
Kevin Vermeer

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

1
@EricM - อัตราบิตคืออะไรและคุณสามารถใช้ข้อมูลจำเพาะ CAN แบบเต็มในซอฟต์แวร์ได้หรือไม่ ฉันชอบที่จะเห็นรหัส PIC18F สำหรับสิ่งนี้
Rocketmagnet

ใช่ใช้ข้อมูลจำเพาะ CAN แบบเต็มในลักษณะที่ไม่ซ้ำซ้อนกับโมดูล ECAN ใน dsPIC ซึ่งดูแลหลายด้าน ในการใช้งาน PIC18 ฉันกระแทกบัสกับข้อมูลจำเพาะเต็มรูปแบบและภายหลังและรหัสนี้จะทำงานใน dsPIC โดยใช้บรรทัด GPIO ฉันจะอัปเดตในอีกสองสามวันด้วยลิงก์ไปยังรหัส
Eric M

0

ฉันกำลังคิดเกี่ยวกับ CAN-Protocol ที่ต่อสู้กับบิตใน PIC µC ดังนั้นโปรด EricM ถ้าคุณทำอย่างนั้นจริงๆโปรดตอบกลับและบอกอย่างน้อยว่าบิตเรตที่ความถี่หลักของ PIC18F หรือ DSPic ที่คุณได้รับคืออะไร ขอบคุณ!

โดยทั่วไป: RS 485 จะเป็นทางออกสำหรับปัญหาที่ถามหลัก แต่ก็เป็นไปได้ที่จะใช้ CAN- (หรือแม้กระทั่ง FlexRay) - ตัวรับส่งสัญญาณที่มีการสื่อสาร UART ที่ไม่ใช่แบบดูเพล็กซ์ (จุด 2 จุด) เป็นโปรโตคอลทั้งหมด ใช้การเข้ารหัส NRZ

แต่ในฟูลดูเพล็กซ์ UART / V24 / RS232 ส่วนใหญ่จะใช้โดยไม่ต้องคิดถึงรายละเอียดดังนั้นบางทีคุณอาจจำเป็นต้องใส่สมองลงใน superloop หรือ statemachine ในใบสมัครของคุณ ...

แต่กลับไปที่ CAN-bitbanging: ฉันทำงานกับ CAN มาหลายปีแล้วและไม่เคยเห็นการใช้งาน bitbanging แต่เท่าที่ฉันจะคิดได้มันควรจะทำงานกับบิตไทม์ tp 100kBit ด้วย µC สมัยใหม่เช่น DSPic หรือ ARM เป็นต้น (มีแกนที่ 80MHz หรือสูงกว่า ... )

อย่างน้อยถ้าอ่านอย่างเดียวเท่านั้นถือว่า ... การส่งอาจหมายถึงค่าใช้จ่ายในการจัดเตรียมโครงสร้างบิตเพื่อให้ไม่สามารถเข้าถึงบัสโหลดได้ 100% แต่ใน CAN มากกว่า 65% นั้นหาได้ยาก ...


2
ยินดีต้อนรับสู่ StackExchange วิศวกรรมไฟฟ้า ส่วนแรกของคำตอบของคุณไม่ใช่คำตอบจริงๆดังนั้นคุณจึงถามคำถามใหม่ถ้านั่นคือสิ่งที่คุณต้องการ OP ถามโดยเฉพาะเกี่ยวกับการใช้งานซอฟต์แวร์ของโปรโตคอล CAN และคำตอบของคุณดูเหมือนจะเดินไปรอบ ๆ โดยไม่ต้องตอบคำถามนั้น โปรดพยายามอยู่ในหัวข้อคำถาม
Joe Hass
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.