Jimbo13
Вт 28 ноября 2017 г., 21:25
Я не могу получить хардтимазанкодер.INO, чтобы работать над моим BluePill STM32F103, любые предложения, пожалуйста.
https: // github.com/rogerclarkmelbourne/ ... ncoder.Ино
С моей областью я определил, что физический вывод 14 и 15 был выходом симулятора.
Я подключил физический PIN14 до 12, 15-13.
https: // github.com/rogerclarkmelbourne/ ... ncoder.Ино
С моей областью я определил, что физический вывод 14 и 15 был выходом симулятора.
Я подключил физический PIN14 до 12, 15-13.
*TIMER2 inputs -> Digital Pins used to simulate.
* D2 -> D4
* D3 -> D5
victor_pv
Вт 28 ноября 2017 г. 22:11
Я полагаю, что у Bluepill нет штифтов, показывает только названия портов (PA1, PA2, PB0 и т. Д.)
Эти имена D2, D4 из клена. Номера выводов в BluePill и Maple/Maple Mini не совпадают. Не уверен, на что вы имеете в виду с помощью Phisical Pin 14 и 15, так как я считаю, что ни одна версия Bluepill не использует только цифры для выводов.
Если вы используете номера выводов пакетов Dip, это сбивает с толку, лучше использовать PA0, PA1 и т. Д., Для остальных, чтобы понять, что вы соединяете, где.
Что касается функции таймера энкодера, она должна использовать входные данные (каналы) 1 и 2 из того же таймера для работы. Таким образом, входные контакты должны быть CH1 и CH2 одного и того же устройства таймера.
Эти имена D2, D4 из клена. Номера выводов в BluePill и Maple/Maple Mini не совпадают. Не уверен, на что вы имеете в виду с помощью Phisical Pin 14 и 15, так как я считаю, что ни одна версия Bluepill не использует только цифры для выводов.
Если вы используете номера выводов пакетов Dip, это сбивает с толку, лучше использовать PA0, PA1 и т. Д., Для остальных, чтобы понять, что вы соединяете, где.
Что касается функции таймера энкодера, она должна использовать входные данные (каналы) 1 и 2 из того же таймера для работы. Таким образом, входные контакты должны быть CH1 и CH2 одного и того же устройства таймера.
Zoomx
Ср 29 ноября 2017 г. 7:49
На чертеже соединения должны быть
PA_10 -> PB_5
PB_3 -> PB_4
Как вы можете видеть здесь
PA_10 -> PB_5
PB_3 -> PB_4
Как вы можете видеть здесь
Jimbo13
Ср 29 ноября 2017 г. 9:36 утра
Я использую рутинную аутику, как показано ниже.
Я посмотрел на распинущую кленовую распину, но не смог коррелировать булавку D2-D5, поэтому я запустил программу, предполагая, что распределение штифтов будет разобраться. Затем я искал вывод симулятора, который появился на физическом штифте (в легкой бирюзовой диаграмме) 14 и 15. Затем я выпустил часть настройки таймера и погасил то, что будет входными контактами D2 D3 вверх и вниз, и используя применение, которое я обнаружил, что это физические контакты 12 и 13.
Итак, я подключил физический вывод от 14 до 12, 15-13.
Я только что попытался использовать PA10 вместо D2 в качестве ввода в программе.
PB3 вместо D3 в качестве входного
PB5 вместо D4 в качестве вывода
PB4 вместо D5 в качестве вывода
Я получил выход для симулятора на PB5, но не на PB4
Я подключил PB5 к PA10, затем PB3, но получил:
1016 Считается
Направление 0
Полные обороты: 4294967295
1016 Считается
Направление 0
Полные обороты: 4294967295
1016 Считается
Направление 0
Полные обороты: 4294967295
Я немного смущен, но буду исследовать булавки позже более подробно.
Джим
Я посмотрел на распинущую кленовую распину, но не смог коррелировать булавку D2-D5, поэтому я запустил программу, предполагая, что распределение штифтов будет разобраться. Затем я искал вывод симулятора, который появился на физическом штифте (в легкой бирюзовой диаграмме) 14 и 15. Затем я выпустил часть настройки таймера и погасил то, что будет входными контактами D2 D3 вверх и вниз, и используя применение, которое я обнаружил, что это физические контакты 12 и 13.
Итак, я подключил физический вывод от 14 до 12, 15-13.
Я только что попытался использовать PA10 вместо D2 в качестве ввода в программе.
PB3 вместо D3 в качестве входного
PB5 вместо D4 в качестве вывода
PB4 вместо D5 в качестве вывода
Я получил выход для симулятора на PB5, но не на PB4
Я подключил PB5 к PA10, затем PB3, но получил:
1016 Считается
Направление 0
Полные обороты: 4294967295
1016 Считается
Направление 0
Полные обороты: 4294967295
1016 Считается
Направление 0
Полные обороты: 4294967295
Я немного смущен, но буду исследовать булавки позже более подробно.
Джим
victor_pv
Ср 29 ноября 2017 г. 16:09
Я не знаю, откуда поступают цифры в этой диаграмме, но в общих досках контакты к численному соотношению-прямая PA0-15, затем PB0-15 и т. Д., За исключением не всех контактов во всех MCUS доступны во всех MCUS. Числа не пропущены, вместо этого используется следующее последовательное число для следующего выходящего выхода подряд подряд. Они в перечислении:
https: // github.com/rogerclarkmelbourne/ ... rd/poard.час
Поскольку ни одному из них не назначено значение, компилятор начнет с 0 для PA0.
Чтобы избежать путаницы, всегда используйте PA0, PA1 и т. Д. В ваших эскизах, поскольку 0 в Maple Mini соответствует другому штифту, чем чертеи, и это может соответствовать чему -то еще на другой плате.
Что касается выбора PIN -кода, оба входа должны быть CH1 и CH2 того же таймера.
PA10 и PB3 - разные таймеры, а на вершине PA10 - 3 канала этого конкретного таймера.
Поправьте меня, если я ошибаюсь, но в соответствии с справочным руководством вам нужно использовать входные данные 1 и 2.
На диаграмме, PA8 и PA9 - CH1 и 2 того же таймера, попробуйте эти 2.
https: // github.com/rogerclarkmelbourne/ ... rd/poard.час
Поскольку ни одному из них не назначено значение, компилятор начнет с 0 для PA0.
Чтобы избежать путаницы, всегда используйте PA0, PA1 и т. Д. В ваших эскизах, поскольку 0 в Maple Mini соответствует другому штифту, чем чертеи, и это может соответствовать чему -то еще на другой плате.
Что касается выбора PIN -кода, оба входа должны быть CH1 и CH2 того же таймера.
PA10 и PB3 - разные таймеры, а на вершине PA10 - 3 канала этого конкретного таймера.
Поправьте меня, если я ошибаюсь, но в соответствии с справочным руководством вам нужно использовать входные данные 1 и 2.
На диаграмме, PA8 и PA9 - CH1 и 2 того же таймера, попробуйте эти 2.
Jimbo13
Ср 29 ноября 2017 г., 22:25
Хорошо, Виктор, это сработало.
Я также получил таймер 1 3 и 4, работая с помощью:
Хардворетимер таймер (1); PA8-9
Хардворетимер таймер (3); PA6-7
Хардворетимер таймер (4); PB6-7
И многому научился в процессе.
Спасибо
Джим
Я также получил таймер 1 3 и 4, работая с помощью:
Хардворетимер таймер (1); PA8-9
Хардворетимер таймер (3); PA6-7
Хардворетимер таймер (4); PB6-7
И многому научился в процессе.
Спасибо
Джим
Jimbo13
Пт, 01 декабря 2017 г., 17:24
Продолжение с некоторой информацией, которая может быть заинтересована.
Мне потребовался вращающийся энкодер, чтобы сделать преобразователь проводной проволоки с разрешением 1 мм. У меня прикреплен шкив диапазона 20 мм к моему вращению, так что pi*d = 62.8 мм. Поэтому я купил ротационный энкодер Bourns EM14 с 64 PPR, который делает каждый импульс примерно 1 мм (скорректирован по коэффициенту масштаба).
Ссылаясь на справочное руководство ST «RM0008» (Page391) в режиме квадратурного энкодера Счетчик подсчитывается при каждом переходе двух входов. Это означает, что счетчик фактически имеет значение 4 * 64 = 128 PPR, что было бы хорошо задним числом, так как я мог бы использовать более дешевый 16 PPR Encoder.
Мне потребовался вращающийся энкодер, чтобы сделать преобразователь проводной проволоки с разрешением 1 мм. У меня прикреплен шкив диапазона 20 мм к моему вращению, так что pi*d = 62.8 мм. Поэтому я купил ротационный энкодер Bourns EM14 с 64 PPR, который делает каждый импульс примерно 1 мм (скорректирован по коэффициенту масштаба).
Ссылаясь на справочное руководство ST «RM0008» (Page391) в режиме квадратурного энкодера Счетчик подсчитывается при каждом переходе двух входов. Это означает, что счетчик фактически имеет значение 4 * 64 = 128 PPR, что было бы хорошо задним числом, так как я мог бы использовать более дешевый 16 PPR Encoder.
- Quadcounter2.PNG (22.15 киб) просмотрено 1258 раз
victor_pv
Сб 02 декабря 2017 г. 14:38
Вы должны использовать таймер.SetPrescaleFactor (4) для получения деления на 4.
Причина для субстракта 1 заключается в том, что настройки прескалера начинаются с 0:
0 -> Разделите на 1
1 -> Разделите на 2
2 -> Разделите на 3
3 -> Разделите на 4
Это так, как работает регистр Прескалера, задокументированный в справочном руководстве, если вы хотите найти больше.
Если вы используете таймер.SetPrescaleFactor (5) Ваша шкала будет выключен.
Причина для субстракта 1 заключается в том, что настройки прескалера начинаются с 0:
0 -> Разделите на 1
1 -> Разделите на 2
2 -> Разделите на 3
3 -> Разделите на 4
Это так, как работает регистр Прескалера, задокументированный в справочном руководстве, если вы хотите найти больше.
Если вы используете таймер.SetPrescaleFactor (5) Ваша шкала будет выключен.
Кокоспалм
Солнце 29 апреля 2018 13:01
[victor_pv - Ср 29 ноября 2017 г. 16:09] -Я немного смущен. Что вы имеете в виду с «оба входных данных должны быть CH1 и CH2 в одно и то же время?
Что касается выбора PIN -кода, оба входа должны быть CH1 и CH2 того же таймера.
PA10 и PB3 - разные таймеры, а на вершине PA10 - 3 канала этого конкретного таймера.
Поправьте меня, если я ошибаюсь, но в соответствии с справочным руководством вам нужно использовать входные данные 1 и 2.
На диаграмме, PA8 и PA9 - CH1 и 2 того же таймера, попробуйте эти 2.
Мой таймер.getCount () просто работает нормально, но фанк ничего не делает...
У меня есть настоящий подключен энкодер, поэтому мне не нужны что -то эмуляция.
Это мой код:
#define PPR 1024
HardwareTimer timer(3); //initialize a timer
long ints = 0;
void func(){
if (timer.getDirection()){
ints--;
} else{
ints++;
}
}
void setup() {
//define the Timer channels as inputs.
pinMode(PA6, INPUT_PULLUP); //channel A
pinMode(PA7, INPUT_PULLUP); //channel B
Serial.begin(115200);
Serial.println("encoderTest");
//configure timer as encoder
timer.setMode(1, TIMER_ENCODER); //set mode, the channel is not used when in this mode.
timer.pause(); //stop...
timer.setPrescaleFactor(1); //normal for encoder to have the lowest or no prescaler.
timer.setOverflow(PPR); //use this to match the number of pulse per revolution of the encoder. Most industrial use 1024 single channel steps.
timer.setCount(0); //reset the counter.
timer.setEdgeCounting(TIMER_SMCR_SMS_ENCODER3); //or TIMER_SMCR_SMS_ENCODER1 or TIMER_SMCR_SMS_ENCODER2. This uses both channels to count and ascertain direction.
timer.attachInterrupt(1, func); //channel doesn't mean much here either.
timer.resume(); //start the encoder...
}
//Support variables.
unsigned long interval=0; //variable for status updates...
char received = 0;
void loop() {
//encoder code
if (millis() - interval >= 100) {
Serial.print(timer.getCount());
Serial.print("\t");
Serial.print(timer.getDirection());
Serial.print("\t");
Serial.println(ints);
interval = millis(); //update interval for user.
}
}
victor_pv
Вторник, 1 мая 2018 г., 8:08 вечера
Если вы захотите использовать аппаратный таймер для чтения энкодера и указания направления, вам необходимо использовать 2 контакта, которые соответствуют CH1 и CH2 того же устройства Timer Adwange Timer. OP использовал 2 контакта, которые не соответствовали тому же аппаратному таймеру, поэтому ему пришлось изменить. Изменение этой проблемы решить эту проблему в качестве следующего поста после этого показывает.
Просто примечание, у вас есть полная революция, установленная на 1024. Из вывода, который вы показываете, вы не достигли этого. Я лично не использовал таймер в качестве кодирования, но я считаю, что func () будет вызван, когда вы завершите революцию. Может быть неправ, хотя, я не смотрел, как таймеры работают как кодеры.
Просто примечание, у вас есть полная революция, установленная на 1024. Из вывода, который вы показываете, вы не достигли этого. Я лично не использовал таймер в качестве кодирования, но я считаю, что func () будет вызван, когда вы завершите революцию. Может быть неправ, хотя, я не смотрел, как таймеры работают как кодеры.
Кокоспалм
Пт, 04 мая 2018 г., 11:12
Хорошо, спасибо, я думаю, что получил это сейчас