Вот потребовался мне автомобильный осциллограф, посмотрел цены, удивился… Цены как на крыло самолета. Кстати, не понятно почему, ведь параметры осциллографа для тестирования авто крайне низки, как по частотам так и по напряжению. По сему решил сам себе сделать.
Ставлю себе ТЗ :-)
1. Вид осциллографа – USB приставка к ноутбуку, ибо на большом экране смотреть удобно, можно сохранять для последующего анализа ну и т.д. и т.п.
2. Тип сигнала – Переменный, Постоянный, Положительная полярность. Работа с отрицательными напряжениями не нужна.
3. Кол-во каналов – 4, больше смысла не вижу, но с возможностью расширения до 8.
4. Максимальное входное напряжение — вольт 50, выше смысла нет.
5. Чувствительность — 1 милливольт, больше тоже не надо :-)
6. Частота — до 20Кгц, для миллисекундных сигналов за глаза хватит, а других там нет :-)
7. Удобная программная оболочка.
Приступаем.
Начну с самого важного – Оболочки для автомобильного осциллографа. Да да, именно с оболочки. Ибо железо не сложно любое сделать, а вот удобная оболочка это реальный дефицит. Оболочки которые просто тупо показывают сигнал в реальном времени для автомобильного осциллографа крайне не удобны, ибо часто нужно анализировать сигнал продолжительное время и иметь возможность «отмотать» назад. По сему нужна оболочка типа Самописец-Осциллограф. И что б каналов было не менее 4х…
Долго лопатил просторы интернета на наличие удобной оболочки и в итоге нашел! Называется PowerGraph. Разработала эту прекрасную программу ООО «ДИСофт». На сайте у них есть платная и бесплатная версия. В принципе это софт для промышленного использования но он на все 100% подходит для моего осциллографа, работает в режиме самописца и в режиме чистого осциллографа. Эта программа предназначена для:
1. Сбор данных с различных измерительных устройств и приборов.
2. Регистрация, визуализация и обработка сигналов в режиме реального времени.
3. Редактирование, математическая обработка и анализ данных.
4. Хранение, импорт и экспорт данных.
Это малая часть того что она умеет :-) И самое главное есть бесплатная версия. Остановился на ней, в сравнении с другими, а я перепробовал более десятка, это просто идеал для автомобильного осциллографа.
Вот она какая, на мой взгляд, самая лучшая. Это не реклама, это факт :-) ИМХО конечно.
Ну вот, с софтом определился, теперь надо определится с интерфейсом, не буду грузить вас своими муками выбора, я остановился на СОМ порте. С ним работать просто, пропускной способности для поставленных задач с избытком, в выбранном софте есть драйвер вывода информации с СОМ пора.
Теперь железо, а точнее что использовать в роли АЦП. Железо должно быть доступное, стабильное, не дорогое и легко программироваться. Долго не думал, остановился на микроконтроллере АТмега 328р. Программируются эти микроконтроллеры банально на С++, точнее на упрощенном С++.
Очень удобно то что этот микроконтроллер можно купить уже распаянным на плате с минимально нужной обвязкой., Ардуино сее называется :-) То есть не надо самому плату разводить и паять, удобно. Всем параметрам, из моего ТЗ, АТмега 328р отвечает полностью, по сему использовать буду ее.
Для миниатюризации я вот такую взял. Она имеет 8 аналоговых входов, отвечающих всем требованиям ТЗ, имеет на борту эмулятор СОМ порта на СН340, питание берет напрямую с USB порта. В общем то что нужно. Ардуинку можно любую использовать на 328р
Вот схема этой платы. На ней стоит сам микроконтроллер АТмега 328р, банальный эмулятор СОМ порта на СН340, кварц и стабилизатор питания на ЛМке для запитки от внешнего источника, если надо, вот и все, ну пара лампочек и фильтров не в счет :-) То есть все то что нам нужно и ничего лишнего! Не зря говорят — Совершенство в простоте.
Теперь надо написать программку для микроконтроллера. Нам нужно что б постоянно опрашивался аналоговый вход и данные о величине напряжения постоянно, онлайн так сказать, шли в СОМ порт. Если каналов несколько, то опрашиваются по кругу все нужные входы и данные идут на СОМ порт с разделителем табуляция. Вот так все просто.
Вот скриншот того что должен выдавать микроконтроллер в СОМ порт для нашей программы PowerGraph.
Осциллограф у меня будет работать в 4х режимах — 1канал, 2канала, 3канала и 4 канала.
Переключение между каналами будет осуществляться по кругу нажатием на кнопку.
При включении канала будет загораться светодиод индикации работы канала.
Вот написал программку. Сам я не программист, по сему написал как смог, сильно не критикуйте, расстроюсь :-) Программа полностью рабочая и проверена не однократно в деле. Как заливать программу в плату рассказывать не буду, в инете на каждом углу это с картинками рассказано :-)
Вот сама программа.
int regim=1;
int flag=0;
void setup()
{
digitalWrite(07, HIGH);
Serial.begin(128000);//скорость СОМ порта должна совпатать со скорость в драйвере
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
if(digitalRead(07)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0, то …
{
regim++;
flag=1;
if(regim>4)//ограничим количество режимов
{
regim=1;//так как мы используем только одну кнопку,
// то переключать режимы будем циклично
}
}
if(digitalRead(07)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна — 1, то …
{
flag=0;//обнуляем переменную "knopka"
}
if(regim==1)//первый режим
{
digitalWrite(2, HIGH);//включение светодиода
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
// читаем аналоговый вход pin 0:
int port0 = analogRead(A0);
//Преобразовываем аналоговые показания (которые идут от 0 до 1023) в напряжение (0 — 5 В)
float voltageport0 = port0 * (4.745 / 1023.000);//4.745 опорное напряжение, замеряется при калибровке на плате
// выводим значение напряжения в порт
Serial.println(voltageport0,3);// печатаем значение в порт и жмем энтер
//задержка для стабильности
delay(1);
}
if(regim==2)//второй режим
{
digitalWrite(2, HIGH);//включение светодиодов
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
Serial.print(voltageport0,3);// печатаем значение в порт
Serial.print(" ");// печатаем таб
Serial.println(voltageport1,3);// печатаем значение в порт и жмем энтер
delay(1);
}
if(regim==3)//Третий режим
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(" ");
Serial.print(voltageport1,3);
Serial.print(" ");
Serial.println(voltageport2,3);
delay(1);
}
if(regim==4)//Четвертый режим
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
int port3 = analogRead(A3);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
float voltageport3 = port3 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(" ");
Serial.print(voltageport1,3);
Serial.print(" ");
Serial.print(voltageport2,3);
Serial.print(" ");
Serial.println(voltageport3,3);
delay(1);
}
}
Программа закончена и отлажена.
Приступим к электронной части.
Схему приводил выше. Из нее видно что плата имеет 8 аналоговых входов, 14 цифровых входов/выходов. Вот и будем работать с ними.
Аналоговые № 0,1, 2, 3 будем использовать как входы осциллографа. Сделаем для них защиту и дополнительный вход через делитель 1х10, так как подавать на микроконтроллер максимум можно всего 5.2 вольта. С делителем можно будет работать с напряжениями до 50 вольт, что полностью перекрывает наши потребности.
Цифровые № 2,3,4,5 будем использовать для светодиодов, они будут индицировать включенные аналоговые входы.
Цифровой №7 будет подключен к кнопке которая будет переключать режимы моего осциллографа.
Еще будет кнопка Бут режима. Плата по умолчанию в бут режиме, но для работы это не удобно, ибо управление идет через RESET. При обращении к СОМ порту идет инициализация СОМ порта и чип эмулятор посылает резет на микроконтроллер. То есть при запуске программы плата ребутится и сбрасывает настройки которые выставили кнопкой, это не удобно. Для того что бы этого безобразия не было, я сее отключаю с помощью кнопки. Она подключает вход микроконтроллера «RESET» к электролитическому конденсатору 10Мкф, конденсатор сглаживает посылку на перезагрузку. Эта же цепь используется при заливке прошивки, по сему на момент программирования надо конденсатор отключать. Назвал эту кнопку Бут кнопкой :-)
Ну вот, как подключать понятно, осталось воплотить в железе.
Начнем с защиты и делителя.
Защиту будет обеспечивать стабилитрон на 5.1в. А делитель будет обычный на резисторах.
Так как сигналы у нас будут низкочастотные, это сильно упрощает жизнь. В расчетах делителя не надо учитывать внутреннее сопротивление приемника, не надо согласовывать вход с делителем, не надо учитывать волновое сопротивление кабеля и разъемов.
Надо просто посмотреть в даташите на микроконтроллер на какое сопротивление выхода оптимизирован его АЦП, и сделать делитель с таким выходным сопротивлением. Так мы добьемся максимальной точности в 0.005 вольта. В даташите написано что он оптимизирован под 10Ком выходного сопротивления нагрузки. Внутреннее сопротивление АЦП 100Мом…
Вот такую схему я посчитал. R1 и R2 собственно сам делитель, R2 еще задает сопротивление выхода делителя, я его взял 10Ком, так как ЦАП оптимизирован именно на такое сопротивление. R3 и VD1 это защита от перенапряжения. На вход АЦП нельзя подавать больше 5.2в. VD1 стабилитрон на 5.1в, можно использовать любой. R3 токоограничивающий резистор, ограничивает ток стабилитрона когда он открывается. Вот такой простой делитель с защитой.
А вот финальная схема. Плату Ардуино можете любую использовать.
По подробней распишу:
1. Входной сигнал через входные делители с защитой идут на аналоговые входы А0, А1, А2, А3.
2. К цифровым входам/выходам D2, D3, D4, D5 подключены светодиоды через токоограничивающие резисторы. Для моих диодов это 500Ом.
3. К цифровому входу/выходу D7 подключена кнопка, ей режим работы выбирается.
4. Конденсатор С1 10мф, через кнопку с фиксацией или ползунковый переключатель, подключен к входу RSET. Это у меня Бут режим так реализован.
5. Схема не нуждается в настройке и работает сразу. НО! Для проведения точных замеров ОБЯЗАТЕЛЬНО! Нужно откалибровать плату. Для этого на выходе «5V» платы нужно замерить реальное напряжение цифровым тестером и вписать в программу! У меня вписано допустим 4.745 у вас другое будет. Это опорное напряжение ЦАП, обычно колеблется от 4.650 до 5.080. Колебания зависят от качества платы, падения напряжения на диоде шотки (смотри схему), падения напряжения в усб проводе, напряжения которое выходит из ноута. В общем замерили и втоптали в программу, там во всех местах свое напряжение поставить надо.
Вот так все просто :-)
Ну раз схему разработали то настала пора воплотить это все в «железе».
Берем какой либо корпус, разъемчики, кнопку, переключатель, резисторы диоды, стабилитроны и начинаем из этого всего создавать автомобильный осциллограф.
Вот такой набор деталей у меня.
Для начала подготовим корпус. Просверлим все отверстия.
Далее, навесным монтажом, смонтируем делители прямо на блоке разъемов.
Вот так, просто – надежно — удобно.
Теперь примерим плату, проведем формовку выводов делителя и на них напаяем плату.
Вот так вот. Выходит очень удобно и компактно.
Смонтируем в корпус светодиоды, кнопку, переключатель и конденсатор. Вот так. Длинна проводов достаточная но не избыточная.
Почти все готово, осталось впаять плату в корпус.
Привинтить блок разъемов в корпус. Взять синюю изоленту, без нее ни как! Сделать ограничитель для УСБ провода.
Теперь можно закрыть корпус, залить прошивку и проверить работу. У меня все ОК.
Вот и все, мой автомобильный осциллограф готов.
Им можно смотреть-диагностировать расходомер(МАФ), генератор, катушки, датчики положения колена и распредвалов. Смотреть правильность установки ГРМ, Смотреть форсунки, по пульсации топлива в рампе можно косвенно смотреть работу насоса и регулятора давления топлива… В общем полезный зверек в хозяйстве. Особенно он полезен когда какое либо устройство отказало не полностью, а ушло от параметров и мозг не видит этого.
Пора приступать к испытанием на авто.
Все отлично и очень удобно. Как и планировал :-)
Тему датчиков в этом посте не затрагиваю, ибо очень она объемная. Но все датчики легко самому изготовить и емкостные и индуктивные и контактные… Может отдельно напишу об них…
Вот так просто можно сделать себе качественный автомобильный осциллограф.
На этом все, ни гвоздя вам ни жезла :-)