сайт для палких паяльників

Translations

Переклади з української на інші мови

21. STM32. Программирование STM32F103. USB

На тестовой плате STM32F103 есть microUSB разъем. И он служит не только для подачи питания. STM32F103 может работать с USB в качестве различных USB – устройств. Как USB HID устройство, в том числе как клавиатура или мышка, как виртуальный последовательный порт, USB Mass Storage, и тому подобное. Мы рассмотрим лишь пару примеров. В первом – компьютер будет воспринимать STM32F103 как виртуальный последовательный порт. Во втором примере STM32F103 эмитирует клавиатуру и мышку. STM32F103 будет двигать мышкой, (конечно на экране :), и эмитировать нажатие кнопок на клавиатуре.

Continue reading “21. STM32. Программирование STM32F103. USB” »

20. STM32. Программирование STM32F103. I2C Slave

В предыдущей статье мы рассмотрели работу STM32 с шиной I2C в качестве Мастера. То есть, он был ведущий и опрашивал датчик. Теперь сделаем так, чтобы STM32 был Slave-ом и отвечал на запросы, то есть сам работал как датчик. Мы выделим 255 байт памяти под регистры с адресами от 0 до 0xFF, и позволим Мастеру в них писать/читать. А чтобы пример был не таким простым, сделаем из нашего STM32, еще и аналого-цифровой преобразователь с интерфейсом I2C. ADC будет обрабатывать 8 каналов. Результаты преобразований контроллер будет отдавать Мастеру при чтении из регистров. Поскольку результат преобразования ADC занимает 12 бит, нам потребуется 2 регистра (2 байта) на каждый канал ADC.

Continue reading “20. STM32. Программирование STM32F103. I2C Slave” »

19. STM32. Программирование STM32F103. I2C Master

Шина I2C достаточно популярна и очень много датчиков и различных устройств используют именно I2C. Я не буду писать кто, когда и для чего изобрел эту шину и как по ней бегают байты. Этой информации полно в Интернете, для этого существует Википедия. Когда Вы держите в руках сенсор и хотите как можно быстрее получить с него данные, и решить поставленную задачу, Вам хватит следующего минимума знаний:

  1. Шина I2C – это двухпроводная шина с линиями SCL, SDA. Теоретически, на одну шину I2C можно параллельно подключить до 112 устройств.
  2. Обе линии шины должны быть через резисторы подключенными к питанию. Рекомендуемый номинал резисторов зависит от скорости и других параметров шины. Обычно мало кто этим озадачивается и ставят резисторы в пределах от 4.7к до 10кОм. Резисторов должно быть по одному на каждую линию.
  3. Если Вы подключаете несколько модулей, а на каждом модуле уже впаяны подтягивающие резисторы, то получается, что резисторы включаются параллельно и их суммарное сопротивление становится меньше. Это не очень хорошо. Но, если вы включаете только два таких модуля и на каждом впаяны резисторы по 10 кОм, тогда суммарное сопротивление будет 5ком, что попадает в пределы допустимой нормы и шины I2C, скорее всего, будет работать. Но повторяю: подключать на каждую линию более одного резистора – не очень хорошая идея.
  4. Каждое устройство на шине I2C имеет отдельный адрес.
  5. На шине I2C может быть только один Master и один или несколько Slave.
  6. Скорость шины может быть разной. Обычно используют два стандарта 100 и 400 КГц. Скорость линии должна определяться по самому медленному устройства на шине. Если Slave не успевает, он может “придержать” шину и все его будут ждать. Такой подход, хотя и является стандартом, но на практике работает не всегда. В случае, когда Master не умеет ждать (этим, например страдают микрокомпьютеры), на шине начинается беспорядок. То есть, некорректная работа одного из устройств на шине I2C (не важно, в каком качестве – Master или Slave) может вызвать проблемы в работе всех устройств.
  7. Если напряжение питания контроллера отличается от напряжения питания датчика, они должны включаться через двунаправленную схему согласования логических уровней.

Continue reading “19. STM32. Программирование STM32F103. I2C Master” »

18. STM32. Программирование STM32F103. Remap

Почему нельзя сделать такой контроллер, который имел бы минимум стандартных ног: ну, там – питание, выводы для программатора и т.д., а остальные выводы чтобы можно было настроить как угодно? Хочу на ногу №1, скажем, PA6 – программно настроил и готово. А хочу RX порта UART1, – сказал микроконтроллеру, чтобы RX порта UART1 подключил к ноге №1 и все. И так же любой функционал на любые выводы. Это было бы очень удобно! Но это технически довольно сложно. Хотя, может так случиться, что в недалеком будущем появится что-то похожее. Разработчики микроконтроллеров к этому потихоньку, но уверенно идут. Конечно, когда появятся такие контроллеры, изменятся и подходы к проектированию схем и программ. Но вернемся к реальности.

Мы уже привыкли к тому, что к определенным выводам микроконтроллера привязан определенный функционал. И мы можем выбирать, какие из доступных функций мы можем использовать. Например, в нашем микроконтроллере STM32F103 ногу, которая называется PA9 можно использовать как линию порта A9 (вход или выход). Или использовать альтернативный функционал, такой как TX выход последовательного порта USART1 (USART1_TX), или как второй канал первого таймера TIM1_CH2. Но что нам делать если A9 уже используется, а нам крайне необходим USART1_TX? У STM32 есть функция REMAP.

Continue reading “18. STM32. Программирование STM32F103. Remap” »

17. STM32. Программирование STM32F103. Watchdog

Watchdog, или сторожевые таймеры, существуют для того, чтобы в случае зависания программы микроконтроллера, его (микроконтроллер) можно было перезагрузить. У STM32 есть два watchdog. IWDG и WWDG. IWDG – независимый ( “I” – Independent). WWDG – Оконный ( “W” – Window). Если Вы завели настроили и запустили watchdog, надо периодически сбрасывать его счетчик. Если счетчик не обновлять определенное время, watchdog считает, что с микроконтроллером то не так и перезагружает его. Это главная идея watchdog. Теперь рассмотрим их подробнее и разберем, в чем разница между IWDG и WWDG.

Continue reading “17. STM32. Программирование STM32F103. Watchdog” »

16. STM32. Программирование STM32F103. Flash

Работа с Flash памятью

STM32 не имеет энергонезависимой EEPROM памяти. EEPROM есть только у STM32L. Так случилось, что в STMicroelectronics решили, что EEPROM нужна только для Ultra Low Power серии микроконтроллеров. А что же нам делать? Нам нужна энергонезависимая память. Где нам хранить наши данные, настройки и т.д.? Во Flash! Да, в той же памяти, где лежит программа микроконтроллера. STM32 может писать во Flash память.

Для того, чтобы безопасно что то записать во Flash память, надо сначала выяснить ее структуру. Нас интересует Main memory. Именно в ней хранится программа и в эту память мы будем писать. Конечно, в не занятый программой участок памяти. Flash память разбита на страницы. Количество и размер страниц в разных контроллерах разная. О структуре памяти Вашего микроконтроллера читайте в Programming manual.

Continue reading “16. STM32. Программирование STM32F103. Flash” »

15. STM32. Программирование STM32F103. BKP

Backup registers (BKP)

В предыдущей статье мы познакомились с часами реального времени RTC. Там я упомянул о Backup Domain – часть микроконтроллера, которая питается от дополнительной батареи. Кроме часов, Backup Domain содержит Backup registers (BKP). У каждого микроконтроллера количество этих регистров может быть разной. В STM32F103C8 их 42 (BKP_DR1 … BKP_DR42). Это 16-битные регистры памяти, которые сохраняют свое значение после отключения основного питания микроконтроллера. Это не Flash и не EEPROM, это обычная память, которая питается от батарейки. Если расценивать батарейку часов, как резервное питание, станет понятно, почему эти регистры называются Backup registers. Если выключить питание микроконтроллера и резервное питание (батарейку), данные регистров будут утрачены. Поэтому эти регистры нельзя считать энергонезависимой памятью.

Continue reading “15. STM32. Программирование STM32F103. BKP” »

14. STM32. Программирование STM32F103. RTC

Часы реального времени (RTC)

У STM32 есть встроенные часы реального времени. Они могут работать независимо от основного питания микроконтроллера. Для работы встроенных часов на специальный вывод надо подать питание напряжением 3В. Например, подключить батарейку CR2032. Такие батарейки используют в часах, в компьютерах на материнских платах, и в других приборах. Часы потребляет очень мало энергии, поэтому батарейки хватает на длительное время. Также часы могут работать как будильник – формировать сигнал на одном из выходов или выводить микроконтроллер из режима энергосбережения. Сначала мы запустим часы и настроим таким образом, чтобы они считал секунды и продолжали работать после отключения основного питания микроконтроллера. Будильник будет рассматриваться позже.

Continue reading “14. STM32. Программирование STM32F103. RTC” »

13. STM32. Программирование  STM32F103. EXTI

Внешние прерывания

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

Любые линии портов ввода-вывода STM32 могут работать с внешними прерываниями. То есть, любой пин можно настроить на работу с прерыванием. В STM32F103 всего 19 линий внешних прерываний:

  • EXTI0 … EXTI15 – для работы с пинами портов
  • EXTI16 – подключенный к PVD
  • EXTI17 – RTC Alert event (будильник)
  • EXTI18 – USB Wakeup event
  • EXTI19 – Ethernet Wakeup event

Continue reading “13. STM32. Программирование STM32F103. EXTI” »

Эти примеры можно рассматривать, как демонстрацию алгоритмов управления бесколлекторным двигателем, но не как конечный продукт. Для доведения до законченной технической реализации потребуется, как минимум, добавить дополнительные цепи защиты. Эти примеры рассчитаны на управление двигателями с напряжением питания от 12 до 24 Вольт. При более высоком напряжении питания потребуется вносить изменения в схему. В схемах предусмотрена возможность подавать ШИМ сигнал (с помощью перемычек) на верхние и/или нижние ключи. Для управления бездатчиковыми двигателями это может играть важную роль.

Обратите внимание на: Примеры и схема управления бесколлекторными моторами для STM32

Sensored BLDC

Пример управления бесколлекторным двигателем с датчиками Холла

Пример написан на GCC 3.4.6
для микроконтроллера Atmega168

Содержит: схему, исходный код на C.

Схема контроллера BLDC бесколлекторный двигатель с датчиками Холла 

 

Скачать

Continue reading “Бесколлекторные двигатели. Примеры на C” »

12. STM32. Программирование STM32F103. TIMER. PWM

В предыдущих статьях мы познакомились с тем, как таймеры могут захватывать входной сигнал. Таймеры микроконтроллера STM32 также могут формировать выходные сигналы. Сегодня мы познакомимся с PWM или ШИМ сигналом на примерах.

Инициализация PWM выполняется следующим образом:

  • настраивается выход порта соответствующего канала таймера, который будет задействован для формирования PWM сигнала
  • выполняются базовые настройки таймера
  • выполняется настройка OC канала таймера (настройка параметров PWM)
  • включается таймер

Continue reading “12. STM32. Программирование STM32F103. TIMER. PWM” »

11. STM32. Программирование STM32F103. TIMER. Encoder

Еще одна полезная функция таймера – возможность работы с инкрементными (квадратурными) энкодерами. Мы настроим таймер таким образом, чтобы он обрабатывал сигналы с двух своих входных каналов и менял свой счетчик в указанных пределах. То есть, когда мы будем вращать энкодер в одном направлении, счетчик таймера будет увеличиваться, в обратном – уменьшаться. В примере мы установим TIM_Period = 100. Это значит, что счетчик таймера будет уменьшаться или увеличиваться в зависимости от направления вращения энкодера в этих пределах. При прямом вращении энкодера, когда счетчик досчитает до 100, он перепрыгнет на 0. При обратном направлении, когда счетчик уменьшится до нуля, он автоматически перепрыгнет на 100. Нам больше ничего не придется контролировать, только считывать счетчик таймера. В следующем примере программа периодически опрашивает счетчик таймера и отправляет его значение в последовательный порт USART.

Continue reading “11. STM32. Программирование STM32F103. TIMER. Encoder” »

Translate
Архіви

© 2011-2019 Андрій Корягін, Кременчук - Київ, Україна