Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Аналогово-цифровой преобразователь (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.