IP-Coach IV. Reaktywacja

IP-Coach IV. Reaktywacja

Nauczanie w myśl zyskującej coraz większą popularność metodologii STEM wymaga stosowania nowoczesnych narzędzi sprzętowych, dających uczniom i studentom lepszy wgląd w naturę badanych obiektów i zjawisk. Zaprezentowany tutaj projekt stanowi doskonały przykład tego, jak w stosunkowo prosty sposób tchnąć nowe życie w osprzęt dydaktyczny starej daty.

Podstawowe parametry:
  • Projekt w formie nakładki typu Arduino Shield, umożliwiający korzystanie z osprzętu IP-Coach bez oryginalnego oprogramowania dla MS-DOS.
  • Interfejsy dla czujników analogowych i konsolek systemu dydaktycznego IP Coach2lib.
  • Wbudowany przekaźnik do sterowania większych obciążeń.
  • Napięcia odniesienia konfigurowane za pomocą zworek.

Fundacja CMA (ang. Centre for Micro-computer Applications) (1), założona w 1987 na uniwersytecie w Amsterdamie, zajmuje się opracowywaniem pomocy naukowych, wspomagających zastosowanie mikrokomputerów do akwizycji danych i sterowania eksperymentami (w szczególności z zakresu fizyki, chemii i biologii, zarówno na poziomie szkolnym, jak i uniwersyteckim). W ofercie znajduje się zarówno specjalne oprogramowanie, czujniki i elementy wykonawcze, jak również interfejsy pomiarowe.

Jednym z pierwszych produktów CMA, dostępnych w Polsce na początku lat 90., była seria IP-Coach. System IP-Coach składa się interfejsu pomiarowego UIA bądź UIB, konsolek pomiarowych, czujników oraz wspomnianego wcześniej oprogramowania IPCoach.

Fotografia 1. Karta UIA

Interfejsy UIA/UIB w postaci kart rozszerzeń (fotografia 1) montowane były w gniazdach ISA komputerów typu IBM PC/XT/AT. Do gniazd interfejsu podłączane były konsolki pomiarowe, do których następnie wpinało się czujniki pomiarowe. Na fotografii 2 można zobaczyć konsolkę analogową z 4 wejściami kanałów przetwornika ADC oraz konsolkę cyfrową, umożliwiającą obsługę prostych sygnałów binarnych.

Fotografia 2. Konsolki pomiarowe IP-Coach

Na fotografii 3 pokazano przykładowe czujniki analogowe, w kolejności od góry: światłowodowy czujnik oświetlenia (w zakresie VIS), czujnik pola magnetycznego (hallotron), czujnik położenia kątowego i sondę temperatury. Czujniki analogowe standardowo wyposażone są we wtyki bananowe w rozmiarze 4 mm. Do zasilania czujników służy napięcie +5 V, podawane na wtyki czerwony i czarny z karty UIA/UIB, zaś sygnał wyjściowy dostępny jest na wtyku żółtym. Czujnik analogowy podłącza się do jednego z wejść ADC konsolki analogowej.

Fotografia 3. Czujniki analogowe IP-Coach z wtykami 4 mm

Program do obsługi systemu zawiera moduły, umożliwiające m.in. kalibrację czujników, akwizycję danych pomiarowych i ich wizualizację w postaci wykresów x-y. Dodatkowo pakiet IP-Coach ma wbudowaną możliwość modelowania zjawisk w oparciu o, zapisany za pomocą języka skryptowego, model numeryczny.

Oryginalne oprogramowanie IP-Coach (do wersji 4.0) przeznaczone było do pracy w systemie MS-DOS. Z biegiem lat szyna ISA komputera PC została zastąpiona nowocześniejszymi rozwiązaniami, a interfejsy UIA/UIB oraz dostępne dodatkowe składniki stały się praktycznie bezużyteczne. Podobnie stało się w przypadku oprogramowania IP-Coach - to zostało zastąpione nowocześniejszymi wersjami. W chwili obecnej obowiązującą wersją jest licencjonowane oprogramowanie Coach7, a jako interfejsy pomiarowe dostępne są: Coach Lab++, WiLab, CLAB i VinciLab 2.

Systemy IP-Coach były chętnie używane w fizycznych pracowniach dydaktycznych wielu wydziałów fizyki, w tym w Instytucie Fizyki Doświadczalnej Uniwersytetu Gdańskiego, gdzie - oprócz kart UIA/UIB - ciągle dostępnych jest kilkanaście rodzajów czujników oraz zestawy konsolek pomiarowych.

IP-Coach i Arduino

W celu umożliwienia ponownego użycia czujników i konsolek ze starego systemu IP-Coach zaprojektowano specjalną nakładkę (shield) do popularnych płytek, zgodnych z ekosystemem Arduino (2) - w szczególności z podstawowym modelem Arduino UNO. Do komunikacji z nakładką i czujnikami przygotowano bibliotekę programistyczną (Coach2lib), która instalowana jest w środowisku Arduino IDE.

Fotografia 4. Nakładka Coach2

Widok nakładki zaprezentowano na fotografii 4, a jej schemat elektryczny można zobaczyć na rysunku 1.

Rysunek 1. Schemat elektryczny płytki Coach2

Podstawowym zastosowaniem utworzonego w ten sposób zestawu mogą być samodzielnie wykonywane ćwiczenia, między innymi w pracowni elektronicznej i informatycznej. Co bardzo ważne - nie jest też wymagane użycie licencjonowanego oprogramowania Coach7.

Konstrukcja interfejsu Coach2

Na interfejs nakładki Coach2 składają się dwa gniazda DB9 (J1, numer #3 na fotografii 1) i DB25 (J4, #4) - analogiczne do tych, w które wyposażony jest oryginalny interfejs UIA/UIB - a także gniazda bananowe 4 mm (J5, J6, J7, #7) do czujników analogowych oraz złącze śrubowe ARK (J11, #6) do miniaturowego przekaźnika RM84 (U3, #5).

Do gniazda DB25 doprowadzone są sygnały z portów cyfrowych (PORTA i PORTC) i wielofunkcyjnego portu PORTX. W systemie IP-Coach i na karcie UIA/UIB sygnały cyfrowe sterowane były przez układ I8255, który umożliwiał jedynie sterowanie portami PORTA jako całością i PORTC jako dwiema niezależnymi połówkami. W przypadku płytki Coach2 sygnały cyfrowe sterowane są już przez 16-bitowy ekspander MCP23S17 (U1, #1). Możliwe jest więc niezależne sterowanie każdym bitem portów cyfrowych oraz generowanie przerwań przy zmianie stanu poszczególnych bitów PORTA i PORTC. Układ MCP23S17 komunikuje się z modułem głównym Arduino za pomocą interfejsu SPI.

Największe zmiany w stosunku do oryginalnych kart UIA/UIB wprowadzono na wyprowadzeniach #10 - #13 i #23 - #25 gniazda DB25. W IP-Coach sygnały te służyły jedynie jako wejścia/wyjścia liczników opartych na układzie I8254. W Coach2 (z wyjątkiem wyprowadzenia #23) sygnały te podłączone są bezpośrednio do płytki Arduino UNO i stanowią dodatkowy, wielofunkcyjny PORTX. Poszczególne piny mogą służyć jako wejścia/wyjścia (tak jak w przypadku PORTA i PORTC), pozwalają na generowanie sygnału PWM i obsługę bloku TIMER1 procesora płytki Arduino. Po dołączeniu biblioteki Wire wyprowadzenia #13 i #25 mogą służyć do sterowania interfejsem I²C.

Przekaźnik RM84 pozwala na włączanie/wyłączanie urządzeń zasilanych bezpośrednio z sieci energetycznej 230 V.

Do gniazda DB9 doprowadzone są wejścia czterech kanałów (CH1-CH4) 10-bitowego przetwornika ADC procesora Arduino (na kartach UIA/UIB był to 8-bitowy przetwornik ADC084), przy czym zakres mierzonych napięć w każdym kanale zmieniono na 0..5 V. Sygnał z kanału CH1 dołączony jest do dodatkowego gniazda 4 mm, umożliwiając tym samym wpinanie czujników analogowych do nakładki z pominięciem dodatkowych konsolek. Na płytce Coach2 znajduje się również 10-bitowy przetwornik cyfrowo-analogowy MCP4811, (U2, #2), którego wyjście dołączone zostało do pinu #9 złącza DB9.

Przetwornik obsługiwany jest przez interfejs SPI i może generować napięcie w zakresie 0…5 V.

Opis dostępnych sygnałów wejścia/wyjścia przedstawiony jest na rysunku 2.

Rysunek 2. Opis wyprowadzeń z nakładki Coach2

Zworki (J10, #8 i J12, #9) służą do konfiguracji napięcia referencyjnego przetwornika analogowo-cyfrowego procesora ATmega. Na płytce znajdują się oczywiście także gniazda szpilkowe wg standardu Arduino (J8, J9, J14, J16) oraz przycisk reset (S1, #10).

Montaż i uruchomienie

Układ należy zmontować na płytce drukowanej, przedstawionej na rysunku 3. Prawidłowo złożone urządzenie działa od razu po zakończeniu montażu i nie wymaga specjalnych zabiegów w celu uruchomienia - należy jedynie pamiętać o odpowiednim ustawieniu zworek.

Rysunek 3. Widok płytki drukowanej nakładki

Obsługa interfejsu

W oprogramowaniu sterującym płytką Coach2 przewidziano dwa zestawy procedur sterujących. Pierwszy z nich opiera się na podejściu charakterystycznym dla środowiska Arduino, drugi zaś umożliwia sterowanie płytką zgodnie ze specyfikacją SCPI (3) (ang. Standard Commands for Programmable Instruments).

Ardunio IDE

Klasyczne (dla środowiska Arduino IDE) programowanie wymaga wstępnej instalacji biblioteki do obsługi interfejsu. Bibliotekę stanowią dwa pliki: źródłowy Coach2lib.cpp i nagłówkowy Coach2lib.h. Instalację biblioteki przeprowadza się bezpośrednio ze środowiska Aduino IDE.

W tworzonym programie należy dołączyć plik nagłówkowy i zdefiniować obiekt COACH. Po inicjacji obiektu (w funkcji setup()), w głównej pętli programu (w funkcji loop()), za pomocą wybranych metod obiektu COACH, steruje się poszczególnymi sygnałami interfejsu. Komunikacja z komputerem sterującym odbywa się za pomocą portu USB płytki Arduino. Port ten emuluje port szeregowy z parametrami domyślnie ustawionymi na 19200, 8, NP, 1.

Przykładowy program (listing 1) inicjuje nakładkę, ustawia pin PA0 jako wyjście, a następnie w pętli zmienia jego stan z HIGH na LOW.

Listing 1. Sterowanie sygnałem PA0 za pomocą programu Arduino

#include “Coach2lib.h”
COACH coach;

void setup()
{
coach.begin();
coach.pinMode(PA0,OUTPUT);
}

void loop()
{
coach.digitalWrite(PA0,HIGH);
delay(100);
coach.digitalWrite(PA0,LOW);
delay(100);
}

SCPI

Alternatywnym sposobem wykorzystania interfejsu Coach2 jest użycie standardu SCPI (zgodnie ze specyfikacją IEEE 488.2). W przeciwieństwie do programowania w środowisku Arduino IDE, od użytkownika nie jest wymagane samodzielne pisanie programu sterującego. Komunikację z płytką można zrealizować przy użyciu dowolnego programu do obsługi terminalu szeregowego, np. Hyperterminal, PuTTY czy choćby monitora portu szeregowego, dostępnego w środowisku Arduino IDE.

Obsługa odbywa się poprzez interakcyjne przesyłanie komunikatów, zapisanych za pomocą ciągów znaków ASCII. Przykładowa sekwencja rozkazów SCPI sprawdza podłączenie nakładki, ustawia pin PA0 jako wyjście a następnie zmienia jego stan na HIGH, po czym na LOW (listing 2).

Listing 2. Sterowanie linią PA0 za pomocą rozkazów SCPI

IDN?
CONF:DIG:DIR:PIN PA0,OUTPUT
OUT:DIG:DATA:PIN PA0,HIGH
OUT:DIG:DATA:PIN PA0,LOW

Przed użyciem standardu SCPI w płytkę należy jednorazowo wgrać szkic SCPICoach2.ino. Na rysunku 4 można zobaczyć drzewo dostępnych rozkazów SCPI.

Rysunek 4. Drzewo rozkazów SCPI
Listing 3. Plik nagłówkowy Coachlib.h

/**
*********************************************************************
* \file Coach2lib.h
*
* funkcjonalność powiązana z układem MCP23S17 oparta jest na:
* https://github.com/MajenkoLibraries/MCP23S17
*
* funkcjonalność powiązana z układem MCP4921 oparta jest na:
* https://github.com/michd/Arduino-MCP492X
*********************************************************************/
#ifndef Coach2lib_h
#define Coach2lib_h

#include <Arduino.h>
#include <SPI.h>

//piny Arduino Uno <--> Coach2:
#define INT0 2 //przerwanie z MCP23S17
#define INT1 3 //przerwanie z DB25, pin#24
#define CS11 4 //CS do MCP4921
#define T1 5 //wejście zegarowe do TIMER1 z DB25, pin#12
#define AINO 6 //wejście do Analog Comparator zDB9, pin#5
#define CS17 7 //CS do MCP23S17

#define ICP1 8 //Input capture do TIMER1 z DB25, pin#11
#define OC1A 9 //wyjście z TIMER1 do DB25, pin#10
#define REED 10 //wyjście do przekaźnika
#define AREF 15 //wejście AREF z DB9, pin#5

//Przyporządkowanie we/wy MCP23S17
#define PA0 0 //DB25, pin#1
#define PA1 1 //DB25, pin#2
#define PA2 2 //DB25, pin#3
#define PA3 3 //DB25, pin#4
#define PA4 4 //DB25, pin#5
#define PA5 5 //DB25, pin#6
#define PA6 6 //DB25, pin#7
#define PA7 7 //DB25, pin#8

#define PC0 8 //DB25, pin#14
#define PC1 9 //DB25, pin#15
#define PC2 10 //DB25, pin#16
#define PC3 11 //DB25, pin#17
#define PC4 12 //DB25, pin#18
#define PC5 13 //DB25, pin#19
#define PC6 14 //DB25, pin#20
#define PC7 15 //DB25, pin#21

//Przyporządkowanie pinów cyfrowych PORTX do Arduino UNO
#define PX0 9 //DB25, pin#10 PWM0 OC1A
#define PX1 8 //DB25, pin#11 ICP1
#define PX2 5 //DB25, pin#3 PWM1 T1 ICP2
#define PX3 18 //DB25, pin#4 SDA A4 I²C
#define PX4 3 //DB25, pin#5 INT1 PWM0 OC2B
#define PX5 19 //DB25, pin#6 SCL A5 I²C

//Przyporządkowanie pinów PWM PORTX do Arduino UNO
#define PWM0 9 //DB25, pin#10 PWM0 OC1A
#define PWM1 5 //DB25, pin#3 PWM1 T1 ICP2
#define PWM2 3 //DB25, pin#5 INT1 PWM0 OC2B

//Przyporządkowanie pinów TONE PORTX do Arduino UNO
#define TONE0 9 //DB25, pin#10 PWM0 OC1A
#define TONE1 5 //DB25, pin#3 PWM1 T1 ICP2
#define TONE2 3 //DB25, pin#5 INT1 PWM0 OC2B

//Przyporządkowanie portów
#define PORTA 0
#define PORTC 1

//Przyporządkowanie stanów przekaźnika
#define OFF 0
#define ON 1

class COACH {
private:
uint8_t _addr=0; // 3-bit chip address
uint8_t _reg[22]; // kopia 22 rejestrów MCP23S17

enum {
IODIRA, IODIRB, IPOLA, IPOLB,
GPINTENA, GPINTENB, DEFVALA, DEFVALB,
INTCONA, INTCONB, IOCONA, IOCONB,
GPPUA, GPPUB, INTFA, INTFB,
INTCAPA, INTCAPB,
GPIOA, GPIOB,
OLATA, OLATB
};

SPISettings _spiSettings;

uint8_t readRegister(uint8_t addr);
void writeRegister(uint8_t addr, uint8_t value);
void readAll(void);
void writeAll(void);

public:
COACH(void);

void begin(void); //CONFIG
void IDN(void); //CONFIG
void analogReference(uint8_t type); //CONFIG

void test(); //DEBUG

void pinMode(uint8_t pin, uint8_t mode); //PORTA, PORTC
void digitalWrite(uint8_t pin, uint8_t state); //PORTA, PORTC
uint8_t digitalRead(uint8_t pin); //PORTA, PORTC
void portMode(uint8_t port, uint8_t value); //PORTA, PORTC

void portMode(uint16_t value); //PORTA, PORTC
void writePort(uint8_t port, uint8_t value); //PORTA, PORTC
void writePort(uint16_t value); //PORTA, PORTC
uint8_t readPort(uint8_t port); //PORTA, PORTC
uint16_t readPort(); //PORTA, PORTC

void pinModeEx(uint8_t pin, uint8_t mode); //PORTX
void digitalWriteEx(uint8_t pin, uint8_t state); //PORTX
uint8_t digitalReadEx(uint8_t pin); //PORTX
void PWM(uint8_t pin, uint16_t value); //PORTX
void tone(uint8_t pin, uint16_t frequency, uint16_t duration=0); //PORTX
void INT(void (*function)(void), uint8_t type); //PORTX INTERRUPT - INT1
void noINT(void); //PORTX INTERRUPT - INT1

uint16_t analogRead(uint8_t pin); //DB9, PORTX
float analogReadVolt(uint8_t pin); //DB9, PORTX
void DAC(uint16_t value); //DB9
void relay(uint8_t state); //DB9
};
#endif

Obsługę komunikacji i parsowanie rozkazów zapewnia ogólnodostępna biblioteka Vrekrer_scpi_parser(4).

dr inż. Janusz J. Młodzianowski
Wydział Matematyki, Fizyki i Informatyki, Uniwersytet Gdański

Oprogramowanie płytki Coach2 zostało opracowane w ramach pracy licencjackiej studenta kierunku fizyka, pana Michała Mazurka, na Wydziale Matematyki, Fizyki i Informatyki Uniwersytetu Gdańskiego.

Literatura
1. Fundacja CMA: https://cma-science.nl
2. Arduino: https://www.arduino.cc
3. Standard SCPI: https://tiny.pl/c6zpv
4. Parser SCPI: https://tiny.pl/c6zlh

Wykaz elementów:
Rezystory:
  • R1: 4,7 kΩ
  • R2: 1 kΩ
Kondensatory:
  • C1, C2: 100 nF
  • C3: 100 μF
  • C4: 10 μF
Półprzewodniki:
  • D1: 1N4148
  • Q1: BC847B
  • U1: MCP23S17
  • U2: MCP4811
Pozostałe:
  • S1: microswitch THT 6x6 mm
  • U3: przekaźnik RM84
  • J1: gniazdo DB-9 do druku
  • J2: gniazdo goldpin 6 pin
  • J3, J13: gniazdo goldpin 8 pin
  • J4: gniazdo DB25A do druku
  • J5: gniazdo bananowe 4 mm (czerwone) DELTRON
  • J6: gniazdo bananowe 4 mm (żółte lub białe) DELTRON
  • J7: gniazdo bananowe 4 mm (czarne) DELTRON
  • J8: wtyk goldpin 6 pin
  • J9, J14: wtyk goldpin 8 pin
  • J10, J12: wtyk goldpin 3 pin
  • J11: gniazdo ARK 5 mm 3-torowe
  • J15: wtyk goldpin 10 pin
  • J16: gniazdo goldpin 10 pin
Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2024
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów