Как эмулировать аналоговый потенциометр с помощью ШИМ

У меня есть электроника, которая управляет двигателем. Он получает питание от сети переменного тока.

Теперь есть потенциометр на 10 КОм. В паспорте этого контроллера указано, что управляющий сигнал составляет 10 В постоянного тока.

Вот схема соединений (на итальянском языке):

Я хотел бы эмулировать потенциометр с помощью Arduino. Я не уверен, справится ли ШИМ со своей задачей.

Есть какие-нибудь подсказки?

, 👍3

Обсуждение

Я не уверен, что ваш вопрос достаточно ясен. Не могли бы вы расскажите нам больше о том, чего вы хотите достичь? Что будет получать входные данные от этого эмулируемого банка?, @Ricardo

ладно... так лучше?, @nkint

Это лучше, спасибо! Но я полагаю, этого все равно недостаточно. Есть ли у вас дополнительная информация о плате, которую вы хотите изменить? Возможно фото платы. Или, что еще лучше, можете ли вы поделиться имеющейся у вас таблицей данных?, @Ricardo

Обычно потенциометр является частью делителя напряжения. Я предполагаю, что 10 В постоянного тока — это напряжение на одной из дальних клемм потенциометра. Другой конец обычно заземляется, а средний контакт имеет напряжение от 0 до 10 В постоянного тока. Но невозможно узнать, происходит ли это. Если это так, вам понадобится ЦАП (цифро-аналоговый преобразователь) для его имитации..., @Ricardo

Привет, Рикардо, техническое описание на итальянском языке, извините. Это здесь: http://we.tl/Kk89gm2PRL, @nkint

Нет проблем, я уверен, что кто-нибудь это прочитает... Я прочту дома, так как на работе мне не позволяет брандмауэр., @Ricardo

Существуют «цифровые потенциометры», которыми можно управлять с помощью микроконтроллеров. Возможно, один из них сработает., @Craig


5 ответов


Лучший ответ:

3

Добавление к ответу Рикардо:

ШИМ, вроде как, может справиться с этой задачей. Вам понадобится фильтр нижних частот (ФНЧ) для преобразования ШИМ в аналоговое напряжение и усилитель для преобразования его от 0-5 до 0-10 В. Или вы можете приобрести специальный цифро-аналоговый (ЦАП) чип, но он, очевидно, будет дороже, чем резистор и конденсатор для ФНЧ.

Вот несколько руководств по преобразованию ШИМ в аналоговое напряжение:

Аналоговый вывод: инструкции AnalogWrite от Arduino – преобразование ШИМ в напряжение

Тогда вам нужно увеличить напряжение вдвое. Вы делаете это с помощью операционного усилителя. Резисторы, которые вы выбираете для операционного усилителя, задают его коэффициент усиления, в данном случае вы хотите, чтобы он был равен 2, чтобы вы могли перейти от ~ 5 В (максимальный выход) до 10 В.

Вот пример: Моя первая схема на операционном усилителе

,

Вы можете избежать использования операционного усилителя, используя PNP-транзистор для переключения напряжения 10 В и притягивая его к земле с помощью резистора, а затем фильтруя его, но способ с операционным усилителем может иметь больше смысла., @EternityForest


1

Я не смогу полностью ответить на ваш вопрос, но, надеюсь, смогу прояснить ситуацию, чтобы кто-то более знающий смог ответить на него.

Насколько я понял из таблицы, входы 1, 2 и 3 используются для подключения потенциометра, который будет управлять скоростью двигателя. Это POTENZIOMETRO DI COMANDO (горшок управления) на рисунке, указанном в вопросе.

В техническом описании также указано (на рисунке ниже), что вы можете подключить клемму 3 к земле и подать на клемму 2 напряжение от 0 до 10 В постоянного тока, которое будет управлять двигателем. Я полагаю, именно так вы управляете двигателем с помощью микроконтроллера.

Здесь мне не хватает знаний. Я предполагаю, что сигнал ШИМ не поможет. Вам необходимо подать фактическое напряжение на клемму 2 для правильного управления двигателем. Для этого у вас есть несколько альтернатив:

  1. Используйте микросхему АЦП.
  2. Используйте резисторную лестничную сеть R2R, используя цифровые выходы и некоторые средства для увеличьте его напряжение до 10 В постоянного тока.

Надеюсь, это немного поможет.

,

2

Вы можете использовать любую типичную микросхему управления двигателем, например ULN2003 с ШИМ и, возможно, сглаживающий конденсатор, Google "ULN2003 Arduino" много примеров.

Судя по распиновке из ответа Рикардо, вы получите 10 В от контакта 1 и землю от контакта 3 и подадите выход ШИМ от ULN2003 обратно на контакт 2.

,

это транзистор Дарлингтона, верно? Я все еще изучаю электронику. Значит ли это, что транзистор Дарлингтона может усиливать ток, верно? но что за аналоговый сигнал PWM VS?, @nkint

@nkint Да, вы используете Дарлингтон как быстродействующий релейный переключатель, используя выход 5 В Arduino для управления 10 В устройства. Скорость переключения делает его пригодным для использования с ШИМ от Arduino. Вы можете добавить конденсатор, чтобы сгладить выходной сигнал и сделать его более похожим на аналоговый., @sburlappp


4

Вы можете взять аналоговый (ШИМ) выход Arduino и превратить его в напряжение от 0 до 10 В постоянного тока, используя что-то вроде этого:

Буфер операционного усилителя

Усиление

Показанный операционный усилитель подключен как неинвертирующий усилитель, коэффициент усиления которого определяется следующим образом:

VВыход / VВход = 1 + (R2 / R1)

Поскольку R2 и R1 в этом случае оба равны 1 k, то выходной сигнал будет входным, умноженным на:

1 + (1000/1000) = 2

Таким образом, если на D3 поступает 5 В, на выходе ОУ будет 10 В. Нам необходимо подать напряжение чуть более 10 В на вывод питания операционного усилителя (контакт 8), поскольку это не операционный усилитель с размахом напряжения, то есть он не может выдавать напряжение полностью до напряжения питания .


Фильтр нижних частот

Резистор R3 и конденсатор емкостью 10 мкФ образуют фильтр нижних частот, который фильтрует сигнал ШИМ от Arduino в более или менее плавное напряжение постоянного тока.

Это показывает разницу между выходом ШИМ Arduino и выходом операционного усилителя:

ШИМ и выход операционного усилителя

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

При рабочем цикле 100 % выходное напряжение составляет 10 В.


Пульсация

Переключив осциллограф на связь по переменному току, мы можем увидеть, сколько пульсаций имеется на выходе операционного усилителя:

Пульсации на выходе ШИМ

На этом изображении масштаб синего канала изменился, и курсор показывает, что пульсация составляет около 140 мВ.

Мы можем уменьшить пульсации, используя резистор R3 большего размера. Например, если задать значение 10 кОм, пульсации уменьшатся до 86 мВ.

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


Код

Тестовый код:

void setup () 
  { 
  }

void loop () 
  {
  analogWrite (3, analogRead (A0) / 4);
  }

Я подключил потенциометр к A0 и отрегулировал его, чтобы изменить рабочий цикл выхода ШИМ на выводе D3.


Теория

Вы можете спросить: «Почему пульсации 138 мВ? Почему не 50 мВ? Почему не 200 мВ?».

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

Усреднение пульсаций

Теперь мы видим, что пульсации составляют около 57 мВ (выход операционного усилителя будет вдвое больше). Действительно, усредненный выходной сигнал составляет 57 * 2 = 114 мВ

Пульсации на выходе операционного усилителя

Общая формула для расчета времени, необходимого RC-сети для достижения определенного напряжения:

t = -log((V-Vc)/V)R*C

Где «exp» — это натуральный показатель.

См. Ladyada — калькулятор задержки RC.

Также Математическая обработка зарядки и разрядки конденсатора .

V  = supply voltage   (initial voltage)
Vc = output voltage   (target voltage)
R  = resistance in ohms
C  = capacitance in farads
t  = time in seconds

Эти цифры будут на графике разряда RC примерно в указанной точке:

График разряда RC

См. Википедию — RC-схема

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

VS = 5.0       -- supply voltage
VMED = VS / 2  -- 50% duty cycle
VL = VMED - 27.2e-3   -- low voltage as measured
VH = VMED + 29.6e-3   -- high voltage as measured
RES = 4700            -- resistance in ohms
CAP = 10e-6           -- capacitance in farads

T1 = -math.log ( (VS - VH) /VS) * RES * CAP 
T2 = -math.log ( (VS - VL) /VS) * RES * CAP 

print ("T1 =", T1)
print ("T2 =", T2)
print ("diff = ", T1 - T2, "seconds")

Результаты:

T1 = 0.0331
T2 = 0.0321
diff =  0.0010 seconds

Разница во времени составляет 1 мс, что согласуется с наблюдениями.

,

Совершенно верно! Почему никто не заметил этого целый год? Я преобразовал ваш «ответ» в комментарий. Получив немного больше [репутации](http://arduino.stackexchange.com/help/whats-reputation), [вы сможете оставлять комментарии](http://arduino.stackexchange.com/help/privileges/comment ). Спасибо, что указали на это. И добро пожаловать в Arduino Stack Exchange. :), @Nick Gammon


0

Мое решение простое: возьмите сервопривод (вход ШИМ) и подключите вал сервопривода к горшку с помощью муфты, а затем просто используйте простую программу управления сервоприводом

,