Микроконтроллер и аналоговый выход.
Микроконтроллер и аналоговый выход.
Добрый день, уважаемые коты! Хотел посоветоваться по такому вопросу. Есть цифровой датчик температуры и влажности SHT10. Выдает влажность и температуру по I2C. Но получать эти параметры должен промышленный PLC в виде аналогового сигнала 0- 10 В. Планирую данные с SHT10 получать микроконтроллером ATmega8, а дальше микроконтроллер преобразует цифру в два ШИМ сигнала, интегрируем RC-цепочкой. Потом ставим масштабирующий усилитель на ОУ с питанием 10 В.
Шкалы будут:
влажность 0-100% в 0 -10 В
температура 0-120 град.Ц в 0-10 В.
Есть правда сомнения, насколько будет линейна такая связка. Или может лучше вместо ШИМ и RC-цепочки использовать какой-нибудь ЦАП с SPI, I2C входом? Также непонятно с ОУ, достаточно сделать питание 10 В, чтобы получить диапазон 0-10В?
Такие приборчики видел промышленные, но у всех диапазон измерения 50 град.Ц. Хотя SHT10 работает до 125 град. Ц. Искал как реализуется в промышленных контроллерах выход 0-10В, но так ничего и не нашел. Заранее спасибо за помощь
Шкалы будут:
влажность 0-100% в 0 -10 В
температура 0-120 град.Ц в 0-10 В.
Есть правда сомнения, насколько будет линейна такая связка. Или может лучше вместо ШИМ и RC-цепочки использовать какой-нибудь ЦАП с SPI, I2C входом? Также непонятно с ОУ, достаточно сделать питание 10 В, чтобы получить диапазон 0-10В?
Такие приборчики видел промышленные, но у всех диапазон измерения 50 град.Ц. Хотя SHT10 работает до 125 град. Ц. Искал как реализуется в промышленных контроллерах выход 0-10В, но так ничего и не нашел. Заранее спасибо за помощь
Re: Микроконтроллер и аналоговый выход.
Возможно PLC имеет свободный вход счетчика, тогда можно преобразовать данные с датчика в частоту. Получается довольно просто. У меня было так. Термометр сопротивления Pt100-AD7788-ATtiny2313-частота в формате (1000+T)Гц.
Последний раз редактировалось akl Пн дек 05, 2016 16:54:46, всего редактировалось 1 раз.
- khomych
- Мучитель микросхем
- Сообщения: 423
- Зарегистрирован: Сб фев 21, 2009 16:11:32
- Откуда: Харьков
- Контактная информация:
Re: Микроконтроллер и аналоговый выход.
10 в для питания ОУ недостаточно. ОУ должны быть Rail to Rail
может стоит посмотреть в сторону цифровых потенциометров?
может стоит посмотреть в сторону цифровых потенциометров?
Re: Микроконтроллер и аналоговый выход.
akl писал(а):Возможно PLC имеет свободный вход счетчика, тогда можно преобразовать данные с датчика в частоту.
К сожалению PLC не имеет счетного входа. Имеет только аналогово-дискретные 14 входов. Читает напряжение, сопротивление и дискретный.
khomych писал(а):10 в для питания ОУ недостаточно. ОУ должны быть Rail to Rail
Так и есть. ОУ будет Rail to Rail. Просто почему не хватит 10 В?
Вот такой TS912IDT например. Или ADA4851.
Может еще посоветуете недорогие Rail to Rail ОУ с напряжением питания более 10 В, можно два в одном корпусе.
ЗЫ: Как вариант использовать вот такой : MCP4921-E/SN 12 битный ЦАП, SPI
А дальше ОУ раскачивающий до 10 вольт. Правда не понятно,нужно ли использовать внешний ЦАП, или будет достаточно ШИМ микроконтроллера. Также еще не понятно, как ограничить выход ОУ на 10 В?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Микроконтроллер и аналоговый выход.
Получившийся напряжёвый сигнал с ШИМ заведите обратно на вход АЦП контроллера ,как обратную связь. Сможете устанавливать напряжение с точностью АЦП.
Re: Микроконтроллер и аналоговый выход.
Последний раз редактировалось Vov123 Вт дек 06, 2016 16:08:36, всего редактировалось 1 раз.
Re: Микроконтроллер и аналоговый выход.
Вот такой ПЛК используется:
http://www.raut-automatic.kiev.ua/kontr ... exy-s.html
Вопрос так и остался. Как лучше реализовать аналоговый выход? Через ЦАП или использовать ШИМ контроллера? Если ШИМ контроллера использовать, какую частоту необходимо использовать?
Линейность от датчика не зависит. Датчик выдает значения температуры и влажности в цифровом коде. Как Ds18B20. А дальше микроконтроллер генерирует два ШИМ сигнала со скважностью от 0 до 100%.
http://www.raut-automatic.kiev.ua/kontr ... exy-s.html
Вопрос так и остался. Как лучше реализовать аналоговый выход? Через ЦАП или использовать ШИМ контроллера? Если ШИМ контроллера использовать, какую частоту необходимо использовать?
Линейность от датчика не зависит. Датчик выдает значения температуры и влажности в цифровом коде. Как Ds18B20. А дальше микроконтроллер генерирует два ШИМ сигнала со скважностью от 0 до 100%.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Микроконтроллер и аналоговый выход.
вполне будет достаточно использовать ШИМ.
процесс изменения температуры и влажности - весьма медленный. поэтому частоту ШИМ можно делать небольшую и делать хороший фильтр сигнала ШИМ. большая инерционность фильтра для медленных процессов не будет иметь никакого значения.
процесс изменения температуры и влажности - весьма медленный. поэтому частоту ШИМ можно делать небольшую и делать хороший фильтр сигнала ШИМ. большая инерционность фильтра для медленных процессов не будет иметь никакого значения.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Микроконтроллер и аналоговый выход.
Владимир, а не подскажете разрядность ШИМ какую нужно брать? Я планирую использовать 16 бит таймер/счетчик 1. Частота процессора будет 16 МГц. Насколько я понимаю, от разрядности ШИМ зависит, какую скважность я могу получить. При 8 бит будем иметь 255 отсчетов. При выходном напряжении 10.00 В имеем 125 град. Ц. Следовательно на 1 град. Ц соответствует 80мВ. Но 1 градус не очень точное деление шкалы. Хотелось бы иметь точность хотя бы 0,1 град. Ц. Следовательно, нужно иметь минимум 1250 отсчетов. Также по поводу операционного усилителя. Советуют Rail-to-Rail. В принципе неплох. Но есть одно но, с питанием более 10 В не очень большой выбор ОУ. Я присмотрел LM358 . Во-первых, два канала ОУ, во-вторых, напряжение питания до 32 В. То что он не Rail-to-Rail будет иметь значение только в начале шкалы при напряжении близком к 0. А так как мы влажность будем иметь не менее 10-15 %, а температуру не менее 25 град. Ц. то низ шкалы значения не имеет.
Также по поводу частоты ШИМ. Я так понимаю, если бы я работал со звуком, то тогда частота ШИМ нужна высокой. А так как мне нужно постоянное напряжение, то частоту ШИМ можно понизить. Но непонятно, какая должна быть величина частоты ШИМ.
Вот нашел схему.

Первый ОУ - это повторитель напряжения, для согласования нагрузок. второй ОУ это фильтр второго порядка Саллена-Ки. Ну и соответсвенно RC-фильтр низкой частоты первого порядка сразу на входе. Правда еще не определился с номиналами.
Также по поводу частоты ШИМ. Я так понимаю, если бы я работал со звуком, то тогда частота ШИМ нужна высокой. А так как мне нужно постоянное напряжение, то частоту ШИМ можно понизить. Но непонятно, какая должна быть величина частоты ШИМ.
Вот нашел схему.
Первый ОУ - это повторитель напряжения, для согласования нагрузок. второй ОУ это фильтр второго порядка Саллена-Ки. Ну и соответсвенно RC-фильтр низкой частоты первого порядка сразу на входе. Правда еще не определился с номиналами.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Микроконтроллер и аналоговый выход.
Хоть вопрос бы не ко мне, но отвечу тоже.
По-моему где-то два года назад, по просьбе одного товарища, делал своеобразный калибратор.
Сам не собирал, предложил схему и написал прошивку. Вот схема

Контроллер измерял фактическое напряжение и поправлял его, при необходимости. Какой был применен ОУ уже не помню. Номиналы кондеров 10 мкф и 100нф, может были потом изменены при отладки.
Все работало отлично. ШИМ задавался 16битным таймером. Частоту не помню. Могу потом поглядеть период ШИМ.
По-моему где-то два года назад, по просьбе одного товарища, делал своеобразный калибратор.
Сам не собирал, предложил схему и написал прошивку. Вот схема
Спойлер

Контроллер измерял фактическое напряжение и поправлял его, при необходимости. Какой был применен ОУ уже не помню. Номиналы кондеров 10 мкф и 100нф, может были потом изменены при отладки.
Все работало отлично. ШИМ задавался 16битным таймером. Частоту не помню. Могу потом поглядеть период ШИМ.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Микроконтроллер и аналоговый выход.
вот, в начале шкалы он, как раз, самый натуральный Rail, так как допускает на входе даже минус 0,3 Вольта.melandr писал(а):То что он не Rail-to-Rail будет иметь значение только в начале шкалы при напряжении близком к 0.
повторитель перед фильтром совершенно не нужен. выход порта (включено/выключено) всяко имеет меньше выходное сопротивление, чем выход ОУ.
а усиление фильтра нужно сделать более двух, так как максимальный сигнал ШИМ будет меньше 5 Вольт.
при частоте процессора 16 МГц можно получить достаточно высокую частоту ШИМ, если тайммер/счетчик использовать без предделителя. и при более высокой частоте и фильтрацию легче сделать более высокую, с мизерной пульсацией.
тебе же нужно организовать два канала ШИМ. на одном таймере разрядность ШИМ (дискретность) и для температуры и для влажности получится одинаковой.
но поскольку на выходах будет аналоговый сигнал, такой уж принципиальной разницы в разрядности ШИМ, я думаю, нет. лишь бы получилось не хуже, чем это требуется.
и если нужно минимум 1250 дискрет, то разрядность ШИМ можно сделать и 1250, и 5000, и 10000.
хотелось бы сначала узнать, с какой точностью (разрядностью) по температуре и по влажности передает датчик свою информацию.
ведь тебе придется еще пересчитывать принятую разрядность к разрядности ШИМ. и повысить точность (разрядность) принятого сигнала не получится.
если принятая от PLC точность равна 0,1 градуса или даже выше, то можно передаваемую точность ограничить по 0,1 градуса.
я не знаком с приборами PLC. и я не знаю, каким образом этот PLC 0-10 Вольт должен преобразовать в 0-125 градусов с дискретностью по 0,1 градуса.
или PLC еще придется "научить" такому преобразованию?
то есть, я хочу сказать, что нельзя озадачиваться только вопросом выбора разрядности ШИМ, а решать нужно комплексно, учитывая возможности всех используемых приборов.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Микроконтроллер и аналоговый выход.
Спасибо за помощь. По поводу разрядности и точности. Датчик SHT10 имеет точность по влажности - 4,5% по температуре - 0,5 град.Ц. Сам ПЛК может измерять напряжение. Пообщался с производителем ПЛК. Говорят что разрешающая способность по напряжению 0,01В. А это получается 10 бит в шкале 10В. поэтому ШИМ тоже имеет смысл делать не более 10 бит. Владимир, А не подскажете. Вы говорите, что напряжение на выходе ШИМ будет менее 5 В. То есть мне нужно будет подбирать коэффициент усиления ОУ уже по факту, на готовом приборе чтобы получить на максимуме шкалы 10 В.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Микроконтроллер и аналоговый выход.
напряжение "1" на выходе порта всегда меньше питания (5 Вольт).
усиление можно сделать и фиксированным, например, 2,5. тогда в своем приборе ты сделаешь калибровочный коэффициент, чтобы привести максимальный выход ШИМ к 10,00 Вольт.
а можешь подстроечный резистор поставить для подстройки усиления. тогда не надо будет возиться с цифровой калибровкой внутри прошивки.
я в своих проектах (смотри в разделе "Питание") делаю цифровую калибровку каналов ШИМ и цифровую калибровку каналов АЦП, подстроечники не использую.
но с цифровой калибровкой теряется "точность", так как "число делений" ШИМ, соответствующее максимальному сигналу, получается меньше 1024. например, у меня калибровочный коэффициент (максимальное число ШИМ) получается около 950.
с подстроечником такой потери точности уже не будет, ШИМ всегда будет иметь одно и то же "число делений".
и я уже начал подумывать о переделке своих проектов на подстроечники...
усиление можно сделать и фиксированным, например, 2,5. тогда в своем приборе ты сделаешь калибровочный коэффициент, чтобы привести максимальный выход ШИМ к 10,00 Вольт.
а можешь подстроечный резистор поставить для подстройки усиления. тогда не надо будет возиться с цифровой калибровкой внутри прошивки.
я в своих проектах (смотри в разделе "Питание") делаю цифровую калибровку каналов ШИМ и цифровую калибровку каналов АЦП, подстроечники не использую.
но с цифровой калибровкой теряется "точность", так как "число делений" ШИМ, соответствующее максимальному сигналу, получается меньше 1024. например, у меня калибровочный коэффициент (максимальное число ШИМ) получается около 950.
с подстроечником такой потери точности уже не будет, ШИМ всегда будет иметь одно и то же "число делений".
и я уже начал подумывать о переделке своих проектов на подстроечники...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Микроконтроллер и аналоговый выход.
Еще возник вопрос, а какой режим работы нужно будет выбрать для таймера/счетчика 1 для генерации Ш,ИМ. А то у меня мозг взрывается режимов несколько, а какой нужен мне непонятно...
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Микроконтроллер и аналоговый выход.
Запараметрируйте по очереди и посмотрите какой нужен.
Docendo discimus
Re: Микроконтроллер и аналоговый выход.
Посмотрите мою схему - буду рад замечаниям,
по симуляции в протеусе 8.6 sp2 вроде все работает и линейность хорошая, благодаря pc817 есть опто-развязка и выходной управляющий сигнал зависит только от скважности ШИМ сигнала, и не зависит от входящей амплитуды ШИМ (если провод с ШИМ например длинный и на нем происходит падение напряжения)
на скрине ниже скважность ШИМ 75% на выходе 7.5v
важно, что питание 5v(должно быть точным) думаю через стабилизатор взять из 12v
цель: управлять частотником(трех-фазный вентилятор) по каналу 0-10в через сей девайс и Ардуино на основе датчиков температуры
те цепочка будет такая: <датчики температуры цифр DS18B20 ->OneWire > -> <Ардуино -> ШИМ 5в амплитута> -> <это устройство> -> <вход управления частотником 0-10в> -> <вентилятор>
исходник https://www.dropbox.com/s/7nctvthk4bmci ... dsprj?dl=1

по симуляции в протеусе 8.6 sp2 вроде все работает и линейность хорошая, благодаря pc817 есть опто-развязка и выходной управляющий сигнал зависит только от скважности ШИМ сигнала, и не зависит от входящей амплитуды ШИМ (если провод с ШИМ например длинный и на нем происходит падение напряжения)
на скрине ниже скважность ШИМ 75% на выходе 7.5v
важно, что питание 5v(должно быть точным) думаю через стабилизатор взять из 12v
цель: управлять частотником(трех-фазный вентилятор) по каналу 0-10в через сей девайс и Ардуино на основе датчиков температуры
те цепочка будет такая: <датчики температуры цифр DS18B20 ->OneWire > -> <Ардуино -> ШИМ 5в амплитута> -> <это устройство> -> <вход управления частотником 0-10в> -> <вентилятор>
исходник https://www.dropbox.com/s/7nctvthk4bmci ... dsprj?dl=1

- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Микроконтроллер и аналоговый выход.
Странно, что в точке PWM-after-pc817 амплитуда сигнала близка к 5В, что-то здесь не так.
Re: Микроконтроллер и аналоговый выход.
Думаю, что фильтр R5C3||C4 под нагрузкой будет плохо выполнять свою задачу. Лучше перенести его на вход ОУ с теми же номиналами как R2C2. Задействовать U1:B повторителем напряжения, чтобы цепь ОС R4R3 не работала на линию.
Re: Микроконтроллер и аналоговый выход.
собрал в итоге так
тест в железе (ШИМ 490гц от Arduino, замеры на осциллографе Rigol ds1054)

скетч используемый для тестирования:
исходник в протеус 8.6 sp2 https://www.dropbox.com/s/ldueja0y3cqv4 ... dsprj?dl=1
ЛУТ в pdf https://www.dropbox.com/s/lhsrc170ha741 ... t.pdf?dl=1
тест в железе (ШИМ 490гц от Arduino, замеры на осциллографе Rigol ds1054)

скетч используемый для тестирования:
Код: Выделить всё
int pwmPin = 2; // PWM out connected to digital pin 2
void setup()
{
pinMode(pwmPin, OUTPUT); // sets the pin as output
}
void loop()
{
// analogWrite values from 0 to 255
analogWrite(pwmPin, 255*0.50); // 50% скважность ШИМ
}
исходник в протеус 8.6 sp2 https://www.dropbox.com/s/ldueja0y3cqv4 ... dsprj?dl=1
ЛУТ в pdf https://www.dropbox.com/s/lhsrc170ha741 ... t.pdf?dl=1
