Важная информация
RSS лента

gordiole

Разработка копировщика флоппи дисков (Floppy Deuce). Часть 2

Оценить эту запись

STM32CubeMX. Конфигурирование таймеров для симуляции сигналов READ_DATA и INDEX от флоппи диска.


На первоначальном этапе разработки копировщика мы не будем использовать флоппи привод, а будем симулировать необходимые сигналы для отладки программы.
Для симуляции READ_DATA (данные дорожки) используем таймер TIM10, а для симуляции INDEX (индекс от диска) таймер TIM11. Это два простых таймера общего назначения. Функциональную диаграмму для таймеров можно посмотреть на картинке:




На вкладке Pinout ищем элементы TIM10, TIM11 и конфигурируем их как показано на картинке. Данная конфигурация переводит таймеры в PWM режим, который позволит использовать таймеры в режиме генератора импульсов с заданным периодом и заданной скважностью импульсов




Переходим на вкладку Configuration. На этой вкладке в разделе Control появились две кнопки TIM10 и TIM11:




Конфигурирование TIM10.


Нажимаем кнопку TIM10 для конфигурации таймера. В появившемся окне на вкладке Parameter Settings производим настройку параметров работы таймера как показано на картинке



  • Согласно функциональной диаграммы таймеров сигнал CK_PSC подается с шины APB2 на Prescaler.
    Частота на выходе Prescaler рассчитывается по формуле CK_CNT = CK_PSC / (Prescaler + 1)
    В нашем случае,
    CK_PSC = 96 МГц (сконфигурировано в Clock Configuration)
    Prescaler = 0
    Получаем CK_CNT = 96 МГц
  • Затем CK_CNT подается на счетчик с перезагрузкой. По достижении значения заданного в Counter Period происходит перезагрузка счётчика.
    Частота на выходе счетчика CNT рассчитывается по формуле CNT = CK_CNT / (Counter Period + 1)
    В нашем случае,
    CK_CNT = 96 МГц
    Counter Period = 191
    Получаем CNT = 0,5 МГц что соответствует скорости передачи MFM 500 кбит/с (вся дорожка заполнена 0)
  • Значение Pulse заносится в Compare 1 регистр, с помощью этого регистра формируется заданная скважность импульса.
    Скважность рассчитывается по формуле Duty = Pulse * 100 / (Counter Period + 1)
    В нашем случае,
    Pulse = 144
    Counter Period = 191
    Получаем Duty = 75 %

Таким образом мы сконфигурировали TIM10 на генерацию импульсов с периодом 2 мкс и скважностью 25 % (0,5 мкс) отрицательный полупериод и 75 % (1,5 мкс) положительный полупериод.


Вкладку NVIC Settings оставляем без изменений, так как она предназначена для разрешения прерываний, но прерывания нам и не нужны




Переходим на вкладку GPIO Settings и видим что Cube выделил ножку PB8 микроконтроллера для вывода сигнала OC1 от таймера TIM10. Производим настройку выхода микроконтроллера согласно картинке



Хочется подчеркнуть, что User Label это имя для физического входа/выхода микроконтроллера и Cube сгенерирует #define с заданным именем, что позволит нам пользоваться именами и в дальнейшем легко переназначать входы/выходы микроконтроллера.


Конфигурирование TIM11.


Конфигурирование TIM11 производится аналогично TIM10. Нажимаем кнопку TIM11 для конфигурации таймера. В появившемся окне на вкладке Parameter Settings производим настройку параметров работы таймера как показано на картинке



Таким образом мы сконфигурировали TIM11 на генерацию импульсов с периодом 200 мc и скважностью 2 % (4 мс) отрицательный полупериод и 98 % (196 мс) положительный полупериод.


Вкладку NVIC Settings также оставляем без изменений




Переходим на вкладку GPIO Settings и производим настройку выхода микроконтроллера согласно картинке




На этом мы завершили конфигурацию таймеров для симуляции сигналов READ_DATA и INDEX от флоппи диска.

Обновлено 03.04.2017 в 22:28 gordiole

Категории
Без категории

Комментарии

Трекбэков