Меню

Входной ток ацп stm32

7. STM32. Программирование STM32F103. ADC

ADC (Analog-to-Dogital Converter) — аналого-цифровой преобразователь (далее АЦП). АЦП преобразует аналоговый сигнал в цифровой код. Такой себе вольтметр, который мы сегодня заставим работать в нескольких режимах, в том числе с применением DMA. Микроконтроллеры могут иметь несколько АЦП. STM32F103C8 имеет 2 АЦП. АЦП может обрабатывать несколько каналов (до 18). Канал — это внешний сигнал, который может быть заведен на одну из ног микроконтроллера, или внутренний канал, например встроенный термометр. Аналоговый сигнал можно подавать на ноги, которые имеют маркировку ADC12_INn. Где n — номер канала. Например, ADC12_IN1.

На нашей плате доступны 10 внешних каналов, обозначены ADC12_IN0 . ADC12_IN9, и два внутренних — термометр и опорное напряжение.

STM32F103C8

Питание АЦП

STM32 ADC Supply

У микроконтроллеров в 100-ногих корпусах есть выводы для подачи опорного напряжения Vref- Vref+. На них надо подавать опорное напряжение по схеме как рекомендовано в документации.

STM32 ADC Vref

Для решения особых задач на Vref- Vref+ может подаваться опорное напряжение, отличное от напряжения питания АЦП. Но оно не может быть выше напряжения питания АЦП (Vdda). А Vdda, в свою очередь, не может быть выше 3.6В.

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

Параметры АЦП

В нашем микроконтроллере STM32F103C8:

  • 2 шт. 12-битных ADC. Каждый из них может обслуживать несколько каналов до 16 внешних (физически доступны 10) и 2 внутренних.
  • различные режимы преобразования:
    • однократное
    • непрерывное
    • по триггеру
    • по таймеру
  • выравнивание бит результата (вправо / влево)
  • генерирование прерываний и сигналов для DMA
  • скорость оцифровки — до 0.9 MSPS
  • автокалибровка
  • режим сканирования входов по списку
  • аналоговый сторож (watchdog)

Каналы АЦП микроконтроллеров STM32 делятся на две группы: регулярные каналы (regular) и инжектированные (injected). Количество регулярных каналов для одного АЦП равна 18, среди них 16 внешних и два внутренних (опорное напряжение и датчик температуры). Результаты измерений регулярных каналов хранятся в одном регистре и требуют сохранения результатов в памяти микроконтроллера, а инжектированных каналы (до 4) имеют собственные регистры для хранения результата.

Существует возможность настраивать работу каналов АЦП в произвольном порядке, несколько раз обрабатывать выбранные каналы, использовать внешние и программные события для запуска преобразования.

АЦП могут работать как в одиночном, так и в парном режиме. Два АЦП с различными конфигурациями регулярных и инжектированных каналов. В общем случае возможны два варианта: независимая и парная работа. Для парной работы в микроконтроллере должны быть 2 или более АЦП. АЦП можно настроить на работу в качестве аналогового сторожа (watchdog), то есть задаются верхний и нижний пороги входного сигнала. АЦП отслеживает уровень сигнала и, когда тот выходит за указанные пределы, генерируется прерывание. Настраивается время преобразования для каждого канала. Всего можно задать восемь значений времени для каждого канала в диапазоне 1,5 . 239,5 циклов тактирования модуля АЦП.

Структура АЦП

STM32 ADC

Независимая работа АЦП

1. Single-channel (Одноканальный) АЦП выполняет одно преобразование одного канала, сохраняет полученное значение в выходном регистре и останавливается.

2. Single continuous (Одноканальный длительный) Этот режим аналогичен первому, но АЦП не останавливается, а продолжает работу с выбранным каналом. При этом результат постоянно перезаписывается в выходном регистре.

3. Scan (Многоканальный) В этом режиме возможно сконфигурировать АЦП для выполнения последовательных преобразований нескольких каналов в заданной последовательности. Преобразовании также настраивается отдельно для каждого канала. После обработки указанного числа каналов АЦП останавливается.

4. Scan continuous (Многоканальный длительный) То же самое что и Scan, только АЦП не останавливается после опроса всех каналов, а снова начинает обработку каналов. Как и в режиме Single continuous, все результаты сохраняются в один регистр и надо своевременно забирать данные, пока они не будут затертые данным преобразования следующего канала. Лучший метод — задействовать для этого DMA. Именно этот способ мы рассмотрим в одном из примеров.

5. Discontinuous (Прерывистый) Особенность этого режима в том, что будут сканированны не все каналы за раз, а только некоторые, заранее установленые. В следующий раз при наступлении события, которое запускает преобразования, будет просканирована следующая группа каналов и так далее.

Парная работа

1. Regular / Injected simultaneous (Одновременный для Regular и Injected каналов) Первый АЦП будет сканировать каналы начиная с 0 до 15 для регулярных каналов, или с 0 до 3 для injected каналов. Второй — в обратном направлении, с 15 до 0 или 3 до 0 для injected каналов. Таким образом, каждый канал за тот же период времени будет обработан дважды.

2. Fast interleaved (Быстрый попеременное) Доступен только для одного выбранного регулярного канала. При запуске преобразования АЦП2 стартует первый, а АЦП1 — с задержкой в семь тактов. Если установлен режим continuous, то такая последовательность будет повторяться дальше, что дает возможность удвоить частоту измерения входного сигнала.

3. Slow interleaved (Медленный попеременное) Все как в предыдущем режиме, только АЦП1 стартует с задержкой в 14 тактов, а после окончания первого преобразования АЦП2 тоже выдержит задержку 14 тактов перед повторным стартом.

4. Alternate trigger (Альтернативный по триггера) Доступен только для инжектированных каналов. АЦП1 начинает последовательно конвертировать все инжектированные каналы. Когда происходит следующее событие запускающий конвертацию, АЦП2 начинает делать то же самое. Если установлен режим discontinuous, то будет преобразован только один канал на каждое событие.

5. Combined regular / injected simultaneous mode (Комбинированный одновременный режим для регулярных / инжектированных каналов) Происходит преобразование обеих групп каналов. Но injected группа каналов может прервать обработку группы регулярных каналов. То есть, если произойдет событие, запускающее конвертирование injected каналов, а в это время АЦП занимается обработкой regular каналов, то АЦП переключится на обработку injected каналов.

6. Combined regular simultaneous + alternate trigger mode Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки хранятся в регистрах данных каждого АЦП.

7. Combined regular simultaneous + alternate trigger mode Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп injected каналов.

На самом деле, я сам только в общих чертах понимаю парную работу АЦП. Разберемся позже, когда будет необходимость. А теперь перейдем к примерам с АЦП.

Источник

7. STM32. Программирование STM32F103. ADC

ADC (Analog-to-Dogital Converter) — аналого-цифровой преобразователь (далее АЦП). АЦП преобразует аналоговый сигнал в цифровой код. Такой себе вольтметр, который мы сегодня заставим работать в нескольких режимах, в том числе с применением DMA. Микроконтроллеры могут иметь несколько АЦП. STM32F103C8 имеет 2 АЦП. АЦП может обрабатывать несколько каналов (до 18). Канал — это внешний сигнал, который может быть заведен на одну из ног микроконтроллера, или внутренний канал, например встроенный термометр. Аналоговый сигнал можно подавать на ноги, которые имеют маркировку ADC12_INn. Где n — номер канала. Например, ADC12_IN1.

На нашей плате доступны 10 внешних каналов, обозначены ADC12_IN0 . ADC12_IN9, и два внутренних — термометр и опорное напряжение.

Читайте также:  Трансформатор тока тти 100 2000 5а

STM32F103C8

Питание АЦП

STM32 ADC Supply

У микроконтроллеров в 100-ногих корпусах есть выводы для подачи опорного напряжения Vref- Vref+. На них надо подавать опорное напряжение по схеме как рекомендовано в документации.

STM32 ADC Vref

Для решения особых задач на Vref- Vref+ может подаваться опорное напряжение, отличное от напряжения питания АЦП. Но оно не может быть выше напряжения питания АЦП (Vdda). А Vdda, в свою очередь, не может быть выше 3.6В.

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

Параметры АЦП

В нашем микроконтроллере STM32F103C8:

  • 2 шт. 12-битных ADC. Каждый из них может обслуживать несколько каналов до 16 внешних (физически доступны 10) и 2 внутренних.
  • различные режимы преобразования:
    • однократное
    • непрерывное
    • по триггеру
    • по таймеру
  • выравнивание бит результата (вправо / влево)
  • генерирование прерываний и сигналов для DMA
  • скорость оцифровки — до 0.9 MSPS
  • автокалибровка
  • режим сканирования входов по списку
  • аналоговый сторож (watchdog)

Каналы АЦП микроконтроллеров STM32 делятся на две группы: регулярные каналы (regular) и инжектированные (injected). Количество регулярных каналов для одного АЦП равна 18, среди них 16 внешних и два внутренних (опорное напряжение и датчик температуры). Результаты измерений регулярных каналов хранятся в одном регистре и требуют сохранения результатов в памяти микроконтроллера, а инжектированных каналы (до 4) имеют собственные регистры для хранения результата.

Существует возможность настраивать работу каналов АЦП в произвольном порядке, несколько раз обрабатывать выбранные каналы, использовать внешние и программные события для запуска преобразования.

АЦП могут работать как в одиночном, так и в парном режиме. Два АЦП с различными конфигурациями регулярных и инжектированных каналов. В общем случае возможны два варианта: независимая и парная работа. Для парной работы в микроконтроллере должны быть 2 или более АЦП. АЦП можно настроить на работу в качестве аналогового сторожа (watchdog), то есть задаются верхний и нижний пороги входного сигнала. АЦП отслеживает уровень сигнала и, когда тот выходит за указанные пределы, генерируется прерывание. Настраивается время преобразования для каждого канала. Всего можно задать восемь значений времени для каждого канала в диапазоне 1,5 . 239,5 циклов тактирования модуля АЦП.

Структура АЦП

STM32 ADC

Независимая работа АЦП

1. Single-channel (Одноканальный) АЦП выполняет одно преобразование одного канала, сохраняет полученное значение в выходном регистре и останавливается.

2. Single continuous (Одноканальный длительный) Этот режим аналогичен первому, но АЦП не останавливается, а продолжает работу с выбранным каналом. При этом результат постоянно перезаписывается в выходном регистре.

3. Scan (Многоканальный) В этом режиме возможно сконфигурировать АЦП для выполнения последовательных преобразований нескольких каналов в заданной последовательности. Преобразовании также настраивается отдельно для каждого канала. После обработки указанного числа каналов АЦП останавливается.

4. Scan continuous (Многоканальный длительный) То же самое что и Scan, только АЦП не останавливается после опроса всех каналов, а снова начинает обработку каналов. Как и в режиме Single continuous, все результаты сохраняются в один регистр и надо своевременно забирать данные, пока они не будут затертые данным преобразования следующего канала. Лучший метод — задействовать для этого DMA. Именно этот способ мы рассмотрим в одном из примеров.

5. Discontinuous (Прерывистый) Особенность этого режима в том, что будут сканированны не все каналы за раз, а только некоторые, заранее установленые. В следующий раз при наступлении события, которое запускает преобразования, будет просканирована следующая группа каналов и так далее.

Парная работа

1. Regular / Injected simultaneous (Одновременный для Regular и Injected каналов) Первый АЦП будет сканировать каналы начиная с 0 до 15 для регулярных каналов, или с 0 до 3 для injected каналов. Второй — в обратном направлении, с 15 до 0 или 3 до 0 для injected каналов. Таким образом, каждый канал за тот же период времени будет обработан дважды.

2. Fast interleaved (Быстрый попеременное) Доступен только для одного выбранного регулярного канала. При запуске преобразования АЦП2 стартует первый, а АЦП1 — с задержкой в семь тактов. Если установлен режим continuous, то такая последовательность будет повторяться дальше, что дает возможность удвоить частоту измерения входного сигнала.

3. Slow interleaved (Медленный попеременное) Все как в предыдущем режиме, только АЦП1 стартует с задержкой в 14 тактов, а после окончания первого преобразования АЦП2 тоже выдержит задержку 14 тактов перед повторным стартом.

4. Alternate trigger (Альтернативный по триггера) Доступен только для инжектированных каналов. АЦП1 начинает последовательно конвертировать все инжектированные каналы. Когда происходит следующее событие запускающий конвертацию, АЦП2 начинает делать то же самое. Если установлен режим discontinuous, то будет преобразован только один канал на каждое событие.

5. Combined regular / injected simultaneous mode (Комбинированный одновременный режим для регулярных / инжектированных каналов) Происходит преобразование обеих групп каналов. Но injected группа каналов может прервать обработку группы регулярных каналов. То есть, если произойдет событие, запускающее конвертирование injected каналов, а в это время АЦП занимается обработкой regular каналов, то АЦП переключится на обработку injected каналов.

6. Combined regular simultaneous + alternate trigger mode Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки хранятся в регистрах данных каждого АЦП.

7. Combined regular simultaneous + alternate trigger mode Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп injected каналов.

На самом деле, я сам только в общих чертах понимаю парную работу АЦП. Разберемся позже, когда будет необходимость. А теперь перейдем к примерам с АЦП.

Источник

АЦП в микроконтроллерах STM32: периферия решает многое

Как вы думаете, в чем отличие между микропроцессорами различных производителей с одним и тем же ARM-ядром? Правильно — разница в периферии! Ведь, по сути, ядро — только лишь вычислитель, замкнутый сам на себя, а общаться с внешним миром ему помогают периферийные устройства: порты ввода/вывода, АЦП, счетчики и т.п. Следовательно, разнообразие этих устройств и качество их исполнения во многом определяют применяемость данного МК при решении тех или иных задач. Давайте посмотрим, что же может нам предложить семейство микроконтроллеров STM32.

Основные параметры АЦП различных семейств микроконтроллеров STM32 представлены в таблице 1.

Таблица 1. Параметры АЦП в различных семействах МК STM32

Серия МК Количество АЦП в одном МК Разрядность, бит Частота дискретизации, Мвыб/сек Количество входных каналов Время
преобразования, мкс
Погрешность преобразования, МЗР
STM32F100 1 12 1 16 1,17…21 2…5
STM32F101 1 1…18
STM32F102 1 1,2…18
STM32F103 2…3 16…21 1…18
STM32F105/107 2 16 1…18
STM32F2xx 3 2 24 0,5…16,4
STM32L 1 1 24 1…25 2…4
STM32W 1 0,1 9 5

Как следует из таблицы, разброс параметров незначителен. Все АЦП имеют разрядность 12 бит, частоту дискретизации до 2 Msps в одиночном режиме и количество входных каналов до 24 (в зависимости от линейки). Выделяется лишь серия STM32W, предназначенная для радиочастотных применений и потому имеющая менее совершенный АЦП. Что касается приборов, в которых присутствует два или три независимых АЦП, то существует возможность увеличить частоту дискретизации путем их настройки на попеременную выборку значений.

Читайте также:  Вычислить выход по току хлора

Необходимо отметить, что в линейках STM32F1xx и STM32F2xx в парных режимах работы существует возможность увеличения скорости преобразования до 2 Msps и 6 Msps, соответственно. В STM32L АЦП разработан для максимальной экономии энергии без ухудшения параметров (аппаратное отключение между двумя последовательными измерениями).

Рассмотрим более подробно АЦП в линейке STM32F10x.

Каналы АЦП микроконтроллеров STM32 делятся на две группы: регулярные каналы (regular) и инжектированные (injected). Количество регулярных каналов для одного АЦП равняется 18, среди них 16 внешних и два внутренних — опорное напряжение и температурный датчик. Количество приоритетных каналов равняется четырем. Регулярные каналы подразумевают сохранение результатов преобразования через DMA-контроллер в памяти микроконтроллера, а инжектированные каналы имеют собственные регистры для хранения результата. Существует возможность настраивать работу каналов АЦП в произвольном порядке, несколько раз преобразовывать подряд одни и те же каналы, использовать внешние и программные события для старта преобразования.

Особенность АПЦ семейства STM32 — многообразие режимов как в одиночном, так и в парном режиме двух АЦП с различными конфигурациями регулярных и инжектированных каналов. В общем случае возможны два варианта: независимая и парная работа. В семействе STM32 также существует вариант работы АЦП в качестве аналогового сторожевого таймера, т.е. задаются верхний и нижний пороги чувствительности, и происходит отслеживание сигнала в фактически созданном окне. При выходе сигнала за один из порогов генерируется прерывание.

Немаловажная часть — задание времени преобразования для каждого канала. Всего можно задать восемь значений времени для каждого канала в диапазоне 1,5…239,5 циклов тактирования модуля АЦП.

Независимая работа

Этот режим имеет место, когда в составе МК имеется только один АЦП, или когда несколько АЦП настроены на работу без взаимодействия друг с другом. В этом случае возможны следующие режимы работы.

1. Одноканальный (Single-channel)

АЦП исполняет одно преобразование одного канала, записывает полученное значение в собственный выходной регистр и останавливается. Данный режим может быть применен для однократной проверки определенного параметра и принятия некоторого решения на его основе. Например, проверяем напряжение батареи, и если она разряжена, то не запускаем прибор, а только выдаем пользователю сообщение о необходимости замены элементов питания.

2. Многоканальный (Scan)

В этом режиме возможно сконфигурировать АЦП для выполнения определенного количества (например, 16) последовательных преобразований значений из различных каналов в любой последовательности (например, Канал1-Канал7-Канал12-Канал12-Канал5…). Делается это с помощью записи в специальный регистр последовательности номеров каналов в том порядке, в котором мы желаем осуществить преобразование. Время преобразования также настраивается отдельно для каждого канала. После обработки указанного числа каналов (от 1 до 16) АЦП останавливается. Этот режим может быть полезен, например, при периодическом оценивании среды или обстановки с помощью нескольких датчиков.

3. Одноканальный продолжительный (Single continuous)

Этот режим аналогичен первому, за тем исключением, что после окончания однократного преобразования АЦП не останавливается, а продолжает выбирать отсчеты из одного определенного канала. Широко применяется при непрерывном мониторинге аналоговых сигналов. Для хранения результатов всех обычных каналов выделен один и тот же регистр. Поэтому перед получением следующего значения необходимо позаботиться о сохранении в памяти предыдущего (например, с помощью контроллера DMA).

4. Многоканальный продолжительный (Scan continuous)

То же самое что многоканальный (Scan), только АЦП не останавливается после опроса всех каналов, а снова продолжает выбирать отсчеты, начиная с первого.

5. Прерывистый (Discontinuous)

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

Парная работа

Необходимо отметить, что парный режим работы возможен, если в составе МК имеются два или более АЦП. Это значительно расширяет возможности по оцифровке сигналов и добавляет несколько более сложных режимов работы.

1. Одновременный для обычных и приоритетных каналов
(Regular/Injected simultaneous)

При наступлении внешнего события первый АЦП будет сканировать каналы начиная с 0 до 15 для регулярных каналов или с 0 до 3 для инжектированных, а второй — наоборот, с 15 до 0 или с 3 до 0. Таким образом, каждый канал за тот же период времени будет обработан дважды. Необходимо обеспечить, чтобы период между событиями, запускающими преобразование, был как минимум в два раза больше, чем время, необходимое на само преобразование. Нужно вовремя извлекать результаты из регистра данных АЦП в оперативную память. Причем результат преобразования для АЦП2 будет содержаться в старшем полуслове регистра данных, а для АЦП1 — в младшем.

2. Быстрый попеременный
(Fast interleaved)

Доступен только для одного выбранного регулярного канала. При наступлении внешнего события АЦП2 стартует немедленно, а АЦП1 — с задержкой в семь тактов. Если установлен продолжительный (continuous) режим, то такая последовательность будет повторяться далее, что дает возможность удвоить частоту семплирования входного сигнала.

3. Медленный попеременный
(Slow interleaved)

Все как в предыдущем режиме, только АЦП1 стартует с задержкой в 14 тактов, а после окончания первого преобразования АЦП2 тоже выдержит задержку 14 тактов перед повторным стартом.

4. Переменный по триггеру
(Alternate trigger)

Доступен только для инжектированных каналов. При наступлении внешнего события АЦП1 начинает последовательно преобразовывать все инжектированные каналы. При наступлении следующего внешнего события АЦП2 начинает делать то же самое. Если установлен прерывистый (discontinuous) режим, то будет преобразован только один следующий канал на каждое наступившее событие. Этот режим позволяет получить два значения выборки, максимально близкие друг к другу (вплоть до 1…1,5 такта).

5. Комбинированный одновременный режим для регулярных/инжектированных каналов (combined regular/injected simultaneous mode)

Происходит преобразование обоих групп каналов. Но особенность заключается в том, что инжектированная группа каналов может прервать регулярную группу (рис. 1).

Комбинированный одновременный режим

Рис. 1. Комбинированный одновременный режим

Данный режим может быть полезен в системах с критичным временем реакции на измерение каких-либо параметров, например — в управлении двигателями. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.

6. Комбинированные одновременный регулярный и переменный по триггеру режимы (combined regular simultaneous + alternate trigger mode)

Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов (рис. 2.). При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.

Комбинированные одновременный и переменный по триггеру режимы

Рис. 2. Комбинированные одновременный и переменный по триггеру режимы

7. Комбинированные инжектированный одновременный режим и режим со смещением каналов (combined regular simultaneous + alternate trigger mode)

Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп инжектированных каналов (рис. 3).

Комбинированные инжектированный одновременный режим и режим со смещением каналов

Рис. 3. Комбинированные инжектированный одновременный режим и режим со смещением каналов

Заключение

Несомненно, множество режимов работы совместно с высокими собственными параметрами обеспечивают отличную перспективу применения 32-битных микроконтроллеров компании ST. Причем с каждой следующей серией заметна тенденция к дальнейшему повышению как частот семплирования, так и разрядности встроенных в МК АЦП. По предварительным данным, в новых линейках STM32 на ядре ARM Cortex-M4 будет доступен 16-битный сигма-дельта АЦП с дифференциальными входами. Это делает его не просто дополнением для приблизительной оценки каких-либо параметров, но и полноценным измерительным инструментом. Там где ранее при построении устройства необходимо было делать выбор в сторону внешнего стороннего АЦП, теперь есть возможность упростить схемотехническое, алгоритмическое решение и в результате получить более простое, дешевое, ремонтопригодное, а следовательно — более конкурентоспособное конечное изделие.

Читайте также:  Отношение мощностей тока при параллельном соединении

Источник



Измерение тока STM32 АЦП HAL (шунт, дифференциальный усилитель)

Принцип работы (измерения)

Последовательно с нагрузкой включаем сопротивление малой величины.

Таким образом протекающий ток через R load и R sense будет одинаковый (здесь 690 мА), при этом зная сопротивление резистора-шунта R sense = 0.1 Ом и измерив напряжение на нем (U sense = 0.069 В) можно легко вычислить протекающий через цепь ток:

А теперь испытания на макетной плате, лампа накала в качестве нагрузки R load ( ИСКРА 13,5 В) , низкоомный резистор R sense 3.3 Ом 10 Вт.

Берем вольтметр и измеряем напряжение на резисторе.

Итак, падение на нем U sense = 0.2757 В. Вычисляем ток

Учитывая неточность резистора, всё отлично, почти такой же, как показывает мультиметр ( ламповый блок питания показывает неправильно!).

Выбор шунта

  • малое сопротивление (чтобы уменьшить потери и вносимое влияние)
  • высокая точность сопротивления
  • малый ТКС (чтобы сопротивление мало изменялось при изменении температуры)

Схема

Понятно, что при маленьком значении сопротивления R sense будет падать и маленькое напряжение, а нам его еще и измерять, причем мы хотим получить диапазон от нуля то VCC (в данном случае от 0 В до 3.3 В), чтобы использовать все 12 разрядов внутреннего АЦП STM32.

В общем надо усилить сигнал в N раз. Применяем схему дифференциального (разностного, вычитающего) усилителя на операционном усилителе (питание однополярное).

Таким образом нам удастся усилить маленькое напряжение на R sense , а напряжение на выходе будет определятся соотношениями сопротивления резисторов, при R1 = R3, R2 = R4:

U1 — напряжение на инвертирующем входе;
U1 — напряжение на неинвертирующем входе;
R2=R4 — сопротивление резистора;
R1=R3 — сопротивление резистора;

Выбор операционного усилителя

Нам нужен ОУ с низким напряжением питания (т.к. он будет жить вместе с МК на стабилизаторе 3.3 В), маленьким входным напряжением смещения (input offset voltage) и маленьким (как можно ближе к нулю) выходным напряжением низкого уровня.

LMV321

Смотрим на эту гадость, ну такое.

Проверим в бою. На входе U sense = 100 мВ (падение на шунте):

При R1 = R3 = 1 кОм, R2 = R4 = 10 кОм, допуск резисторов 1% (также отобрал вручную самые точные), таким образом на выходе должно быть Usense*10 = 100 мВ*10 = 1000 мВ = 1 В (выражение выше):

Хорошо, усиление в 10 раз сработало отлично!

Помня про высокое значение выходного напряжения низкого уровня замыкаем шунт (на входе ноль), а на выходе:

Ой, нифига себе, примерно 80 мВ (собственно как и написано в документации). Нам такого не нужно, ведь тогда не удастся измерять малые токи.

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

LM358

Сравнивая с предыдущим у этого выходное напряжение низкого уровня будет около 5 мВ, вот это уже неплохо.

После замены ОУ на макетке измеряем напряжение на выходе при нуле на входах.

Неплохо, даже ниже обычного, то что нужно!

А теперь проверим выходное напряжение высокого уровня (питание 3.3 В):

И еще раз, но при питании 5 В:

Вот это печально. Выход ниже на более чем вольт по сравнению с напряжением питанием, то есть использовать этот ОУ в схемах с низким U пит не советую, ведь тогда будут полезными (использоваться) не 12 разрядов АЦП, а в данном случае всего чуть более 7-бит!

MCP6002

Приобрел ОУ MCP6002 в SOIC-8 от Micropchip.

Здесь выходное напряжение (Voltage Swing) мин 25 мВ, на деле оказалось около 7 мВ, вот эта микросхема и будет использована!

Не забудь добавить фильтр!

Настоятельно советую отфильтровать измеряемый сигнал перед подачей на АЦП простейший фильтр нижних частот (ФНЧ) в виде последовательно соединённых резистора и конденсатора ( как работает можно глянуть здесь). Также дополнительно советую использовать программный цифровой фильтр среднего скользящего.

Для использований общего назначения обычно ставят:

R = 10 — 100 Ом
C = 100 нФ — 1000 нФ

Сборка схемы на макетной плате

Создание проекта в STM32CubeIDE

Новый проект: New -> STM32 Project

Выбор МК: STM32F103C8T6

Имя проекта: Project Name: Current-Measeument-Shunt

Настройки тактирования по умолчанию (ничего не изменено):

Отладчик: SYS -> Debug: Serial Wire

Включение АЦП, Канал 0. Запуск от тригера Таймера 3:
ADC_Regular_ConversionMode: External Trigger Conversion Source

Во вкладке настройки ПДП (DMA):
Add: ADC1
Mode: Circular

Ну и Таймер 3:
TIM3 -> Internal Clock
Prescaler: 800-1
Counter Period: 1000-1
Trigger Event Selection: Update Event

Программирование

Массив из одного элемента для сырого значения с АЦП и вещественная переменная для напряжения, а также вспомогательная переменная:

/* USER CODE BEGIN PV */ /* adc variables */ uint16_t ADC_Raw[1]; float Current; uint8_t sch_adc = 0; /* USER CODE END PV */

Запуск АЦП с ПДП, ну и потом таймер, который будет производить запуск 10 раз/с:

/* USER CODE BEGIN 2 */ HAL_ADCEx_Calibration_Start(&hadc1); HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Raw, 1); HAL_TIM_Base_Start_IT(&htim3); /* USER CODE END 2 */

В функции обратного вызова переменная устанавливается равной 255, то есть положительное значение:

/* USER CODE BEGIN 4 */ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle) < sch_adc = 255; >/* USER CODE END 4 */

В главном цикле проверяется переменная sch_adc, если положительная, то рассчитывается значение тока (здесь в мА):

Испытание (отладка)

При отсутствии тока на выходе ненулевое значение. Его можно обнулять каждый раз при включении (учитывая что вначале нагрузка не должна быть подключена) или записать значение и потом вычитать из измеренного:

Точность неплохая и может быть лучше, потому что напряжение питание чуть ниже 3.3В и шунт-резистор использован неточный.

Особенности разводки платы

На рисунке ниже видно, что входы дифференциального усилителя хитро подключаются непосредственно к Rsense, ведь нам не нужны еще и падения на дорожках и соединениях.

Таким образом дорожки, идущие на вход по красоте ведем из середин, устраняя влияние сопротивлений дополнительных участков меди снимая падение именно с резистора-шунта.

Также здесь стоит обратить внимание на фильтрующий конденсатор 100 нФ, он подключен наиболее близко к ножкам GND-VCC и питание подведено сначала к нему.

Измерения без использования ОУ

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

Примером может служить мой тестер проверяльщик светодиодов, здесь нужно было измерять ток (0-100) мА, сначала хотел ставить шунт+ОУ, но из-за ограниченного напряжения питания и ненулевого выхода при нулевом токе схема была оптимизирована и упрощена вместе с решением проблемы измерения малых токов.

Готовые токоизмерительные усилители

Конечно существуют усилители с уже встроенными резисторами R1-R4, причем они имеет почти одинаковые параметры. К тому же мы экономим место на плате. Коэффициент усиления как-правило 20, 30, 50, но есть и такие, где он настраивается.

Самым подходящим я считаю решение INA180 от TI единственный недостаток — это низкая распространенность, ну и цена будет чутка выше.

Источник