[24-OCT-24] The Implantable Stimulator-Transponder (A3041) receives commands through its crystal radio, interprets these commands and executes them with its own embedded microprocessor, applies stimuli to its two stimulus leads, transmits a synchronizing telemetry signal upon command, and reports on its own battery voltage. All versions of the A3014 stimulator are powered by CR-series lithium primary cell. These batteries are not rechargeable, but provide long life and ample stimulus current. We ship the A3041 with a magnet attached. The magnet that keeps it in its sleep state, which minimises its current consumption. When we remove the magnet, the A3041 enters its wake state. When the A3041 receives a command, it becomes active. If instructed to do so, the A3041 will generate a stimulus consisting of electrical pulses of current applied to its stimulation leads. The magnitude of the current, the duration of the pulses, their period, their quantity, as well as whether they should be regular or random, are all specified in a single command. By uploading user-programs through its crystal radio and into the memory of its microprocessor, we can configure the A3041 to provide arbitrarily complex stimuli that suit our own experiment.
The A3041A-DD provides two pins on the ends of its stimulus leads that we can connect to an Implantable Light-Emitting Diode (ILED) to provide optogenetic stimulation, or to a bipolar electrode to provide direct electrical stimulation. All versions of the A3041 generate stimuli by connecting a current source to its stimulus leads. The current source is programmable by a current code. The A3041A provides currents from 200 μA to 10 mA. The maximum voltage the A3041 can apply to its stimulus leads is fixed for each version of the device. The A3041A can deliver at most 3.3 V. Other voltage options are 3.0 V and 5.0 V. Here is an example specification.
Property | Value |
---|---|
Volume of Implant | 0.95 ml |
Mass of Implant | 1.7 g |
Outer Dimensions | 14 mm dia, 6.5 mm thick |
Battery Type | CR1220 |
Nominal Battery Capacity | 40 mAhr |
High Power Stimulus Life | 40 hr |
Low Power Stimulus Life | 240 hr |
Sleep Current | 2.2 μA |
Sleep Control | sleeps in magnetic field |
Wake Current | 5.5 μA |
Active Current | 140 μA @ 37°C |
Stimulus Voltage | 3.3 V |
Stimulus Current Range | 200 μA to 10 mA |
Pulse Length Range | 2 ms to 60 s |
Pulse Period Range | 4 ms to 60 s |
Stimulus Length Range | 1 to 60k pulses |
Operating Range | 30 cm |
We present the configuration options for the A3041 ISTs in the table below. The battery type dictates the IST's battery capacity and the device's mass. The lead resistance dictates the diameter of the the lead, and its flexibility. The higher the lead resistance, the thinner and more flexible the lead. Electrical stimulus applications tend to need low currents and require only two or three volts across the target tissue, so we can use flexible high-resistance leads for electrical stimulation. But optogenetic applications need higher currents and at least 3.3 V stimulus voltage, so we must use shorter, lower-resistance leads to drive the implantable LEDs.
Option | Choices |
---|---|
Battery (Type) | CR1220, CR1616, CR1620, CR2032, CR2330. |
Stimulus Voltage (V) | 3.0, 3.3, 5.0. |
Minimum Stimulus Current (μA) | 20 to 2,000 |
Maximum Stimulus Current (mA) | 0.2 to 10 |
Lead Length (mm) | 30 mm to 260 mm |
Lead Resistance (Ω/cm) | 1.6, 6.3, 25 |
The operating range of the IST is the range from its command antenna for which reception of commands is ≥95%. We specify operating life for two reference stimuli. The high-power stimulus (HPS) is 5-mA pulses, each 10 ms long, at 10 Hz. The HPS life is the number of hours an IST with a fresh battery can sustain the stimulus without pause. The low-power stimulus (LPS) is 200 μA pulses, each 2.5 ms long, at 100 Hz. The LPS life is the number of hours a fresh battery can provide the low-power stimulus. In Battery Life we provide rules for determining whether a particular battery can support a planned experiment.
The A3041 uses its antenna to receive wireless commands and to transmit wireless messages. We transmit commands to an IST with a command transmitter such as a Telemetry Control Box (TCB-B16), which provides both telemetry reception for telemetry sensors and command transmission for implanted stimulators. We control the command transmitter with the Stimulator Tool in our LWDAQ software. The IST can transmit acknowledgements, its version number, and battery measurements. It can identify itself in response to a multicast request. It will transmit a synchronizing signal that shows when its stimulus pulses occur. When the A3041 transmits its synchronizing signal, it uses a telemetry channel that we assign in the transmit command. All IST transmissions use our SCT telemetry system protocol. The commands they receive from the command transmitter use the same radio frequency, but a different protocol. The commands consist of slow, high-power pulses, while the transmissions consist of micropower, frequency-modulated bursts.
In addition to its buit-in stimulator function, the A3041 allows us to upload our own programs to run on its embedded OSR8 microprocessor. These programs, written in the OSR8 assembly language, can be up to 2 KBytes long. By means of the user programs we can provide new and complex stimuli as required by particular experiments. See the Stimulator Tool manual for details of how to prepare and upload programs to the A3041 memory. The A3041's user program memory is volatile, so all programs are lost when the device deactivates into its wake or sleep states.
[24-OCT-24] Here are the versions of the A3041 we have defined so far. Each version has a letter that constrains the battery type, battery mounting, stimulus voltage, and programmable current range. These configuration options dictate the operating life and mass of the resulting device.
Version | Battery Type |
Battery Capacity (mAhr) |
Stim Voltage (V) |
Stim Current (mA) |
Sleep Life (wk) |
Wake Life (wk) |
HPS Life (hr) |
LPS Life (dy) |
Volume (ml) |
Mass (g) |
---|---|---|---|---|---|---|---|---|---|---|
A3041A | CR1220 | 40 | 3.3 | 0.2-10 | 120 | 43 | 40 | 8 | 0.95 | 1.7 |
A3041B | CR1616 | 60 | 3.3 | 0.2-10 | 180 | 64 | 60 | 12 | 1.2 | 2.3 |
A3041C | CR1620 | 80 | 3.3 | 0.2-10 | 240 | 87 | 80 | 16 | 1.3 | 2.5 |
A3041D | CR2032 | 200 | 3.3 | 0.2-10 | 600 | 220 | 200 | 40 | 2.5 | 5.0 |
A3041E | CR2450 | 600 | 5.0V | 0.5-30 | 1800 | 650 | 600 | 120 | 4.0 | 8.7 |
We specify the lifetime of the IST in four distinct states. These are sleeping, waking, delivering a high-power stimulus, and delivering a low-power stimulus. The IST sleeps when it is in contact with a magnet, which is how we store IST on the shelf. It's sleep life is how long it can sleep before exhausting its battery. Note that sleep life is not the same as "shelf life". The "shelf life" might better be defined as the time the IST can spend sleeping and still have almost all of its battery capacity remaining, in which case the "shelf life" would be 10% of the sleep life. An IST wakes up when we keep it away from any magnets.
When awake, the IST's crystal radio is powered up and ready to receive commands. It's wake life is how long it can remain awake when starting with a fresh battery. An IST activates when it receives a command. When active, its logic chip and stimulation voltage are powered up. We do not specify an "active life" because we assume that an active IST is providing a stimulus. We define two stimuli for the purpose of specifying stimulus life. The high-powered stimulus (HPS) consists of 10-ms pulses of 5 mA delivered to an Implantable Light-Emitting Diode (ILED) at 10 Hz. The HPS life is the number of hours of high-powered stimulus the IST can provide with a fresh battery. The low-powered stimulus (LPS) consists of 2.5-ms pulses of 200-μA at 100 Hz, and the LPS life is the number of hours of low-power stimulus the IST can provide with a fresh battery.
We can equip the A3041 with any of our flexible leads. By default, we use orange and purple B-Leads. These are 0.7 mm in diameter, contain a helix of stainless steel wire 450-μm in diameter, and have resistance 6.3 Ω/cm. These leads can be anything from 30 mm to 280 mm long. At the ends of the leads, we can have bares wire for delivering electrical stimulation, or pins to connect to depth electrodes or an implantable light-emitting diode (ILED). See our Catalog of Electrodes and our ILED manual for details.
[24-OCT-24] We operate ISTs with a Telemetry Control Box (TCB). At the moment, the only version of TCB we manufacture that provides command transmission is the TCB-B16, which is equipped with sixteen antenna connections. Each TCB-B16 antenna can act as both telemetry receiver and command transmitter. We operate the TCB with the Stimulator Tool. The Stimulator Tool manual also contains instructions on how to compose and upload your own programs to the IST so that it can implement specialized stimuli.
The TCB receives its power from the PoE connection, and all communication with the TCB takes place over the same PoE cable. The burst of power required to transmit on sixteen antennas comes from an internal lithium-polymer battery that recharges in the minutes after command transmission.
[29-NOV-23] The A3041's stimulus output is limited in both current and voltage: there is a maximum voltage it will apply to the stimulus leads and a maximum current it will allow to flow through the stimulus leads. The maximum voltage is a function of the boost converter we load onto the A3041 circuit. It can be 3.0 V, 3.3 V, or 5.0 V. In the case of the A3041A, the maximum voltage is 3.3 V. The current is controlled by a four-bit current code we select in Stimulator Tool. Its value can be 0-15. The magnitude of the current is inversely proportional to the value of a resistor on the circuit (See R6 S3041A_1). In the A3041A, the maximum current is a little under 10 mA, while the minimum is a little over 200 μA.
An ideal current source would deliver the same current to any load. But our current source is not ideal. If we short the stimulus pins together, the maximum current is 9.4 mA. If we connect an LED to the pins the stimulus pins, the maximum current is 5.5 mA. With the stimulus leads open circuit, there is no path for the stimulus current. The stimulus current sink applies the maximum voltage to the leads. With a white LED attached, the stimulus voltage is the forward voltage of the LED, which is roughly 2.9 V.
If we want to deliver 10 mA to an ILED at the end of 130-mm leads, the resistance of the B-Lead becomes significant. We have a total of 26 cm of 0.7-mm diameter B-Lead, so total resistance is 26 × 6.3 Ω/cm = 164 Ω. Our 10-mA current will drop 1.6 V. But the LED itself needs around 2.9 V, so our total stimulus voltage must be 4.5 V. We can use a 5.0-V version of the A3041. Another option is to use a 3.3-V version, but equip the stimulator with the low-resistance D-Lead instead. The D-Lead is made with thicker wire and wound with fewer coils per unit length. It is stiffer than the B-Lead, but its resistance is only 1.6 Ω/cm. A 3.3-V stimulator can drive 10 mA through a 2.9-V LED with 26 cm of D-Lead to deliver the current.
[24-OCT-24] Each battery has a nominal capacity, which is the amount of electrical charge it can deliver before it is exhausted. We express battery capacities in milliamp-hours (mAhr). One milliamp-hour of battery capacity will provide us with a certain amount of sleep, wake, or stimulus. The device is asleep when sitting on its magnet. The device is awake when it has been removed from its magnet and is doing nothing except for waiting for commands. We define a high-power stimulus to be 10-ms, 5-mA pulses delivered to an ILED at 10 Hz, and a low-power stimulus to be 2.5-ms, 200-μA pulses deliverd to a 10-kΩ load at 10 Hz. We use the following guidelines to estimate the battery capacity that will be consumed by our planned use of a stimulator.
State | Consumption Rule |
---|---|
Sleep (disabled by magnet, sitting on shelf) | 20 days per 1 mAhr |
Wake (enabled and awaiting commands) | 7 days per 1 mAhr |
Delivering High-Power Stimulus (5 mA, 10 ms, 10 Hz) | 1 hr per 1 mAhr |
Delivering Low-Power Stimulus (100 μA, 2.5 ms, 100 Hz) | 5 hr per 1 mAhr |
Example: We propose to implant ISTs in mice, administer an average of 20 high-power stimuli per day, each stimulus lasting for one minute, and continue doing so for six weeks. Our ISTs have been sitting on the shelf for 60 days with their magnets attached, sleeping. The sleep used 3 mAhr. We remove the magnets, and our ISTs wake up. We implant and begin our experiment. The device will be awake for six weeks, which will use 6 mAhr. We want to deliver 20 stim/day × 42 days × 1 min/stim = 14 hr of high-power stimulus, which uses another 14 mAhr of battery capacity. Our total is 23 mAhr. The CR1220 capacity is 40 mAhr. We 17 mAhr of extra capacity.
We equip all our ISTs with CR-Series lithium primary cells that are specified for high-current and pulse operation, as is required by the stimulator. Lithium cells provide the highest charge density of all existing battery technologies, and of all types of lithium primary cell, the CR-Series cells made by Murata are the most tolerant of pulsed loads. The capacity of lithium batteries decreases significantly if we exceed their rated current. For each battery we provide a maximum current for which our battery life calculations will be accurate.
Battery | Capacity (mAhr) |
Diameter (mm) |
Thickness (mm) |
Mass (g) | Capacity per Gram (mAhr/g) |
Max Cont Stimulus (mA) |
---|---|---|---|---|---|---|
CR1220 | 40 | 12.5 | 2.0 | 0.77 | 52 | 1.0 |
CR1616 | 60 | 16 | 1.6 | 1.1 | 54 | 1.2 |
CR1620 | 80 | 16 | 2.0 | 1.3 | 61 | 1.4 |
CR2016 | 90 | 20 | 1.6 | 1.8 | 50 | 1.5 |
CR2025 | 160 | 20 | 2.5 | 2.6 | 62 | 2.0 |
CR2032 | 200 | 20 | 3.2 | 3.0 | 67 | 2.2 |
CR2450 | 600 | 24.5 | 5.0 | 6.2 | 97 | 4.0 |
The voltage produced by these batteries is 3.0 V for most of the battery's life, provided the load is less than 100 μA. During a stimulus pulse, the battery voltage drops well below 3.0 V. If an A3041's battery voltage drops below 2.4 V, the circuit will shut down. The smallest battery that provides reliable operation of the A3041 is the CR1220 by Murata.
The IST can be in one of three states: sleep, wake and active. The IST sleeps when it has a magnet attached to its body. In sleep, it consumes 2.0 μA. Without a magnet, the IST is awake until it receives a command. While awake, the IST consumes 5.5 μA. When it receives a command, it activates, and remains active until it has completed all instructions. The IST's current consumption increases with stimulation current, pulse length, pulse frequency, synchronizing signal rate, and randomization. The cost of generating timing signals for pulses is 0.28 μA/PPS (microamp per pulse per second). The additional cost of randomizing the production of these pulses is 0.86 μA/PPS. The cost of synchronizing transmission is 0.22 μA/SPS (microamp per sample per second). The active current increases with temperature, see here. To account for this increase, we add a temperature-dependent correction to the active current. At 37°C, an active IST consumes roughly 40 μA more than it does at 25°C.
As we increase the current code, our stimulus current increases. As the stimulus current increases, so does the battery current. If our stimulus operates on a 10% duty cycle, the battery current drawn by the stimulus will be almost ten times smaller.
In a high-power stimulus we have 5 mA pulses with 10% duty cycle. The average stimulus current is 0.5 mA. The current drawing from the battery is higher than our stimulus current. During the pulses, battery current is 7.7 mA. If we deliver the high-power stimulus for ten hours, we draw 7.7 mA from the battery for one hour and 140 μA for nine hours. The average battery current during the high-power stimulus is ≈ 0.90 mA. The high-power stimulus life is roughly one hour per milliamp-hour of nominal battery capacity.
When it comes to determining the lifetime of other stimuli, we first make sure the average stimulus current, IAVE, is less than the maximum continuous stimulus current for our battery, IMAX. When we calculate the average stimulus current, we must do so over a one-second period. If we deliver 10-s pulses of 10 mA once every 100 s, we must regard this as IAVE = 10 mA for 10% of the time, which exceeds IMAX for all our batteries. But if we deliver 10-ms pulses of 10 mA once every 100 ms, IAVE = 1 mA, and this average current is tolerated by all our batteries. Provided that IAVE ≤ IMAX, we get 1 hr × 0.5 mA ÷ IAVE hours of our stimulus for each 1 mAhr of battery capacity. Here we are using the average stimulus current of our high-power stimulus as our reference point for scaling the stimulus lifetime.
Example: Our stimulus consists of 10-mA pulses, 30 ms at 10 Hz. Our average stimulus current is 3.0 mA. We need the CR2450 battery to provide such a stimulus. For 1 mAhr of battery capacity, we get 1/6 hr of stimulus. The battery has capacity 600 mAhr, so it can provide the stimulus for 100 hr.
[29-DEC-23] The A3041 functions are built around an OSR8 microprocessor. The firmware and software running in its logic chip are contained in a single GitHub repository P3041. The main program is ROM.asm. Through its crystal radio, the A3041 receives commands in the form of strings of instructions. Each instruction consists of an operation code, one or more operands, and one or more data bytes. The table below describes the instructions in detail.
Opcode | Pneumonic | Name | Operands | Description |
---|---|---|---|---|
0 | op_stop | Stimulus Stop | 0 | Stops the main program stimulus. |
1 | op_start | Stimulus Start | 8 | Defines and starts a main program stimulus. |
2 | op_xon | Synchronizing Signal | 2 | Start sync signal with frequency and channel. |
3 | op_off | Acknowledgement | 1 | Transmit acknowledgement with key. |
4 | op_batt | Report Battery Voltage | 0 | Measure and transmit battery voltage. |
5 | op_id | Announce Identity | 0 | All stimulators self-identify. |
6 | op_pgld | Load Program | 1 | Load a block of user program bytes. |
7 | op_pgon | Run Program | 0 | Run the user program. |
8 | op_pgoff | Halt Program | 0 | Halt the user program. |
9 | op_pgrst | Reset Load Pointer | 0 | Reset user program load location. |
10 | op_shdn | Shutdown | 0 | Deactivated the device, forcing it into wake state. |
11 | op_ver | Report Version | 0 | Transmit version number. |
A command consists of two ID bytes to specify the IST. The identifier 0xFFFF is the multicast ID. All ISTs will respond. We use the multicast ID to get all ISTs to identify themselves. Following the ID are the opcodes and their operands and data bytes. Last of all comes a two-byte checksum. We can see these bytes being listed before transmission in the text window of the Stimulator Tool when we have the Verbose box checked.
The IST can provide stimuli in one of two ways: a main-program stimulus or a user-program stimulus. The main program stimulus is entirely defined with five parameters: pulse length, pulse interval, number of pulses, pulse current, and randomize flag. The user program stimulus is defined by an OSR8 assembly program we upload to the stimulator. This program is subject to three restrictions: it executes once every 5 ms, it must not take more than 4 ms to execute, and its program size cannot exceed 4 KByte. Aside from these restrictions, the user program can implement any stimulus behavior.
To upload a user program, we use the Stimulator Tool's transmit panel, as described in User Programs. We prepare our user program in a text file containing OSR8 assembler. When we press Run Program, Stimulator Tool uploads and runs our program. It resets the program load location with op_pgrst. It uploads the program in one or more chunks of up to 255 bytes each using op_pgld instructions. This upload takes place at roughly 1 KByte/s. A 4-KByte program broken into 32 chunks of 128 bytes each will take roughly ten seconds to upload. Once the upload is complete, the Stimulator starts it running with op_pgon.
A user program can either halt itself, or run until the IST receives an op_off instruction. The Halt Program button in the Transmit Panel sends op_off to stop the program. The A3041 has no ability to remember a user program after it deactivates, so we must keep the device in its active state in order to remember a program. When we define a special stimulus, which we want to deliver upon command, the user-program should continue to run, waiting for a stimulus start command. When the IST receives a stimulus start, the five parameters of a main-program stimulus will be set, and the stimulus run flag will be set. The user program, seeing that a main program stimulus has commenced, disables the main program stimulus and begins its own stimulus. If the user program stimulus needs to be configured, it can use the five parameters uploaded to the IST with the main program stimulus start instruction.
The stimulus current is delivered by a bipolar transistor, 2SC6026. We deliver a current to the base and trust that the current through the collector of the transistor will be proportional to the base current. When we ask this transistor to deliver 10 mA with a base current of 50 μA, we need to allow at least 0.5 V collector-emitter voltage for the current to flow. With a 3.3-V power supply, we are left with only 2.8 V for an LED that requires 2.9 V, hence the reduced LED current for the higher current codes.
[20-MAY-24] The Implantable Stimulator-Transponder (A3041) is equipped with a thirty-millimeter, stranded-steel, loop antenna (a D-Antenna). The IST uses this antenna for receiving commands, but also for its "transponding" function, which includes transmitting a synchronizing signal, command acknowledgements, and battery measurements. We transmit commands to the implant by turning on and off a 915-MHz power source. The implant's crystal radio generates a logic HI when the power at its antenna is greater than a threshold. It generates a logic LO otherwise. We construct the command out of a pattern of HI and LO levels. Implants like the IST are almost always inactive. Their logic chips are disabled. The command transmission begins with an initializing pulse that wakes up the implant and enables the logic chip so that it can receive and interpret the command.
The initializing pulse lasts for tI ≥5 ms. While the pulse endures, the crystal radio asserts RP (Radio Frequency Power), which powers up the logic chip. As soon as the logic chip has configured itself, it asserts OND, which keeps the logic power supply turned on. The configuration should take tPU < 3 ms so that the initializing pulse will endure for > 2 ms after configuration is complete. When the logic chip has seen ≥2 ms of continuous power on RP, followed by RP going LO, it starts monitoring RP for command reception. This initial LO must last for at least 500 μs to allow time for the IST to set up for reception. The IST samples RP on the rising edges of RCK (Realtime Clock), which runs at 32.768 kHz. It waits for RP to go HI, indicating a start bit, after which it records eight bits of a command byte followed by a stop bit. The stop bit is another LO that must endure for at least 500 μs to give the IST time to store the byte and prepare for the next start bit. At the same time, the stop bit must not last more than 5 ms, or else it will be interpreted as a termination pulse. The IST waits for another start bit, and so on, until one of the stop bits does extend for 5 ms, which indicates the end of the command.
In the traces above we see OND going HI when the IST logic first powers up. This HI lasts for around 2 ms, after which the logic chip starts to load its configuration from memory, and OND goes LO. When the logic chip has completed its configuration, it asserts OND, a total of 3.5 ms from the start of the initiation pulse. This IST has 1.5 ms to spare before the 5-ms initiation pulse terminates.
The bytes of a command must themselves follow a protocol. The first two bytes contain the identifier of the IST, which can be either 0xFFFF for the wildcard selecting all ISTs, or some other sixteen-bit identifier unique to the target IST. In order to facilitate the implementation of acknowledgement messages using our existing SCT telemetry system, unique IST identifiers must not end with 0x0 or 0xF. Following the identifier are the bytes of the command, and at the end of the command are two further bytes that provide a sixteen-bit checksum for the preceding bytes. The IST calculates what the checksum should be and compares its own calculation to the checksum it receives. If they match, the IST accepts the command and commences to process its contents. If they do not match, the IST ignores the command.
In the photograph above we see the IST receiving a command on RP, then processing the command afterwards. The CPU reads the bytes out of the command memory one by one and executes them. When it's done, it clears CMDRDY.
[10-APR-24] The following files define the A3041 design. Note that we distribute all these files under the GNU Public License. Any design that incorporates any part of our work must itself be distributed under the same GNU Public License.
S3041A_1.gif: Crystal radio, logic, stimulator, version A.[23-NOV-23] The A3041AV1 as received from our assembly house needs the following modifications.
The A3041AV2 as received from the assembly house needs the following modifications.
The A3041BV1 will power U6 from VS rather than VH, and it will use the MCP1711-12 regulator. To make the A304101B printed circuit board for the A3041BV1, we must modify the A304101A like this:
[24-OCT-24] For details of the development and production of the A3041, see its Developement page.