ПЭВМ Агат » Документация, книжки, статьи, размышлизмы » Кусочки и срисовки » Описание контроллера дисковода 140 кб » как двигать головку дисковода

Описание контроллера дисковода 140 кб: как двигать головку дисковода

Как это делать вроде бы и так понятно: выключаем один электромагнит, включаем другой, потом выключаем другой, включаем третий. Ну или наоборот. Каждый второй электромагнит подтягивает головку к очередному треку.

Вопрос в другом: что будет, если у нас шаловливые ручки и богатая фантазия ?

Документация на дисковод ес5088 требует, чтобы длительность включения электромагнита составляла не менее 20 мс, и чтобы после его отключение чтение начиналось не ранее чем через 20 мс. Jim Sather тоже считает, что следует отключать магниты перед чтением/записью: по его мнению, если какой либо из них оставить включенными, это приведёт к мелким вибрациям головки. Мне кажется, низкая механическая добротность всей системы быстро бы подавила такую вибрацию, особенно при достаточно чистом питании схемы. С другой стороны - сложно что ли выключить ?

Но здесь о другом. В процессе разработки своего контроллера я пробовал экспериментировать с различными таймингами, читал книжки и смотрел исходники. В результате выяснил следующее:

  • вообще-то, двигатель уверенно крутится даже если время каждой фазы составляет 9-10 мс.
  • после отключения фазы и до включения следующей некоторые разработчики ставили задержку < 1 мс. Не понял - зачем.
  • мой дисковод не очень точно попадает на дорожку при длительности фазы 20 мс. Головка просто проскакивает нужную фазу, процентов на 10-20. Гораздо лучшие результаты даёт 30-40 мс (во время последнего шага). Следует отметить, что "проскакивание" фазы имеет довольно стабильный характер, расстояние "проскока" весьма постоянно для заданного положения ротора.
  • попытка использовать импульсы длительность 40 мс и выше, на всём пути следования головки, приводит к заметной неравномерности движения, которое начинает сопровождаться треском.
  • эпловский драйвер имел сложную разгонно-остановочную характеристику. Т.е. разные фазы включал на разное время. Последняя фаза - перед чтением/записью - включалась на 26 мс.
  • бейсик-60 Агата загружался ДОСом, который имел тот же код драйвера, что и эпловская операционка, но все задержки в нём были выставлены по максимуму (но это бы лучше проверить ещё раз).
  • разные операционки Агата имели очень разное представление о том, как нужно двигать головку. Но бейсик-60 имеет наиболее низкую скорость движения.

Программа copy track ("корректор смещения")...

...пытается восстанавливать данные, устанавливая головку не точно в нужную фазу, а между ними. "Смещение", которое она показывает, следует понимать так:
0 - точно как положено
1 - точно как положено, но потом короткий рывок в сторону длительностью 3.2 мс
2 - тоже, но 6.4 мс
3 - тоже, но 9.6 мс
4 - просто соседняя (межтрековая) фаза. Импульсом 25 мс (гарантированная установка).
Эта логика, с этими же цифрами, повторяется в РАПИРовском КОПИТРЕКе и в различных версиях ДОСовского. В некоторых версиях РАПИРовского КОПИТРЕКа добавлены ещё один или два варианта: 12.8 мс и 16 мс.

Вероятно, по замыслу автора, головка не будет достигать фазы за время короткого импульса. В реальности, всё зависит от погоды и солнечных бурь. Может действительно попадёт куда надо, может перелетит до соседней фазы, а может с места не сдвинется (т.е. стабильность этого явления хуже чем наблюдаемый мной "перескок"). Думаю, автору это тоже было понятно, поэтому копитрек повторяет попытки позиционирования многократно.

Важно то, что шаговый двигатель ес5088 не имел предпочтительных положений: после отключения всех магнитов ротор остаётся в последнем положении сколь угодно долго, даже если это положение между фазами.

Автор раздела: Garnizon