В предлагаемой вашему вниманию публикации рассмотрены основы архитектуры, аппаратной структуры, и структуры системного ПО бортового компьютера миссий Apollo — AGC (Apollo Guidance Computer). Тем, кто хочет изучить тему подробно, я рекомендую книгу [1] и другие материалы, ссылки на которые приведены в конце статьи.
Apollo Guidance Computer
В программе Аполлон этот компьютер использовался в двух космических аппаратах: в командном модуле и в лунном модуле. В обоих случаях он крепился на «холодную плиту» с циркулирующей водно-гликолевой смесью, для охлаждения.
Водоблок с трубками для подключения охлаждающей жидкости
Интересный факт: полное название компьютера, использовавшегося в программе Аполлон — AGC-4, так как имелись более ранние разработки. Его предшественник, AGC-3 был построен на феррит-транзисторных ячейках.
Структурная схема системы навигации
Используемые сокращения:
AOT — Alignment Optical Telescope
LR — Landing Radar
RR — Rendezvous Radar
CDU — Coupling Data Unit
DSKY — (AGC) Display and Keyboard
LGC — LM Guidance Computer (or AGC)
PTA — Pulse Torque Assembly
IMU — Inertial Measurement Unit
PSA — Power Servo Assembly
OSS — Optical Subsystem
ISS — Inertial Subsystem
RS — Radar Subsystem
Технические характеристики
Спецификация
Длина слова: 16 бит (14 бит + знак + чётность)
Память: ROM (rope core) 36Kслов; RAM (core) 2Kслов
Цикл обращения к памяти (ROM и RAM) — 11,72 мкс
Устройства ввода-вывода: DSKY (два устройства в корабле)
Быстродействие: время сложения — 20 мкс
Тактовая частота: 2.048 МГц
Технология: биполярная РТЛ, планарные корпуса
Размеры: AGC — 24" x 12.5" x 6" (HWD) (61 см x 32 см x 15 см); DSKY — 8" x 8" x 7" (HWD) (20 см х 20 см х 18 см)
Вес: AGC — 70 фунтов (32 кг); DSKY — 17.5 фунтов (8 кг)
Напряжение питания 28 В.
Потребление: режим работы: 70 Вт @ 28VDC; режим ожидания 15.0 Вт
Количество произведённых устройств: AGC: 75; DSKY: 138
Стоимость: неизвестно. В 2009 году DSKY был продан с аукциона за $50788.
Компьютер был полностью герметично закрыт, и не содержал каких-либо частей, нуждающихся в обслуживании. Но несмотря на это, инженеры опасались, что новые цифровые микросхемы могут выйти из строя в космосе, поэтому в ранних версиях предусмотрели возможность замены блоков. В последующих версиях, когда все убедились в надёжности компьютера, требование к ремонтопригодности было исключено из ТЗ.
Рисунок AGC из технической документации
AGC в открытом виде
Корпус AGC состоит из двух половин, с установленными модулями. Половины корпуса имеют разъёмы, которыми соединяются друг с другом электрические цепи. В середине правой половины корпуса расположены модули ОЗУ, отсутствующие на фотографии. О них пойдёт речь ниже.
Основы схемотехники
Компьютер полностью построен на микросхемах, которые содержат по два элемента NOR-3 (тревходовое ИЛИ-НЕ), и выполнены по резисторно-транзисторной технологии. Схема микросхемы приведена на рисунке выше. Принцип действия такого элемента прост: если вывод 5 соединить с 0, а вывод 10 — с плюсом питания, то, если на входах 2-4 нули, то транзисторы 1-3 (если считать слева направо) будут закрыты, и на выходе 1 будет лог. 1, т.к. он притянут к плюсу резистором. Если хотя бы на один вход подать 1, то соответствующий транзистор откроется, и притянет выход 1 к нулю.
Легко видеть, что при соединении двух или более выходов этих элементов образуется функция AND (И). При этом достаточно оставить питание (вывод 10) подключенным только к одному элементу. Но иногда питание оставляют подключенным у всех элементов, соединённых выходами, это позволяет получить повышенную нагрузочную способность выхода.
Элемент с неподключенным питанием изображается на схеме с заштрихованным концом (см. рис).
Первая версия компьютера содержала 4100 микросхем, по одному элементу ИЛИ-НЕ в каждом, во второй версии, которая использовалась в полётах, было 2800 микросхем, по два элемента ИЛИ-НЕ в корпусе.
Память
Память AGC состоит из ОЗУ объёмом 2Кслова и ПЗУ объёмом 36Кслов. Под поле адреса отводится всего 12 бит, что позволяет адресовать 4Кслова, и память разделена на банки. Для переключения банков используется специальный регистр размером 4 бита, что даёт в результате 16битный адрес, позволяющий адресовать 64Кслов.
Более подробно банки памяти будут обсуждаться в разделе, посвящённом системному ПО.
ПЗУ
ПЗУ компьютера выполнено по технологии rope memory (см. фото внизу).
Внешний вид модуля Rope memory:
Принцип действия «верёвочной памяти» (rope memory) проиллюстрирован на рисунке снизу:
К сожалению, документация на блоки Core Rope Memory не сохранилась, но энтузиасты сумели разобраться с интерфейсом, подключить блок к компьютеру и считать содержимое, а затем запустить его на симуляторе.
Общий объём ПЗУ AGC составляет 36,864 слов по 16 бит. AGC имеет 6 блоков ПЗУ, каждый по 6 килослов (т.е. около 12 кб). Через каждый сердечник пропущено (или не пропущено) до 192 проводов, кодирующих данные, т.е. каждый сердечник кодирует 192 бита.
Прошивка каждого блока ПЗУ занимала 8 недель и обходилась в $15000. Всё это делалось вручную.
ОЗУ
ОЗУ AGC имеет объём 2048 16-битных слов. ОЗУ компьютера выполнено на магнитных сердечниках, как и у большинства компьютеров того времени.
Модуль ОЗУ, установленный в компьютер.
Видно, что модуль ОЗУ занимает ширину двух обычных модулей логики. ОЗУ состоит из «плоскостей» (planes), каждая из которых соответствует биту в слове данных, всего плоскостей 16. Каждая плоскость представляет собой решётку 64x32 кольца, всего 2048 колец. Через каждое кольцо проходит четыре проводника: координатные линии X и Y, линия считывания и линия запрета записи (inhibit line). Линии X и Y идут соответственно вертикально и горизонтально, линия считывания проходит через все кольца одной плоскости по диагональным направлениям, а линия запрета записи проходит также через все кольца плоскости вертикально.
Также плоскость называлась «ковриком» (mat). На рисунке ниже представлена одна плоскость размером 64x32 кольца.
Схема укладки линии считывания
Модуль ОЗУ в разрезе
Модуль ОЗУ. Рентгеновский снимок
Модуль ОЗУ в открытом виде
Модуль ОЗУ в сборе
DSKY
DSKY расшифровывается как Display and Keyboard Unit, модуль дисплея и клавиатуры, и предназначен для обеспечения взаимодействия AGC и экипажа.
DSKY в разобранном виде
По сути, DSKY является просто простым терминалом к AGC. Он построен на основе реле, которые переключают сегменты люминисцентного индикатора, питающиеся напряжением 250VAC частотой 800 Гц, и на транзисторах. В более поздних версиях DSKY электромеханические реле были заменены тиристорами, так как вносили существенную задержку при отображении информации.
Структурная схема DSKY
Функциональная схема DSKY
На рисунке показана схема подключения дисплея. Используются поляризованные реле с двумя обмотками, запоминающие своё состояние. Импульс, поданный на одну обмотку, включает индикатор, на другую — выключает. Обмотки реле включены в матрицу.
AGC подаёт в выходной канал 010 (восьмеричный номер канала) 15-битное число. Биты 12-15 подаются на декодер, имеющий 12 выходов, включающих строки матрицы.
Также блок имеет отдельные индикаторы для отображения сигналов PROG, TRACKER, GIMBAL LOCK и NO ATT, и других сигналов.
Ввод информации осуществляется с клавиатуры. Каждая кнопка подсвечивается лампочками на напряжение 115VAC частотой 400 Гц. При нажатии каждой клавиши, кроме PRO, генерируется 5-битный код. Код подаётся на порт компьютера, и генерируется прерывание, по которому код считывается. Когда кнопка отпускается, генерируется специальный сигнал reset. Клавиша STBY используется для перевода компьютера в режим ожидания, и обратно в режим работы, при повторном нажатии.
Клавиатура имеет 10 цифровых клавиш, и 9 дополнительных клавиш: VERB, NOUN, CLR, PRO, KEY REL, ENTR, RESET, +, и -.
Кнопки содержат переключающие контакты, включенные таким образом, чтобы исключить генерацию двух кодов одновременно (см. рисунок ниже). Коды клавиш поступают в порт ввода AGC.
К цепи кнопок подведено напряжение +28В. Подключение к компьютеру выполнено следующим образом:
Фильтр на входе предохраняет систему от дребезга контактов и случайных помех.
DSKY, вид сзади
Стандартной процедурой ввода команды в DSKY является последовательность: VERB-DIGIT-DIGIT, NOUN-DIGIT-DIGIT и ENTR. Это отражает идеологию взаимодействия пользователя с AGC: вводится глагол (VERB), и номер действия, которое нужно сделать, и существительное (NOUN), также кодируемое номером, которое указывает объект, на который направлено действие. Список кодов глаголов и существительных содержится в инструкции, которая была у астронавтов.
Нажатие кнопки VERB на клавиатуре очищает индикатор VERB. Затем астронавт вводит две цифры, которые интерпретируются как номер глагола, затем то же самое делается с существительным (NOUN). До тех пор, пока кнопка ENTR не нажата, коды можно исправить повторением ввода NOUN или VERB. После нажатия ENTR каждые 1.5 секунды мигают цифры на индикаторах VERB и NOUN, это означает, что оператор должен ввести данные, зависящие от операции. После этого начинается выполнение операции.
Внутри DSKY
Данные могут вводиться в восьмеричной и десятичной форме. Компьютер считает, что если знак "+" или "-" не введён, то данные будут в восьмеричной форме. Если при вводе восьмиричного числа нажать кнопки 8 или 9, будет мигать индикатор OPR ERR. Если нажаты клавиши "+" или "-", то соответствующий знак появляется на дисплее, означая, что компьютер готов к приёму десятичного числа. Если оператор ошибся, он может нажать на клавишу CLR и повторить ввод. Нажатие на ENTR завершает ввод. Для сброса сигнала OPR ERR и возврата в режим ввода используется кнопка RSET.
Кнопка RSET используется для гашения всех предупреждающих сигналов: TEMP, GIMBAL LOCK, PROG, RESTART и TRACKER. Это может быть полезно для того, чтобы выяснить, был ли предупреждающий сигнал кратковременным или вызвавшая его ошибка присутствует в данный момент.
Внутри DSKY
Декодер содержит четыре драйвера линий реле и диодную матрицу, а также ключи возбуждения строк релейной матрицы. Биты 12-15 выбирают один из рядов релейной матрицы.
Декодер релейной матрицы
Рассмотрим, как включается ряд 1. Ему соответствует код 0001. Он подаётся через интерфейс A25 и разъём J9 на корпусе DSKY, и на линии CE225 — CE228. Сигналы подаются в инверсной форме, т.е. CE226 — CE228 принимают значение лог. 1, а CE225 — лог. 0. Логическая 1 на входе закрывает транзистор Q1, транзистор Q2 также закрыт, и транзистор Q3 открыт. Таким образом, для выходов X линий CE226-CE228 и для выхода Y линии CE225 состоянием будет лог. 1. Диодная матрица имеет 8 входов, подключенных к прямым и инверсным выходам транзисторных ключей (выходы X и Y на рисунке). В нашем случае диоды CR53 модулей D2, D3 и D4, а также диод CR63 модуля D5 должны быть смещены в обратном направлении. Если эти диоды закрыты, включается блок CKT004, возбуждающий ряд 1, при этом напряжение +28В проходит по цепи Q1 (CKT011), R8, CR44, R9 (CKT004) и открывает транзисторы Q4, Q5 (CKT004). Транзисторы, открывшись, подключают первый ряд реле к нулю, что означает, что ряд выбран.
Нижний ряд диодов в диодной матрице (CR54 в модулях D2-D5) используется для детектирования наличия лог. 0 в битах 12-15 канала 10. Если хотя бы один ноль присутствует, хотя бы один из диодов открыт и напряжение 0VDC подаётся на источник напряжения драйверов выборки строки. Если все четыре бита равны 0, то все четыре диода закрыты, и напрядение +28VDC приложено к входу драйвера питания. Транзистор Q2 открывается, и транзистор Q3 закрывается. Транзистор Q1 закрыт, и выход драйвера представляет собой разомкнутую цепь, и напряжение на драйвера строк не подаются.
DSKY, вид снизу
Для управления индикаторами статуса и ошибок используется релейная матрица в модуле драйвера индикатора (рис. ). Кроме реле, она содержит 6 идентичных транзисторных драйверов (D1-D6).
Модуль драйвера индикаторов DSKY
Релейная матрица показана на рисунке ниже:
Релейная матрица
Каждый драйвер реле принимает от биты 1-11 канала 10. Рассмотрим бит 11 (цепь 006 в модуле D6). Если бит 1 канала 10 установлен в лог. 1, он в инверсном виде поступает в интерфейсную цепь A25, на разъём J9 в цепь CE224. Это открывает транзистор Q8, который закрывает транзистор Q9. Напряжение 28В присутствует на выводе 10 столбца реле, включающего знаки "+" и "-" на дисплее. Диодной матрицей выбирается строка. Путем выбора строки и столбца компьютер может переключать каждое единичное реле в матрице.
Реле матрицы управляют индикаторами DSKY. Ряд 12 управляет индикаторами состояния и аварийными сигналами.
Коды матрицы реле
В таблице выше приведено соответствие между содержимым канала 10 и цифрой индикатора, управляемой соответствующим реле. Одной цифрой управляет пять реле. Биты 6-10 используются для управления первой цифрой, биты 1-5 управляют второй цифрой, бит 11 управляет знаком ("+" или "-"). Коды цифр приведены в таблице:
Коды цифр
Лог. 1 соответствует включенному реле.
В таблице выше показаны соответствия кодов и индицируемых цифр.
Схема подключения индикаторов к реле приведена на рисунке ниже.
Схема релейной матрицы индикаторов
Цепи состояния и аварийных сигналов состоят из драйверов и неполяризованных реле.
Цепи состояния и аварийных сигналов
Например, когда сигнал ISS WARNING находится в лог. 0, он открывает транзистор Q13 и подаёт питание +28В на реле K21. Реле K21 включается и пропускает входной сигнал ALARM COMMON на дисплей и в секцию PGNCS как сигнал ISS WARNING.
Кабель подключения DSKY к компьютеру и бортовым системам
Питание блока DSKY осуществляется напряжениями 28В и 14В постоянного тока, поступающими с компьютера, также подаётся сигнал синхронизации частотой 800 Гц, который используется для генерации напряжения 250VAC частотой 400 Гц для питания дисплея.
Схема источника питания DSKY
Источник питания состоит из трёх двухтактных транзисторных каскадов, развязанных трансформаторами. На вход подаётся прямоугольный сигнал напряжением около 14В и частотой 800 Гц. Уровень напряжения может управляться с панели космического корабля и служит для регулировки яркости индикаторов. Трансформаторы T1 и T2 повышают напряжение, на выходе стоит дроссель с насыщением L2. Дроссель нужен для стабилизации напряжения на индикаторах. Индикаторы являются ёмкостной нагрузкой, величина ёмкости зависит от количества включенных индикаторов. Изменения в нагрузке вызывают изменение напряжения в цепи обратной связи, которое через мостовой выпрямитель подаётся на управляющую обмотку L2. Если включено больше индикаторов, напряжение на управляющей обмотке увеличивается, сердечник начинает входить в насыщение, если количество включенных индикаторов уменьшается, то напряжение на управляющей обмотке уменьшается, сердечник выходит из насыщения, таким образом напряжение на выходе поддерживается постоянным.
Ранний вариант DSKY. Этот вариант не использовался в полётах.
Литература и ссылки:
1. The Apollo Guidance Computer: Architecture and Operation. Frank O'Brien, Springer Praxis Books, 2010
2. Принципиальная схема AGC
3. http://www.righto.com/ Блог с кучей статей по AGC
4. https://hackaday.com/2016/09/02/decoding-rediscovered-rope-memory-from-the-apollo-guidance-computer/ — Decoding Rediscovered Rope Memory From The Apollo Guidance Computer
5. https://hackaday.com/2016/07/05/don-eyles-walks-us-through-the-lunar-module-source-code/ — Don Eyles Walks Us Through The Lunar Module Source Code
6. https://github.com/chrislgarry/Apollo-11 — репозиторий с исходными кодами ПО
7. https://github.com/shirriff/rope-simulator — репозиторий со схемами симулятора ПЗУ.
8. https://dodlithr.blogspot.com/search/label/Apollo%20Systems — большая подборка материалов по AGC и DSKY.
9. http://www.ibiblio.org/apollo/ — онлайновый симулятор AGC.
10. https://github.com/virtualagc — репозиторий с множеством полезной информации, включая Verlog-версию AGC, а также схемы и платы реплики AGC, и оригинальные схемы AGC и DSKY (в репозитории https://github.com/virtualagc/virtualagc)
Комментарии (25)
slog2
19.08.2019 18:02А есть подобные описания или хотя бы фотографии электроники наших луноходов? Хочется сравнить уровень технологий тех времён.
nehrung
19.08.2019 22:16+1По слухам, вот такие электролюминесцентные индикаторы (ИЭЛ-0-IV) были разработаны в 60-х годах именно для применения в бортовых пультах КК.
Ну судя по широко известным фото кабин КК «Восток», в «Востоках» они не применялись. Может быть, позже…sim2q
22.08.2019 01:47в теории — можно самим нарезать нужных
32bit_me Автор
22.08.2019 06:19Из чего?
sim2q
22.08.2019 15:28
под рукой валялась подсветка от lcd экрана времён когда диоды были ещё не такими модными :) подумалось, что конструкция не семипядейволбу. Можно наверное вытравить нужную проводящую подложку с сегментами в домашних условиях
32bit_me Автор
22.08.2019 16:08Даже не знаю, имхо, в современных дисплеях светодиодная подсветка, а в старых была на люминесцентных лампах, требующих высокого напряжения (около 100в).
Электролюминесцентные индикаторы я видел в старых справочниках, но где их брать, не имею понятия.sim2q
22.08.2019 20:42осознал тут, что ладно ещё, что напряжение высокое — сейчас есть много не дорогих многоразрядных микросхем для управления плазменными панелями, но тут ещё и переменка… для лишь только тёпло-лампового DIY — сложновато будет
defecator
При всей современной мощной электронике полёт на Луну так и не смогли повторить.
А тут кучка проводов и реле, и та смогла осилить полёт на Луну и возвращение на Землю…
HerrDirektor
Тут принцип «Нет денег — нет любви» помешал, а не «не смогли».
Но вообще конечно впечатляет, как люди летали в космос, делали сложнейшие маневры, пользуясь такими калькуляторами-переростками.
defecator
Неужели сегодня, при современном развитии технологий и производств, слетать на Луну сложнее и дороже, чем в 70-х?
32bit_me Автор
Я бы сказал, сейчас сложнее выделить на это деньги и обосновать необходимость таких трат.
defecator
А я думал, что в вопросах, касаемых престижа страны, деньги играют незначительную роль. Скорее, никому это не надо, лететь на Луну. Лучше строить ура-прожекты на бумаге о поселениях на Марсе )))
amartology
Б) Там такие деньги, которые даже в вопросах, касающихся престижа страны, играют роль. В пересчете на сегодняшний курс, программа стоила сто пятьдесят миллиардов долларов. Это от трех до семи олимпиад в Сочи или двенадцать олимпиад в Пхенчхане. На эти деньги наверняка можно получить существенно больше «престижа страны» какими-то другими способами, чем слетав на Луну.
PeterK
Например, устроив Олимпиаду в Сочи и ЧМ по пинанию мяча по траве.
HerrDirektor
С поправками на инфляцию может и не дороже, просто никому не нужно.
США полетели на Луну по сути только для того, чтобы стать первыми в космической гонке с СССР для сохранения/поднятия престижа страны.
В пик космической гонки бюджет NASA превышал 4% от ВВП США, а сейчас он чуть выше половины процента.
Отправлять роботов на другие планеты несоизмеримо дешевле, нежели людей, при сравнимых объемах научной информации.
acin
В 69м смысл полета на Луну был показать свое технологическое превосходство, поэтому бюджеты выделялись для этого просто космические, простите за каламбур.
Сегодня для США нет никакого практического, репутационного или иного смысла отправлять на Луну людей, они это уже сделали 50 лет назад, и снова тратить миллиарды на это не собираются. Ну точней они собираются строить базу около Луны, но это совершенно иная миссия, и Луна, а точнее орбита Луны, в ней служит просто перевалочной базой.
Но другое дело частники, тут скорее дело коммерции, возможности туристических полетов к Луне.
Apazhe
Не столько «показать», сколько «создать». Вваленные в Лунную Программу деньги вернулись Штатам сторицей.
teecat
Может быть и да. Скажем в Союзе тогда достаточно экономили на отработке надежности на стендах до полете. Сейчас это недопустимо. Бах-бах и в продакшен со взрывающимися на старте ракетами сейчас не особо понимают. А тогда в худлите это было героизировано. Требование надежности в три девятки для полетов людей это очень и очень большие затраты. Плюс сильно подросли зарплаты. По сути на Луну толкают только амбиции. И хорошо когда они есть
Правда с другой стороны методички для расчетов всего и вся уже наработаны — это существенный минус затрат