Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Аналогово-цифровой преобразователь (ADC) — это устройство, которое может считывать значение аналогового входного напряжения и преобразовывать его в цифровое значение. ADCs используются для чтения значений из термисторов, потенциометров и других устройств, которые изменяют сопротивление в зависимости от определенных условий.
В этой теме вы будете использовать .NET для чтения значений из АЦП при модуляции входного напряжения с помощью потенциометра.
Предпосылки
- Компьютер на основе ARM (ARMv7 или более поздней версии) с одной платой (SBC)
- MCP3008 аналоговый преобразователь в цифровой
- Трехконтактный потенциометр
- Макет
- Перемычки
- Плата расширения для Raspberry Pi GPIO (необязательно/рекомендуется)
- Пакет SDK для .NET 8 или более поздней версии
Примечание.
В этом руководстве предполагается, что целевое устройство — Raspberry Pi. Однако это руководство можно использовать для любого SBC на основе Linux, который поддерживает .NET, например Orange Pi, ODROID и многое другое.
Подготовка SBC
Убедитесь, что SBC настроен для поддержки следующих служб:
- SSH
- SPI
Для многих устройств дополнительная конфигурация не требуется. Для Raspberry Pi используйте raspi-config команду. Подробнее о raspi-config смотрите в документации Raspberry Pi.
Подготовка оборудования
Используйте аппаратные компоненты для построения канала, как показано на следующей схеме:
MCP3008 использует последовательный периферийный интерфейс (SPI) для обмена данными. Ниже приведены подключения от MCP3008 к Raspberry Pi и потенциометру:
- VDD до 3.3V (показано красным цветом)
- VREF до 3,3 В (красный)
- AGND к земле (черный)
- CLK в SCLK (оранжевый)
- Подключение DOUT к MISO (оранжевый)
- DIN к MOSI (оранжевый)
- CS/SHDN до CE0 (зелёный)
- DGND на заземление (черный)
- CH0 к среднему выводу потенциометра (желтый)
Подайте 3,3 В и землю на внешние контакты потенциометра. Порядок не имеет значение.
При необходимости ознакомьтесь со следующими схемами закреплений:
| MCP3008 | Raspberry Pi GPIO |
|---|---|
|
|
Изображение любезно Raspberry Pi Foundation. |
Подсказка
Использование платы вывода GPIO в сочетании с макетной платой рекомендуется, чтобы упростить подключения к заголовку GPIO.
Создание приложения
Выполните следующие действия в предпочтительной среде разработки:
Создайте консольное приложение .NET с помощью .NET CLI или Visual Studio. Назовите его AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorialДобавьте в проект пакет Iot.Device.Bindings . Используйте .NET CLI из каталога проекта или Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.2.0-*Замените содержимое файла Program.cs кодом, приведенным ниже.
using System; using System.Device.Spi; using System.Threading; using Iot.Device.Adc; var hardwareSpiSettings = new SpiConnectionSettings(0, 0); using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings); using var mcp = new Mcp3008(spi); while (true) { Console.Clear(); double value = mcp.Read(0); Console.WriteLine($"{value}"); Console.WriteLine($"{Math.Round(value/10.23, 1)}%"); Thread.Sleep(500); }В предыдущем коде:
-
hardwareSpiSettingsприсваивается новый экземплярSpiConnectionSettings. Конструктор задаетbusIdдля параметра значение 0, а параметрchipSelectLine— 0. - Объявление using создает экземпляр
SpiDevice, вызываяSpiDevice.Createи передаваяhardwareSpiSettings. ЭтоSpiDeviceпредставляет шину SPI. Объявлениеusingгарантирует, что объект удаляется, а аппаратные ресурсы освобождаются должным образом. - Другое
usingобъявление создает экземплярMcp3008и передаетSpiDeviceв конструктор. - Цикл
whileвыполняется неограниченно. Каждая итерация:- Очищает консоль.
- Считывает значение CH0 в ADC путем вызова
mcp.Read(0). - Записывает необработанное значение в консоль.
- Записывает в консоль значение, отформатированное в виде процента.
- Чтобы вычислить процент, значение делится на 10,23. MCP3008 представляет собой 10-разрядный ADC, то есть возвращает 1024 возможные значения, начиная от 0 до 1023. Деление значения на 10,23 представляет значение в процентах.
- Процент округляется до ближайшего 0,1.
- Спит 500 мс.
-
сборка приложения. При использовании .NET CLI выполните команду
dotnet build. Чтобы создать в Visual Studio, нажмите клавиши CTRL+SHIFT+B.Разверните приложение в SBC как автономное приложение. Инструкции см. в разделе "Развертывание приложений .NET в Raspberry Pi". Обязательно предоставьте исполняемому файлу разрешение на выполнение с помощью
chmod +x.Запустите приложение на Raspberry Pi, переключившись в каталог развертывания и запустив исполняемый файл.
./AdcTutorialНаблюдайте за выходными данными при повороте ручки потенциометра. Это связано с потенциометром, изменяющим напряжение, подаваемое на вход CH0 ADC. ADC сравнивает входное напряжение на CH0 с эталонным напряжением, предоставленным VREF , чтобы создать значение.
Завершите программу, нажав клавиши CTRL+C.
Поздравляю! Вы использовали SPI для чтения значений из аналогового к цифровому преобразователю.
Получение исходного кода
Источник этого руководства доступен на сайте GitHub.