Считывание n-Раз сигнала AnalogRead за такт ШИМ.
- Войдите на сайт для отправки комментариев
Приветствую! Опишу задачу: необходимо сдлеать обратную связь по току в системе управления. По сути все сводится к к снятию показаний тока через АЦП Arduino Uno несколько раз (минимум 10) за такт сигнала ШИМ. Зная постоянное сопротивление и максимальный ток проходящий через катушку, можно по напряжению получить значение тока.
Что думаю сам: Снимать показания AnalogRead в массив значений с неопределенным размером (увеличивать размер на еденицу после каждого измерения и вести счетчик количества измерений). Организовать прерывание по окончанию такта ШИМ сигнала, где в функции прерывания обнулять счетчик и сбрасывать значения массива. Тем временем в основном теле цикла обрабатывать полученные значения, например усреднять.
Хотелось бы уточнить подход и получить вектор решения этой задачи. Возможна ли реализация такой задумки?
PS. Можно ли организовать прерывание таким образом: attachInterrupt(1, Sbros, RISING);(ШИМ сигнал формируется на третьем пине, в функции Sbros реализуется сброс счетчика и значений массива)
Стесняюсь спросить, но что именно Вы называете "тактом сигнала ШИМ"?
Если можно - просто своими словами, без использования терминологии.
Стесняюсь спросить, но что именно Вы называете "тактом сигнала ШИМ"?
Если можно - просто своими словами, без использования терминологии.
Один период. Если абстрактно один период сигнала равен 10с, то необходимо снимать показания с AnalogRead каждую секунду.
тогда почему Вы назвали это ШИМ?
ШИМ, если позволите, это Широтно Импульсная Модуляция. Сигнал ШИМ имеет вид последовательности прямоугольных импульсов с постоянным периодом, но различной длительности.
Сигнал с периодом 10 сек с трудом может быть назван ШИМ. ...С большой натяжкой.
В "экосистеме" Ардуино естественным считается ШИМ, порождаемый встроенной в IDE функцией analogWrite(), он имеет частоту примерно 500 Гц и, соответственно, период 2 мс. Вот за 2 мс сделать 10 АЦП и обработать - в теории возможно, но потребует филигранного программирования. То есть задача не для новичка совсем.
----
Отсюда вывод: задавайте вопрос точнее. Суть управления, суть обратной связи, почему назвали ШИМом, что имели ввиду?
А АЦП - ну читайте даташит (это из 328-ого, мы ведь про него говорим?):
------ Up to 76.9kSPS (Up to 15kSPS at Maximum Resolution)
Прикиньте сколько времени нужно на обработку данных, да и нужно ли 10 измерений. Теория управления - интересная наука, там много решений.
Прошу прощения за нечетко поставленный вопрос. Опишу более подробно и приложу скетч. На данный момент реализован алгоритм управления электрогидравлическим приводом с помощью драйвера двигателя L298N. Шток перемещается из-за протекания тока через катушку индуктивности в том или ином направлении (очень примитивный принцип работы, опуская механику работы самого привода). Направление тока определяется алгоритмом управления через L298N (Н - мост), проще говоря, если нужно, чтобы шток перемещался вправо, то ток тещет в одну сторону, при перемещении штока в другую сторону, ток также меняет направление.
Таким образом, чем больше разница между задающим сигналом и действительным положением штока, тем больше коэффициент заполнения и тем быстрее шток стремится к заданомму положению. Для увеличения быстродействия введен коэф. усиления, который также можно задать с окна оператора или задаваться константой.
Окно оператора реализовано в среде LabView через последовательный интерфейс. Синхронизация Labview и контроллера с грехом попалам мне удалась. Если интересно могу скинуть полностью весь код и интерфейс в Labview.
Сейчас передо мной была поставлена задача оптимизировать данную работу и увеличить быстродействие системы путем ввода обратной связи по току(ток на катушке мгновенно не достигает максимального значения, а имеет достаточно долгий переходной процесс, а обратная связь позволит уменьшить переходной процесс). Таким образом коэф. заполнения будет зависеть не только от разницы действительного и реального положения штока, но и от тока на катушке от максимального тока.
Это и подводит меня к сути вопроса: необходимо за один период ШИМ успеть снять напряжение с катушки, через з-н Ома, зная постоянный резистор, вычислить ток, и на основе этого значения сформировать следующий ШИМ сигнал. Возможно ли используя прерывания реализовать подобный подход? К примеру: записывать значения тока в массив. Путем прерывания по окончанию одного периодна ШИМ сигнала запоминать последнее значение тока, а затем обнулять этот массив. А в основном теле программы используя последнее значение тока на предыдущем такте ШИМ формировать следующий сигнал с учетом обратной связи по току.
почему вы хотите уложиться в 1 период? Не лучше ли наоборот, частоту ШИМ повысить и корректировать выходное значение по обратной связи.
-------------
А каждый период ШИМ строить - у ардуинки частоты не хватит, на другом контроллере можно.