İçindekiler:
- Adım 1: PCB'yi tasarlama
- Adım 2: Protokolü Tasarlamak
- Adım 3: Bellenimi Tasarlama
- Adım 4: Akış Koduyla Arayüz Oluşturma
- Adım 5: Diğer Arayüzleme Yöntemleri
- Adım 6: Bitmiş Ürün
Video: Yerleşik Evrensel Arayüz Kartı - USB/Bluetooth/WIFI Kontrolü: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Cihaz veri sayfasına dayalı olarak sıfırdan yeni gömülü modüller için kitaplıklar oluşturduğumu sık sık buluyorum. Kitaplığı oluştururken, işlerin çalışmasını ve hatasız olmasını sağlarken bir kod, derleme, programlama ve test döngüsünde sıkışıp kaldığımı görüyorum. Genellikle derleme ve program süreleri, kodu düzenlemek için gereken süreden çok daha uzun olabilir ve bu nedenle, geliştirme sırasında bu adımları kesmenin bir yolu çok kullanışlı olacaktır.
Ayrıca sık sık gömülü bir modülü bir PC ile arayüzlemek istediğimi görüyorum. Modülün özel olarak bir USB bağlantısı yoksa ki bu genellikle böyledir, o zaman genellikle sadece SPI veya sadece I2C gibi tek bir işi yapacak olan overpriced bir USB dönüştürücü satın almanız gerekir.
Bu nedenlerden dolayı evrensel arayüz kartını oluşturmaya karar verdim. Gömülü modüller ile kolay PC tabanlı iletişime izin verecek şekilde tasarlanmıştır.
Yerleştiğim anakartın gömülü arayüz özellikleri arasında.
- Dijital G/Ç
- I2C
- SPI
- UART
- PWM
- Servo Motor
- ADC girişi
- DAC çıkışı
Hepsi tamamen bağımsız olarak kullanılabilir.
Arayüz kartı, PC'ye bir USB bağlantısı aracılığıyla kontrol edilebilir, ancak kartın uzaktan veya IoT tipi bir senaryoda kullanılmasına izin vermek için isteğe bağlı WIFI veya Bluetooth modül bağlantılarına da sahiptir.
Standart 2,54 mm aralıklı SIL başlıklarını kullanarak, hızlı, güvenilir ve lehimsiz bağlantılara izin vererek, kart ile gömülü modül arasında dişi dupont kabloları doğrudan bağlamak mümkündür.
CAN, LIN, H-bridge vb. eklemeyi de düşündüm ama bunlar belki daha sonra v2 revizyonu ile gelebilir.
Adım 1: PCB'yi tasarlama
PCB'yi tasarlarken işleri olabildiğince basit tutmaya çalışıyorum. Kartları elle oluşturacağınız zaman, bileşenleri yalnızca belirli bir amaca yönelik olduklarında eklemek ve mikrodenetleyicinin mümkün olduğunca çok dahili özelliğini kullanmak önemlidir.
Tercih ettiğim elektronik tedarikçisine baktığımda, aradığım özelliklere sahip ve makul bir maliyetle rahat ettiğim bir çip buldum. Bulduğum çip PIC18F24K50 idi.
Mevcut 23 I/O pini ile bu bana bu özellikleri sağladı
- Dijital G/Ç
- I2C
- SPI
- UART
- PWM x 2
- Servo Motor x 6
- ADC girişi x 3
- DAC çıkışı x 1
- 5V veya 3V3'ten sürülen I/O
- Durum LED'i
Seçtiğim IC'nin bir dezavantajı, yalnızca bir UART çevre birimine sahip olması ve bu nedenle Bluetooth veya Wifi kontrol yöntemini kullanmak, UART bağlantısını kullanmanızı engelleyecektir.
Yukarıdaki resimlerde gösterilen bitmiş şematik ve PCB'dir.
Adım 2: Protokolü Tasarlamak
Protokolü tasarlamanın ilk adımı, yapabilmek için tahtaya özellikle ihtiyaç duyacağınıza karar vermektir. Bir şeyleri parçalamak daha iyi bir kontrol seviyesi sağlarken, şeyleri bir araya getirmek arayüzü basitleştirir ve kart ile bilgisayar arasındaki iletişim trafiğini azaltır. Bu bir denge oyunu ve mükemmelleştirilmesi zor.
Kartın her işlevi için herhangi bir parametre ve getiri belirtmelisiniz. Örneğin, bir ADC girişini okuyacak bir işlev, hangi girişin örnekleneceğini belirten bir parametreye ve sonucu içeren bir dönüş değerine sahip olabilir.
Tasarımımda, dahil etmek istediğim işlevlerin listesi:
-
Dijital G/Ç
- SetPin (PinNumarası, Durum)
- Durum = GetPin (PinNumber)
-
SPI
- Başlat (SPI Modu)
- DataIn = Aktar (DataOut)
- ControlChipSelect (Kanal, Durum)
- SetPrescaler (Oran)
-
I2C
- Başlat ()
- Başlangıç ()
- Tekrar başlat ()
- Durmak ()
- SlaveAck = Gönder (DataOut)
- DataIn = Alma (Son)
-
UART
- Başlat()
- TX Baytı (Veri Çıkışı)
- BytesAvailable = RX Sayısı ()
- DataIn = RX Bayt ()
- SetBaud (Baud)
-
PWM
- Etkinleştir (Kanal)
- Devre Dışı Bırak (Kanal)
- SetFrequency (Kanal, Frekans)
- GetMaxDuty (Görev)
- SetDuty (Görev)
-
Servo
- Etkinleştir (Kanal)
- Devre Dışı Bırak (Kanal)
- SetPosition (Kanal, Konum)
-
ADC
ADCsample = Örnek (Kanal)
-
DAC
- Olanak vermek
- Devre dışı bırakmak
- SetOutput (Voltaj)
-
WİFİ
- SetSSID (SSID)
- Parola Belirle (Parola)
- Durum = CheckConnectionStatus ()
- IP = GetIPAdresi ()
Parametreler parantez içinde, dönüşler ise eşittir sembolünden önce gösterilir.
Kodlamaya başlamadan önce her fonksiyona 128'den (ikili 0b10000000) başlayan ve yukarı doğru çalışan bir komut kodu atadım. Kafam koda girdikten sonra tekrar başvurmak için güzel bir belgem olduğundan emin olmak için protokolü tamamen belgeliyorum. Bu proje için tam protokol belgesi ektedir ve gelen komut kodlarını ve bit genişliklerini içerir.
Adım 3: Bellenimi Tasarlama
Protokol bir kez oluşturulduktan sonra, donanım üzerinde işlevselliğin uygulanması söz konusudur.
Donanım yazılımını anlamak ve hata ayıklamak için basit tutarken potansiyel komut ve veri çıktısını denemek ve en üst düzeye çıkarmak için bağımlı sistemler geliştirirken basit durum makinesi tipi bir yaklaşım benimsiyorum. Diğer bağlı cihazlarla daha iyi etkileşime ihtiyacınız varsa, bunun yerine Modbus gibi daha gelişmiş bir sistem kullanılabilir, ancak bu, işleri yavaşlatacak ek yük getirir.
Durum makinesi üç durumdan oluşur:
1) Komutları beklemek
2) Parametrelerin alınması
3) Yanıtla
Üç durum aşağıdaki gibi etkileşime girer:
1) En anlamlı bit kümesine sahip bir bayta sahip olana kadar arabellekteki gelen baytları gözden geçiririz. Böyle bir bayt aldığımızda, onu bilinen komutlar listesine göre kontrol ederiz. Bir eşleşme bulursak, parametre baytlarının sayısını atarız ve protokolle eşleşmesi için baytları döndürürüz. Parametre baytı yoksa, buradaki komutu uygulayabilir ve durum 3'e geçebilir veya durum 1'i yeniden başlatabiliriz. Parametre baytı varsa, durum 2'ye geçiyoruz.
2) Tüm parametreleri depolayana kadar gelen baytları kaydederek geçiyoruz. Tüm parametrelere sahip olduktan sonra komutu uyguluyoruz. Eğer dönüş baytı varsa 3. aşamaya geçiyoruz. Gönderilecek dönüş baytı yoksa 1. aşamaya dönüyoruz.
3) Gelen baytları inceleriz ve her bayt için geçerli bir dönüş baytı ile yankı baytının üzerine yazarız. Tüm dönüş baytlarını gönderdikten sonra 1. aşamaya dönüyoruz.
Ne yaptığımı görsel olarak güzel bir şekilde gösterdiği için bellenimi tasarlamak için Flowcode kullandım. Aynı şey Arduino veya diğer gömülü programlama dillerinde de eşit derecede iyi yapılabilir.
İlk adım, PC ile iletişim kurmaktır. Bunu yapmak için mikronun doğru hızda çalışacak şekilde yapılandırılması gerekiyor ve USB ve UART çevre birimlerini sürmek için kod eklememiz gerekiyor. Flowcode'da bu, Comms bileşen menüsünden bir USB Seri bileşenini ve bir UART bileşenini projeye sürüklemek kadar kolaydır.
UART'ta gelen komutları yakalamak için bir RX kesmesi ve arabelleği ekliyoruz ve düzenli olarak USB'yi yoklıyoruz. Daha sonra boş zamanlarımızda tamponu yapabiliriz.
Flowcode projesi ve oluşturulan C kodu ektedir.
Adım 4: Akış Koduyla Arayüz Oluşturma
Flowcode simülasyonu çok güçlüdür ve panoyla konuşmak için bir bileşen oluşturmamıza olanak tanır. Bileşeni oluştururken, bileşeni projemize sürükleyip anında pano işlevlerini hazır hale getirebiliriz. Ek bir avantaj olarak, simülasyonda SPI, I2C veya UART çevre birimine sahip mevcut herhangi bir bileşen kullanılabilir ve iletişim verileri bir Enjektör bileşeni aracılığıyla Arayüz Kartına iletilebilir. Ekli resimler, ekrana bir mesaj yazdırmak için basit bir program göstermektedir. Arayüz Kartı aracılığıyla gerçek ekran donanımına gönderilen iletişim verileri ve I2C Ekran, I2C Enjektör ve Arayüz Kartı bileşenleri ile bileşen kurulumu.
Flowcode 8.1 için yeni SCADA modu, Flowcode simülatöründe bir şeyler yapan bir programı alıp, herhangi bir lisans sorunu olmadan herhangi bir PC'de tek başına çalışacak şekilde dışa aktarabilmemiz için mutlak bir ek avantajdır. Bu, test donanımları veya sensör kümeleri gibi projeler için harika olabilir.
Bu SCADA modunu, modülün IP adresini toplamanın yanı sıra SSID ve şifreyi yapılandırmak için kullanılabilecek WIFI yapılandırma aracını oluşturmak için kullanıyorum. Bu, USB bağlantısını kullanarak her şeyi ayarlamama ve ardından işler çalışmaya başladığında bir WIFI ağ bağlantısına aktarmama izin veriyor.
Bazı örnek projeler ektedir.
Adım 5: Diğer Arayüzleme Yöntemleri
Flowcode'un yanı sıra, arayüz kartıyla iletişim kurmak için seçtiğiniz programlama dilini hemen hemen kullanabilirsiniz. Flowcode'u, zaten dahil edilmiş ve hemen kullanıma hazır hale getirebileceğimiz bir parça kitaplığına sahip olduğu için kullandık, ancak bu aynı zamanda diğer birçok dil için de geçerlidir.
Arayüz kartıyla iletişim kurmak için kullanılan dillerin ve yöntemlerin bir listesi burada.
Python - Bir COM bağlantı noktasına veya IP adresine veri akışı için bir seri kitaplık kullanma
Matlab - Bir COM bağlantı noktasına veya IP adresine veri akışı için Dosya komutlarını kullanma
C++ / C# / VB - Önceden yazılmış bir DLL kullanarak, doğrudan COM bağlantı noktasına veya Windows TCP/IP API'sine erişin
Labview - Önceden yazılmış bir DLL, VISA Seri bileşeni veya TCP/IP bileşeni kullanma
Yukarıdaki dillerin uygulandığını görmek isteyen varsa lütfen bana bildirin.
Adım 6: Bitmiş Ürün
Bitmiş ürün, muhtemelen önümüzdeki yıllarda gömülü araç kitimde öne çıkan bir özellik olacak. Çeşitli Grove ekranları ve sensörleri için bileşenler geliştirmeme şimdiden yardımcı oldu. Artık herhangi bir derleme veya programlama maskaralığına başvurmadan önce kodu tamamen çivileyebilirim.
Hatta iş akışlarını geliştirebilmeleri için meslektaşlarıma bazı panolar dağıttım ve bunlar çok iyi karşılandı.
Eğitilebilirliğimi okuduğunuz için teşekkürler Umarım faydalı bulmuşsunuzdur ve umarım üretkenliğinizi hızlandırmak için kendi araçlarınızı yaratmanız için size ilham verir.
Önerilen:
Orange Pi Plus 2 - Armbian (SD kartta veya Yerleşik 16GB Bellekte!) - Güncelleme: 6 Adım
Orange Pi Plus 2 - Armbian (SD kartta veya Onboard 16GB Bellekte!) - Güncelleme: Herkese merhaba! Bu benim ilk Eğitilebilir dersim ve İngilizce benim ana dilim değil, bu yüzden lütfen beni zorlama. Başlangıç olarak, Orange Pi Plus 2, tıpkı bir Raspberry Pi gibi ama daha hızlı harika bir küçük cihazdır! Raspberry Pi için büyük bir topluluk var
Arduino Kartı Kullanarak Bir AVR Kartı Nasıl Programlanır: 6 Adım
Arduino Kartı Kullanarak Bir AVR Kartı Nasıl Programlanır: Ortalıkta bir AVR mikrodenetleyici kartınız var mı? Programlamak zor mu? Pekala, doğru yerdesin. Burada, bir Arduino Uno kartını programlayıcı olarak kullanarak bir Atmega8a mikrodenetleyici kartının nasıl programlanacağını göstereceğim. Yani uzatmadan
ATmega32 ve LCD Ekranlı Sıcaklık Sensörü (LM35) Arayüz - Otomatik Fan Kontrolü: 6 Adım
ATmega32 ve LCD Ekranlı Sıcaklık Sensörü (LM35) Arayüz | Otomatik Fan Kontrolü: ATmega32 ve LCD Ekranlı Sıcaklık Sensörü (LM35) Arayüz
20 Saat 20 $'lık Masa Üstü Arcade İnşa Edilmiş Yüzlerce Oyun İçeren Yerleşik: 7 Adım (Resimlerle)
20 Saat 20 $ Yerleşik Yüzlerce Oyunla Masa Üstü Arcade İnşa Etme.: Bir süredir böyle bir şey yapmak istiyordum ama her zaman yapacak çok sayıda başka proje için acelem yoktu. Acelem olmadığı için, yapı için gerekli tüm bileşenleri ucuz fiyatlarla biriktirene kadar bekledim. İşte
Evrensel Kulaklık/Kulaklık Ses Kontrolü: 8 Adım (Resimlerle)
Evrensel Kulaklık/Kulaklık Ses Kontrolü: Hong Kong'dan bir PMP (Taşınabilir Medya Oynatıcı) satın aldım, böylece NES oyunlarımı uygun olan her yerde yerleşik emülatörle oynayabilirim. Uzun yolculuklar, uçuşlar, bekleme salonları vb. taşınabilir medya ile zaman öldürmeyi sevdiğim yerlerdir ama