Как сделать тахометр на Arduino. Какие компоненты нужны для создания счетчика оборотов. Как подключить датчик Холла к Arduino. Как запрограммировать Arduino для измерения оборотов в минуту. Какие существуют варианты индикации показаний тахометра.
Принцип работы тахометра на Arduino
Тахометр на Arduino представляет собой устройство для измерения скорости вращения вала или других вращающихся деталей. Принцип его работы основан на подсчете количества импульсов от датчика за определенный промежуток времени. Чаще всего в качестве датчика используется датчик Холла, который срабатывает при прохождении мимо него магнита, закрепленного на вращающемся валу.
Основные компоненты тахометра на Arduino:
- Плата Arduino (например, Arduino Uno или Arduino Nano)
- Датчик Холла (например, А3144)
- Магнит для закрепления на валу
- Дисплей для вывода показаний (LCD или семисегментный)
- Резисторы и провода для подключения
Arduino считывает импульсы от датчика Холла, подсчитывает их количество за заданный интервал времени (обычно 1 секунда) и пересчитывает в обороты в минуту. Полученное значение выводится на дисплей.
Выбор и подключение датчика Холла
Датчик Холла является ключевым элементом тахометра. Он срабатывает при изменении магнитного поля вблизи него. Для тахометра подойдут недорогие датчики, например, A3144 или SS49E.
Схема подключения датчика Холла к Arduino:
- VCC датчика подключается к 5V Arduino
- GND датчика — к GND Arduino
- Выход датчика — к цифровому пину Arduino (например, D2)
Между выходом датчика и VCC нужно поставить подтягивающий резистор 10 кОм. Это обеспечит стабильный высокий уровень сигнала в отсутствие магнитного поля.
Программирование Arduino для измерения оборотов
Алгоритм работы программы для измерения оборотов:
- Настройка прерывания по изменению сигнала на пине с датчиком
- В обработчике прерывания — увеличение счетчика оборотов
- Каждую секунду — расчет оборотов в минуту по формуле: RPM = (счетчик * 60) / число импульсов на оборот
- Вывод значения RPM на дисплей
- Обнуление счетчика
Пример кода для измерения оборотов:
«`cpp const int sensorPin = 2; volatile int counter = 0; unsigned long lastTime = 0; int rpm = 0; void setup() { pinMode(sensorPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(sensorPin), countRotation, FALLING); Serial.begin(9600); } void loop() { if (millis() — lastTime >= 1000) { detachInterrupt(digitalPinToInterrupt(sensorPin)); rpm = (counter * 60) / 1; // 1 импульс на оборот Serial.print(«RPM: «); Serial.println(rpm); counter = 0; lastTime = millis(); attachInterrupt(digitalPinToInterrupt(sensorPin), countRotation, FALLING); } } void countRotation() { counter++; } «`Варианты индикации показаний тахометра
Существует несколько способов вывода показаний тахометра:
1. LCD дисплей
LCD дисплей позволяет выводить числовые значения и текст. Для подключения к Arduino чаще всего используется I2C интерфейс, что экономит пины платы.
Пример подключения I2C LCD дисплея:
- VCC — к 5V Arduino
- GND — к GND Arduino
- SDA — к пину A4
- SCL — к пину A5
2. Семисегментный дисплей
Семисегментные дисплеи хорошо подходят для вывода только числовых значений. Их преимущество — хорошая видимость даже при ярком освещении.
Для управления несколькими разрядами семисегментного дисплея удобно использовать сдвиговый регистр, например 74HC595.
3. OLED дисплей
OLED дисплеи обеспечивают высокую контрастность и позволяют выводить графику. Большинство OLED модулей также подключаются по I2C интерфейсу.
Калибровка и повышение точности измерений
Для повышения точности измерений тахометра можно применить следующие методы:
- Увеличение числа импульсов на оборот. Вместо одного магнита можно установить несколько равномерно по окружности вала.
- Использование аппаратного таймера Arduino вместо функции millis() для более точного отсчета интервалов.
- Применение фильтрации показаний, например, скользящего среднего по нескольким измерениям.
- Калибровка с помощью эталонного тахометра для учета погрешностей.
Пример кода с использованием нескольких магнитов и фильтрацией:
«`cpp const int sensorPin = 2; const int magnetsCount = 4; // Количество магнитов const int measurementsCount = 5; // Количество измерений для усреднения volatile unsigned long lastTime = 0; volatile unsigned long periods[measurementsCount]; volatile int periodIndex = 0; void setup() { pinMode(sensorPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(sensorPin), handleInterrupt, FALLING); Serial.begin(9600); } void loop() { long averagePeriod = 0; for (int i = 0; i < measurementsCount; i++) { averagePeriod += periods[i]; } averagePeriod /= measurementsCount; if (averagePeriod >
Этот код использует прерывания для измерения времени между импульсами, учитывает несколько магнитов и применяет усреднение по нескольким измерениям для сглаживания показаний.
Применение тахометра на Arduino в различных проектах
Тахометр на Arduino может найти применение во многих областях:
- Измерение скорости вращения двигателей в робототехнике
- Контроль оборотов в станках и инструментах
- Измерение скорости ветра в метеостанциях
- Подсчет пройденного расстояния в велокомпьютерах
- Измерение расхода жидкости в расходомерах
Для каждого конкретного применения может потребоваться адаптация конструкции и программы тахометра. Например, для велокомпьютера нужно учитывать диаметр колеса для расчета скорости и пройденного расстояния.
Расширение функционала тахометра
Базовый тахометр на Arduino можно дополнить различными функциями:
- Сохранение максимального значения оборотов
- Настройка порогов срабатывания сигнализации
- Добавление Bluetooth модуля для передачи данных на смартфон
- Ведение лога измерений на SD карту
- Добавление кнопок управления для настройки параметров
Пример кода с сохранением максимального значения и сигнализацией:
«`cpp const int sensorPin = 2; const int alarmPin = 3; const int alarmThreshold = 3000; // Порог срабатывания сигнализации volatile int counter = 0; unsigned long lastTime = 0; int rpm = 0; int maxRpm = 0; void setup() { pinMode(sensorPin, INPUT_PULLUP); pinMode(alarmPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(sensorPin), countRotation, FALLING); Serial.begin(9600); } void loop() { if (millis() — lastTime >= 1000) { detachInterrupt(digitalPinToInterrupt(sensorPin)); rpm = (counter * 60) / 1; // 1 импульс на оборот if (rpm > maxRpm) { maxRpm = rpm; } Serial.print(«RPM: «); Serial.print(rpm); Serial.print(» Max RPM: «); Serial.println(maxRpm); if (rpm > alarmThreshold) { digitalWrite(alarmPin, HIGH); } else { digitalWrite(alarmPin, LOW); } counter = 0; lastTime = millis(); attachInterrupt(digitalPinToInterrupt(sensorPin), countRotation, FALLING); } } void countRotation() { counter++; } «`Этот код сохраняет максимальное значение оборотов и активирует сигнализацию при превышении заданного порога.
Заключение
Создание тахометра на Arduino — это увлекательный проект, который позволяет на практике применить знания электроники и программирования. Базовая версия тахометра может быть собрана из недорогих компонентов, а возможности для расширения функционала практически безграничны.
При разработке собственного тахометра важно учитывать особенности конкретного применения, выбирать подходящие компоненты и оптимизировать код для достижения максимальной точности измерений. С помощью описанных в этой статье методов и примеров кода вы сможете создать надежный и функциональный тахометр для своих проектов.
Регулятор оборотов на ардуино Нано. Максимальный.
Регулятор оборотов на ардуино Нано. Максимальный.
схема и прошивки: https://drive.google.com/open?id=0B6x0JsiBUva0N3d2TkJaU0ZXQ2s
прошивки версия 1:https://drive.google.com/open?id=1Un671A441KDwdGvZAtdxABvfq8_S-R1M
улучшения:
1- экран не тухнет на прошивках настройки, а если тухнет, то восстанавливается
2- защита срабатывает не от единичных показаний датчика, а от средних оборотов выводимых на экран. Это позволяет игнорировать единичные помехи и наводки на таходатчике
3- перед и после срабатываний реле установлена пауза чтоб избежать дуги на контактах.
while (tic < 12500) {
расчет тиков происходит по формуле 60000000 / (tic * 0.0625 * импульсы на оборот)=об\мин
Прошивки версия 2: https://drive.google.com/open?id=1mqDPmKLJztm5JI3UTQFtrvHOLg3qG722
улучшения:
1. – добавлен коэффициент усреднения показаний таходатчика. kof_sr рекомендовано ставить 1 всегда, при необходимости больше. Настраивается прошивкой _navodki_Holla_obmin_
Подробнее в видео:
Прошивка версия 3: https://drive.google.com/open?id=1eBdKfMg0TPwMS4QL0okS2zty8oU98Um8
Поддерживает разное передаточное число на первой и второй скорости. Практически не нуждается в настройке. Необходимо только внести диапазон оборотов и количество импульсов для первой и второй скорости. Плавный пуск настраивается переменным сопротивлением на плате.
минимальный вариант: http://shenrok.blogspot.com/p/blog-page_95.html
схема
вариант для тахогенератора
вариант для Холла
панель управления.
Подключение дисплея и панели.
Настройка и проверка аналогична регулятору «всё в одном»
Как бороться с наводками по таходатчику. подходит и для Холла и для тагогенератора:
youtube.com/embed/5d32wiJ4QWs?feature=player_embedded»>обсуждение на форуме: http://www.chipmaker.ru/topic/192783/
Вопросы по приобретению: http://shenrok.blogspot.com/p/blog-page_25.html
Имеются файлы для печати корпуса на 3Dпринтере https://drive.google.com/open?id=1Wh2f7TiT8q9g0Z1zG_PsHcFgN_48qgeK
Где я покупаю некоторые комплектующие:
Симистор BTA24-600B:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2F10pcs-free-shipping-BTA24-600B-BTA24-600-BTA24-Triacs-25-Amp-600-Volt-TO-220-new%2F32393221483.html%3Fspm%3Da2g0s.9042311.0.0.b7eRd1
Радиатор для симистора:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2F10pcs-Aluminium-TO-220-Heatsink-TO-220-Heat-Sink-Transistor-Radiator-TO220-Cooler-Cooling-7805-21%2F32454598520. html%3Fspm%3Da2g0v.10010108.1000013.2.79164bccfrDZcR%26traffic_analysisId%3Drecommend_2088_1_90158_iswistore%26scm%3D1007.13339.90158.0%26pvid%3D412b96ca-be3c-4c64-b2a3-13f9146023b8%26tpp%3D1
Блок питания:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2FTSP-05-replace-HLK-PM01-AC-DC-220V-to-5V-mini-power-supply-module-intelligent-household%2F32705471039.html%3Fspm%3Da2g0s.9042311.0.0.oJmz3c
ЖК дисплей:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2FFreeshipping-LCD1602-LCD-monitor-1602-5V-blue-screen-and-white-code-for-ARDUINO%2F32412091753.html%3Fspm%3Da2g0v.10010108.1000013.14.2521335eucDgif%26traffic_analysisId%3Drecommend_2088_7_90158_iswistore%26scm%3D1007.13339.90158.0%26pvid%3Da0233c8b-3ad6-409d-b85c-af430790af32%26tpp%3D1
реле 5 В:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress. com%2Fitem%2F10PCS-RELAY-5V-SRD-5VDC-SL-C-T73-5V-SONGLE-Power-Relay-NEW-GOOD-QUALITY%2F32794928269.html%3Fspm%3Da2g0s.9042311.0.0.oJmz3c
разъёмы под ардуинку, экран и т.д.
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2F10PCS-2-54mm-40-Pin-Stright-Female-Single-Row-Pin-Header-Strip-PCB-Connector%2F32597304567.html%3Fspm%3Da2g0s.9042311.0.0.oJmz3c
тумблер на 3 положения:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2F10Pcs-ON-OFF-ON-3-Pin-3-Position-Mini-Latching-Toggle-Switch-AC-125V-6A-250V%2F32807452888.html%3Fspm%3Da2g0s.9042311.0.0.zneC8y
тумблер на 2 положения:
http://shopeasy.by/cashback/view/oz2a3byzxr9y93zmefgl4vb8eo9r9r6w/?to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2F5pcs-3-Pin-SPDT-ON-ON-Mini-Toggle-Switch-6A-125VAC-Mini-Switches%2F32793978799.html%3Fspm%3Da2g0s.9042311.0.0.zneC8y
Подписаться на: Сообщения (Atom)
Счетчик импульсов своими руками
Интересно построить миниатюрный счетчик электрических импульсов на современном аналоге 176ИЕ4?
Может хотите узнать как сделать его из микрокалькулятора?
Вам под кат!
Мотивация
В первую очередь хотел потренироваться разводить печатные платы в Sprint Layout.
А уже во вторую — построить скольки-хочешь-разрядный счетчик импульсов.
Возможные альтернативы
Если Вам лень, но счетчик нужен быстро, то есть два варианта, доступных с минимумом усилий:
1. Возьмите обычный микрокалькулятор, вскройте его, и припаяйтесь к контактам кнопки «=» и наберите «1» и «+» на калькуляторе.
При каждом нажатии «=» или замыкании припаянных проводов цифра будет увеличиваться на единицу.
2. Разберите ненужную USB клавиатуру, вскройте, оттрассируйте два контакта, которые нужно замкнуть, чтобы нажимался Enter. Ну а далее всё так же как и в п.1 но запустив калькулятор на компьютере.
Помню в босоногом детстве я сделал по п.1 велоодометр, введя вместо единицы длину окружности колеса, и поставив пару геркон-магнит на переднюю вилку и спицу колеса. Вот помню было то радости 🙂
Необходимые материалы
1.Счетчики CD4026
2.Семисегментные индикаторы с высотой символа 10мм. Размер корпуса 13х9мм
3.Резисторные сборки на 300Ом типоразмера 0805.
4.Блокировочные керамические конденсаторы с Али типоразмера 0603 на 100nF.
UPD: Линки на digikey не открываются с некоторых IP. Продублировал картинками.
Печатная плата
Дизайн платы делался для одного разряда, затем была сделана копипаста на 6 разрядов.
Скачать SL-файл можно здесь.
Вход поставил напротив выхода 1/10 предыдущего разряда. Шины питания, земли, сброса идут параллельно. Вывод разрешения счета зафиксирован в разрешенном состоянии.
Получилась плата 18х56мм, общий вид:
Фото-вид спереди:
Фото-вид сзади:
Готовое устройство
Вид со стороны индикаторов(с батарейкой АА):
Вид со стороны компонент:
Вид сверху на столе:
Вид с вертикально стоящей платой:
Выводы
Счетчик питается от 5В и потребляет 10мА.
Счетчик продолжает исправно считать импульсы при снижении питающего напряжения до 0,1В включительно.
При текущих номиналах гасящих резисторов в цепи индикаторов индикация видна при снижении питающего напряжения до 2,21В.
Получился отличный миниатюрный счетчик импульсов!
Всем добра!
Планирую купить +9 Добавить в избранное Обзор понравился
+57 +72
Electronic Design • FabAcademy
Тахометр
Для электроники этого проекта я в основном хотел сделать тахометр (счетчик оборотов, тахометр, тахометр, датчик оборотов), который измеряет скорость вращения моей турбины. Устройство будет отображать количество оборотов в минуту (RPM) на ЖК-экране.
Датчик Холла
Тестирование этой идеи Тахометр является побочным продуктом той недели, когда я использовал датчик Холла для измерения магнитного поля. Идея состоит в том, чтобы поместить небольшой неомагнит на вал моей оси, который будет обнаруживаться датчиком, а затем написать программу, которая будет считать количество оборотов. Вот характеристики датчика Холла A1302:
Вот мои проекты печатных плат в Eagle. Конкретным для этого тахометра является резонатор на 20 МГц, потому что я решил, что синхронизация должна быть очень точной. Я также добавил два светодиода. Первый (зеленый) я хотел указать/мигать при каждом обороте, а второй (красный), как я думал, может указывать как некий порог (например, указывать, когда турбина вращается ниже критической скорости вращения), чтобы предупредить, когда есть более низкое напряжение генератора/напряжения, что приводит к непропорционально большой нагрузке от батарей/конденсаторов.
Я также добавил кнопку на контакт 10 с мыслью, что если я захочу, я могу нажать ее, чтобы выключить светодиоды для экономии энергии. Вот печатная плата, фрезерованная и спаянная. Как вы заметили, я увеличил радиус действия крошечного датчика Холла, потому что хотел, чтобы он располагался как можно ближе к оси.
Здесь я тестирую свой тахометр, используя Arduino, подключенный к ЖК-дисплею, для считывания последовательного вывода.
А вот мой тахометр работает, пока я тестирую свой генератор, и я считываю показания RPM и Hz прямо в последовательном мониторе.
Вы можете скачать мои файлы платы Eagle здесь.
Выпрямитель + Контроллер заряда
Теперь, когда выпрямитель работал на моей макетной плате (см. генератор), я спроектировал электронику в Eagle, используя компоненты, которые были доступны в лаборатории. Для трех выпрямительных диодов я использовал компоненты Shottky SMD, так как предполагается, что они имеют более низкое падение напряжения, чем обычные диоды. Для сброса нагрузки я использовал обычные диоды.
Что касается суперконденсаторов, то в настоящее время я использую 2 конденсатора по 1 фараду (5,5 В), соединенных параллельно, просто потому, что пока не могу разместить больше на печатной плате.
А вот и мои суперкапы:
Потому что собирался подключать модуль PFM. При входном напряжении от 0,9 В до 5 В постоянного тока модуль обеспечивает стабильное выходное напряжение 5 В постоянного тока через USB-разъем.
Частотно-импульсная модуляция (ЧИМ) — это метод модуляции для представления аналогового сигнала с использованием только двух уровней (1 и 0). Это аналогично широтно-импульсной модуляции (ШИМ), в которой величина аналогового сигнала кодируется в рабочем цикле прямоугольной волны. В отличие от ШИМ, в котором ширина прямоугольных импульсов изменяется при постоянной частоте, ЧИМ выполняется с использованием импульсов фиксированной длительности и переменной частотой повторения.
Модуль состоит из двух конденсаторов (C1-C2), одного резистора (R1), одной катушки индуктивности (L1), одного выпрямительного диода (D2), одного светодиода (D1) и микросхемы (U1). КПД преобразования модуля ЧИМ предполагается до 96%, я тестировал его на макетной плате и пока все хорошо. Кажется, что он «повышает» напряжение, когда входное напряжение составляет всего 0,5 вольта.
Я отпаял гнездо USB, соединяющее разъемы VCC и GND, с простой мостовой платой, куда я добавил простой выходной светодиод и резистор 499k для индикации отключения питания.
Как я упоминал ранее, было бы достаточно просто создать прототип в лаборатории, но у меня просто не было времени сделать индуктор, к тому же эти модули продаются на Amazon по цене около евро за штуку. Итак, в интересах спирального развития, вперед.
Вот мой выпрямитель, сброс нагрузки и конденсаторы, фрезерованные и спаянные:
А здесь он подключен к модулям PFM. С помощью пары ручных вращений мне удалось зарядить суперкапы. Они давали постоянный заряд 5 вольт в течение хороших нескольких минут, прежде чем угаснуть.
Arduino популяризировала электронику для быстрого прототипирования, потому что она упрощает программирование микроконтроллеров AVR с помощью интегрированной среды разработки (IDE), делая сложную электронику интересной, простой в освоении и относительно простой.
Аппаратное и программное обеспечение Arduino также имеет полностью открытый исходный код, и можно загружать их схемы, изменять дизайн их плат, при этом используя их IDE, обширные библиотеки и широкую сеть поддержки. Я планирую сделать именно это.
Схема Atmega238
Плата Arduino UNO использует микроконтроллер AMTEL ATMega328
, а схема его платы здесь является эталонной. Однако здесь важно отметить, что на плате UNO есть два чипа, один из которых отвечает за связь USB-последовательный порт (слева), а меньший — 28-контактный ATMega328 (справа). Это то, на чем мы сосредоточимся.
Satchakit
Поскольку при начале работы с AtMega328P возникло немало неопределенностей (см. техническое описание здесь), я решил последовать Satchakit Даниэля Инграссии, который является улучшением более раннего Fabkit, в основном в том, что он:
- использует 16 МГц. вместо 8МГц таймера
- Использует кристалл вместо резонатора
- Освобождает аналоговые выводы ADC6/7 для использования
Снимаю шляпу за его хорошо задокументированную работу. Если целью разработки платы с ATMega328 является обеспечение совместимости микроконтроллера с программным обеспечением Arduino (IDE), нам необходимо записать загрузчик с помощью FabISP или другого Arduino. Здесь ниже я попробовал оба.
Весь процесс загрузки кода загрузчика и правильной прошивки фьюзов для превращения микроконтроллера ATmega в «Arduino» хорошо описан здесь.
ATMega328P
Микрочип ATmega328 или «Arduino Uno» поставляется в различных «упаковках» и форматах, которые поначалу могут сбить с толку. Те, что есть у нас в лаборатории, соответствуют ATmega328/P 32-контактному TQFP
, который выглядит вот так, и на нем написано AU 1722
. Что все это значит?
Если вы ищете этот компонент, есть много вариантов. Вот некоторые уточнения:
ATMega328/P — это 32-килобайтная флэш-память ISP, 8-битный микроконтроллер из семейства AVR (такой же, как у ATtiny, который мы использовали). Он имеет возможности чтения во время записи, 1 КБ EEPROM, 2 КБ SRAM, 23 линии ввода-вывода общего назначения, 32 рабочих регистра общего назначения, последовательный программируемый USART и многое другое. См. техническое описание здесь
Р
относится к способности чипов picoPower работать при низком напряжении, что позволяет микроконтроллеру снизить энергопотребление в активном и спящем режимах. режимы.AU
означает, что это компонент для поверхностного монтажа, как предполагается дляPU
, который представляет собой компонент с двойным расположением в корпусе (DIP или DIL). Последний относится к прямоугольному корпусу с двумя параллельными рядами контактов, которые можно монтировать в сквозное отверстие или на макетной плате.1722
был годом его изготовления, в том же году голландский адмирал Якоб Роггевен высаживается на остров Пасхи и Иоганн Себастьян Бах сочиняет «Хорошо темперированный клавир». Или, что более вероятно, серийный или заводской номер.TQFP
означаетThin Quad Flat Package
, который представляет собой корпус интегральной схемы для поверхностного монтажа с более тонкими выводами типа «крыло чайки», выступающими с каждой из четырех сторон, чтобы облегчить (или упростить) фрезерование и пайку.ATMega328 SMD
— другая версия 328 для поверхностного монтажа с двумя дополнительными аналогами. Обычно это чип, который можно найти на платах Lilypad и Nano, и он может похвастаться двумя дополнительными аналогами.
Для получения дополнительных советов по AVR я настоятельно рекомендую форум AVR Freaks. Много пикантных советов.
Обновление библиотек EAGLE
В этот момент я обнаружил, что Fab-библиотека в EAGLE отсутствует, устарела или просто сбивает с толку в отношении имеющегося у нас инвентаря. Для начала я загрузил всю библиотеку Sparkfun здесь, так как в ней есть и другие очень полезные компоненты, которые есть у нас в лаборатории. Кроме того, я отчаянно искал TQFP-корпус Atmega328P с такой же схематической компоновкой, что и Satchakit, чтобы не перепутать слишком много выводов, пытаясь разобраться в его конструктивных особенностях. Я нашел то, что искал, с библиотекой Atmega8 Eagle.
Загрузите или клонируйте нужные библиотеки с Github.
В окне панели управления EAGLE перейдите в меню
Параметры
и выберитеКаталоги
. Это список компьютерных каталогов, в которых EAGLE просматривает библиотеки компонентов.В поле
Libraries
добавьте ссылку на каталог, в котором хранятся ваши новые библиотеки. Если вы хотите сохранить библиотеки EAGLE по умолчанию и добавить библиотеку SparkFun, добавьте двоеточие (:) после$EAGLEDIR\lbr
и после этого свяжите расположение каталога, в моем случае я добавил библиотеку в приложение по умолчанию Eagle-9.0.0/lbr следующим образом:$EAGLEDIR\lbr: Applications/Eagle-9.0.0 /фунт/Sparkfun/
Теперь в дереве библиотек вы должны увидеть новые папки. Чтобы активировать их, щелкните правой кнопкой мыши папку «lbr» и выберите
Использовать все
илиНе использовать
для деактивации.Вернитесь к представлению «Схема» или «Компоновка платы», перейдите в меню «Библиотека» и
«Обновить все».
. Теперь у вас должны быть доступны все эти новые компоненты. Более подробные инструкции можно найти в полезном руководстве по настройке библиотек Eagle.
Дизайн печатной платы
До сих пор мы проектировали наши платы с шириной дорожек 16 мил по умолчанию. Это слишком широко для фрезерования инструментом 1/64, который мы используем, и нет необходимости использовать сверххрупкий инструмент 0,010 для этого компонента.
Я хотел оставить как можно больше выводов для общего использования, поэтому я также оставил свободными аналоговые выводы ADC6/7 и использовал кварц на 16 мегагерц в соответствии с компонентами, имеющимися в лаборатории. Обязательно проверьте это в первую очередь.
Вот выравнивание контактов, резисторов, светодиодов, конденсаторов перед трассировкой.
Модификация компонентов Eagle
Библиотека ATmega8 поставляется с пакетом TQFP32, что, как я предполагал, означает более тонкие контактные площадки. Это оказалось неверным.
Несмотря на то, что я проектировал с 12-миллиметровыми дорожками, как вы можете видеть здесь, посадочные места на самом деле были больше похожи на 16-миллиметровые.
Это было проблемой, потому что после экспорта и загрузки в FabModules для создания моей стратегии фрезерования справа видно, что траектория 1/64 не проходит через штифты компонента.
Так что спасибо Baptise за открытие этого супер полезного способа редактирования компонентов в Eagle.
В разделе Библиотека > Открыть диспетчер библиотек
вы можете редактировать компоненты, которые находятся в вашем проекте, используются или доступны. Нажмите на компонент, Edit
и в столбце Package
щелкните компонент (в данном случае TQFP-32), и вы сможете редактировать слои компонентов, как показано ниже.
Здесь я устанавливаю размер посадочного места SMD (поверхностный монтаж) на 12 мил (12 тысяч дюймов или 0,3 мм в ширину), сохраняя длину 50 мил по умолчанию. Это фактический размер ножек моего микрочипа.
Обязательно нажмите «Применить», программа попросит вас сохранить это значение по умолчанию, а затем вернуться в макет платы: Библиотека > Обновить все
. Это должно изменить размеры компонентов SMD в конструкции.
После долгих экспериментов и экспериментов с разными размерами это сработало, и я смог фрезеровать доску в масштабе 1/64!
Как видите, здесь доска фрезерованная. 12-миллиметровые дорожки довольно тонкие, и, оглядываясь назад, я думаю, что было бы неплохо спроектировать «щупальца» SMD-крепления из 12-миллиметровых, а остальные сделать из 16-миллиметровых, если экономия места на плате не является проблемой.
Пайка со смещением
Если выводы микроконтроллера слишком малы для пайки по отдельности, можно сделать это с помощью метода пайки со смещением контактов. Это выглядит так:
Нанесите флюс на дорожки контактов. Флюсы облегчают пайку (а также пайку и сварку), удаляя окисление с соединяемых металлов.
Убедитесь, что вы правильно выровняли микросхему (посмотрите на схему!!) и, по возможности, используя пинцет и увеличительное стекло, аккуратно поместите компонент так, чтобы он плотно прилегал к дорожкам.
Смочите паяльник и аккуратно припаяйте два противоположных угловых контакта микроконтроллера, чтобы «приколоть» чип. Не беспокойтесь о растекании припоя, гораздо важнее удерживать компонент на одной линии с дорожками.
С закрепленным чипом снова смочите утюг и обильно «прочистите» все оставшиеся контакты, убедившись, что они нагреваются достаточно долго, чтобы всосать припой.
Поместите фитиль (плетение медной проволоки) на припаянные штифты и прогладьте сверху, чтобы удалить лишний припой. Это должно оставить чистые и блестящие припаянные контакты.
Вот хорошее руководство по этому методу.
Также, как вы можете видеть, я не фрезеровал сквозные отверстия с моим контуром. Это потребовало бы дополнительной стратегии фрезерования, и вместо этого я сделал это вручную, используя инструмент дремель, который у нас есть в лаборатории. Это дает садистское чувство власти, которое должны испытывать стоматологи при лечении корневых каналов.
После проверки всех моих соединений (не забудьте сделать это тщательно с каждым контактом) я был готов к программированию.
Программирование
Перво-наперво, сделайте хорошую диаграмму, на которой обозначены все контакты и порты. См. ниже соответствующую (неофициальную) схему распиновки Arduino.
Контакты на этой печатной плате сохранены точно так же, как на плате Arduino UNO, так что я могу без проблем использовать IDE для быстрого прототипирования. Для загрузки скетчей в ATMega328 через последовательный порт (как вы делаете это при использовании USB со стандартным Arduino) сначала требуется загрузчик.
На неделе производства электроники мы узнали, что загрузчик — это, по сути, программа, загружающая операционную систему при включении компьютера. Для Arduino загрузчик поддерживает перепрограммирование программной памяти (или флэш-памяти) через последовательные порты (rx и tx) без необходимости постоянного использования специального программиста, такого как наш FabISP.
Компромиссы загрузчика
Есть несколько причин, по которым Нил постоянно повторяет, почему он программирует свои AVR напрямую на C-коде. Поскольку загрузчик Arduino запускается перед вашим кодом, это задерживает выполнение «настоящего» кода программы C. Загрузчик Arduino Uno также занимает 508 байт памяти, что может быть проблемой, если у вас большая программа.
Лысый инженер хорошо это описывает. Также хороший материал для чтения:
Страница загрузчика Arduino плюс этот форум
Советы и рекомендации по загрузке Adafruit
Учебник по лучшему способу записи загрузчиков Arduino
E Предохранители?
Сначала я последовал примеру Сачи, записав загрузчик Arduino с помощью моего программатора FabISP, например:
Как видите, мы просто соединяем контакты MOSI, MISO, SCK (CLOCK) и RESET с помощью перемычек.
Затем в Arduino IDE я выбрал USBtinyISP в качестве программатора, ArduinoUNO в качестве платы и в разделе Инструменты > Записать загрузчик
Светодиод замигал, вселенная расширилась, и через секунду или две я получил это противоречивое сообщение об успехе большое предостережение:
Я попытался загрузить базовый эскиз мерцания. Таким образом, я смог загрузить скетч с помощью FabISP, но это лишило смысла иметь загрузчик. Поэтому я снова записал загрузчик, на этот раз используя другую плату Arduino в качестве интернет-провайдера, а затем подключил FTDI (разъем USB к последовательному порту), как показано на рисунке Satcha:
Теперь, пытаясь загрузить свой блинк-скетч, мне не повезло, все, что я получил в IDE, было:
avrdude: stk500_getsync(): не синхронизировано: resp=0x00 avrdude: stk500_disable(): ошибка протокола, ожидание=0x14, соответственно=0x51
Похоже, что связь с платой вообще отсутствует. Я попытался изменить, чтобы посмотреть, сработает ли обозначение платы как «Arduino mini» или «pro», но и здесь не повезло.
Изменение загрузчиков
После долгих размышлений я наткнулся на удивительный сайт Ника Гэммона, где он настроил свой собственный загрузчик Arduino, который специально устанавливает EFuse = 0xFD
. Я решил попробовать, скачал его скетч загрузчика с Github.
- Убедитесь, что ваша плата подключена к Arduino ISP, как указано выше
- Загрузить скетч Gammon ATMega_Board_Programmer
- Откройте последовательный монитор и следуйте инструкциям
Примечание: выбраны NL и CR
и 115200 Baud Rate
для последовательной связи. В противном случае вы видите тарабарщину.
Последовательное программирование
Теперь снова подключите FTDI, как описано выше, БУУМ!
Извлеченные уроки
Нам предстоит многое узнать о том, как работают загрузчики Arduino в целом. После прочтения таблицы данных ATMega328P (стр. 277) и просмотра кода загрузчика мистера Гэммона кажется, что речь идет о том, как флэш-память организована между разделом загрузки и разделом приложений.
Размер различных секций настраивается предохранителями BOOTSZ, как показано в Табл. 24-7 на стр. 289 и Рис. 24-2.
Эти два раздела могут иметь разный уровень защиты, так как у них разные наборы бит блокировки.
Мое непрофессиональное понимание до сих пор заключается в том, что именно так вы настраиваете механизм самопрограммирования «Чтение-во время-записи» для загрузки и выгрузки программного кода самим MCU.
Мне нужно продолжить расследование. А пока давайте подключим и играем.
по НГР
Исходный код этой работы полностью открыт и распространяется под лицензией MIT License (MIT). Это означает, что можно свободно использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и/или продавать при условии уведомления об авторских правах, и эта лицензия должна быть включена во все копии или последующие распространения.счетчик оборотов двигателя Arduino | Ардуино | Электротехника | Электроника | Микроконтроллер | Архитектура программного обеспечения
Закрыто
Бюджет 8-30 евро
Счетчик оборотов двигателя на основе Arduino, использующий катушку двигателя в качестве входных данных
(катушка имеет положительный и отрицательный кабель, современный двигатель)
не ограничиваясь только этой функцией, позже этот код будет интегрирован в остальную часть кода, который я уже сделал.
Навыки: Arduino, электротехника, электроника, микроконтроллер, архитектура программного обеспечения
О клиенте:
( 1 отзыв ) Фуэнхирола, Испания
ID проекта: #16660639
Опубликовать подобный проект
- ТОЧНО!!! Счетчик оборотов через HALL (автомобильный датчик, подключенный к arduino nano) (8-15 евро)
- контроль топлива — простой (8-30 евро)
- синхронизация стоп-сигнала (8-30 евро)
- arduino ПРОСТАЯ ФУНКЦИЯ (8-30 евро)
- контроль топлива (8-30 евро)
< Предыдущая работа Следующая работа >
- Конструкция печатной платы для захвата цифровых/аналоговых входных сигналов от датчиков и приводов и загрузки на облачный сервер через WiFi (₹600–1500 INR)
- Требуются специалисты по ремонту компьютеров | Окленд (Окленд, Новая Зеландия, 100-102 новозеландских доллара)
- Нужна помощь с ирригационными клапанами Toro 220 для перехода в автоматический режим (10–30 долларов США)
- Arduino wav offset (10-100 евро)
- Разработчик Python — 15–20 лет — 1 час каждый день (10–20 долларов США в час)
- Чтение/запись данных/памяти с микроконтроллера stm32f405 (1500-3000 долларов США)
- Разработка построителя почтовых шаблонов (₹12500-37500 INR)
- Сборка печатной платы панели управления и схема подключения (250–750 долларов США)
- Требуется эксперт Matlab для задачи обработки сигналов (30–250 долларов США)
- Расширьте свой симулятор микропроцессора на основе стека, разработав двухъядерный процессор (30–250 долларов США)
- Помощь в автоматизации приготовления пищи (15–25 долларов США в час)
- Разработайте буфер FIFO, который может хранить до 8 слов данных с использованием VHDL.