Аппаратный учет числа импульсов ШИМ
23.10.2016, 23:34
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Ууу, ну если так писать, то конечно никакой производительности не хватит. 48-мегагерцевый до уровня 16-мегагерцевой Меги опускаете таким макаром.
Надо учиться писать нормальный, компактный, быстрый и понятный код.
Остановка таймеров в пошаговой отладке задается в регистрах группы DBGMCU, причем, таймеры можно тормознуть прямо в пошаговой отладке, щелкнув бит остановки желаемого таймера.
Хотя в том и прелесть, что таймеры в остановленной отладке работают. Можно прямо на ходу выставлять нужные биты, задавать режимы - и все это без написания кода.
Последний раз редактировалось NewWriter; 23.10.2016 в 23:36.
|
|
|
|
24.10.2016, 00:07
|
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,128
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Сообщение от backlan
|
Для периодов шага
10, 50, 60, 200
выдаёт количество шагов
25, 9, 8, 3.
|
опять спл)))) нуну))) вот его кпд - 200/3 = 1,5%
__________________
кагмаподэ магмаподэ
|
|
|
|
24.10.2016, 13:40
|
|
|
Частый гость
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
SPL здесь чисто для теста. И если выставить LTO + O3, то код теоретически может получиться даже быстрее, чем при ручной записи в регистры, потому что здесь внутри функций регистры читаются в переменные, потом у них нужные биты меняются, и результат пишется обратно. А если писать в регистр вручную, то при каждой записи он сначала будет читаться из памяти, так как обозначен volatile.
|
|
|
|
24.10.2016, 14:31
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Понаписали, 4 страницы, когда достаточно одной строчки... Если так уж сильно надо считать импульсы, что выдаёт шим (оно имхо не надо, но хозяин-барин)
Один таймер сконфигурировать как тактируемый внешним сигналом и на его вход подать шим.
Просто и очевидно по вопросу автора.
Последний раз редактировалось Someone; 24.10.2016 в 14:36.
|
|
|
|
25.10.2016, 21:39
|
|
|
Частый гость
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Была идея сделать на событие счета посылку счетчика через dma + bit-band в регистр порта, но такая связка не работает, для побитового доступа нужен процессор. Но есть ещё один вариант, подключить dma на событие счета или обновления и у него задать режим инкремента адреса. Тогда указатель на буфер можно будет использовать в качестве счетчика импульсов. Но здесь ещё одна проблема, dma занимает шину памяти. Кто-нибудь пробовал одновременно запускать 5 каналов или хотя бы 3, процессор от этого не остановится?
|
|
|
|
25.10.2016, 22:18
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Сообщение от backlan
|
|
писать в регистр ... так как обозначен volatile.
|
Так ведь SPL работает через тот же самый CMSIS, а в нем все регистры МК помечены как _IO , и если проследить передефайны, то это самое _IO есть ни что иное как volatile.
Модификатор volatile же указывает компилятору, что при оптимизации не надо пытаться выбрасывать операции с этой переменной. Этот модификатор не определяет способ чтения, но он запрещает пропускать операции с переменной.
Сообщение от backlan
|
|
выставить LTO + O3, то код теоретически может получиться даже быстрее
|
Ничуть. Простое сравнение:
RCC-›APB1ENR |= RCC_APB1ENR_TIM3EN;
и
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
при одинаковом уровне оптимизации -O3 дают разницу 1 : 16 по размеру и 1 : 13 по времени исполнения - часть инструкций тратится на вызов функции, часть на выполнение функции и возврат из нее.
Сообщение от backlan
|
|
Кто-нибудь пробовал одновременно запускать 5 каналов или хотя бы 3, процессор от этого не остановится?
|
Запускал почти все каналы во все стороны, даже с FIFO, а на F030F4P6 вообще все каналы. И ничего - работал. По его внутренним правилам, DMA не может занимать шину более чем на половину времени. В крайнем случае, если не хватит - отвалится канал DMA с ошибкой доступа.
Что касается счета импульсов - и я, и Someone уже ж предлагали варианты.
В моем варианте - аппаратно отсчитывается, с ускорением-замедлением и остановкой.
|
|
|
|
25.10.2016, 22:42
|
|
|
Частый гость
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
А, ну это от мастерства компилятора зависит. Привык, что микрософтовский инлайнит даже то, что не просят, у него код получается такой, что лучше не напишешь.
Я же не спорю, что ваши варианты будут работать. Но если в мк всего 6 таймеров, то их хватит только на три оси с трудом. Попробую ещё пдп, если не взлетит, тогда сделаю каскады таймеров, а какие нельзя в каскад, для тех снаружи выводы соединю. Хочется ещё хоть один таймер на ШИМ шпинделя оставить.
Если пдп отвалится, он свой указатель инкрементирует? Остановится при этом? И вообще, такое бывает?
P.S. А в этом примере LTO включена?
Последний раз редактировалось backlan; 25.10.2016 в 22:45.
|
|
|
|
25.10.2016, 23:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Сообщение от backlan
|
|
выдачу импульсов и учет их числа
|
Шаговики обычно ставят там, где надо задавать количество шагов, а не считать их.
Сообщение от backlan
|
А мои тапочки уже уперлись в производительность .
контроллер ШД с режимом микрошага, 64 на шаг.
мотор 200 шагов/оборот
винт 1.25 мм на оборот
И чтобы ехать на скорости 100 мм/сек, надо выдавать 100 * 64 * 200/1.25 = 1024000 шагов/сек, и это только по одной оси. Хм, такую частоту даже кабель не вынесет, придется уменьшить до 8 микрошагов, но всё равно МК не потянет.
|
Вот даже и не знаю, смеяться или плакать...
На эту тираду возникло несколько наводящих вопросов:
1. Какова частота STEP с Вашего "велосипеда"?
2. Какова частота ШИМ драйвера приводов ШД?
3. Сколько шагов пропустит драйвер за один период ШИМ?
По теме пока достаточно.
Ну и пожалуй самый главный вопрос: Пацаны, вы по какому принципу себе такие "говорящие" ники выбираете?
индюка ещё как-то можно понять, хотя такие совпадения тоже не случайны.
Кто подсказывает или так, чисто по наитию?
Сообщение от backlan
|
|
А, ну это от мастерства компилятора зависит.
|
О!
Нормалёк...
|
|
|
|
26.10.2016, 00:28
|
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,128
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Сообщение от omercury
|
и пожалуй самый главный вопрос: Пацаны, вы по какому принципу себе такие "говорящие" ники выбираете?
индюка ещё как-то можно понять, хотя такие совпадения тоже не случайны.
Кто подсказывает или так, чисто по наитию?
|
не путайте причину и следствие. мне ник в школе еще дали. от фамилии.
__________________
кагмаподэ магмаподэ
|
|
|
|
26.10.2016, 00:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Аппаратный учет числа импульсов ШИМ
Сообщение от индюк
|
|
мне ник в школе еще дали. от фамилии.
|
А я думал студенты.
Хотел даже похвалить за наблюдательность.
P.S.
Школьные не в счёт, там как правило дальше фамилии/имени фантазия не идёт.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:43.
|
|