Перейти к содержанию
    

STM32 нужна помощь с кнопками

Привет всем, нужна помощь с кнопками от авто. 3 кнопки (джойстик для бортового компа авто) организовано так (фото прилагаю). Идея такая, эти кнопки к stm32f103 и далее команды от нажатия на кнопки по can шине. Реализовал все кроме кнопок. Пробовал через ADC, не получается 3 кнопки на один вход, видит только одну из трех. Через прерывание тоже только одна из 3х кнопок. Я прям не спец по stm32. Накинте вариантов где почитать или посмотреть.

Если вдруг фото не грузиться, image.jpeg.4f3598112c95b782a5778a11462d681d.jpegто кнопки работают так: На двух кнопках резисторы одна замыкает на землю (3к - 1кнопка, 1к -2кнопка, 0 - 3кнопка) На фото контакт 2 это сигнал от кнопок, контакт 3 это земля. Буду благодарен. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Один контакт данного узла подключить к общему проводу, второй — через резистор 10 кОм к питанию, и на АЦП.

Для подавления дребезга, данные с кнопок надо считывать не чаще 30 мс, обычно этим занимаются в прерываниях — в данном случае, коды с АЦП будут 0, 0,09, 0,23 и 1 п/ш, их разности дают три интервала между ними, далее взять их середины, они и будут искомыми точками на шкале, т.е. <0,045, <0,16, <0,61.

Изменено пользователем Plain

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Резистор-подтяжка какого номинала?

Я бы выбрал около 1к, исходя из ваших замеров.

Получаем:
Кнопки отпущены - цепь разомкнута: Vadc = 3.3V (если питается от 3.3V).
Нажата кнопка 1 [3к]: Получаем делитель напряжения 1:3; Vadc ~= 0.75*3.3V ~= 2.475V. [центральное]
Нажата кнопка 2 [1k]: Получаем делитель напряжения 1:1; Vadc ~= 0.5*3.3V ~= 1.65V. [центральное]
Нажаты кнопки 1+2 [3k || 1k]: Получаем делитель напряжения 1:0.77; Vadc ~= 1.27V [центральное]
Нажата кнопка 3 [0]: Получаем... замыкание цепи АЦП на землю и напряжение около нуля.

Читаем напряжение на пине каждые 10-20мс, фильтруем значения, усредняем пару-тройку выборок. Если напряжение более 0.2с стабильно в вышеописанных диапазонах (даём допуск 5-10%), то принимаем решение о том, что кнопка нажата.

Если снова 3.3V - кнопки отпущены.
Всё довольно просто. В теории.

PS: Не забудьте добавить конденсатор фильтра на вход АЦП. Для такого делителя можно взять от сотен пикофарад до десятков нанофарад.

Изменено пользователем AlanDrakes

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, MaximDV сказал:

Накинте вариантов где почитать или посмотреть.

Сначала несколько уточняющих вопросов:

- Какая примерно длина кабеля от блока кнопок (в джойстике) до блока управления?

- Сколько проводов (в кабеле) подходит к блоку кнопок? Только два?

- Кабель экранирован (в оплетке)? Можно ли заменить кабель?

- Нужно ли распознавать одновременное нажатие нескольких кнопок?

- Есть ли возможность заменить резисторы в джойстике и/или добавить новые?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС, схема соответствует Вашей? Резисторы правильно обозначены или наоборот?

2098415588_.png.1886f291f4cf5954121fd6b222f2e659.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, quark сказал:

схема соответствует Вашей?

Левый 1 кОм, правый 2 кОм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Plain сказал:

Левый 1 кОм, правый 2 кОм.

Исправил в исходной схеме. А это точно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, quark сказал:

Какая примерно длина кабеля от блока кнопок (в джойстике) до блока управления?

В авто это обычно не меньше пары метров.

 

1 час назад, quark сказал:

Только два?

Нет, много.

 

1 час назад, quark сказал:

Кабель экранирован (в оплетке)? Можно ли заменить кабель?

Не в оплетке, заменить нельзя. Экранированный провод в данной задаче деньги на ветер.

 

1 час назад, quark сказал:

Нужно ли распознавать одновременное нажатие нескольких кнопок?

Глядя на данную схему, ответ нет.

 

1 час назад, quark сказал:

Есть ли возможность заменить резисторы в джойстике и/или добавить новые?

Нет, ибо нафиг не нужно.

4 минуты назад, quark сказал:

Исправил в исходной схеме. А это точно?

Да хоть и не точно, задача от этого совсем не меняется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, Vasily_ сказал:

Да хоть и не точно, задача от этого совсем не меняется.

Почему-то, отвечают все, кто угодно. Только не ТС. )))

Давайте, уже, его дождемся...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как много вопросов. И так 

1. Нажатие несколько кнопок не нужно совсем, так как это вверх - вниз - выбор

2. Расстояние 20-30 см

3. Сопротивление я обозначил правильно!

4. Схема та же самая, только сопротивления другие

Я испробовал вариант сопротивление от питания к входу ADC. Брал 47к от 5в на вход ацп, а так же 3.3в. Нет явного различия в показаниях, мусор какой то.  

Замена резисторов на кнопках не вариант совсем. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, MaximDV сказал:

3. Сопротивление я обозначил правильно!

4. Схема та же самая, только сопротивления другие

Это не понятно. Можете исправить сопротивления в схеме на рисунке, чтобы она соответствовала реальности?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что исправить? В моем фото нет никаких указателей на сопротивлений. Измерил тестером и прописал в сообщении. Фото из сервисного мануала.

Изменено пользователем MaximDV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, MaximDV сказал:

Что исправить? В моем фото нет никаких указателей на сопротивлений.

Хорошо. А померить три раза сопротивление тестером можно, нажимая по одной кнопке?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так и сделал 100 до фига 500 раз и параметры такие : 3кОм -1кОм-0 - это нажатие кнопок по очереди. Изменений в показаний не было совсем. 

Изменено пользователем MaximDV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, MaximDV сказал:

3кОм -1кОм-0 - это нажатие кнопок по очереди.

"вверх"  -   3кОм

 "i/set"   -   1кОм

"вниз"    -   0кОм

Так? Или в обратном порядке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...