ATtiny13 vs PLC, atau cara mendapatkan 14 I / O dari pengontrol 8-kaki

gambar

Sebelum melanjutkan, saya ingin memperingatkan pembaca yang rajin.

  1. Apa yang saya jelaskan tidak dapat dilakukan karena banyak alasan, alasan-alasan ini akan ditunjukkan dengan gembira kepada Anda di komentar, dan saya sama sekali tidak mendesak Anda untuk melakukannya. Dan dalam hal apa pun saya tidak mengklaim bahwa perangkat yang dijelaskan di bawah ini dapat menggantikan PLC yang sebenarnya. Semua yang dijelaskan hanya dilakukan untuk membuktikan kepada diri sendiri bahwa ini secara teknis memungkinkan dan tidak berlaku untuk peralatan nyata.
  2. Jika Anda merasa sakit hanya karena menyebutkan kata "Arduino", Anda sebaiknya tidak membaca. Saya melakukan semua tindakan dengan pengontrol di Arduino IDE, lebih mudah bagi saya. Tetapi tidak ada yang mencegah untuk melakukan hal yang sama tanpa menggunakannya.

Untuk waktu yang lama saya ingin menulis artikel tentang percobaan saya dengan ATtiny13, tetapi saya terutama takut dengan sikap para arduino di situs tersebut. Selain itu, saya telah bekerja dengan pengontrol hanya beberapa tahun (terima kasih lagi kepada Arduino, oh, di mana saja Anda sebelumnya!). Komentar pada artikel Tiga mata menggantung pada posting ... menunjukkan bahwa topik ini masih menarik bagi pengguna yang cukup. Ngomong-ngomong, judul artikel seharusnya adalah "PLC pada ATtiny13", tetapi dalam komentar yang sama, mereka dengan sopan menjelaskan kepada saya di atas meja bahwa perangkat yang dijelaskan tidak dapat disebut "PLC". Ya, tidak.

Apa yang kita butuhkan dari PLC?


Itu dimulai dengan fakta bahwa saya ingin membuat analog fungsional dari PLC yang digunakan di perusahaan saya, dengan mempertimbangkan bagaimana mereka digunakan. Sebagian besar sirkuit kontrol kami miliki relay dengan semua kekurangan berikutnya. Berbagai jenis PLC juga digunakan di berbagai tempat, mulai dari tahun 90-an. Pada dasarnya, mereka melakukan tugas logis dari rangkaian kontrol, mulai dari keadaan sakelar batas dan sensor proximity.

Tidak ada antarmuka yang kompleks, tidak ada sinyal analog. Nyala / Mati. Itu saja. Sebagian besar, bahkan beban untuk output PLC disediakan oleh relay yang sama sehingga mereka sangat ingin menyingkirkannya. (Yang lucu adalah bahwa hampir di mana-mana output relai PLC digunakan, yang beralih relay eksternal, yang beralih elektromagnet dari distributor hidrolik ... Kadang-kadang satu lagi tautan dari starter ditambahkan.) Jadi, apa yang saya butuhkan dari PLC:

  1. Input diskrit untuk level sinyal 24 volt.
  2. Keluaran diskrit dengan tegangan 24 volt.
  3. Menguji algoritma internal sesuai dengan skema yang diberikan, yang dapat diubah jika perlu (terutama selama debugging).
  4. Kecepatan sekitar 50 ms, tidak perlu lagi mengganti sirkuit relai.

Dan itu dia. Tidak ada antarmuka. Tidak ada interupsi. Tidak ada layar. Ah, ya, layarnya ... Tidak ada ruginya menampilkan status input dan output; di sini, LED belum menghasilkan LED yang lebih andal. Nah, jangan lupa bahwa semuanya dilakukan karena minat olahraga, masing-masing, anggaran jatuh di pundak pengembang. By the way, insentif yang sangat bagus.

Jika Anda tidak memperhitungkan level sinyal 24 volt, maka mikrokontroler apa pun dengan jumlah I / O (input / output) tidak kurang dari yang diperlukan dapat dengan mudah mengatasi tugas tersebut.

Kami berurusan dengan level


Awalnya, saya ingin menggunakan optocoupler di input. Siapa pun yang kurang lebih berpengalaman dalam elektronik, terutama industri, tahu bahwa tidak ada banyak optocoupler. Komentar akan memberi tahu Anda secara terperinci mengapa tidak mungkin tanpa optocoupler. Tetapi saya menimbang pro dan kontra, dan memutuskan untuk menolak. Jadi beberapa mungkin tidak membaca lebih lanjut, dan segera melanjutkan untuk menulis komentar.
Jadi, kami memiliki sinyal input 24 volt, atau 0 volt tanpa adanya sinyal. Ini akan memungkinkan penggunaan sensor posisi induktif non-kontak atau sakelar batas kontak konvensional. Dari 24 volt Anda perlu mendapatkan voltase dari unit logis yang aman untuk controller. Pembagi tegangan lama yang baik berupaya dengan ini sebaik mungkin.

gambar

Resistor dihitung dengan mempertimbangkan bahwa untuk setiap penyimpangan tegangan input dengan plus atau minus 20% dari tegangan nominal pada input mikrokontroler, harus ada lebih dari tegangan switching (biasanya ini adalah setengah dari tegangan controller), tetapi tidak lebih dari tegangan controller, kami menganggapnya sama dengan 5 V. Cocok untuk pengontrol apa pun dalam keluarga AVR. Selain itu, perkiraan arus melalui pembagi adalah sekitar 7 mA, yang mengurangi kemungkinan gangguan, dan pada saat yang sama tidak banyak memuat output sensor dan sumber daya. Dioda 4,7 V zener berfungsi untuk melindungi dari lonjakan lonjakan pada gangguan yang sama. Masih ada bouncing kontak, kita bisa bertarung dengannya secara terprogram atau tidak sama sekali, itu hanya mockup. Sekarang saya masih harus menunjukkan status input. Dan di sini Anda dapat menerapkan lifehack, membunuh dua burung dengan satu batu:

gambar

LED pada rangkaian melakukan dua fungsi - berfungsi seperti dioda zener, membatasi tegangan menjadi 2,8 ... 2,9 volt (hanya untuk LED biru dan putih!), Ya, itu juga bersinar. Saya harus memperingatkan Anda bahwa dalam beberapa kasus tegangan pada LED tidak cukup untuk mengganti input controller! Saat menggunakan beberapa input pengontrol, kami menyederhanakan instalasi dan menyimpan beberapa dioda zener. Dengan meningkatkan tegangan input dengan lancar, Anda dapat melihat bahwa saat penyalaan LED dan saat pengalihan input tidak bersamaan. Tapi ini tidak terlalu mengganggu kami, karena seharusnya tidak ada level menengah pada input, hanya 0 V atau 24 V. Secara alami, pada saat ini Anda harus memiliki setidaknya firmware uji minimum untuk satu input dan satu output di controller.

Sekarang sinyal keluaran dari pengontrol juga perlu disesuaikan untuk 24 V, dan dengan mempertimbangkan bahwa kabel bersama, yang juga merupakan minus, adalah umum untuk semua relay keluaran. Di sini Anda memerlukan setidaknya 2 transistor dan 2 resistor:

skema
gambar

Bahkan, satu resistor lagi akan diperlukan, dan dioda pelindung sejajar dengan relay, tetapi ini bukan tentang itu. Awalnya saya menggunakan sirkuit ini. Tetapi pada satu titik, saya menarik perhatian pada optocoupler, yang saya tolak pada awalnya.
Orang yang mengganggu kita akan membantu kita

skema
gambar
Kami melihat parameter optocoupler dengan lembar data: PC817C termurah dan paling terjangkau dengan output memungkinkan Anda untuk beralih U: 35 V: I o: 50 mA. Relai yang terhubung ke PLC di tempat kami (di perusahaan) membutuhkan waktu hingga 45 mA. Tanpa stok, tapi cukup cocok. Kebanyakan relay berukuran kecil pada 24 V tarikan sama sekali hingga 15 ... 20 mA. Pada akhirnya, Anda dapat membeli optocoupler yang lebih mahal, jika Anda benar-benar membutuhkannya, ada arus baik hingga 80 mA, dan tegangan hingga 60 V. Kami cocok untuk tata letak dan 817. Agar Anda tidak belajar dari kesalahan Anda, saya memperingatkan Anda bahwa untuk arus keluaran maksimum melalui LED optocoupler, Anda harus melewati lebih dari 7 mA.

Sekali lagi, ingat indikasinya. Untuk menampilkan status output, kami menambahkan seri LED dengan LED optocoupler, kami masih memiliki lebih dari 3 volt jatuh idle di sana. Dan inilah saatnya untuk menggambar dioda pelindung sebelum Anda membakar optocoupler. By the way, saya tidak dapat menemukan metode untuk memilih dioda pelindung, tergantung pada parameter relay. Di satu sisi, itu harus berdenyut, di sisi lain, tegangan tinggi. Selain itu, dapat ditempatkan paralel dengan transistor, mana yang lebih baik? Praktek menunjukkan bahwa diode IN4148 daya rendah cukup dalam hal ini, tapi saya ingin pembenaran teoretis.

skema
gambar

Sebuah resistor 220 ohm ditunjukkan dengan perhitungan lagi pada LED biru atau putih, jika Anda menempatkan merah, arus dalam rangkaian dari 3,5 mA akan meningkat menjadi 9 mA, ini harus diperhitungkan.

Sedikit tentang pemrograman


Yah, ada begitu banyak surat, tetapi saya masih belum sampai ke bagian bawah judul, atau ke ATtiny13. Untuk memprogram pengontrol saya, saya menggunakan proyek FLProg , lingkungan pemrograman visual yang membuat pemrograman pengontrol sedekat mungkin dengan pemrograman PLC di LAD dan FBD. Sirkuit yang dibuat di lingkungan ini, yang juga merupakan proyek, dikompilasi menjadi sketsa Arduino, yang sudah saya unggah dari Arduino ke ATtiny13 atau pengontrol lain dari keluarga AVR. Misalnya, skema yang begitu sederhana

gambar

kompilasi menjadi kode seperti ini:

bool _k1 = 0;
void setup()
{
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
}
void loop()
{
_k1 = (((((!(digitalRead (1)))) &&((digitalRead (2))))) || ((((!(digitalRead (1)))) &&(_k1))));
digitalWrite (3, _k1);
}

- - , . FLProg , «» . , . , pin – , . ATtiny13, : Attiny13 Attiny13a Arduino IDE , : FLProg ATtiny13 ( ), , , ATmega168. FLProg , ATtiny13, . Arduino IDE , .


? ATtiny13, 5 , . , 6 , , , : ? RESET.

, 6, . ?

:

image

, . . , . .

, 50 . , 50 , , . , .

0 2,8 , , . , , 1,1 ( ) 2,9 , 4 . , .

. , , . , , 5 , -- , . 3 ( ) 680 . , . , , .

? 50 , 1 , 50 . , 1 , . , .

, . , .

6+6=12 -, 2?

image

, ? , ) 4 , , , . 0 , , 2,8 , ( ). 24, 0, , 2 – 0,93 1,87 . , . Arduino IDE , ATtiny, . , .

, , 6 10 (!) ATtiny13 ( ). , , . , «» ATtiny. , ATmega8, . :-)

, .

, , , . I/O . , (8/6) , , « ».

, , , «», . .

P.S. , : « ?»

image

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


All Articles