PDA (Pocket Travel Computer): Circuitry GPS logger

Proyek hobi saya adalah pencatat GPS . Komentar itu bahkan menyarankan menyebutnya "Trip Computer", sebagai Logging hanya sebagian kecil dari semua kemampuan perangkat. Banyak yang sudah dilaksanakan, tetapi sebagian besar belum dilakukan.

Pada artikel sebelumnya, saya menggambarkan transisi dari arduino ke STM32 , STMCube / HAL , berbicara sedikit tentang sistem build , bootloader , membangun perangkat USB komposit dan memompa kecepatannya . Semua ini dilakukan pada papan tempat memotong roti berdasarkan papan STM32F103CB pil biru dan landak dari kabel. Sudah waktunya bagi perangkat untuk mengambil bentuk, baik elektronik (sirkuit) dan fisik (tubuh).



Masalah yang harus saya selesaikan pada tahap ini sangat saling terkait. Saat memilih komponen untuk suatu proyek, Anda perlu membayangkan perumahan mana yang bisa mereka tempati. Dan sebaliknya, kasing harus dibuat untuk komponen yang tersedia dan papan, yang, sekali lagi, harus dilakukan dengan memperhatikan kasing. Secara umum, kusut masalah yang saling berhubungan. Anda dapat, tentu saja, mengambil kotak yang lebih besar dan mendorong apa pun di sana, tetapi Anda menginginkan sesuatu yang ringkas dan ringan.

Sebelum memulai segera saya ingin mencatat bahwa ini bukan versi terakhir perangkat. Kemungkinan besar akan ada kesalahan dalam skema, sesuatu tidak akan berfungsi sebagaimana dimaksud, dalam komentar mereka akan menunjukkan solusi yang lebih benar, beberapa pendekatan akan dipikirkan kembali. Saya berpikir bahwa versi kedua atau bahkan ketiga perangkat tidak dapat dihindari. Karena itu, saya akan senang dengan komentar konstruktif Anda.

Di bawah potongan, ia multi-manik-manik, tetapi itu akan menjadi rekayasa.

Apa dan mengapa


Pencatat GPS Holux M241 adalah teman setia saya di semua perjalanan. Dia telah bersama saya selama ribuan kilometer. Track yang ditulis logger terutama digunakan untuk membuat geotag pada foto, tetapi rute itu sendiri juga menarik. Sangat menyenangkan mengetahui seberapa cepat Anda bermain ski, rute apa yang diterbangkan pesawat Anda, pemandangan apa yang baru saja muncul di luar jendela bus. Di sini saya melakukan review kecil dari perangkat ini.

Sayangnya, kemampuan perangkat ini sudah lama tidak cocok untuk saya: Saya lelah bermain-main dengan baterai yang selalu duduk di saat yang paling tidak tepat. Ada juga kecepatan USB yang sangat rendah, sejumlah kecil flash internal, mekanisme yang tidak nyaman untuk menggabungkan trek, sedikit informasi yang tersedia di layar, akurasi rendah, odometer yang sangat primitif, tidak ada informasi tentang satelit, dan banyak lagi.

Ya, orang dapat mencari apa yang ditawarkan pelacak modern - pasti sudah ada perangkat yang dijual yang memenuhi persyaratan saya. Tapi ini adalah hobi, saya ingin mencoba melakukan sesuatu yang kompleks, menarik, bermanfaat dan perlu sendiri. Biarlah, bahkan jika hanya saya yang akan menggunakannya.

Tujuan dari proyek ini secara keseluruhan adalah untuk membuat perangkat serupa dalam sesuatu, hanya diisi dengan Wishlist saya. Pada artikel pertama dalam seri ini, saya merinci persyaratan untuk perangkat ini. Singkatnya, saya ingin melakukan hal berikut:

  • Daur ulang sistem daya, transfer ke baterai lithium
  • memasang tampilan yang lebih informatif
  • GPS lebih akurat
  • perluas flash dengan kartu SD
  • tambahkan kompas dan akselerometer
  • Saya juga ingin mendesain ulang sistem logging untuk memuntahkan trek dalam format yang saya butuhkan.

Selain persyaratan teknis dan Wishlist, ada juga yang non-teknis (non-fungsional). Jadi saya ingin memompa dalam menciptakan perangkat yang kompleks dari awal, untuk mencari tahu bagaimana berbagai komponen elektronik bekerja, cara memprogramnya, cara membuat papan dan mendesain kasing.

Mengapa Anda memerlukan perangkat terpisah jika semua ponsel modern memiliki GPS, layar besar dan banyak memori? Yah, pertama-tama, saya tidak yakin bahwa ponsel dengan GPS aktif dalam mode perekaman trek dapat bertahan sepanjang hari. Saya tidak ingin tinggal di negara asing tanpa telepon. Juga, saya pribadi menggunakan perangkat terpisah hanya lebih nyaman.

Mungkin seiring waktu, konsep perangkat akan berubah. Jadi, misalnya, sekarang menjadi semakin dan semakin logis untuk meninggalkan layar dan terhubung ke ponsel melalui bluetooth, dan melakukan semua trik logika pada ponsel. Gagasan ini sangat kuat dan menggoda. Tetapi pada tahap ini, saya masih ingin memiliki tampilan - saya selalu punya waktu untuk meninggalkannya.

Untuk satu setengah tahun pertama, saya mengembangkan perangkat pada berbagai jenis papan debug (arduino nano pertama, kemudian STM32F103 pil biru, kemudian STM32F407VE). Saya harus menghubungkan periferal pada kabel dan membeli modul. Akibatnya, landak yang terbuat dari kabel muncul di atas meja, yang tidak berhasil menguji penerimaan GPS di jalan - kadang-kadang Anda bahkan tidak bisa memindahkan kabel tanpa memutus koneksi di suatu tempat. Dan kemudian senang debugging.

Setiap kali, duduk untuk menulis fungsionalitas yang berguna, saya menghadapi kenyataan bahwa beberapa bagian lain dari sistem berhenti bekerja secara normal dan harus menghabiskan berjam-jam men-debug sesuatu yang sama sekali tidak terkait. Jadi, misalnya, komponen terpenting dari sistem - penerima GPS - pada akhirnya menjadi yang paling tidak berkembang, karena Saya harus pergi ke USB debug, kartu SD, mengatur perpustakaan, dan sebagainya.

Akhirnya, saya bosan dan memutuskan untuk membuat papan debugging - ini akan menjadi topik artikel hari ini. Tujuan yang saya tetapkan untuk diri saya sendiri di bagian proyek ini adalah sebagai berikut:

  • Buat papan debug yang tidak akan memiliki masalah dengan komponen non-kontak
  • Tentukan solusi teknis dan skematis utama
  • Secara kasar tentukan komponen yang akan saya gunakan selanjutnya
  • Secara kasar tentukan tata letak dan bodinya
  • Rangkaian harus cukup umum untuk dapat bereksperimen dengan berbagai komponen dan modenya

Dan meskipun tujuan utamanya adalah perangkat baterai yang ringkas, hari ini saya tidak akan melakukan hal-hal seperti itu

  • mode daya fine tuning
  • pengaturan konsumsi
  • mode tidur


Saya akan berurusan dengan pengaturan konsumsi ketika papan dan kode utama siap. Ngomong-ngomong, tentang kode hari ini juga tidak akan, tapi saya pasti akan kembali ke pertanyaan ini karena akan ada bahan yang cukup menarik.

Komponen


Mari kita mulai dengan komponen dan periferal. Sepanjang jalan, kami akan memperkirakan jumlah kaki mikrokontroler yang akan diperlukan untuk menghubungkan kebun binatang ini, serta parameter daya. Karena itu adalah proyek hobi yang saya pilih komponen dari apa yang benar-benar dapat saya beli di toko / ebay / ali, dan juga dari apa yang bisa disolder di rumah (well, juga dari apa yang sudah ada dalam stok pribadi saya). Mungkin beberapa sirkuit mikro spesifik dapat memecahkan masalah dengan lebih baik, tetapi masalah keterjangkauan dan harga penting bagi saya.

  • Komponen utama pencatat GPS, tentu saja, adalah penerima GPS . Dalam kasus saya, ini adalah Beitian BN-880 yang ditipu berdasarkan chip UBlox M8N. Kompas pada chip HMC5883L juga terintegrasi dalam modul.

    Koneksi: 2 pin UART untuk GPS dan 2 pin I2C untuk kompas
    Catu Daya: Dari 2.7V
    Konsumsi: 50mA

    • Juga memesan modul Beitial BN-220 . Tidak memiliki kompas, tetapi antena lebih kompak (20x20mm dibandingkan 30x30). Yang benar masih belum jelas bagaimana ini akan mempengaruhi kualitas penerimaan. Perlu diuji. Tetapi, dilihat dari datasheet, modul ini dapat bekerja dari 1.4V, yang seharusnya memiliki efek positif pada waktu pengoperasian perangkat.
    • Di sini, pada kenyataannya, semuanya entah bagaimana berlumpur. Tampaknya bahwa BN-880 didasarkan pada UBlox M8N, sedangkan BN-220 didasarkan pada U-blox M8030-KT. Tetapi dalam beberapa sumber tergelincir bahwa itu tampaknya menjadi hal yang sama. Lebih tepatnya, M8N adalah modul, dan M8030-KT adalah chipset di dalamnya. Saya prihatin dengan masalah daya dalam kebingungan ini - M8N diumumkan dari 2.7V, sedangkan M8030-KT berasal dari 1.4V.
    • Sebagai alternatif, saya juga memiliki modul SIM868 . di mana selain GPS ada juga modul GSM / GPRS dan Bluetooth. Sementara itu menakutkan dengan trickiness dan kompleksitas koneksi. Anda harus bermain dengan papan debug terlebih dahulu.
  • Perbedaan utama antara perangkat dan "hanya kotak hitam" adalah kehadiran layar . Pada prototipe pertama, saya menghubungkan layar melalui I2C, tetapi beban bus sekitar 25%. Tetapi intinya tidak bahkan dalam rasio persentase, tetapi pada kenyataan bahwa transfer buffer layar memakan waktu sekitar 25 ms, di mana tidak mungkin untuk berkomunikasi dengan perangkat lain di bus. Ini bisa menjadi masalah, jadi Anda harus meletakkan monitor di bus I2C yang terpisah, atau mempertimbangkan untuk terhubung melalui SPI

    Koneksi: 2 kabel I2C atau 3 kabel SPI (tampilan tulis saja, oleh karena itu garis MISO tidak digunakan, tetapi sinyal Data / Perintah terpisah digunakan)
    Catu Daya: 3V
    Konsumsi: 25mA
  • Untuk mengontrol perangkat, saya akan menggunakan 2 tombol yang masing-masing menempati 2 kaki prosesor
  • Di perangkat asli (Holux M241, dari mana saya awalnya menyalin fungsionalitas), tidak mungkin untuk menonton trek pada titik waktu yang sewenang-wenang. Itu perlu untuk menghubungkan perangkat ke komputer dan menggabungkan data dengan program khusus. Menurut saya, kemampuan menonton trek di ponsel atau tablet kapan saja akan sangat populer. Untuk ini, saya membeli modul Bluetooth HM-13 . Modul ini dipilih karena memiliki SPP selain BLE.

    Koneksi: 2 kabel UART, 1 kawat status (terhubung / tidak terhubung)
    Catu Daya: 2.5V - 3.9V
    Konsumsi: 50mA (meskipun angka 13mA tepat di sebelah lembar data. Mungkin ini adalah nilai puncak dan rata-rata)
  • Seperti yang saya katakan, tidak masuk akal untuk menghidupkan receiver jika Anda hanya duduk untuk beristirahat atau makan di kafe. Oleh karena itu, saya memutuskan untuk menambahkan accelerometer MMA8452 dan menggunakannya untuk menentukan apakah perangkat sedang diam atau kami bergerak ke suatu tempat.

    Koneksi: 2 kabel I2C, 1 kabel untuk gangguan
    Catu daya dari 2V ke 3.6V dengan beberapa konsumsi mikroskopis
  • Trek GPS akan direkam pada kartu SD . Saya sudah mencoba menggunakan kartu dalam mode SPI dan ini, dengan kata lain, lambat. Terutama pada catatan. Mode yang benar untuk kartu SD - SDIO

    Koneksi: 6 kabel
    Catu Daya: Dari 1.8V
    Konsumsi tidak diketahui, tetapi saya pikir tidak lebih dari 20mA
  • Untuk menghemat energi, masuk akal untuk mematikan daya perangkat yang saat ini tidak digunakan. Jadi dekat setiap konsumen saya akan memakai transistor , yang saya akan mengontrol sinyal terpisah dari mikrokontroler

    Koneksi: 5 sinyal, satu kaki per konsumen (GPS, Bluetooth, akselerometer, kartu SD, layar)

    UPD berdasarkan komentar. Menonaktifkan accelerometer tidak masuk akal - sudah memiliki konsumsi satu sen. Beberapa perangkat kemungkinan besar akan selalu berfungsi (misalnya, kartu SD) - di masa depan saya akan dapat menghapus transistor ini. Beberapa perangkat (seperti GPS) dapat memutuskan koneksi sendiri berdasarkan perintah dari antarmuka. Jika menurut hasil tes bagian ini akan berfungsi dengan baik - Saya juga akan menolak transistor eksternal. Sementara itu, saya membuat total biaya maksimum yang mungkin, biarkan semua transistor ini. Apalagi saya belum memutuskan pinggiran.
  • LED dua warna untuk tampilan status (bagaimana tanpa LED yang berkedip?). Itu mungkin untuk menempatkan tri-warna, tapi sejauh ini saya tidak melihat kebutuhan.

    Koneksi: 2 pin
    Konsumsi: 10mA
  • Selain Bluetooth, mekanisme yang lebih klasik untuk menggabungkan lagu akan diimplementasikan - melalui USB . Untuk ini, 4 baris akan terlibat - pasangan diferensial untuk data, 1 pin untuk mendeteksi bahwa perangkat dicolokkan ke USB, dan pin lain untuk koneksi logis (mengapa saya membutuhkan 2 pin ini akan saya jelaskan di bawah)
  • Nafsu makan datang dengan makan. Karena saya mulai mendorong semua yang ada di perangkat impian saya, mengapa tidak menambahkan tweeter ? Nah, atau motor getaran . Saya belum menemukan case pengguna.

    Koneksi: 1 kawat
  • Perangkat masih perlu dihidupkan. Sementara chip PT1502 melihat saya sebagai pengisi daya baterai lithium dan pengontrol daya . Untuk berkomunikasi dengan sirkuit mikro, Anda harus menggunakan 2 kabel: satu untuk manajemen daya, yang lain untuk sinyal tentang baterai mati. Untuk kepentingan, dimungkinkan untuk mengukur tegangan baterai menggunakan saluran lain.
  • Tentu saja, muatan baterai lithium tidak tepat untuk diukur berdasarkan tegangan. Oleh karena itu, saya menambahkan chip meteran daya INA219 khusus

    Tegangan suplai: 3-5V, rekomendasikan 3.3V
    Koneksi: 2 kabel I2C

    Seperti yang akan dilihat di bawah, tegangan suplai 3V menciptakan beberapa ketidaknyamanan dalam koneksi. Saya lebih suka chip counter untuk didukung dari 2.7V atau lebih rendah. Tetapi setelah melalui beberapa opsi berdasarkan harga / kasus / ketersediaan, saya masih tidak menemukan apa pun di 2.7V. Saya akan berterima kasih atas bantuannya.
  • Tetap hanya untuk menyediakan antarmuka debugging SWD (3 kabel) dan UART debugging (2 kabel lebih)

Saya selalu tertarik pada pertanyaan mengapa pengontrol dengan sejumlah besar port diperlukan, dan saya dengan mudah menghitung 39 cakram yang diperlukan untuk fungsionalitas saya. Dan itu tidak termasuk kuarsa, reset, dan daya. Dan ada ide untuk apa yang harus dilakukan dengan selusin lebih (misalnya, layar dapat dihubungkan melalui antarmuka paralel Intel 8080 atau Motorola 6800).

Anda tentu saja dapat mengacaukan port eksternal I2C untuk mengurangi jumlah kaki yang digunakan. Tapi pertama, ini adalah komponen tambahan di papan, kedua, bagian perangkat lunak menjadi jauh lebih rumit, dan ketiga, mikrokontroler kecil masih memiliki sedikit memori, dan di mana ada cukup memori, ada juga cukup banyak port. Jadi saya tidak melihat alasan untuk menyulitkan semuanya - biarkan ada 39 baris.

Nutrisi


Dengan catu daya, tidak semuanya jelas. Anda mungkin dapat menyalakan semua perangkat dari 3.3V dan tenang. Tapi kami, bagaimanapun, akan membuat perangkat mobile, yang berarti kita perlu memikirkan penghematan energi. Jadi, Anda perlu mencoba untuk memilih tegangan suplai yang lebih kecil. Di bawah ini saya akan memperkirakan penghematan jenis apa yang dapat Anda coba capai.

Berikut adalah data untuk semua perangkat di piring - dalam formulir ini lebih mudah untuk memilih domain daya yang akan dihubungkan ke perangkat ini atau itu.

PerangkatRentang dayaDomain kekuatankomunikasi
CPU2 - 3.6V2V
Akselerometer2 - 3.6V2VI2C
Kartu sd1.8V atau 3.6V2VSDIO
Tampilan1.65 - 3.3V
atau 3 - 5V
2VI2C atau SPI
GPS2.7 - 5.5V
atau dari 1.4V
2.7VUART
Bluetooth2,5 - 3,9V2.7VUART
Pengukur Daya (INA219)3 - 5.5V3vI2C
Bel3V - 5VVbat

Dari pelat mudah untuk melihat bahwa beberapa perangkat dapat beroperasi dari tegangan yang cukup rendah (dari 1.8V). Yang lain dapat bekerja dengan nyaman dari 2.7V. Akhirnya, perangkat yang tersisa di bawah 3V tidak dapat berfungsi. Squeaker, untuk selamanya, umumnya membutuhkan 5V, tetapi bagi saya itu akan didukung oleh tegangan tertinggi - dari baterai, tidak peduli berapa banyak itu.

Dengan kekuatan tampilan belum sepenuhnya dipahami. Dalam deskripsi modul tampilan dengan ali, kisarannya adalah 3 - 5V, sedangkan dalam lembar data pada pengontrol matriks SSD1309 kisarannya adalah 1,65 - 3,3V. Saya berasumsi bahwa 3V diperlukan untuk mengayunkan boost converter pada papan modul display, sementara 1.65V cukup untuk logika. Seperti yang akan dilihat dari diskusi tentang tata letak, masuk akal untuk meninggalkan modul tampilan dan menghubungkan layar secara langsung, yang akan memberi daya pada tampilan dari domain 2B.

Saya memiliki alasan yang sama tentang GPS - sumber yang berbeda menunjukkan voltase pasokan yang berbeda. Sejauh ini, saya tidak memiliki pemahaman tentang modul mana yang akan saya gunakan pada akhirnya, jadi biarkan penerima nongkrong di domain 2.7V.

Dengan kartu SD sama sekali tidak jelas. Spesifikasinya secara tidak jelas mengatakan bahwa secara umum kartu harus ditenagai dari 3.3V, tetapi kartu modern cukup pintar dan dapat memahami bahwa mereka terjebak dalam perangkat bertegangan rendah dan dapat beralih ke daya dari 1.8V. Tetapi mekanisme untuk memilih makanan tidak begitu jelas. Saya akan memberi makan kartu dari 2B dan melihat apa yang terjadi. Itu tidak akan bekerja - itu akan bekerja dari 3V.

Jadi, 4 bus daya tenun - 2V, 2.7V, 3V dan baterai. Saya ingin menempatkan semua konsumen yang makan dan terus-menerus bekerja (dan ini adalah pengontrol dan GPS) pada bus tegangan terendah, tetapi saat ini saya belum memutuskan modul GPS (dan karena itu catu daya - 2 atau 2.7V), yang berarti akan diperlukan semacam solusi universal. Saya akan mencoba memisahkan papan sehingga mudah untuk menerapkan tegangan satu atau yang lainnya.

Dari mana Anda mendapatkan begitu banyak tekanan yang berbeda? Bahkan pada tahap awal proyek, saya melihat sirkuit mikro PT1502 dan bahkan berhasil mencobanya di proyek lain . Selain pengisi daya untuk baterai lithium, rangkaian mikro ini memiliki sebanyak 3 sumber daya - satu pulsa dan 2 sakelar down-linear. Di sini, bagaimanapun, tegangan tidak diatur pada salah satunya dan 3V - Saya akan mencoba untuk memberi daya INA219 dari itu. 2 sumber daya yang tersisa tidak menjadi masalah, karena di sana Anda dapat memilih tegangan.

Memperkirakan konsumsi tidak terlalu berhasil. Konsumsi puncak ditunjukkan dalam lembar data - ini cukup untuk menghitung kekuatan transistor utama, tetapi tidak cukup untuk memperkirakan kapasitas baterai yang diperlukan. Jadi untuk saat ini, saya akan memilih baterai berdasarkan ruang yang tersedia dalam case, dan di sana saya sudah akan mengukur konsumsi sebenarnya.

Mungkin timbul pertanyaan, tetapi bagaimana cara mencocokkan perangkat dengan voltase operasi yang berbeda? Mari kita perbaiki.

  • Semua kaki komunikasi dari mikrokontroler ditandai sebagai Toleransi Lima Volt (kecuali untuk UART2 pada kaki PA2 / PA3), yang berarti bahwa jika tampak 3.3V dari perangkat tegangan tertinggi, tidak ada hal buruk yang akan terjadi
  • Accelerometer, meskipun ditenagai oleh 2V, berpotensi dapat dihubungkan secara paralel dengan perangkat tegangan tinggi di bus. Masalah ini mudah diselesaikan - dengan sirkuit mikro MMA8452Q, Anda dapat secara terpisah memberi daya pada kabel komunikasi dari catu daya lain (melalui perangkat “tegangan tinggi” di bus itu sendiri)
  • Saya akan mencoba memberi daya kartu SD dari tegangan yang sama dengan mikrokontroler, yang berarti saya tidak perlu mengoordinasikan apa pun.
  • GPS dan Bluetooth harus memakan tegangan "rendah" dari mikrokontroler tanpa masalah. Hal yang sama berlaku untuk perangkat “tegangan tinggi” lainnya

Akhirnya, beberapa kata tentang mengapa saya begitu berjuang untuk menurunkan tegangan suplai. Sebuah chip dalam konverter DC-DC berdenyut, yang dapat menukar voltase dengan ampere (tentu saja, jika Anda tidak memperhitungkan kerugian konverter itu sendiri). Untuk lebih tepatnya, tukar tegangan yang lebih tinggi dengan arus yang lebih rendah untuk tegangan yang lebih rendah dan arus yang lebih tinggi. Dalam hal ini, kami lebih tertarik pada alasan terbalik - jika Anda memberi makan beban tegangan rendah melalui DC-DC, maka konsumsi saat ini dari seluruh struktur ini bersama dengan konverter akan lebih rendah daripada konsumsi saat ini dari beban itu sendiri. Nah, karena kapasitas baterai diukur dalam mAh, maka mengurangi konsumsi saat ini akan meningkatkan masa pakai baterai.

Hitung?
, 90%, DC-DC . . , DC-DC .

. 900 4.1 3.5 ( ). DC-DC 90% ( ). 100. .

, 900 100 9 . — 9.3 3.3, 11.4 2.7, 15 2. , , , .

Mikrokontroler


Saya mendekati pertanyaan memilih mikrokontroler dengan serius - saya bermain dengan konfigurator untuk waktu yang lama, menimbang pro dan kontra dari setiap opsi. Saya benar-benar menyukai mikrokontroler STM32, jadi saya tidak melihat titik melihat ke arah pengontrol lain tanpa kebutuhan khusus. Selain itu, di jalur STM32 ada pengontrol untuk setiap selera dan untuk setiap perangkat. Pengalaman yang diperoleh pada tahap sebelumnya dari proyek saya memungkinkan kami untuk mempersempit pilihan controller berdasarkan daftar peripheral, binding perangkat lunak yang sudah ditulis, serta fitur yang ingin saya terapkan di masa depan.

Jadi, cukup jelas bahwa memori 20kb dari STM32F103CB saya benar-benar kecil - tidak ada buffer ukuran yang cukup layak untuk berkomunikasi dengan kartu SD dan USB. Saya bahkan belum mulai menerapkan banyak fungsi yang direncanakan, tetapi sudah memakan waktu lebih dari 19kb. Tetapi dengan kekuatan untuk memproses, ternyata, ini tidak terlalu diperlukan. Jika semua komunikasi dengan periferal didorong ke DMA, maka hanya beberapa persen yang tersisa pada bagian prosesor pusat.

Setelah memperkirakan daftar apa yang saya butuhkan dari controller, saya menghitung yang berikut ini:

  • > = 128kb flash (saat ini sekitar 50k digunakan)
  • > = 40 kb memori (sekarang 19k diambil)
  • > = 40 kaki GPIO (lihat alasan di atas)
  • > = 40MHz (Anda tidak perlu banyak, yang utama adalah konsumsi lebih sedikit)
  • DMA (Saya sangat menyukainya)
  • > = 2x I2C,> = 3x UART,> = 1 SPI
  • SDIO (flash drive melalui SPI sangat lambat)
  • USB Full Speed, High Speed
  • ( )
  • LCD ( FSMC)

STMicroelectornics mikrokontroler hanya selusin sepeser pun - untuk setiap selera, warna dan dompet. Pada awalnya saya mencoba memilih pengontrol untuk melanjutkan dari seri. Penguasa L0 dan F0 terlalu lemah dan tidak cukup memori, S7 dan H7, sebaliknya, terlalu kaya fitur, tidak ada SDIO di L4 (UPD: SDIO adalah, mereka hanya tidak menyebutkannya di halaman judul seri). Di antara seri lainnya, Anda dapat memilih sesuatu berdasarkan kebutuhan saya, karena saya tidak memiliki persyaratan khusus.

Seri STM32WB mengesankan dengan kehadiran Bluetooth, tetapi case VFQFPN68 agak mendinginkan keinginan untuk menggunakannya dalam proyek hobi. Dan saya tidak menemukan pengontrol seperti itu di ritel.

Saya bertujuan pada kasus LQFP64 - cukup dalam jumlah kaki, tetapi tidak terlalu besar pada saat yang sama dan dapat disolder di rumah. Ada baiknya bahwa ada konfigurator CubeMX di mana Anda dapat memilih apa yang Anda butuhkan dengan filter.

Saya memilih pengontrol STM32F103RB karena tiga alasan. Pertama, saya sudah mempelajari seri F103 dengan baik dengan papan Blue Pill. Secara umum, pengontrol STM32F103CB benar-benar cocok untuk saya, hanya memori tidak cukup. Kedua, saya sudah memiliki bootloader dan kode tingkat rendah untuk pengontrol ini, sementara yang lain harus diulang. Dan ketiga, sekitar setahun yang lalu, saya sudah senang membeli 3pcs STM32F103RB. Kemudian saya tidak melakukan studi rinci tentang pengendali yang tersedia, tetapi hanya mengambil pengontrol yang lebih tebal dari garis F103. Jangan dibuang sekarang :)

Seperti yang telah saya catat, saya tidak memiliki persyaratan kinerja atau periferal yang khusus. Tetapi jika saya mengalami sesuatu, maka dalam pikiran saya sudah memiliki pengontrol dari garis F4 (jika sesuatu yang lebih kuat diperlukan), atau L152RD, jika Anda perlu memutuskan sesuatu dengan konsumsi (UPD: Saya juga melihat L433RC). Apa yang menyenangkan, dengan STM32, hampir semua pengontrol pin-to-pin kompatibel, dan F4 dan L1 / L4 dapat disolder hampir tanpa mengubah papan. Anda bahkan dapat mengumpulkan dan membandingkan konsumsi dengan berbagai MK.

Beberapa kata tentang body dan tata letak


Kami memutuskan detailnya. Sudah waktunya untuk menggambar diagram, kemudian menelusuri papan, dan kemudian mencoba memasukkannya ke dalam case. Atau tidak? Untuk mengakui, pada awalnya saya hanya pergi dengan cara ini, tetapi kemudian saya sampai pada kesimpulan bahwa semuanya perlu dilakukan dalam urutan terbalik. Ya, atau setidaknya pada saat yang sama.

Saya ingin mendapatkan perangkat yang ringkas. Dan untuk ini, Anda perlu memahami secara akurat ukuran ruang yang tersedia, pada gilirannya, untuk memahami di mana harus meletakkan papan dan ukurannya, ukuran baterai apa yang cocok, di mana menempatkan tombol, layar, konektor USB dan komponen eksternal lainnya, serta mencari tahu cara memasang komponen dan Anda dapat apakah nyaman untuk meletakkan kabel di antara mereka. Tidak ada gunanya mulai mengangkat papan tanpa memahami semua hal ini. Jadi ternyata Anda harus terlebih dahulu berurusan dengan bodi dan tata letak, lalu beralih ke sirkuit.

Juga, dalam proses menggambar kasing, saya harus merevisi pemilihan komponen beberapa kali. Jadi awalnya saya berpikir untuk menggunakan layar murah 128x64 0,96 ” (wilayah kerja 21,7 x 11,2mm), tetapi layar ini tampak sepenuhnya mikroskopis dengan latar belakang kasing yang jauh lebih besar. Kemudian diperintahkan layar 1,3 " (area kerja 29,4 x 14,7 mm), tetapi tidak jauh lebih baik. Lalu saya mendapat layar 1,54 ” (35 x 17,5 mm) - tampilannya kurang lebih normal. Ini saat ini merupakan opsi kerja utama.

Menurut perkiraan, tampilan 1,8 "-2" akan terlihat lebih baik, tetapi ini sudah datang dalam warna dan resolusi yang lebih tinggi, dan karenanya buffer layar akan cukup besar untuk pengontrol saya (35kb bukan 1kb). Yah, mendorong layar besar ke dalam case juga bisa menjadi masalah, karena braket pendaratan untuk modul semacam itu secara signifikan lebih besar dari area aktif layar.

Ketika saya menulis artikel ini di ali, layar monokrom 2,42 ” muncul dengan resolusi yang sama (128x64) dan persis sama dengan 1,54”. Saya memesan satu untuk pengujian saya - ada kemungkinan untuk memasukkannya ke dalam case saya tanpa peningkatan signifikan pada perangkat.

Poin penting lainnya pada tahap kerja kasus ini adalah pemahaman bahwa modul tampilan yang dibeli memakan terlalu banyak ruang dan secara signifikan mengurangi ruang untuk papan utama. Karena itu, saya memutuskan untuk meninggalkan modul display yang sudah jadi, dan sebagai gantinya menempatkan display dan mengikatnya ke board saya. Jumlah bagian dalam rangkaian sedikit meningkat, tetapi desain secara keseluruhan disederhanakan dan menjadi lebih kompak.

Saya memiliki pemikiran serupa tentang topik modul GPS. Ini tidak sebesar itu, tetapi tidak peduli bagaimana cara ia meletakkannya atau itu mengganggu, atau antena ditutup oleh baterai. Mungkin ide yang baik untuk meletakkan isian modul di papan Anda, dan menempatkan antena di tempat lain.

Mengerjakan case juga memungkinkan untuk menentukan ukuran dan kapasitas baterai. Dalam volume yang tersedia, baterai 900mAh baru saja ditemukan - kami akan fokus padanya. Saya ingin perangkat saya bekerja dengan baterai 15-20 jam, yang artinya konsumsi harus di level 45-60mA.

Saat ini, saya tidak dapat menyelesaikan pekerjaan di lambung. Pertama, pertanyaan pilihan untuk beberapa komponen (layar, GPS) masih terbuka. Kedua, tidak jelas apakah rangkaian saya akan mulai pada prinsipnya atau apakah akan perlu untuk mengubah apa pun secara radikal. Dan ketiga, papan tersebut ternyata terlalu ringkas - saya tidak yakin bisa membubarkan, menyolder, dan men-debugnya. Oleh karena itu, dalam artikel ini saya masih akan fokus pada masalah sirkuit, saya akan bergerak dalam langkah-langkah yang lebih sederhana dan lebih mudah dipahami, dan saya akan berbicara tentang kasus ini di lain waktu. Di sini Anda memiliki beberapa rendering dan foto untuk seed.









Skema


Sekarang Anda bisa melakukan elektronik. Saya akan menjelaskan solusi sirkuit dengan detail yang cukup. Pertama-tama, untuk pendatang baru yang sama dalam elektronik seperti saya, serta sinopsis untuk diri saya sendiri. Insinyur elektronik yang berpengalaman dapat menelusuri sirkuit dan mundur ke bagian selanjutnya.

Mari kita mulai dengan nutrisi.

Perangkat ini akan ditenagai oleh baterai lithium, yang berarti Anda memerlukan pengontrol biaya. Juga, beberapa komponen memiliki batas tegangan atas sekitar 3.6V, sementara baterai dapat dengan mudah berakhir dengan lebih dari 4V. Jadi Anda membutuhkan sumber daya step-down. Seperti yang telah kita ketahui, kita akan memerlukan beberapa tekanan berbeda.

Saya sudah menyebutkan bahwa saya akan menggunakan chip PT1502. Sangat cocok, karena mengimplementasikan pengontrol muatan, 3 sumber daya, serta rangkaian perangkat pengalih tombol. Microcircuit berisi beberapa blok fungsional, yang telah saya bagi dalam diagram untuk kejelasan. Rangkaian itu sendiri adalah rangkaian lembar data yang sedikit direvisi. Berikut adalah pengontrol pengisian daya baterai lithium



Resistor R3 mengatur arus muatan. Secara default, ini sesuai dengan 470mA. Mungkin menurut hasil pengujian, saya akan mengurangi nilai resistor ini menjadi 510 Ohm, yang akan memberikan arus muatan sekitar 900mA (1C).

Pengontrol dapat melaporkan mode pengisian saat ini dengan kaki CHG_STAT. Selain itu, ia tahu cara memberi sinyal sebanyak 3 - pengisian daya, tidak pengisian daya, dan sudah diisi daya, tetapi masih terhubung ke outlet. Pada versi pertama, transistor internal menekan kaki ke tanah dan ini dapat dengan mudah dikenali oleh pengontrol. Dalam perwujudan kedua, transistor benar-benar tertutup dan kaki masuk ke keadaan impedansi tinggi. Menggunakan power-up, sinyal seperti itu juga mudah dibaca oleh pengontrol.

Tetapi dengan negara ketiga tidak begitu sederhana. Di sana, transistor terbuka dan arus 20 μA mengalir melaluinya. Untuk mempertimbangkan kondisi seperti itu, saya diminta untuk memilih tumpangan sehingga sekitar setengah dari nutrisi ada di kaki saya. Maka akan mungkin untuk dengan mudah mendeteksi keadaan seperti itu menggunakan ADC. Menggunakan hukum Ohm kita mendapatkan R5 = 1V / 20mkA = 50k.

Seperti yang saya katakan, chip PT1502 bukan hanya pengisi daya, tetapi juga pengontrol rumit untuk semua daya. Microcircuit memonitor tegangan di sirkuit dan, menggunakan sinyal RESET, dapat mengontrol prosesor utama (mereka mengatakan bahwa Anda masih harus memulai dari awal, daya belum stabil).



Selain itu, rangkaian mikro dapat memulai perangkat dengan satu sentuhan tombol (BTN1), dan juga, atas sinyal dari mikrokontroler (PWR_HOLD), selesaikan operasi dan matikan daya. Nah, untuk memberi sinyal prosesor bahwa baterai kehabisan sinyal BAT_LOW.

Dan ini adalah sumber daya utama.



Tegangan output diatur oleh tegangan di terminal BUCKFB dan diatur ke 2V dengan daya baterai. Tetapi dengan daya dua volt, satu masalah ditemukan - USB tidak akan berfungsi. Yaitu baterai akan diisi, tetapi tidak dapat mengirimkan data - mikrokontroler tidak dapat mengirimkan sinyal ke bus USB dengan amplitudo yang cukup. Datashit merekomendasikan tegangan setidaknya 2.7V, lebih baik dari 3.3V.

Agar tidak memblokir sumber daya lain dan berpikir bagaimana beralih di antara mereka, saya memutuskan untuk hanya menyesuaikan rasio pembagi R1 / R4 + R7. Dengan inklusi ini, impuls beroperasi terus menerus. Begitu perangkat dicolokkan ke USB, transistor terbuka dan shunts R7. Rasio resistor penggerak berubah dan kami mendapatkan output 3,16V (kami masih bisa bermain dengan peringkat dan menahannya hingga 3,3V).

PT1502 juga memiliki 2 kontrol linier.



Baik komponen yang mengonsumsi rendah (INA219) atau berumur pendek (bluetooth) akan terhubung ke pengontrol ini, sehingga efisiensi sumber-sumber ini tidak akan menjadi masalah. Tegangan pasokan LDO2 dapat disesuaikan menggunakan sinyal LDO2_SETx.

Karena saya masih memiliki pertanyaan terbuka mengenai tegangan suplai, saya memutuskan untuk memisahkan jumper untuk memilih mode LDO2_SETx. Juga, untuk dapat mengukur konsumsi riil pada bus yang sesuai, saya juga akan menghubungkan jumper JP1 / JP2 / JP3 ke sisir.

Menyelesaikan topik pasokan daya, kita perlu menyebutkan kekuatan tampilan. Saya menulis sedikit lebih tinggi bahwa, atas nama kekompakan, saya harus meninggalkan modul display yang dibeli dan mengambil display dengan pengikat ke papan saya. Layar ini memerlukan konverter boost 7-16V khusus. Dengan mudah, sumber ini dapat dinyalakan dan dimatikan menggunakan sinyal EN. Rangkaian itu sendiri disalin dari lembar data booster, persis sama digunakan dalam modul tampilan dengan ali.



PT1505
Berselancar di Internet untuk mencari alternatif chip PT1502, saya bertemu kakak perempuannya - chip PT1505. Ini hampir pengendali daya yang sama, tetapi dengan peningkatan tambahan. Dengan pengontrol seperti itu, akan mungkin untuk mengurangi jumlah elemen di papan tulis. Sayangnya, saya tidak menemukan chip PT1505 yang dijual.

Ngomong-ngomong, saya akan berterima kasih jika Anda tahu pengendali daya yang sama dari produsen lain.

Sekarang sedikit tentang kekuatan mikrokontroler. Microcircuit berukuran besar dan memiliki 6 saluran listrik - 4 untuk bagian digital, 1 catu daya analog dan satu untuk jam. Menurut datasheet pada STM32F103, pada semua saluran listrik (mungkin, kecuali jam), harus ada kapasitor 100nF di sepanjang kapasitor, dan satu lagi yang umum di 4.7uF.

Tetapi dalam datasheet pada STM32F4 dikatakan bahwa meskipun mikrokontroler secara praktis kompatibel dalam hal output, mereka masih memiliki skema daya yang agak berbeda. Jadi pada dua terminal harus ada kapasitor 2.2mkF antara terminal dan ground (dan bukan antara ground dan power, seperti pada F1). Oleh karena itu, saya harus mempertimbangkan kedua opsi dan untuk mikrokontroler tertentu untuk menyolder hanya sebagian dari kapasitor.



Melanjutkan topik nutrisi, Anda perlu memikirkan cara mengukurnya. Anda dapat mengandalkan sinyal BAT_LOW dan meminta pengguna untuk segera meringkuk jika baterai lemah. Tapi ini persis apa yang saya tidak suka di Holux M-241 yang asli, karena sinyal ini muncul terlambat dan mudah dilewatkan. Saya perlu semacam indikator daya baterai yang lebih informatif.



Untuk jaga-jaga, saya meletakkan pembagi paling umum untuk mengukur tegangan baterai. Tetapi dalam kasus baterai lithium, ini hanya indikator informatif dan tidak boleh diandalkan. Untuk pembacaan baterai yang lebih jujur ​​di Internet, mereka menyarankan menggunakan "liontin".



Microchip kecil ini menghitung jumlah energi yang telah melewatinya ke atau dari baterai. Pengukuran dilakukan pada shunt R10. Pembacaan dari rangkaian mikro dapat dibaca melalui I2C. Microcircuit mampu mengukur tegangan pada baterai, arus yang melewati resistor, dan juga mengalikan satu dengan yang lainnya. Sayangnya, dia tidak tahu bagaimana mengakumulasi nilai dari jam yang telah dilewati oleh Watt *, oleh karena itu dia harus melakukan survei yang konstan.

Mari kita beralih ke bagian digital. Jantung dari seluruh sistem adalah mikrokontroler STM32F103RB.



Pengikat dalam bentuk dua kuarsa diambil dari skema lain yang ditemukan di Internet (diperiksa ulang dalam datasheet). Saya tidak perlu boot dari RAM, tetapi karena sinyal BOOT1 ditarik ke tanah. BOOT0 dapat dipilih dengan jumper untuk boot dari memori flash utama atau bootloader UART bawaan (misalnya, untuk firmware utama perangkat)

Berikutnya adalah LED.



Karena tegangan suplai utama akan bervariasi dari 2 hingga 3.3V, LED seharusnya tidak terhubung - kecerahan dan konsumsi saat ini akan sangat bervariasi. Oleh karena itu, LED I akan dihubungkan ke bus 2.7V, resistor pembatas arus dihitung sesuai. Karena mikrokontroler tidak akan dapat memberikan lebih dari 2V saat berjalan dengan baterai, mode push-pull GPIO tidak dapat digunakan. Hanya saluran pembuangan terbuka.

Tidak ada yang istimewa untuk dikatakan tentang tombol reset.



Karena perangkat tiga volt (INA219) akan berada di bus I2C, Anda juga perlu melakukan kurung hingga tiga volt



Konektor SWD juga standar. Diperlukan dioda untuk mengalihkan daya antara baterai dan daya eksternal dari programmer.



Mengantisipasi seruan bahwa mereka tidak melakukan ini dan bahwa koneksi seperti itu tidak benar-benar melepaskan baterai. Ya, itu tidak dimatikan, tetapi dioda bukan untuk ini. Hal ini diperlukan untuk dapat memberi daya perangkat dari programmer jika baterai tidak terhubung. Dan jika terhubung, maka biarkan bekerja darinya. Nah, jika baterai terhubung, maka Anda perlu melindungi programmer itu sendiri dari 4.2V pada baterai.

Tetapi tombol-tombolnya harus lebih detail.



Faktanya adalah bahwa tombol pertama tidak hanya akan menjadi tombol, tetapi juga akan berfungsi sebagai saklar perangkat - sinyal BTN1 terhubung ke chip pengontrol daya PT1502. Ketika perangkat dimatikan, daya tidak dipasok ke mikrokontroler dan konsumen lain. Itulah sebabnya tombol terhubung bukan ke daya (VCC) tetapi ke baterai (BAT). Dengan menekan tombol ini, PT1502 akan menyalakan semua sumber daya dan memulai mikrokontroler. Setelah itu, tombolnya bisa berfungsi seperti tombol biasa. Agar tidak membakar mikrokontroler dengan tegangan baterai yang tinggi, saya membuat pembagi tegangan kecil yang menggerakkan sinyal BTN1 ke dalam kerangka yang diperlukan (namun, dimungkinkan tanpa ini - mikrokontroler memiliki input yang toleran terhadap 5V)

Tombol kedua tidak biasa. Di dalam prosesor, tarikan ke tanah akan disertakan, dan tombol akan memberi makan unit ke garis ...

Pindah mulus ke pinggiran yang berat. USB



Konektor USB akan keluar dari perangkat, dan listrik statis dapat berjalan di sana. Ternyata ada sirkuit mikro khusus (seperti STF202-22) yang melindungi mikrokontroler dari pengaruh eksternal.

Tapi ada hal lain yang menarik di sini. Sebuah resistor 1,5k tersembunyi di dalam chip STF202, yang terhubung antara kaki VBUS dan garis D +. Resistor ini diperlukan sesuai dengan spesifikasi USB - ia memberi tahu host bahwa ia terjebak dalam sesuatu. Di banyak sirkuit, resistor ini selalu terhubung antara daya dan garis D +. Segera setelah tuan rumah melihat resistor seperti itu pada garis D +, ia segera mulai berkomunikasi dengan perangkat. Ini tidak selalu tepat, karena Beberapa perangkat mungkin tidak segera siap untuk komunikasi.

Ini hanya kasus saya. Ada trik sederhana untuk ini (memata-matai di sini ). Anda dapat menghidupkan dan mematikan resistor ini dengan menggunakan transistor: kami ingin komunikasi - kami menghidupkan resistor, kami hanya ingin diberi daya oleh USB - matikan. Ketika Anda memasukkan ponsel Anda ke USB, ia biasanya bertanya, “Apa yang akan kami lakukan? Penggabungan data atau sekadar pengisian daya? " - Dalam hal elektronik, ini hanya tentang menghubungkan resistor pull-up.

Tapi bagaimana Anda tahu jika perangkat macet di USB? Untuk melakukan ini, saya memberikan sinyal USB_PLUGGED, yang dihapus dari pembagi paling sederhana.



5V dari USB juga dapat diumpankan langsung ke kaki mikrokontroler - mereka masih toleran terhadap 5V. Tapi biarlah sudah melalui pembagi.

Akselerometer sekarang



Skema ini diambil dari lembar data. Modul terhubung melalui I2C, tetapi untuk memberi sinyal ke mikrokontroler bahwa ada berita, garis interupsi juga digunakan. Juga, karena INA219 tiga volt masih tergantung pada bus I2C yang sama, kaki komunikasi accelerometer juga ditenagai dari bus 3B untuk mengoordinasikan level.

Saya sudah menyebutkan bahwa saya ingin menghemat energi dan mematikan peralatan yang tidak digunakan. Jadi daya accelerometer dihidupkan oleh transistor.

Ngomong-ngomong, aku sangat menyukai apa yang disebut transistor digital - transistor lengkap dengan dua resistor. Ini menghemat sedikit ruang di papan tulis. Sayang sekali bahwa dengan daya dua volt, saya tidak dapat mengambil transistor digital dengan setidaknya beberapa arus yang layak - maksimum 20-30 mA. Jadi konsumen yang lebih rakus harus terhubung dengan MOSFET.

Silakan GPS



GPS terletak di papan terpisah dan terhubung melalui loopback. Karena saya belum memutuskan modul GPS, saya menyediakan 2 catu daya berbeda. Selain transistor daya di sisi papan prosesor, tidak ada yang lebih menarik.

Saya hanya akan mengatakan beberapa kata tentang UART. Awalnya, saya berencana untuk menggunakan semua 3 - satu untuk mengunggah firmware dan debug, yang kedua untuk GPS dan yang ketiga untuk Bluetooth. Tetapi ternyata UART3 berada pada pin yang sama dengan I2C No. 2, yang awalnya saya rencanakan akan digunakan untuk tampilan. Saya harus memilih. Akibatnya, saya sampai pada kesimpulan bahwa saya dapat mengunggah firmware dan men-debug melalui UART yang sama yang disediakan untuk GPS (tentu saja, GPS harus dinonaktifkan). Nah, jika Anda perlu melakukan debut GPS itu sendiri, yaitu, USB CDC (di mana Anda dapat mengunggah log) dan SWD. Beberapa saat kemudian, saya meninggalkan ide untuk menggunakan I2C No. 2, jadi UART3 dibebaskan, tetapi atas nama penghematan baterai, saya memutuskan untuk fokus pada dua UART.

Bluetooth



Bluetooth terhubung sesuai dengan skema dari lembar data. Pin PIO1 dapat beroperasi dalam dua mode. Pada yang pertama, LED terhubung dan modul berkedip dengan LED ini. Kedipan mata yang berbeda berarti status yang berbeda. Dalam mode lain, pin ini berfungsi sebagai digital - satu ketika komunikasi dibuat, dan 0 jika tidak. Mode diaktifkan oleh perintah AT selama inisialisasi modul.

Kartu SD

Meskipun skema koneksi kartu SD adalah standar, untuk beberapa alasan itu sangat sulit bagi saya. Ada terlalu banyak opsi koneksi yang berbeda di Internet dan tidak mudah untuk menentukan yang mana yang benar.



Sebagian besar, saya punya pertanyaan di bushing. Kadang-kadang ada skema di mana mereka meletakkan resistor dalam 1k. Beberapa sirkuit menempatkan 22 Ohm resistor, yang tampaknya sebagai perlindungan terhadap statis. Namun demikian, sebagian besar sirkuit tidak menawarkan resistor pass-through, dan saya mungkin akan pergi dengan cara yang sama. Saya juga tidak akan memiliki statika sejak itu Flash drive akan hidup di dalam case.

Transistor daya, menurut saya, tidak akan diminati juga, saya pikir kartu akan selalu berfungsi - itu adalah pencatat. Tapi karena ini adalah papan tes, biarlah. Hal yang sama tentang koil - rupanya penyertaan ini dalam aslinya dibuat paranoid, atau kartu itu digunakan di lingkungan dengan daya atau gangguan yang buruk. Saya pikir untuk menyolder ada resistor nol dan mencoba tanpa koil.

Tampilan

Saya berkesempatan untuk menghubungkan salah satu modul tampilan dengan ali via SPI dan membandingkannya dengan koneksi via I2C.Tidak ada kesulitan khusus dan kode hanya perlu sedikit terbuang. Pada saat yang sama, kecepatan SPI adalah urutan besarnya lebih tinggi dari I2C. Setelah menambahkan data dari lembar data tentang konsumsi (4 mA untuk SPI versus 10 mA untuk I2C), kebutuhan untuk resistor pull-up untuk I2C, saya memutuskan untuk menghubungkan layar melalui SPI.



Sayangnya, sinyal BS0 tidak di-output ke loop tampilan, dan karena itu Anda tidak dapat memilih mode 3-kawat SPI, Anda hanya dapat 4-kawat SPI. Perbedaan dalam garis D / C tambahan (data / perintah), yang dalam kasus mode 3-kawat ditransmisikan oleh bit kesembilan dari data SPI. Namun, mungkin mode 4-Wire lebih baik, karena SPI di STM32 hanya dapat mengirimkan 8 bit.

Skema lainnya sesuai dengan lembar data.

Dan akhirnya, pembuat squeaker. Tidak ada yang istimewa - cukup hidupkan melalui transistor.



Kalau-kalau akan ada vibromotor bukan tweeter, saya memberikan dioda pelindung. Namun, saya mendengar pendapat bahwa dioda pelindung juga tidak melukai tweeter.

Dalam besi


Di atas, saya menggambarkan pikiran saya tentang masalah korps. Bahkan, saya bahkan mencoba membuat papan untuk kasus ini. Sayangnya, papan itu terlalu sempit. Saya harus menggunakan instalasi dua sisi, beralih dari komponen 1206 ke 0805, tetapi semua sama, komponen di papan sangat ketat. Selain itu, setiap perubahan dalam skema itu menyusahkan, karena Saya harus mengembangbiakkan kembali hampir setengah papan.

Jadi saya mengutak-atiknya selama beberapa minggu, tetapi dewan mengalahkan saya dan saya meninggalkan proyek selama hampir setahun. Tendangan menjadi sini artikel ini . Tapi sungguh, ini hanya prototipe, dan yang pertama dari beberapa. Mengapa repot-repot dengan papan yang sangat ringkas, di mana Anda tidak bisa merangkak dengan solder atau osiloskop, jika Anda bisa men-debug semuanya di papan besar?

Nah, Anda tidak perlu membuat papan besar seperti iPhone, tetapi sangat mungkin untuk masuk ke JLCPCB 2 layer 100x100mm promosi. Anda bisa membatasi diri sendiri. Jadi di papan adalah layar 2,42 "besar, jumper untuk mengukur konsumsi di semua saluran listrik, kapasitor daya di mana Anda perlu dan tidak perlu, dan secara umum banyak bagian yang tidak dapat dipasang. Masih ada tempat tersisa.





Ada di Photo View




Tidak ada banyak yang bisa diceritakan tentang pemasangan kabel. Saya memisah sebagian besar sinyal dan garis medan di sepanjang lapisan atas, sedangkan yang lebih rendah hampir sepenuhnya terkubur di bawah tanah. Sayangnya, tata letaknya masih cukup padat dan beberapa garis sinyal harus diseret sepanjang lapisan bawah melalui setengah papan. Karena itu, tanah itu "robek" di beberapa tempat menjadi beberapa pulau yang terhubung secara longgar. Saya harap ini bukan masalah.

Saya tidak melakukan pembumian di bawah antena bluetooth, tetapi saya masih harus menyeret salah satu jalur sinyal melalui zona ini. Namun, ini adalah garis BT_ON, di mana sinyal sering tidak berjalan (baik dinyalakan atau dimatikan di sana), yang berarti bahwa itu seharusnya tidak mempengaruhi sinyal secara khusus.

Musim panas akan datang dan aku berencana untuk mengambil sewa bersamaku untuk berlibur. Agar pelayan di hotel tidak takut papan debugging telanjang dengan kipas kabel, alangkah baiknya menyembunyikannya di kasing. Saya tidak bisa menyangkal kesenangan diri dan mengembangkan kasing dan papan pada saat yang sama. Jadi ada papan pemasangan dalam kasing, yang memasang dudukan layar.

Modul GPS adalah sandwich dari beberapa papan dan antena setebal 12 mm. Saya memutuskan untuk tidak mengaitkannya di atas papan, tetapi menempatkannya di tingkat yang sama. Ini mengurangi ketebalan kasing, tetapi menggigit salah satu sudut papan.

Beberapa foto papan dan perangkat final (pada tahap proyek ini).







Baterai cocok di bawah layar, tetapi saya harus membuat kotak kecil untuk menaikkan layar lebih dekat ke penutup atas.

Beberapa kata di papan perakitan. Saya menyolder semuanya dalam waktu sekitar 3 malam, dan sekitar satu minggu di malam hari saya perlu santai untuk debug dan memeriksa dari sisi perangkat lunak. Yang mengejutkan saya, tidak ada kesulitan mendasar dengan memasang papan dan hampir semuanya dimulai sebagaimana mestinya.

Ternyata menyolder 0805 tidak lebih sulit untuk disolder daripada 1206, cukup bisa dimakan di rumah dengan kaca pembesar. Anda bahkan dapat mengayun di 0603. Tetapi dengan menyolder mikrokontroler dan konektor display (mereka memiliki pitch 0,5 mm), saya harus mengotak-atik. Di YouTube, entah bagaimana itu hanya terlihat seperti orang - saya hanya menghabiskannya dengan besi solder dan hanya itu, tetapi semua kesimpulan saya macet seketika.

Bukan tanpa masalah kecil. Di beberapa tempat tidak ada minum, di suatu tempat ada "ingus". Jejak untuk konektor USB ternyata salah - ia memiliki langkah kesimpulan yang kurang dari yang diperlukan (jadi percaya setelah itu jejak kaki dari Internet!). Saya harus sedikit membengkokkan kesimpulan sehingga mereka menjadi di jalur. Konektor display FPC yang dibeli pada Ali ternyata dengan kontak di bawah ini, sedangkan saya perlu dengan kontak di atas (saya tidak menduga perbedaan seperti sebelumnya). Saya harus "mematikan" konektor dari papan display standar.

Setelah memasukkan papan ke dalam kasing, ternyata tidak memungkinkan untuk melepas baterai hanya dengan menarik konektor, tetapi saya tidak ingin membiarkan papan yang sudah diberi energi menyala. Saya harus menyodok saklar.

Saat memasang papan, ternyata tidak ada kontak ground di mana pun Anda bisa menempelkan probe ke osiloskop. Saya harus berpegang teguh pada konektor USB dengan buaya. Penting untuk menyediakan situs uji dalam versi papan berikutnya.

Sirkuit juga mengungkapkan masalah. Jadi itu adalah fakta yang sama sekali tidak terduga bahwa chip PT1502 pada pin RESET menghasilkan tegangan 3V (saya benar-benar yakin bahwa ada sesuatu seperti kolektor terbuka). Akibatnya, 3V ini bocor ke saluran listrik, meskipun saya berencana untuk hanya 2V di sana.

Berikut adalah diagram yang disederhanakan dari apa yang terjadi.


Berkat pemikiran hebat dan orang-orang dengan easyelectronics.ru, gabungan ini diputuskan dengan menambahkan satu dioda. Setelah sedikit operasi, bagian ini berfungsi sebagaimana mestinya.

Selanjutnya, modul bluetooth (ditenagai 2.5V) saya tidak sengaja terhubung ke daya utama (2V), bukannya 3V yang diperbaiki. Sekarang bluetooth hanya dapat bekerja untuk saya ketika USB terhubung, ketika tegangan daya utama naik ke 3.3V.

Pada prinsipnya, akan mungkin untuk melambaikan pisau bedah dan solder bluetooth ke kekuatan yang benar, tetapi UART2 yang terhubung bluetooth tidak toleran terhadap 5V (dia sendiri membacanya di lembar data pada tahap analisis, dia sendiri mencatat ini dalam teks di atas, dan akhirnya lupa ketika memasang papan di papan tulis ) Oleh karena itu, menghubungkan bluetooth ke daya lebih tinggi daripada kekuatan mikrokontroler penuh ... Di versi papan berikutnya, saya hanya menghubungkan bluetooth ke beberapa UART lainnya.

Konverter DC-DC dengan tegangan variabel juga berfungsi seperti yang direncanakan - ketika ditenagai oleh baterai, ia mengeluarkan 2V, dan ketika Anda menghubungkan USB naik menjadi 3.16V (Anda perlu bermain-main dengan peringkat dan mencapai 3,3V). Tapi di sini satu lagi cacat dari sirkuit keluar: Anda juga harus dapat menaikkan tegangan saat ditenagai oleh programmer. Saya pikir ini sedang dirawat dengan menambahkan dioda lain. Saya akan mencoba bermain sedikit nanti.

Akhirnya, selama bekerja di papan tulis, saya masih tidak mengerti bagaimana cara memberi daya dengan benar kartu SD dari undervoltage. Googling singkat tidak menghasilkan apa-apa. Rupanya, Anda perlu membenamkan diri dalam membaca spesifikasi halaman ketat (yang, selain itu, sebagian ditutup). Sementara itu, saya hubung singkat R7 dan papan sekarang didukung oleh 3.16V tetap (3.3V). Saya akan membiarkannya seperti ini selama beberapa bulan ke depan, sementara saya akan mengerjakan bagian perangkat lunak.

Berbicara tentang perangkat lunak. Anehnya (walaupun cukup diharapkan), tetapi secara umum semuanya dimulai tanpa masalah. Karena saya beralih di antara mikrokontroler dari seri yang sama (dari F103CB ke F103RC), saya tidak perlu mengubah bagian perangkat lunak. Hanya mengoreksi nomor pin, tetapi menambahkan penyertaan transistor. Namun demikian, ada 2 momen non-sepele yang harus saya pikirkan.

Yang pertama adalah daya baterai. Saya men-debug papan menggunakan daya USB dan semuanya bekerja dengan baik pada umumnya. Tetapi papan terus-menerus tidak mau menyalakan baterai. YaituIni bisa bekerja (jika Anda menyalakannya ketika USB terhubung, dan kemudian mencabut kabelnya), tetapi itu tidak bekerja untuk memulai yang dingin.

Menurut desain chip PT1502, papan harus mulai seperti ini. Pengguna menekan tombol BTN1 dan setelah sepertiga detik, chip akan menyalakan semua sumber daya. Ketika semuanya baik-baik saja dengan daya, PT1502 "melepaskan" sinyal RESET, dengan demikian memulai mikrokontroler. Prosesor, pada gilirannya, mengatur sinyal PWR_HOLD menjadi satu, menandakan bahwa ia sudah dimulai. Setelah itu, PT1502 secara teratur memasok listrik ke sirkuit hingga mikrokontroler menurunkan sinyal PWR_HOLD ke nol.

Tapi ini dalam teori. Bahkan, begitu prosesor mengatur sinyal PWR_HOLD, papan mati secara instan. Saya menyekop seluruh rangkaian daya, melihat bentuk gelombang dari sinyal utama, mengocok kode dalam bootloader bolak-balik, tetapi saya tidak dapat memahami masalahnya. Saya juga berdosa karena tidak adanya resistor pull-down pada garis PWR_HOLD, yang saya lupa instal, tetapi direkomendasikan oleh datasheet (dan kemungkinan besar masih diperlukan). Namun menambahkannya dengan kanopi tidak menyelesaikan masalah. Dan hanya ketika saya meminjamkan osiloskop empat saluran, segalanya menjadi jelas.



Ketika pengguna menekan tombol (garis oranye), chip PT1502 menyalakan daya (garis ungu). Semua ini terjadi lama (300 ms) sebelum peristiwa pada gelombang ini. Dan kemudian sesuatu yang menarik terjadi. PT1502 melepaskan RESET (garis biru), prosesor dimulai dan karena alasan tertentu menurunkan garis tombol ke nol. Meskipun mikrokontroler masih mencoba untuk meningkatkan garis POWER_HOLD (garis hijau) - sudah terlambat, PT1502 telah mematikan semua sumber daya. Lalu ada beberapa kejang lagi, tetapi sirkuit masih mati dengan tenang.

Pertanyaannya adalah, dari mana asal nol tombol itu? Intinya adalah kesalahan yang tidak mencolok pada bootloader , karena kaki BTN1 diatur ke mode keluaran (mungkin keajaiban juga terjadi pada kaki lain pada saat itu) dan sinyal rendah muncul di sana.

Apa lagi yang harus digeluti adalah kartu SD. Tidak ada modul SDIO di mikrokontroler lama, jadi saya harus mempelajari bagian ini dari awal. Saya menghabiskan hampir sepanjang hari mencoba untuk mendapatkan peta, menyalin potongan kode dari contoh-contoh di Internet, dan apa yang dihasilkan CubeMX. Meskipun kartu itu dapat dibaca dengan sempurna di komputer, kartu itu tidak mau memulai di sirkuit saya. Saya berdosa karena penyolderan yang buruk, resistor pull-up yang tidak dipilih dengan benar, sirkuit yang canggung dan lembar data yang diinterpretasikan secara tidak benar. Tapi yang mengejutkan saya, kartu lain dengan kode yang sama dan di papan yang sama dimulai tanpa masalah. Penting untuk mempelajari masalah ini secara lebih rinci.

Ada masalah lain dengan kartu itu. Menyodok dalam garis yang berbeda dengan osiloskop, saya melihat aktivitas hanya pada garis D0, sedangkan pada D1-D3 ada keheningan - kartu bekerja dalam mode single-bit. Di HAL, bahkan fungsi HAL_SD_ConfigWideBusOperation () ditemukan, yang dapat mengaktifkan mode transfer 4-bit. Sayangnya, ketika kartu dialihkan ke mode 4-bit, perangkat SDIO masuk ke RX FIFO Overrun yang dalam dan berhenti bekerja.

Masalahnya ternyata sangat menarik. Ternyata di dalam fungsi HAL_SD_ReadBlocks () ada loop tertentu yang menyurvei bendera SDIO. Ketika data baru datang dari kartu, kode ini mentransfer byte dari buffer FIFO internal ke memori pengguna. Jadi kartu mengirimkan byte begitu cepat sehingga kode di HAL_SD_ReadBlocks () tidak punya waktu untuk mentransfer data. Saya harus menurunkan sementara frekuensi clock kartu. Nah, di masa depan saya akan menggunakan DMA dan masalah seperti itu seharusnya tidak muncul secara prinsip.

Kesimpulan dan langkah selanjutnya


Mereka yang di tempat ini berharap melihat perangkat yang sudah selesai saya harus mengecewakan - hanya papan tes selesai, dan bahkan itu, hanya potongan besi. Sekarang Anda perlu menghirup kehidupan, lakukan pemrograman, sesuaikan mode dan konsumsi. Sebenarnya, tulislah kode logging - itu sebabnya seluruh proyek dimulai.

Namun demikian, bagi saya pribadi tahap ini adalah pencapaian yang sangat besar dan penting. Elektronik bukan spesialisasi saya dan saya sangat senang bahwa perangkat bahkan mulai hidup. Saya berhasil memompa cukup banyak dalam merancang sirkuit, mencocokkan beberapa perangkat, memasang kabel papan, memilih komponen dan banyak lagi.

Saya akan berbicara tentang bagian perangkat lunak di lain waktu. Serta tentang nuansa pengaturan. Faktanya adalah seluruh isi ini harus dihidupkan kembali dan diuji terlebih dahulu. Saat ini, kami berhasil memulai semua perangkat di papan tulis (yah, kecuali untuk tweeter), tetapi hanya dalam jumlah "itu mulai dan entah bagaimana merespons". Belum ada logika pemrosesan yang ditulis.

Paket untuk waktu dekat:

  • Kendarai elektronik dalam mode berbeda, periksa apakah sirkuit masih berfungsi. Memperbaiki kusen di versi kedua papan
  • Ukur konsumsi seluruh pinggiran dan temukan cara untuk mengoptimalkan konsumsi.
  • Pasang beberapa opsi papan pada mikrokontroler yang berbeda (mis. L152 atau L433)
  • Baca dengan seksama spesifikasi SD dan cari tahu cara menghubungkan kartu dengan benar dalam mode pensinyalan Tegangan Rendah (1.8V)
  • Coba berbagai modul GPS dan akhirnya putuskan mana yang akan saya ikuti selanjutnya
  • Pesanlah kompas chip yang terpisah (misalnya, HMC5883L atau HSCDTD008A) dan cobalah untuk menggunakannya entah bagaimana
  • Buat refactoring kode internal, perbarui semua perpustakaan utama, dimulai dengan HAL
  • Akhirnya, mulailah menulis fitur. Sebenarnya mengimplementasikan untuk apa perangkat itu dimaksudkan

Mengenai hal ini, izinkan saya untuk pergi. Saya akan berterima kasih atas komentar, ide, dan saran yang membangun tentang desain sirkuit dan tata letak papan sirkuit.

Sumber:

Kode
kode bootloader
Plata
Perumahan

Source: https://habr.com/ru/post/id454434/


All Articles