В этом уроке мы разработаем схему с использованием датчика силы, Arduino Uno и серводвигателя. Это будет система сервоуправления, в которой положение вала сервопривода определяется весом на датчике силы. Прежде чем продолжить, давайте поговорим о сервоприводе и других компонентах.
Сервомоторы используются там, где требуется точное перемещение или положение вала. Они не предлагаются для высокоскоростных приложений. Они предлагаются для работы с низкой скоростью, средним крутящим моментом и точным позиционированием. Эти двигатели используются в роботизированных манипуляторах, системах управления полетом и системах управления. Серводвигатели также используются в некоторых принтерах и факсимильных аппаратах.
Серводвигатели доступны в различных формах и размерах. У серводвигателя в основном есть провода: один для положительного напряжения, другой - для заземления, а последний - для установки положения. КРАСНЫЙ провод подключается к источнику питания, черный провод подключается к земле, а ЖЕЛТЫЙ провод подключается к сигналу.
Серводвигатель - это комбинация двигателя постоянного тока, системы управления положением, шестерен. Положение вала двигателя постоянного тока регулируется управляющей электроникой в сервоприводе в зависимости от продолжительности включения сигнала ШИМ на выводе SIGNAL. Проще говоря, управляющая электроника регулирует положение вала, управляя двигателем постоянного тока. Эти данные о положении вала передаются через СИГНАЛЬНЫЙ штифт. Данные о положении в систему управления должны быть отправлены в виде сигнала ШИМ через сигнальный контакт серводвигателя.
Частота сигнала ШИМ (широтно-импульсная модуляция) может варьироваться в зависимости от типа серводвигателя. Важным моментом здесь является ДОПОЛНИТЕЛЬНОСТЬ ШИМ-сигнала. На основании этого ОБЯЗАННОСТИ управляющая электроника регулирует вал.
Как показано на рисунке ниже, для перемещения вала на 9 ° СООТНОШЕНИЕ ВКЛЮЧЕНИЯ должно быть 1/18. 1 миллисекунда «времени включения» и 17 миллисекунд «времени выключения» в сигнале 18 мс.
Чтобы вал был перемещен на 12o часов, время включения сигнала должно быть 1,5 мс, а время выключения - 16,5 мс.
Это соотношение декодируется системой управления в сервоприводе, и она регулирует положение на основе этого.
Этот ШИМ здесь генерируется с помощью ARDUINO UNO.
Итак, на данный момент мы знаем, что мы можем управлять валом СЕРВО-ДВИГАТЕЛЯ, изменяя коэффициент заполнения сигнала ШИМ, генерируемого UNO.
Теперь поговорим о датчике силы или датчике веса.
Чтобы связать датчик FORCE с ARDUINO UNO, мы собираемся использовать функцию 8-битного АЦП (аналого-цифровое преобразование) в arduno uno.
Датчик FORCE - это преобразователь, который изменяет свое сопротивление при приложении давления к поверхности. Датчик FORCE доступен в различных размерах и формах.
Мы собираемся использовать одну из более дешевых версий, потому что здесь нам не нужна большая точность. FSR400 - один из самых дешевых датчиков силы на рынке. Изображение FSR400 показано на рисунке ниже.
Теперь важно отметить, что FSR 400 чувствителен по длине, сила или вес должны быть сконцентрированы на лабиринте посередине глаза датчика, как показано на рисунке.
Если сила приложена в неправильное время, устройство может выйти из строя.
Еще одна важная вещь, которую следует знать, датчик может управлять токами высокого диапазона. Поэтому при установке помните о управляющих токах. Также датчик имеет ограничение по силе, равное 10 Ньютонам. Таким образом, мы можем использовать только 1 кг веса. При применении веса более 1 кг датчик может показывать некоторые отклонения. Если он увеличился более чем на 3 кг. датчик может необратимо повредиться.
Как говорилось ранее, этот датчик используется для определения изменений давления. Таким образом, когда груз прикладывается к датчику FORCE, сопротивление резко изменяется. Сопротивление FS400 избыточному весу показано на графике ниже:
Как показано на рисунке выше, сопротивление между двумя контактами датчика уменьшается с весом или проводимость между двумя контактами датчика увеличивается.
Сопротивление чистого проводника определяется как:
Где, p- Удельное сопротивление проводника
l = длина проводника
A = Площадь проводника.
Теперь рассмотрим проводник с сопротивлением «R». Если немного надавить на проводник, площадь на проводе уменьшается, а длина проводника увеличивается в результате давления. Таким образом, по формуле сопротивление проводника должно увеличиваться, поскольку сопротивление R обратно пропорционально площади, а также прямо пропорционально длине l.
Таким образом, при этом для проводника под давлением или весом сопротивление проводника увеличивается. Но это изменение невелико по сравнению с общим сопротивлением. Для значительного изменения многие проводники сложены вместе.
Вот что происходит внутри датчиков силы, показанных на рисунке выше. Присмотревшись, можно увидеть множество линий внутри датчика. Каждая из этих линий представляет собой проводник. Чувствительность датчика указывается номерами проводов.
Но в этом случае сопротивление будет уменьшаться с давлением, потому что используемый здесь материал не является чистым проводником. FSR - это устройства из прочной толстопленочной полимерной пленки (PTF). Итак, это устройства не из чистого проводящего материала. Они состоят из материала, сопротивление которого уменьшается с увеличением силы, приложенной к поверхности датчика.
Этот материал показывает характеристики, как показано на графике FSR.
Это изменение сопротивления не принесет никакой пользы, если мы не сможем их прочитать. Контроллер под рукой может только считывать шансы напряжения и не меньше, для этого мы собираемся использовать схему делителя напряжения, с помощью которой мы можем получить изменение сопротивления при изменении напряжения.
Делитель напряжения представляет собой резистивную схему и показан на рисунке. В этой резистивной сети мы имеем одно постоянное сопротивление и другое переменное сопротивление. Как показано на рисунке, R1 здесь - постоянное сопротивление, а R2 - датчик FORCE, который действует как сопротивление.
Измеряется середина ветви. С изменением R2 у нас есть изменения в Vout. Таким образом, у нас есть напряжение, которое изменяется с весом.
Теперь важно отметить, что входной сигнал, принимаемый контроллером для преобразования АЦП, составляет всего 50 мкА. Этот эффект нагрузки резистивного делителя напряжения важен, так как ток, потребляемый из Vout делителя напряжения, увеличивает процент ошибки, а пока нам не нужно беспокоиться об эффекте нагрузки.
Теперь, когда сила прилагается к ДАТЧИКУ СИЛЫ, напряжение на конце делителя изменяет этот вывод, поскольку он подключен к каналу АЦП UNO, мы будем получать другое цифровое значение от АЦП UNO при изменении силы на датчике.
Это цифровое значение АЦП согласовано с коэффициентом заполнения сигнала ШИМ, поэтому у нас есть управление положением СЕРВО в зависимости от силы, приложенной к датчику.
Составные части
Аппаратное обеспечение: UNO, источник питания (5 В), конденсатор 1000 мкФ, конденсатор 100 нФ (3 шт.), Резистор 100 кОм, СЕРВОДВИГАТЕЛЬ (SG 90), резистор 220 Ом, датчик силы FSR400.
Программное обеспечение: Atmel studio 6.2 или aurdino nightly.
Принципиальная схема и объяснение работы
Схема для следящего управления двигателем с помощью датчика силы показана на рисунке ниже.
Напряжение на датчике не является полностью линейным; это будет шумно. Для фильтрации шума на каждом резисторе в схеме делителя установлены конденсаторы, как показано на рисунке.
Здесь мы собираемся взять напряжение, обеспечиваемое делителем (напряжение, которое линейно представляет вес), и подать его в один из каналов АЦП Arduino Uno. После преобразования мы собираемся взять это цифровое значение (представляющее вес), связать его со значением ШИМ и передать этот сигнал ШИМ на СЕРВО-двигатель.
Итак, с весом у нас есть значение ШИМ, которое меняет свой коэффициент заполнения в зависимости от цифрового значения. Чем выше цифровое значение, тем выше коэффициент заполнения ШИМ. Таким образом, при более высоком коэффициенте заполнения ШИМ-сигнал вал сервопривода должен достигать крайнего правого или крайнего левого угла, как показано на рисунке во введении.
Если вес меньше, у нас будет более низкий коэффициент заполнения ШИМ, и, как показано на рисунке во введении, сервопривод должен достигнуть крайнего правого угла.
При этом у нас есть управление положением SERVO с помощью ВЕСА или СИЛЫ.
Для этого нам нужно установить в программе несколько инструкций, о которых мы подробно поговорим ниже.
ARDUINO имеет шесть каналов АЦП, как показано на рисунке. В них любой из них или все они могут использоваться как входы для аналогового напряжения. АЦП UNO имеет разрешение 10 бит (целочисленные значения от (0- (2 ^ 10) 1023)). Это означает, что он будет отображать входные напряжения от 0 до 5 вольт в целые значения от 0 до 1023. Таким образом, для каждого (5/1024 = 4,9 мВ) на единицу.
Здесь мы собираемся использовать A0 из UNO. Нам нужно знать несколько вещей.
|
Прежде всего, каналы АЦП Arduino Uno имеют эталонное значение по умолчанию 5 В. Это означает, что мы можем дать максимальное входное напряжение 5 В для преобразования АЦП на любом входном канале. Поскольку некоторые датчики обеспечивают напряжение от 0-2.5V, со ссылкой 5V мы получаем меньшую точность, поэтому у нас есть инструкция, которая позволяет нам изменить это значение ссылки. Итак, для изменения ссылочного значения у нас есть («analogReference ();»). А пока мы оставим его как.
По умолчанию мы получаем максимальное разрешение АЦП платы, равное 10 битам, это разрешение можно изменить с помощью инструкции («analogReadResolution (бит);»). В некоторых случаях это изменение разрешения может пригодиться. А пока оставим это как.
Теперь, если вышеуказанные условия установлены по умолчанию, мы можем прочитать значение из АЦП канала «0», напрямую вызвав функцию «analogRead (pin);», здесь «pin» представляет контакт, к которому мы подключили аналоговый сигнал, в данном случае это будет «A0». Значение от ADC можно принять в виде целого числа как «int SENSORVALUE = analogRead (A0); », По этой инструкции значение после АЦП сохраняется в целочисленном« SENSORVALUE ».
ШИМ UNO может быть реализован на любом из контактов, обозначенных символом «~» на печатной плате. В UNO шесть каналов ШИМ. Мы собираемся использовать PIN3 для наших целей.
analogWrite (3, ЗНАЧЕНИЕ); |
Из вышеуказанного условия мы можем напрямую получить сигнал ШИМ на соответствующем выводе. Первый параметр в скобках предназначен для выбора номера вывода сигнала ШИМ. Второй параметр предназначен для записи коэффициента заполнения.
Значение PWM Arduino Uno может быть изменено от 0 до 255. При минимальном значении «0» на максимальное значение «255». При 255 в качестве коэффициента заполнения мы получим 5В на контакте 3. Если коэффициент заполнения равен 125, мы получим 2,5 В на контакте 3.
Теперь давайте поговорим об управлении серводвигателем, у Arduino Uno есть функция, которая позволяет нам управлять положением сервомотора, просто задавая значение градуса. Скажем, если мы хотим, чтобы сервопривод был на 30, мы можем напрямую представить значение в программе. Заголовочный файл SERVO выполняет все внутренние вычисления коэффициента заполнения. Вы можете узнать больше об управлении серводвигателем с помощью Arduino здесь.
Теперь sg90 может двигаться от 0 до 180 градусов, у нас есть результат АЦП 0-1024.
Таким образом, ADC примерно в шесть раз больше ПОЛОЖЕНИЯ СЕРВОПРИВОДА. Таким образом, разделив результат АЦП на 6, мы получим приблизительное положение руки сервопривода. Следовательно, у нас есть сигнал ШИМ, коэффициент заполнения которого изменяется линейно с ВЕСОМ или СИЛой. Это передается серводвигателю, мы можем управлять серводвигателем с помощью датчика силы.