Урок 2. Револьвер: четыре пера
В картинкахПосле этого урока головка плоттера — револьвер: поворотный стол с четырьмя перьями, чёрным, красным, зелёным и синим. Кнопка SELECT выбирает цвет, а схема сама поворачивает стол, пока нужное перо не встанет в рабочую точку. Пока стол крутится, горит жёлтая BUSY и перо не касается бумаги.
2.1. Идея: перо меняется поворотом
У настоящего цветного плоттера Apple головка была именно такой: несколько перьев по кругу, поворот подводит к бумаге нужное. Наш стол — шаговый мотор с диском и четырьмя отверстиями d0…d3 через 90°. Рабочая точка — там, где сейчас стоит чёрное перо (d0). Четверть оборота — и к ней приходит следующее перо.
2.2. Идея: мотор — два триггера по кругу
У мотора стола четыре обмотки A B C D. Включены две соседние — ротор стоит между ними; переключили на следующую пару — ротор шагнул на 15°. Пары по кругу: AB → BC → CD → DA → AB. Это даёт пара D-триггеров CD4013, замкнутая в кольцо: D1 = NJ2, D2 = J1, оба тактируются шагом STEPT. Что получается на каждом шаге:
| Шаг | J1 | J2 | A=NJ1 B=NJ2 C=J1 D=J2 | Обмотки |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 1 0 0 | A B |
| 1 | 1 | 0 | 0 1 1 0 | B C |
| 2 | 1 | 1 | 0 0 1 1 | C D |
| 3 | 0 | 1 | 1 0 0 1 | D A |
| 4 | 0 | 0 | 1 1 0 0 | A 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 (раз) | LC1 | LC0 | Цвет |
|---|---|---|---|
| 0 | 0 | 0 | чёрный |
| 1 | 0 | 1 | красный |
| 2 | 1 | 0 | зелёный |
| 3 | 1 | 1 | синий |
| 4 | 0 | 0 | чёрный |
Такой же счётчик 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 (дешифратор на И):
| CP1 | CP0 | Перо | Формула |
|---|---|---|---|
| 0 | 0 | DOWN0 | PDN И НЕ CP1 И НЕ CP0 |
| 0 | 1 | DOWN1 | PDN И НЕ CP1 И CP0 |
| 1 | 0 | DOWN2 | PDN И CP1 И НЕ CP0 |
| 1 | 1 | DOWN3 | PDN И 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 CD4013B | S1 R1 D1 CL1 Q1 QN1 S2 R2 D2 CL2 | GND RST NLC1 NLC0 LC1 NLC1 GND GND GND GND |
| Деталь | Нога | Отцепить от | Прицепить к |
|---|---|---|---|
| TI CD4013B, выход которой = LPEN | R2 | GND | RST |
| TI CD4013B, выход которой = LPEN | D2 | GND | NLC0 |
| TI CD4013B, выход которой = LPEN | CL2 | GND | SELB |
| TI CD4013B, выход которой = LPEN | Q2 | — (не подключена) | LC0 |
| TI CD4013B, выход которой = LPEN | QN2 | — (не подключена) | NLC0 |
Не подключать: Q2, QN2 у CD4013B.
Шаг 3. Генератор мотора
Clock — щелчками до 10Hz.
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| Clock 10Hz | выход | CKT |
Шаг 4. Сравнение и BUSY
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| TI CD4070B | A B J C D K E F G H | LC0 CP0 X0 LC1 CP1 X1 GND GND GND GND |
| TI CD4071B | A B J C D K E F G H | X0 X1 MOVE MOVE MOVED BUSYH GND GND GND GND |
| TI CD4013B | S1 R1 D1 CL1 S2 R2 D2 CL2 Q2 | GND GND GND GND GND RST MOVE NCKT MOVED |
| TI CD4069UB | A 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 CD4081B | A B J C D K E F L G H M | CKT MOVE STEPT LPEN NBUSY PDN PDN NCP1 E0 PDN CP1 E1 |
| TI CD4081B | A B J C D K E F L G H M | E0 NCP0 DOWN0 E0 CP0 DOWN1 E1 NCP0 DOWN2 E1 CP0 DOWN3 |
| TI CD4013B | S1 R1 D1 CL1 Q1 QN1 S2 R2 D2 CL2 Q2 QN2 | GND RST NJ2 STEPT J1 NJ1 GND RST J1 STEPT J2 NJ2 |
| TI CD4017B | CLOCK RESET INH O6 CO | STEPT QR GND Q6 QCO |
| TI CD4013B | S1 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, выход которой = LR | G | GND | Q6 |
| TI CD4071B, выход которой = LR | H | GND | RST |
| TI CD4071B, выход которой = LR | M | — (не подключена) | 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 — чёрное | DOWN | LPEN | DOWN0 |
2.9. Проверка
- Режим Turbo, включи питание. У рабочей точки — чёрное перо.
- PEN UP/DOWN, проведи линию — чёрная.
- SELECT — загорается жёлтая
BUSY, перо поднимается, головка поворачивается на четверть: у рабочей точки красное.BUSYгаснет — красное опускается само (PEN UP/DOWN по-прежнему «вниз»). Стрелка — красная линия из той же точки. - Ещё 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)Не получается? Что-то не работает →