Урок 2. Револьвер: четыре пера

В картинках

После этого урока головка плоттера — револьвер: поворотный стол с четырьмя перьями, чёрным, красным, зелёным и синим. Кнопка SELECT выбирает цвет, а схема сама поворачивает стол, пока нужное перо не встанет в рабочую точку. Пока стол крутится, горит жёлтая BUSY и перо не касается бумаги.


2.1. Идея: перо меняется поворотом

У настоящего цветного плоттера Apple головка была именно такой: несколько перьев по кругу, поворот подводит к бумаге нужное. Наш стол — шаговый мотор с диском и четырьмя отверстиями d0…d3 через 90°. Рабочая точка — там, где сейчас стоит чёрное перо (d0). Четверть оборота — и к ней приходит следующее перо.

d0d1d2d3CP = 0 — чёрноеd0d1d2d3CP = 1 — красноеd0d1d2d3CP = 2 — зелёноеd0d1d2d3CP = 3 — синеечетверть оборота по часовой = 6 шагов по 15°к рабочей точке (пунктир) приходит отверстие, стоявшее сверху: d0 → d3 → d2 → d1поэтому красное (цвет 1) — в d3, зелёное — в d2, синее — в d1
Револьвер: стол крутится только вперёд, по четвертям. Счётчик CP — какое перо сейчас в рабочей точке; опускается всегда оно.

2.2. Идея: мотор — два триггера по кругу

У мотора стола четыре обмотки A B C D. Включены две соседние — ротор стоит между ними; переключили на следующую пару — ротор шагнул на 15°. Пары по кругу: AB → BC → CD → DA → AB. Это даёт пара D-триггеров CD4013, замкнутая в кольцо: D1 = NJ2, D2 = J1, оба тактируются шагом STEPT. Что получается на каждом шаге:

ШагJ1J2A=NJ1 B=NJ2 C=J1 D=J2Обмотки
0001 1 0 0A B
1100 1 1 0B C
2110 0 1 1C D
3011 0 0 1D A
4001 1 0 0A B — круг

Каждый такт — следующая пара, мотор вращается всё время в одну сторону. Сброс RST ставит оба триггера в 0 — пара AB.

2.3. Идея: четверть оборота = 6 шагов

Шаг — 15°, четверть — 90°, значит 6 шагов. Шаги считает CD4017: на каждый такт загорается следующий выход O0, O1, … Когда загорается O6, счётчик сразу сбрасывается в O0: QR = Q6 ИЛИ RST — свободный вентиль ИЛИ CD4071 пульта. Получается круг из 6 шагов. Выход переноса CO равен 1 на O0…O4 и 0 на O5; при переходе O5 → O0 он поднимается — это фронт раз в четверть оборота (QCO).

2.4. Идея: два счётчика по два бита

Номер цвета — 0 чёрный, 1 красный, 2 зелёный, 3 синий — два бита. Считать 0, 1, 2, 3 умеют два триггера-переключателя из урока 1:

  • LC0 переключается на каждое нажатие SELECT;
  • LC1 переключается, когда LC0 падает с 1 на 0 — его такт NLC0, у которого в этот момент фронт.
SELECT (раз)LC1LC0Цвет
000чёрный
101красный
210зелёный
311синий
400чёрный

Такой же счётчик CP1 CP0 помнит, какое перо сейчас в рабочей точке; считает он четверти оборота (такт QCO).

2.5. Идея: крутить, пока не совпало

Что хотим: если выбранный цвет не равен перу в рабочей точке — крутить. Два числа равны, когда равны все их биты. Бит «не равен» — исключающее ИЛИ (CD4070): X0 = LC0 ⊕ CP0, X1 = LC1 ⊕ CP1. Числа не равны, если не равен хоть один бит:

  • MOVE = X0 ИЛИ X1 (CD4071);
  • шаги мотора: STEPT = CKT И MOVE (CD4081) — такт 10 Гц проходит, только пока надо крутить.

Совпало — MOVE = 0, такты перестают доходить, стол стоит. Выбрал цвет «назад» — стол всё равно крутится вперёд, пока не дойдёт: у револьвера одно направление, зато схема проще.

2.6. Идея: BUSY — перо поднято, пока крутится

Перо не должно касаться бумаги, пока стол поворачивается: иначе по листу протянется дуга. Есть тонкость: MOVE гаснет вместе с последним тактом, а ротору нужно мгновение, чтобы дойти. Поэтому схема ещё полтакта помнит, что крутила: второй триггер CD4013 переписывает MOVE в MOVED по спаду такта (NCKT = НЕ CKT). Отсюда:

  • BUSY = MOVE ИЛИ MOVED — жёлтая лампа;
  • PDN = LPEN И НЕ BUSY — перо можно опустить: кнопка «вниз» и стол стоит.

2.7. Идея: какое перо опустить

Опускаем только перо в рабочей точке: номер CP1 CP0 → одна из четырёх ног DOWN0…DOWN3 (дешифратор на И):

CP1CP0ПероФормула
00DOWN0PDN И НЕ CP1 И НЕ CP0
01DOWN1PDN И НЕ CP1 И CP0
10DOWN2PDN И CP1 И НЕ CP0
11DOWN3PDN И CP1 И CP0

Общие половины формул собраны один раз: E0 = PDN И НЕ CP1, E1 = PDN И CP1, дальше DOWN0 = E0 И НЕ CP0 и т. д. — восемь вентилей И на двух CD4081.

Почему красное — в отверстии d3, а не d1: стол крутится вперёд, и после четверти оборота к рабочей точке приходит отверстие, стоявшее перед ней, — d3, потом d2, потом d1. По кругу: чёрное d0, красное d3, зелёное d2, синее d1.

2.8. Сборка

Поверх урока 1. Новые микросхемы и несколько перецепок: метку на ноге переименовать — двойной клик по метке, новое имя; у пустой ноги — двойной клик по ноге.

Шаг 1. Кнопка SELECT

ДетальНога / действиеМетка / куда
Button (кнопка) «SELECT»выходSELB

Шаг 2. Счётчик цвета

Второй триггер CD4013 урока 1 (PEN UP/DOWN) стоял на GND — теперь он младший бит цвета.

ДетальНога / действиеМетка / куда
TI CD4013BS1
R1
D1
CL1
Q1
QN1
S2
R2
D2
CL2
GND
RST
NLC1
NLC0
LC1
NLC1
GND
GND
GND
GND
ДетальНогаОтцепить отПрицепить к
TI CD4013B, выход которой = LPENR2GNDRST
TI CD4013B, выход которой = LPEND2GNDNLC0
TI CD4013B, выход которой = LPENCL2GNDSELB
TI CD4013B, выход которой = LPENQ2— (не подключена)LC0
TI CD4013B, выход которой = LPENQN2— (не подключена)NLC0

Не подключать: Q2, QN2 у CD4013B.

Шаг 3. Генератор мотора

Clock — щелчками до 10Hz.

ДетальНога / действиеМетка / куда
Clock 10HzвыходCKT

Шаг 4. Сравнение и BUSY

ДетальНога / действиеМетка / куда
TI CD4070BA
B
J
C
D
K
E
F
G
H
LC0
CP0
X0
LC1
CP1
X1
GND
GND
GND
GND
TI CD4071BA
B
J
C
D
K
E
F
G
H
X0
X1
MOVE
MOVE
MOVED
BUSYH
GND
GND
GND
GND
TI CD4013BS1
R1
D1
CL1
S2
R2
D2
CL2
Q2
GND
GND
GND
GND
GND
RST
MOVE
NCKT
MOVED
TI CD4069UBA
B
C
I
D
J
E
F
GND
GND
BUSYH
NBUSY
CKT
NCKT
GND
GND

Не подключать: L, M у CD4070B; L, M у CD4071B; Q1, QN1, QN2 у CD4013B; G, H, K, L у CD4069UB.

Шаг 5. Мотор и перья

ДетальНога / действиеМетка / куда
TI CD4081BA
B
J
C
D
K
E
F
L
G
H
M
CKT
MOVE
STEPT
LPEN
NBUSY
PDN
PDN
NCP1
E0
PDN
CP1
E1
TI CD4081BA
B
J
C
D
K
E
F
L
G
H
M
E0
NCP0
DOWN0
E0
CP0
DOWN1
E1
NCP0
DOWN2
E1
CP0
DOWN3
TI CD4013BS1
R1
D1
CL1
Q1
QN1
S2
R2
D2
CL2
Q2
QN2
GND
RST
NJ2
STEPT
J1
NJ1
GND
RST
J1
STEPT
J2
NJ2
TI CD4017BCLOCK
RESET
INH
O6
CO
STEPT
QR
GND
Q6
QCO
TI CD4013BS1
R1
D1
CL1
Q1
QN1
S2
R2
D2
CL2
Q2
QN2
GND
RST
NCP0
QCO
CP0
NCP0
GND
RST
NCP1
NCP0
CP1
NCP1
ДетальНогаОтцепить отПрицепить к
TI CD4071B, выход которой = LRGGNDQ6
TI CD4071B, выход которой = LRHGNDRST
TI CD4071B, выход которой = LRM— (не подключена)QR

Не подключать: O0, O1, O2, O3, O4, O5, O7, O8, O9 у CD4017B.

Шаг 6. Лампа BUSY

ДетальНога / действиеМетка / куда
LED, жёлтаявходBUSYH

Шаг 7. Головка

Ноги стола A…D были пустые — навесь метки. Перо урока 1 — с LPEN на DOWN0. Три новых пера — в отверстия d3, d2, d1; цвет — Alt/⌘+щелчок по перу.

ДетальНога / действиеМетка / куда
Pen — красноецвет (Alt/⌘+щелчок)
DOWN
посадить
красное
DOWN1
на d3 (отверстие d3 стола)
Pen — зелёноецвет (Alt/⌘+щелчок)
DOWN
посадить
зелёное
DOWN2
на d2 (отверстие d2 стола)
Pen — синеецвет (Alt/⌘+щелчок)
DOWN
посадить
синее
DOWN3
на d1 (отверстие d1 стола)
ДетальНогаОтцепить отПрицепить к
Turntable — головкаA— (не подключена)NJ1
Turntable — головкаB— (не подключена)NJ2
Turntable — головкаC— (не подключена)J1
Turntable — головкаD— (не подключена)J2
Pen — чёрноеDOWNLPENDOWN0

2.9. Проверка

  1. Режим Turbo, включи питание. У рабочей точки — чёрное перо.
  2. PEN UP/DOWN, проведи линию — чёрная.
  3. SELECT — загорается жёлтая BUSY, перо поднимается, головка поворачивается на четверть: у рабочей точки красное. BUSY гаснет — красное опускается само (PEN UP/DOWN по-прежнему «вниз»). Стрелка — красная линия из той же точки.
  4. Ещё SELECT — зелёное, синее, снова чёрное.
SELECT (раз)У рабочей точкиПока поворачивает
0чёрное
1красноегорит BUSY, перо поднято
2зелёноегорит BUSY, перо поднято
3синеегорит BUSY, перо поднято
4снова чёрноегорит BUSY, перо поднято

Вставка урока 2 (Cmd+I)

Вставлять в машину Apple ][ (кнопка DEMO) вместо уроков 1–2: ставит всё, что собрано к концу урока 2.

# Урок 2 — револьвер: 4 пера на поворотном столе, SELECT, доворот до выбранного пера.# ---------- механика: ось X, ось Y на её каретке, головка на каретке Y, чёрное перо, бумага ----------maxis ax{len=400}(STEP=LXS, DIR=RIGHT, L0=XL0, L1=XL1, STALL=XSTALL)maxis ay{len=300, ang=90}(STEP=LYS, DIR=DOWN, L0=YL0, L1=YL1, STALL=YSTALL)mount(ay, ax.car)mtable tt(A=NJ1, B=NJ2, C=J1, D=J2)mount(tt, ay.car)mpen k0{color=black}(DOWN=DOWN0)mount(k0, tt.d0)mpaper p{w=460, h=360}at(p, 0, 0)at(ax, p, -41, -138)# ---------- пульт: генератор шагов, стрелки, PEN UP/DOWN ----------clock{rt=60}(CKL)button{label="LEFT"}(LEFT)button{label="RIGHT"}(RIGHT)button{label="UP"}(UP)button{label="DOWN"}(DOWN)button{label="PEN UP/DOWN"}(PENB)# ---------- CD4071: нажата стрелка по X, по Y; ERROR — каретка упёрлась ----------"TI CD4071B"(A=LEFT, B=RIGHT, J=LR, C=UP, D=DOWN, K=UD, E=XSTALL, F=YSTALL, L=ERROR, G=Q6, H=RST, M=QR)# ---------- CD4081: шаги — такт 60 Гц, пока нажата стрелка ----------"TI CD4081B"(A=GND, B=GND, C=GND, D=GND, E=CKL, F=LR, L=LXS, G=CKL, H=UD, M=LYS)# ---------- CD4013: PEN UP/DOWN — триггер-переключатель ----------"TI CD4013B"(S1=GND, R1=RST, D1=NLPEN, CL1=PENB, Q1=LPEN, QN1=NLPEN, S2=GND, R2=RST, D2=NLC0, CL2=SELB, Q2=LC0, QN2=NLC0)# ---------- лампы POWER и ERROR ----------led{color=green}(VCC)led{color=red}(ERROR)# ---------- кнопка SELECT ----------button{label="SELECT"}(SELB)# ---------- CD4013: старший бит цвета ----------"TI CD4013B"(S1=GND, R1=RST, D1=NLC1, CL1=NLC0, Q1=LC1, QN1=NLC1, S2=GND, R2=GND, D2=GND, CL2=GND)# ---------- генератор мотора револьвера ----------clock{rt=10}(CKT)# ---------- CD4070: цвет ≠ перо у рабочей точки ----------"TI CD4070B"(A=LC0, B=CP0, J=X0, C=LC1, D=CP1, K=X1, E=GND, F=GND, G=GND, H=GND)# ---------- CD4071: MOVE — крутить; BUSY — крутит или только что докрутил ----------"TI CD4071B"(A=X0, B=X1, J=MOVE, C=MOVE, D=MOVED, K=BUSYH, E=GND, F=GND, G=GND, H=GND)# ---------- CD4013: MOVED — MOVE полтакта назад (второй триггер; первый — в уроке 3) ----------"TI CD4013B"(S1=GND, R1=GND, D1=GND, CL1=GND, S2=GND, R2=RST, D2=MOVE, CL2=NCKT, Q2=MOVED)# ---------- CD4069: НЕ BUSY, НЕ такта (входы A и B — в уроке 3) ----------"TI CD4069UB"(A=GND, B=GND, C=BUSYH, I=NBUSY, D=CKT, J=NCKT, E=GND, F=GND)# ---------- CD4081: шаг мотора, перо можно опустить, пара перьев ----------"TI CD4081B"(A=CKT, B=MOVE, J=STEPT, C=LPEN, D=NBUSY, K=PDN, E=PDN, F=NCP1, L=E0, G=PDN, H=CP1, M=E1)# ---------- CD4081: какое перо опустить ----------"TI CD4081B"(A=E0, B=NCP0, J=DOWN0, C=E0, D=CP0, K=DOWN1, E=E1, F=NCP0, L=DOWN2, G=E1, H=CP0, M=DOWN3)# ---------- CD4013: фазы мотора — два триггера по кругу ----------"TI CD4013B"(S1=GND, R1=RST, D1=NJ2, CL1=STEPT, Q1=J1, QN1=NJ1, S2=GND, R2=RST, D2=J1, CL2=STEPT, Q2=J2, QN2=NJ2)# ---------- CD4017: четверть оборота = 6 шагов ----------"TI CD4017B"(CLOCK=STEPT, RESET=QR, INH=GND, O6=Q6, CO=QCO)# ---------- CD4013: номер пера у рабочей точки ----------"TI CD4013B"(S1=GND, R1=RST, D1=NCP0, CL1=QCO, Q1=CP0, QN1=NCP0, S2=GND, R2=RST, D2=NCP1, CL2=NCP0, Q2=CP1, QN2=NCP1)# ---------- лампа BUSY ----------led{color=yellow}(BUSYH)# ---------- перья: красное, зелёное, синее ----------mpen k1{color=red}(DOWN=DOWN1)mount(k1, tt.d3)mpen k2{color=green}(DOWN=DOWN2)mount(k2, tt.d2)mpen k3{color=blue}(DOWN=DOWN3)mount(k3, tt.d1)

Не получается? Что-то не работает →