2017-01-21 3 views
6

Я хочу, чтобы определить, когда периферийный датчик НЕ подключен к моей малине Pi 3.Как узнать, подключено ли периферийное устройство к GPIO?

Например, если у меня есть пассивный инфракрасный датчик GPIO.

я могу получить все GPIO порты, как это:

PeripheralManagerService manager = new PeripheralManagerService(); 
List<String> portList = manager.getGpioList(); 
if (portList.isEmpty()) { 
    Log.i(TAG, "No GPIO port available on this device."); 
} else { 
    Log.i(TAG, "List of available ports: " + portList); 
} 

Тогда я могу подключиться к порту, как это:

try { 
    Gpio pir = new PeripheralManagerService().openGpio("BCM4") 
    } catch (IOException e) { 
     // not thrown in the case of an empty pin 
    } 

Однако даже если вывод пуст, я все еще могу подключиться к это (, что технически имеет смысл, поскольку gpio только двоичный вкл или выкл). Кажется, что нет api, и я не могу законно думать о логике того, как вы можете различать контакт, который имеет подключенный периферийный датчик, и тот, который «пуст».

Поэтому на данный момент для меня нет никакого способа утверждать, что мои датчики и схема установлены правильно.

У кого-нибудь есть идеи? Возможно ли это с точки зрения электроники?

Справочные документы:

https://developer.android.com/things/sdk/pio/gpio.html

ответ

6

Есть много способов сделать «обнаружения присутствия» электрически, но ничего такого, что вы найдете внутренне в SoC. Обычно вы не спрашивали булавку GPIO, если что-то было прикреплено, - это не могло бы вам сказать.

Дополнительные контакты GPIO часто используются для определения того, подключено ли периферийное устройство к разъему. Штепсель для некоторого датчика может включать в себя линию «обнаружения», которая закорочена на землю и, например, тянет GPIO при подключении датчика. USB и SDIO делают что-то подобное с некоторыми специализированными схемами в интерфейсе.

Вы также можете создавать более сложные схемы обнаружения, используя такие вещи, как текущее восприятие, но им неизбежно придется выставить двоичный сигнал, который вы захватываете через выделенный GPIO.

Это проще для последовательной периферии, так как вы обычно можете отправить базовую команду и убедиться, что получите ответ.

2

Обнаружение, использующее исключительно входную линию, может быть жестким. Во-первых, вы хотите ограничить объем проблемы. Относитесь к тому, что состояние датчика не подключено, датчик подключен, но не отвечает, или датчик реагирует нехарактерно.

Таким образом, если это цифровой датчик, то связь с датчиком может быть достаточной, чтобы определить, присутствует ли он или нет (особенно если используются контрольные суммы или бит четности). Некоторые аналоговые датчики также имеют специфические характеристики того, как они себя ведут при срабатывании. Вы можете использовать отклонение от этих спецификаций, чтобы определить, нет ли датчика.

Если у вас есть цифровой датчик без какой-либо проверки ошибок на его выходе, где вы синхронизируете данные (так что все 0 или все 1s являются действительными), или это всего лишь двоичный 1 или 0 для вывода, тогда вы нужна внешняя помощь. То же самое для большинства аналоговых датчиков.

Эта внешняя помощь была бы чем-то, когда вы поставили систему в известное контролируемое состояние, нажмите кнопку, а затем проверите датчики на выход в определенном диапазоне. Чтобы быть абсолютно уверенным, вам нужно, по крайней мере, два разных состояния, чтобы ваши цифровые или аналоговые входы не застряли в правильном состоянии для вашего теста.

Практически любой другой метод будет внешним по отношению к системе. Использование дополнительного IO для «обнаружения» датчика может помочь повысить уверенность в том, что датчик существует, но вы можете получить ложные срабатывания, когда все, что вы узнали, это то, что «что-то» есть - не обязательно датчик, которого вы ожидаете.

Смежные вопросы