181 Model Railway turntable polarity controller

181 : Model Railway turntable polarity controller

  • Author: Joop aan den Toorn
  • Description: A controller that automatically switches the polarity of DC-type turntables
  • GitHub repository
  • Clock: 0 Hz

How it works

A controller that automatically switches the polarity of DC-type turntables, to prevent short-circuits when rotating the turntable along DC-powered tracks. Every track that connects the turntable to the main tracks must include a short, isolated 'sensing track' between the normal tracks and the turntable. When the turntable rotates and makes contact with any of the tracks, it powers the sensing element. If the polarity does not match that of the main tracks, the turntable polarity controller will invert it.

This controller is designed to work with a Fleischmann 6152 turntable, using the connecting elements 6153 as sensing elements. The sensing elements must be isolated from the main tracks.

The polarity controller assumes that every sensing element has two tracks. Both are connected with a high-impedance resistor to the main track they respectively connect to. e.g.

---<MAIN L>---[ISOLATOR]---<SENS L>---[CONTACT]---<TURNTABLE L>---  
    |   |   |   |   |   |   |   |   |   |   |   |   |   |   |     
---<MAIN R>---[ISOLATOR]---<SENS R>---[CONTACT]---<TURNTABLE R>---  
  
                          ___  
MAIN TRACK R/L    -------|    \  
                   |     |     \   
                High R   | XOR  |-----Polarity switch signal  
                   |     |     /   
SENSING TRACK R/L--------|___/   
  • Every track and corresponding sensing element form two inputs for an external XOR port. when polarity is not equal, the XOR output will go from 0 -> 1, which is fed into the polarity controller [IN0-IN7, D1-D4]. Any of the XOR ports can command a change in polarity.
  • The tracks are suitably connected through resistors and (zener) diodes to the XOR ports, to convert to digital signals and prevent an overvoltage on its inputs
  • If the polarity controller receives a high input for prolonged periods of time, it assumes an error state where the turntable is not powered. To this end, connect [OUT6], the change-polarity control signal through a suitable RC delay to [D0] to trigger an error.
  • The turntable polarity controller controls a full-bridge driver on [OUT2] and [OUT3] that connects the turntable to the main tracks.
  • In the original design, the polarity controller uses digital control signals to control the full-bridge driver. The setup uses N-channel mosfets, where the gate voltage supply is generated by boosting the track voltage.
  • XOR input circuitry, XOR ports, full bridge driver, mosfets and gate-voltage supply are all external to the polarity controller, but must be implemented if this design is to be used.
  • The clock signal can be generated by the controller. Connect IO port [D6] and [D7] using an RC network to tune the frequency.
  • The controller assumes a reset signal is always activated before the controller is used. An RC network to VCC can keep the reset signal active while powering up. Make sure to connect a switch that can ground the reset input to be able to activate the controller after an error.

POLARITY CONTROLLER
The inputs that can trigger a polarity change are connected through OR ports, hence every input can trigger a polarity change.

The trigger is used to drive a binary counter that counts down from 3..0 on the clock signal, which in turn generates signals for the full bridge driver, which is controlled by OUT2 and OUT3. To avoid shoot-through while switching in the FETs that connect tracks to either polarity, the outputs are only enabled on counts 1 and 3, using counts 0 and 2 to turn all FETS off. The counter generates a trigger when at value 0 and 2, so as to always end up in count 1 or 3. For miscellaneous purposes, the counter signal is provided on [OUT0] and [OUT1].

The counter trigger signal is provided on output OUT6, which can be connected through an RC delay on D0 to trigger an error when the trigger is active for an unusually long period of time. This may happen in case of short circuits at the tracks or other electrical issues. All driver outputs are disabled while an error is active.

The reset signal removes errors and disables the counter and bridge driver outputs.

An inverter network can be used to generate a clock by the IC. To this end, connect D6 and D7 through an RC network. The delay will tune the clock frequency.

How to test

Always reset the controller before using it. After a reset, provide a HIGH polarity switch trigger signal on IN0..IN7 or D1..D4 and provide a clock signal on CLK. The counter output must count down between 3..0 on the clock frequency while the trigger signal is HIGH. Also, OUT4 and OUT6 must be HIGH while the trigger is provided.

Remove the trigger signal. OUT4 must immediately output a LOW.
The counter must now stop at either 1 or 3 but never at 0 or 2. OUT6 will remain HIGH while counting, but must be LOW when the counter has stopped.

If a particular track polarity is A and its inverse is B, the following conditions must be met:

COUNT = 3, polarity A is active. OUT2 = HIGH, OUT3 = LOW  
COUNT = 2, tracks are disabled.  OUT2 = LOW,  OUT3 = LOW  
COUNT = 1, polarity B is active. OUT2 = LOW,  OUT3 = HIGH  
COUNT = 0, tracks are disabled.  OUT2 = LOW,  OUT3 = LOW  

Outputs OUT0..OUT3 must be LOW when a LOW->HIGH pulse is provided on D0, triggering an error which is indicated by a HIGH on OUT7.
Apply a reset signal to enable the outputs again, and ensure OUT7 is LOW.

Connect D6 and D7 through an RC network. Verify a self-oscillation is observed at output D7

IO

#InputOutputBidirectional
0IN0: trigger signal to change polarityOUT0: counter signalD0: error input. Use to activate an error and disable outputs.
1IN1: trigger signal to change polarityOUT1: counter signalD1: trigger signal to change polarity
2IN2: trigger signal to change polarityOUT2: full bridge control signal for polarity AD2: trigger signal to change polarity
3IN3: trigger signal to change polarityOUT3: full bridge control signal for polarity BD3: trigger signal to change polarity
4IN4: trigger signal to change polarityOUT4: indicates a polarity switch trigger is active on one of the inputsD4: trigger signal to change polarity
5IN5: trigger signal to change polarityOUT5: VCCD5: not used
6IN6: trigger signal to change polarityOUT6: counter enabled signalD6: oscillator input
7IN7: trigger signal to change polarityOUT7: active error signalD7: oscillator output

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (TinyTapeout 04 Factory Test) tt_um_vga_clock (VGA clock) tt_um_seven_segment_seconds (7 segment seconds) tt_um_marno_factorize (Number Factorizer) tt_um_sorter (Odd even sorter) tt_um_bulls_and_cows (The Bulls and Cows game) tt_um_loopback (TinyTapeout 04 Loopback Test Module) tt_um_devinatkin_arduino_vga (VGA Output for Arduino) tt_um_wokwi_371604537887211521 (Digital Cipher & Interlock System) tt_um_urish_simon (Simon Says game) tt_um_wokwi_372184284115580929 (YKM 7-seg driver) tt_um_currymottled (Configurable PID Block) tt_um_yeokm1_pwm_audio (PWM audio) tt_um_dcb277_ALU (4-bit ALU) tt_um_rgb_mixer (RGB Mixer) tt_um_loopback (TinyTapeout 04 Loopback Test Module) tt_um_algofoogle_raybox_zero (raybox-zero) tt_um_morningjava_top (ChipTune) tt_um_loopback (TinyTapeout 04 Loopback Test Module) tt_um_eldritch_pwm_peripheral (OpenSource PWM Peripheral) tt_um_phansel_laplace_lut (Experiment Number Six: Laplace LUT) tt_um_ks_pyamnihc (Karplus-Strong String Synthesis) tt_um_dlmiles_tt04_poc_usbdev (USB Device) tt_um_thorkn_pwmaudio (Audio-PWM-Synth) tt_um_wokwi_374029622762967041 (German Traffic Light) tt_um_dandy_dance (Dandy VGA) tt_um_robojan_top (Tiny Breakout) tt_um_vc_cpu (VC 16-bit CPU) tt_um_MichaelBell_nanoV (Risc-V Nano V) tt_um_urish_usb_cdc (USB CDC (Serial)) tt_um_tiny_processor (Tiny processor) tt_um_f_hal_fft (fft-4-tt) tt_um_tomkeddie_a (LED Panel Driver) tt_um_wokwi_370722051572189185 (OSU Counter) tt_um_wokwi_370796071922577409 (Even digits) tt_um_wokwi_370709383347782657 (Traffic light) tt_um_wokwi_371425977920989185 (Tutorial4) tt_um_riceshelley_tinyFPGA (Grain-Flex-FPGA) tt_um_mgyenik_bfcpu (BFCPU) tt_um_machinaut_systolic (AI Decelerator) tt_um_wokwi_374140166551523329 (Tiny (3-bit) LFSR) tt_um_jk2102 (Pulsed Plasma Thruster (PPT) Controller) tt_um_jayraj4021_SAP1_cpu (SAP-1 CPU) tt_um_wokwi_370533670565165057 (Impulse counter) tt_um_ashleyjr_delay_line (Delay Line) tt_um_simplepiano (Simple Piano) tt_um_wokwi_374292646686728193 (Ripple-Carry Adder) tt_um_led_multiplexer_display (Led Multiplexer Display) tt_um_mjbella_led_matrix_driver (LED Matrix Driver) tt_um_fifo_stevej (8-bit FIFO with depth 16.) tt_um_robojan_pong_top (Pong) tt_um_wokwi_374962052813090817 (8 panel display"") tt_um_wokwi_370690644715216897 (Traffic Light) tt_um_wokwi_374494377414857729 (Model Railway turntable polarity controller) tt_um_wokwi_347144898258928211 (Customizable UART string tx) tt_um_wokwi_347497504164545108 (7-Seg 'Tiny Tapeout' Display) tt_um_wokwi_347140425276981843 (UART character tx) tt_um_wokwi_347417602591556180 (Padlock) tt_um_noritsuna_8bitcounter_AI (8bits Counter by AI) tt_um_fm_transmitter (FM Transmitter) tt_um_wokwi_369864099838656513 (Test 4x4 memory) tt_um_htfab_rotfpga2 (ROTFPGA v2) tt_um_losaias (Arithmetic logic unit of four operations between two 8-bit numbers) tt_um_fir_top (FIR Filter) tt_um_santacrc_tamagotchi (Tamagotchi) tt_um_4_LUT_Baungarten (LFMPDM (Lightning Fast Matrix Programmable Design Module)) tt_um_RELOG_10M_Juan_Garcial (7 SEGMENTS CLOCK) tt_um_MultiPatternLEDSequencer_RSYO3000 (Multi Pattern LED Sequencer) tt_um_pwm (Generador de PWM) tt_um_chip_SP_measure_delay (Multi stage path for delay measurements.) tt_um_chip_SP_Soy_de_Zacapa (ASCII Text Printer Circuit) tt_um_fing_synchronizer_hga (Clock synchronizer) tt_um_db_PWM (Simple PWM Generator) tt_um_RS_Vfreq (CLK Frequency Divider) tt_um_ja_TrafficLight (UIS Traffic Light) tt_um_adder_NestorMatajira (4 bit adder ) tt_um_ALU_NicolasOrcasitas (8-bit ALU) tt_um_ccollatz_SergioOliveros (Collatz Conjecture) tt_um_wokwi_370011087462055937 (8 bit 4 data sorting network) tt_um_wokwi_374968111036708865 (BCD to 7 segments) tt_um_wokwi_374967675785369601 (4 bit full adder) tt_um_wokwi_374974793636964353 (Circuito Religioso) tt_um_wokwi_374815911155542017 (Demultiplexor NAND) tt_um_wokwi_374903567624066049 (Sumador/Sustractor de 3 bit con acarreo y prestamo) tt_um_wokwi_374515580784897025 (Hardware Lock) tt_um_wokwi_374909346558831617 (Custom falling and rising edge detection) tt_um_alu (4-bit-alu) tt_um_pong_neopixel (Angardo's pong) tt_um_LEOGLM_hamming_code_top ((11,7) hamming code encoder and decoder with UART) tt_um_adriannovosel_top (Impulse counter) tt_um_wokwi_374969806854695937 (State machine of an impulse counter) tt_um_wokwi_375061599421794305 (Logic Circuit 1) tt_um_biased_trng (Variable Duty-Cycle TRNG) tt_um_top (Modem Multimodo) tt_um_wokwi_372347167704674305 (SAR ADC Backend) tt_um_wokwi_375176944142127105 (FCFM 7-segment display) tt_um_rodrigomunoz1_rotempsensor_top (another ring oscillator based temperature sensor) tt_um_USM_temp_sens_hyst (RO-based temperature sensor with hysteresis) tt_um_FSM (Microrobotics FSM) tt_um_wokwi_375042398768251905 (MINI ALU) tt_um_wokwi_374778387606763521 (PWM Quisquilloso) tt_um_CPU (CPU 8 bit) tt_um_simple_processor_pablopabota (A Risc-V Instruction memory i2c programmer) tt_um_wokwi_375246321309880321 (IFSC 6-bit Locker) tt_um_wokwi_375217288209912833 (Randomizer and status checker) tt_um_wokwi_375245713375900673 (Simulador de cruzamento de semáforo) tt_um_wokwi_374636462642973697 (Full_adder_carry_juang_garzons) tt_um_ternaryPC_radixconvert (4-trit balanced ternary program counter and convertor) tt_um_darkfsegura_collatz (uDATAPATH_Collatz) tt_um_wokwi_375174630101280769 (Adder) tt_um_wokwi_375163050120587265 (Binary to 7 segment) tt_um_wokwi_375165100039571457 (Neuron) tt_um_silva (Later) tt_um_shift (serializer) tt_um_alu4_alonso59 (4-bits 1-channel PWM and ALU 4 bits) tt_um_mod_u_cnt_BCD (up-down counter with parallel load and BCD output) tt_um_ciro (Later) tt_um_control (Contador con carga) tt_um_onehot (onehot_decoder) tt_um_santiago (CDMA Transmitter/Receiver) tt_um_divider_urielcho (clock divider) tt_um_pwl_RaulprTech (reciprocal) tt_um_fabian (Later) tt_um_thezoq2_tmng (Time Multiplexed Nand-gate) tt_um_uninorte (Octal classifier) tt_um_dlmiles_muldiv4 (MULDIV unit (4-bit signed/unsigned)) tt_um_rs_write_decodifier_fjrn_cinvestav (RS Write Decodifier) tt_um_BounceFSM_RSX92 (Password FSM) tt_um_priority_decoder_Juan_Garcial (Priority e) tt_um_FreqMeter_Juan_Garcial (frecuencimeter) tt_um_sahrdayalfsr (lfsr random number generator) tt_um_i2c (i2c_6 bits) tt_um_wokwi_375227079413963777 (Fastest Finger) tt_um_wokwi_375300958229329921 (Fastest Finger (Clocked)) tt_um_zeptobars (Oscillators II) tt_um_rebot449_lingret_ALU_Top (Simple ALU) tt_um_loopback (TinyTapeout 04 Loopback Test Module) tt_um_wokwi_375288605206694913 (Adjustable Frequency LED Chaser) tt_um_wokwi_375310871188385793 (Simple QSPI DAC) tt_um_quardinlyttle_top (AQALU) tt_um_wokwi_375326293008530433 (Simple TMR) tt_um_chiplet_jtag (Poor Person's Boundary Scan) tt_um_wokwi_375248885704300545 (Probador de lógica básico) tt_um_rejunity_telluride2023_neuron (LIF Neuron, Telluride 2023) tt_um_kpwebb_adder (rusty_adder) Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available