STM32F100 Прошивка для DIY-сканера 35мм киноплёнки
Цикл статей о сканере, для понимания о чём проект Часть 1 Хабр Часть 2 Хабр Часть 3 Хабр Часть 4 Хабр
С версии 1.1 прошивка адаптирована для тушки Fujifilm XT-4
Разработано в кооперации с проектом Видачество(Boosty) и FTC
Всё что отмечено в пины.txt "закончились ноги" означает что это не удалось реализовать на STM32F100 и возможно получится на STM32F107 так как там банально больше ресурсов доступно
Компиляция и прошивка: Keil 5.36 с установленным ARM CMSIS 6.2.0, CMSIS Compiler 2.1.0, DFP 2.4.1, CMSIS Driver 2.10.0, ARM Compiler 1.7.2, MDK 8.1.0. Компилятор 6я версия, частота кварца 8 мгц, C99
Таблица распределения ножек STM32F100RBy из файла пины.txt
| GPIO | Нога | Что подключено | Функция | Сделано? |
|---|---|---|---|---|
| PA0 | 14 | GPIO | Сервисное меню | ❌ |
| PA1 | 15 | TIM2_CH2 | Подсветка кадра - зелёный | ✔️ |
| PA2 | 16 | TIM2_CH3 | Подсветка кадра - синий | ✔️ |
| PA3 | 17 | TIM2_CH4 | Подсветка кадра - красный | ✔️ |
| PA4 | 20 | ADC1_IN4 | Фоторезистор датчика натяжения подающей бобины | ✔️ |
| PA5 | 21 | ADC1_IN5 | Фоторезистор датчика натяжения принимающей бобины | ✔️ |
| PA6 | 22 | ADC1_IN6 | Терморезистор двигателя подающей бобины | ❌ |
| PA7 | 23 | ADC1_IN7 | Терморезистор двигателя принимающей бобины | ❌ |
| PA8 | 41 | GPIO | Переключение направления вращения подающей бобины | ✔️ |
| PA9 | 42 | USART1_TX | Экран отображения информации BA63 | ✔️ |
| PA10 | 43 | USART1_RX | Экран отображения информации BA63 | ✔️ |
| PA11 | 44 | GPIO | Переключение направления вращения принимающей бобины | ✔️ |
| PA12 | 45 | TIM1_ETR | Счётчик импульсов привода ЛПМ, соединить с PB14 | ✔️ |
| PB0 | 26 | ADC1_IN8 | Терморезистор двигателя привода лпм | ❌ |
| PB1 | 27 | ADC1_IN9 | Терморезистор блока подсветки | ❌ |
| PB2 | 28 | GPIO | Вход Отключение принимающей бобины |
✔️ |
| PB5 | 57 | GPIO | Вкл/выкл двигателей бобин | ✔️ |
| PB6 | 58 | GPIO | Вкл/выкл двигателя привода ЛПМ | ✔️ |
| PB7 | 59 | GPIO | Кнопка команд Пуск и Остановка |
✔️ |
| PB8 | 61 | TIM17_CH1 | Управление скоростью двигателя подающей бобины | ✔️ |
| PB9 | 62 | TIM16_CH1 | Управление скоростью двигателя принимающей бобины | ✔️ |
| PB10 | 29 | GPIO | Жёлтый светодиод работы подающей бобины | ✔️ |
| PB11 | 30 | GPIO | Жёлтый светодиод работы принимающей бобины | ✔️ |
| PB12 | 33 | GPIO | Зелёный светодиод смены кадра | ✔️ |
| PB13 | 34 | GPIO | Красный светодиод тревоги | ✔️ |
| PB14 | 35 | TIM15_CH1 | Управление скоростью двигателя привода ЛПМ | ✔️ |
| PB15 | 36 | GPIO | Переключение направления вращения двигателя ЛПМ | ✔️ |
| PC0 | 8 | GPIO | Клавиатура строка 1 вход | ✔️ |
| PC1 | 9 | GPIO | Клавиатура строка 2 вход | ✔️ |
| PC2 | 10 | GPIO | Клавиатура строка 3 вход | ✔️ |
| PC3 | 11 | GPIO | Клавиатура строка 4 вход | ✔️ |
| PC4 | 24 | ADC1_IN14 | Фотодатчик обратной связи от камеры | ✔️ |
| PC5 | 25 | ADC1_IN15 | Фоторезистор калибровки уровня яркости | ❌ |
| PC6 | 37 | GPIO | Клавиатура столбец 1 выход | ✔️ |
| PC7 | 38 | GPIO | Клавиатура столбец 2 выход | ✔️ |
| PC8 | 39 | GPIO | Клавиатура столбец 3 выход | ✔️ |
| PC9 | 40 | GPIO | Клавиатура столбец 4 выход | ✔️ |
| PC10 | 51 | GPIO | Датчик выпадения плёнки | ✔️ |
| PC11 | 52 | GPIO | Светодиод работающей подсветки | ✔️ |
| PC12 | 53 | GPIO | Сигнал на затвор камеры + светодиод | ✔️ |
| PC13 | 2 | GPIO | Таходатчик подающей бобины | ❌ |
| PC14 | 3 | GPIO | Таходатчик принимающей бобины | ❌ |
| PC15 | 4 | GPIO | Таходатчик привода лпм | ❌ |
| PD2 | 54 | GPIO | Вкл/выкл драйверов - переключатель | ✔️ |
Таблица распределения таймеров STM32F100RBy из файла пины.txt
| Таймер | Назначение | Сделано? |
|---|---|---|
| TIM1 | Счётчик импульсов от привода ЛПМ | ✔️ |
| TIM2 | ШИМ подсветки к,з,с,ж - RGBY | ✔️ |
| TIM3 | Опрос датчиков натяжения и датчика от камеры | ✔️ |
| TIM4 | Управление светодиодами и экраном | ✔️ |
| TIM6 | Генерация миллисекундной задержки | ✔️ |
| TIM7 | Опрос кнопок и переключателей | ✔️ |
| TIM15 | Управление скоростью двигателя привода ЛПМ | ✔️ |
| TIM16 | Управление скоростью двигателя принимающей бобины | ✔️ |
| TIM17 | Управление скоростью двигателя подающей бобины | ✔️ |
Таблица распределения каналов АЦП STM32F100RBy из файла пины.txt
| Канал | Назначение | Сделано? |
|---|---|---|
| ADC1_IN0 | Не используется - занят кнопкой сервисного меню(датчик дырок перфорации) | ➖ |
| ADC1_IN1 | Не используется - занят ШИМ зелёного(вольтметр шим) | ➖ |
| ADC1_IN2 | Не используется - занят ШИМ синего(вольтметр 5В на логику) | ➖ |
| ADC1_IN3 | Не используется - занят ШИМ красного(вольтметр 3.3В контроллера) | ➖ |
| ADC1_IN4 | Фоторезистор датчика натяжения плёнки подающей бобины | ✔️ |
| ADC1_IN5 | Фоторезистор датчика натяжения плёнки принимающей бобины | ✔️ |
| ADC1_IN6 | Терморезистор двигателя подающей бобины | ❌ |
| ADC1_IN7 | Терморезистор двигателя принимающей бобины | ❌ |
| ADC1_IN8 | Терморезистор двигателя привода лпм | ❌ |
| ADC1_IN9 | Терморезистор блока подсветки | ❌ |
| ADC1_IN10 | Не используется - занят клавиатурой(вольтметр напряжения ключей драйверов) | ➖ |
| ADC1_IN11 | Не используется - занят клавиатурой(ток двигателя подающей бобины) | ➖ |
| ADC1_IN12 | Не используется - занят клавиатурой(терморезистор DC-DC шим подсветки) | ➖ |
| ADC1_IN13 | Не используется - занят клавиатурой(ток двигателя привода лпм) | ➖ |
| ADC1_IN14 | Фотодатчик обратной связи | ✔️ |
| ADC1_IN15 | Фоторезистор калибровки уровня яркости | ❌ |
| ADC1_IN16 | Терморезистор чипа | ❌ |
| ADC1_IN17 | Опорное напряжение от внутреннего генератора | ❌ |
Таблица распределения портов USART STM32F100RBy из файла пины.txt
| USART | Назначение | Сделано? |
|---|---|---|
| USART1 | BA63 основной экран | ✔️ |
| USART2 | Не используется - занят ШИМ каналов к,з,с,ж(связь в другими мозгами?) | ➖ |
| USART3 | Не используется - занят светодиодами и датчиком(связь с компом) | ➖ |