По мне можно ставить 7809 или 7812 , или вообще перемычку
Моторы не такое точное изделие чтоб доли вольта там ловить
|
|
По мне можно ставить 7809 или 7812 , или вообще перемычку
Тогда и допуски нужно указать. Оказаться от подстроечника - никогда не против. Но, если человек не попадает в коридор допусков со своей базой деталей используя подручное, то пусть имеет возможность поставить подстроечник. А нет проблем, резистор + перемычка.
Обычно я предлагаю решение. В данном случае, возможность выставить переменником значение напряжения требуемое конкретному мотору. Но, если это ни кому не нужно, то не вопрос - тут же форум и согласно большинству голосов... )
Да, это более современный подход. Вместе с моментом подмотки планировал в сервисной программе устанавливать некторые параметры для перемотки - скорость плавного разгона, максимальную скорость, скорость поиска/обзора, может что-то еще. Если все делать подстроечниками, то будет ужас.
Жалко, что так мало голосов.
Не всегда время на старых алгоритмах позволяет получить честное время, иногда видно что да же секунды скачут. Очень хочется сделать лучше. Теперь главной проблемой для меня оказался вывод данных - рваный в нужном знакоместе, а основная линейность счёта достаточна на всём протяжении. Пробовал программную фильтрацию МНК и только после 3-х полных оборотов одного подкассетника что-то стало становиться похожим на правду. И так ждать каждый раз после начала движения ленты - не вариант. Сейчас кажется понял с каким ведром заходить к этой корове. Но это позже и не думаю, что пока здесь и сейчас для реализации счёта доступно что-то кроме попугаев.
В старом КР его можно снять снять через оптрон PC817, а тут в МК назначить переменную "Direction" и работать с ней. Но энкодер на обоих подкассетника это намного интереснее, да и работает свегда.
Не хочется сильно усложнять алгоритм счетчика. Будет хорошо, если СРВ будет работать не хуже, чем у моего Technics RS-B965. Там он работает как в режиме рабочего хода, так и на перемотках. Длительность кассеты вводить не надо. Даже для такой нестандартной кассеты, как C46, погрешность на всей длине составляет всего 3 мин., что прекрасно. В основном нужны C90.
Оба датчика однозначно надо делать квадратурными, с двумя фотоприемниками. Кроме определения направления, это дает еще удвоение разрешающей способности.
По идее, джиттер сигнала с датчиков вращения тут будет больше, чем время реакции на прерывание, поэтому не обязательно использовать вход аппаратного захвата таймера. Можно обойтись просто прерыванием по изменению 4-х пинов, куда будут подаваться сигналы с датчиков.
Отладку обычно веду на макетках, для счетчика катушечника сделал модуль индикации, который подключаю к штырькам процессорной платы (что-то типа самодельной Arduino). А можно и мелкий OLED для вывода значений подключить.
В любом проекте есть ведущие специалисты и ведомые. Не у всех получается мыслить стратегически и определять вектор движения/развития.
Если есть на примете что-то конкретное, может быть поделитесь? Интересно посмотреть, почитать.
Иметь направление в момент начала счётного импульса лучше, чем от логики ЛПМ. Тут ни куда не денемся. Вопрос только как именно внедрить.
Просветление приходит с прогрессом. Я бился за линейность, но оказалось этого не достаточно. Получил коридор со стен которого соскребаются значения и выдаются на счётчик. Что б выйти на середину коридора нужно вводить усреднение которое занимает время, эта задержка счёта в текущем виде не нравится. Лучший результат получал при двойном усреднении данных. Придётся решать этот вопрос на корню и кажется знаю каким образом.
Задать основные "кривые" для нескольких кассет можно в EEPROM. Если нужен больший выбор, то не вопрос организовать загрузку вариантов длин кассет с внешнего источника данных. При получении точного расчёта можно уже и автовыбор нарисовать. Логически это легко.
Я на будущее, прикидывал что да как. Думаю, что время от начала альбома/первого трека, самая важная информация при прослушивании. А время остатка рабочей поверхности - важно при записи. Надо уметь определять место на ленте относительно начала (значение смещения можно корректировать, это не сложно) после набора данных от датчиков и их усреднения. Заранее знать длительность и тупым вычитанием будем знать столько осталось. Имея информацию по альбому (когда до этого руки дойдут) можно и по конкретной песне выводить время и поиск трека сделать по времени. Обнуление по сбросу (запомнив смещение), как метку для чего-то (дописка, возврат на метку после теста) сделать не вопрос, но надо ли? Помнить конкретное значение можно, указать время для перехода то же. Возврат в РВ после обнуления вообще просто - тупо обнуляем смещение запомненное при первом обнулении. Функционал дело наживное. Попугаи настолько отбили смысл в ведении счёта, что и функции на основе счётчика у "нас" не развивались, почти. По скольку задача в основном программная (датчики на подкассетники в любом случае вешать, пока надо на один), то можно себе позволить не торопиться загадывать... А потом хоть караоке!Liv писал(а): ↑02 янв 2023, 13:46Тут еще вопрос - что именно хотим от счетчика. В RS-B965 просто тикают секунды от какого-то начального значения. Не особо информативно. В своей TK-140 делал по-другому: там при включении воспроизведения всегда делается расчет времени от начала кассеты. На практике это оказалось очень удобным, всегда видно, в каком месте кассеты находимся. В какой-то деке встречал специальную кнопку для расчета абсолютного времени. Даже не знаю, на чем остановиться.
Думаю что количество лопастей на круг, не должно быть чем-то определяющем. От 2-х до 24 и более (программно можно поделить, уменьшить) СРВ должен уметь съесть и выкормить дисплей.
Теоретически да, не важно и при последнем наблюдении стало понятно. Пока надеялся на относительную стабильность вращения, думал рассчитывать коэффициент поправки в процентах от среднего арифметического длины всех импульсов, для каждого импульса свою персональную и держать в массиве. Вот и добивал точность замеров. Прирост на оборот сглаживался усреднением и уже усреднённые значения аргументов отношения, частично решали проблему. Но исходя из того, что нужно строить "коридор" (формулу) для определения текущего места, лучше всё же не портить себе данные лишним враньём. Два прерывания INT не жалко отдать (PCINT от нас ни куда не денется), для направления второй датчик того же подкассетника не нужно цеплять на прерывание. Просто поставить на вход, что б опросить в прерывании: "Как ты там? Типа куда смотришь?". Один 16-и битный таймер при этом то же зарезервирован для замеров. А вот дальше нужно чудить. Нужен ещё один для отсчёта миллисекунд, что б дать возможность выдать данные для формулы, а после выбирать длину ленты автоматически. Заумно, но это минимум и по другому пока не вижу. Дальше ещё хуже...
Прикольно. Чистенько. Аккуратненько.
Пока еще сам их только бегло просмотрел. Например: EP0091202A2, EP0216260B1, GB2039127A, KR950020677A, NL7909146A, US4044233, US4140896, US4239957, US4280159, US4292509, US4338645, US4352472, US4370684, US4398300, US4411008, US4423455, US4644436, US4866547, US5321463, US5323286, JPH01165057A, JP2540993B2. Патенты скачиваются с Google, на странице каждого патента есть список цитирования и список похожих документов, по этому дереву можно долго лазать.
Сейчас читаю основную ветку по "Вильмам", дошел до страницы 48. Сначала было скучно, особенно, когда про ремонты. Изредка попадались интересные факты и доработки. Иногда попадались заблуждения. Но под конец ветки стало жарко, когда стал обсуждаться счетчик. Словно фантастический сериал.
Т.е. основной режим работы счетчика - время от начала кассеты? Вопрос только, получится ли это точно определять на перемотке. При включении воспроизведения можно уточнять по другому алгоритму. Не страшно, если будет врать на редких кассетах, главное, чтобы хорошо работал на С-90.
Давайте не будем здесь озвучивать фантазии. Этого никогда не будет и это никому не надо. Задача - сделать более-менее вменяемый счетчик реального времени, как делали в конце 80-х в фирменных деках.
Обычно кнопка сброса есть. Может потребоваться отмерять время от начала записи где-то в середине кассеты. Можно по длительному удержанию кнопки сброса возвращаться в режим абсолютного времени. Но это действительно не принципиально, имея ядро СРВ, разные функции добавить не проблема.
Т.е. кнопка выбора типа кассеты все-таки нужна?
Количество лопастей может быть разным, это можно задать в виде константы в программе. Одна и та же прошивка не будет работать с разным количеством лопастей, разумеется.
INT ничем не отличается от PCINT в плане точности. Принципиально выше точность будет, если использовать не прерывание, а захват. Но я не думаю, что здесь это надо из-за высокого джиттера датчиков.
16-битный таймер работает все время, им можно отмерять все интервалы в тиках. Миллисекундные таймеры обычно используются только в интерфейсе пользователя, а не в расчетах. Они не точные, программные, основаны на системном таймере.
Пока практически ничего не делал для СРВ кассетника, играюсь с моделью. Сейчас надо создать файлы с набором параметров для нескольких разных кассет (хотя бы из наиболее распрстраненных) и посмотреть, какая погрешность получится. Модель не учитывает всякие неидеальности типа ракорда, но это я считаю мелочью, погрешность в десяток секунд устроит, а на редких кассетах - и до минут.

Это крайне плохо. Надо двигаться шаг за шагом. Для начала надо довести до конца хотя бы простейшую реализацию СРВ.
На данный момент это полный тупик. ЛПМ сделан так, что не позволяет просто и удобно разместить датчики. Крепить на задней плите не хотелось бы (но придется, наверное). Крепить в передней части ЛПМ не за что, еще пробема усугубляется тем, что есть разные варианты крепления ведущего двигателя, и что еще хуже, есть вариант с магнитами внутри ЛПМ. Нормальной конструкции датчиков пока нет.

Да, вариант крепления датчиков к задней плите очевидный и самый простой. Но неудобный - сложно делать регулировку положения датчика, ничего не видно. Но это самый реальный варант для данного ЛПМ.




Не думаю, что это хороший вариант. Лучше сделать конструкцию из нескольких печатных плат, которые будут спаяны между собой. Китайцы делают фрезеровку плат любой сложности, а в случае чего и вручную повторить можно. Использовать надо максимальный доступный радиус крыльчатки, поэтому отражательные оптроны лучше всего направить на торец барабана с рисками. Как сделать такой барабан из конденсатора, я показывал в этой ветке. Как некую демонстрацию возможности "лепки" из печатных плат могу привести фото датчика окончания ленты работы мастера Fagear:
Я бы ставил по два оптрона на каждом узле, датчики делал бы одинаковыми. Оптроны - самые распространенные SMD - ITR8307.
На катушечниках Ростов, Илеть, Союз и т.д. из 1-го класса - 18+18 полосок на обоих подкатушечниках. Больше 18 думаю не стоит делать.
Как один из вариантов я рассматривал сверление сквозных отверстий над шкивами подкассетников и расположение плат с обратной стороны задней плиты. С точки зрения настройки датчиков - удобно.
На барабане из конденсатора, что показывал здесь раньше, поместилось 10 полосок. Это близко к максимуму, мельче будет хуже. Для данной задачи сильно много не надо, все равно период измерять придется по целому обороту, чтобы избежать влияния погрешностей. А чтобы индикация не "хромала", надо будет придумать что-то типа цифровой PLL - счет идет сам собой, а данные с датчиков его только подстраивают. А может и хватит частоты обновления с датчиков. Особенно если сделать кольцевой буфер размером с количество лопастей и каждый раз брать данные для целого оборота для каждой лопасти.
Я планировал, что датчики будут смотреть на шкивы не сверху, а сбоку. Но это тоже возможно.

На общем кронштейне мотор был не по центру. А вообще надо рассмотреть 3 варианта - и для 102, где два маховика и мотор по центру. И второй подкассетник надо нарисовать, с ним будет еще хуже - тоже 3 варианта, с магнитами сбоку, с магнитами внутри, и с двумя маховиками.


Верно, все время наступаю на эти грабли. Там подмоточный мотор мешает.
Это самый простой вариант - нужно отзеркалить рисунок сверху. Магниты в 102,104, 204, 212, 312, Орбита 121 - снаружи. Магниты внутри - это В207, В207-1 и Санда 207, 207-1. Одновременно магниты внутри, и два маховика - нереально, конечно.
Оптроны должны стоять так, чтобы на выходе получались квадратурные сигналы, сдвинутые на 90 градусов (электрических). Полный период полосатой структуры - это 360 градусов (электрических). Т.е. Между оптронами угол 1/4 углового шага (механического) полос на крыльчатке. Если полос 5, то их шаг 72 градуса, между оптронами надо 18 градусов. Если 10 полос - то 9 градусов. Столь мало обеспечить трудно, поэтому можно добавлять сколько угодно раз 360 градусов (электрических), если полос 10, то это 36 градусов (механических).






Не вполне понимаю, почему восприятие очевидного вызывает такие сложности?

В догонку к прочим чертежам ...Именно формула привязывает рассчитанное значение от датчиков, как смещение в секундах от начала. Эти данные (время + отношение) снимались, переводились в формулу и МК обратно по ней определяет время.
Уже. Скорости хватает, за 1570 тактов вытаскивалась значение - это чисто, но ещё надо добавить накладные расходы. Да и в перемотке, если не будет успевать, то совсем не важно. Того, что успеет посчитать, хватит сориентироваться и принять решение.
До этого ещё не дошёл. Добивал одну конкретную длину на предмет точности и приемлемого вывода. Не проблемой будет связать конкретный профиль с его выбором конкретной кнопкой.
У меня не так. Прошивка вообще не спрашивает кол-во лопастей. На каком кол-ве лопастей записаны данные и соответственно построена формула, на таком же и вытаскивает время из неё обратно. Указывать кол-во лопастей пришлось уже при методах усреднения, задние размера кольцевого буфера. Вообще этот параметр не проблема изменить по USART, при настройке. Надо будет или нет, пока не очень понятно.
Если ни чего больше ресурсоёмкого не будет делается, то не важно. Нас интересует приоритет обработки.
В тиках можно, но когда дойдёт до автоопределения своей формулы из набора, то возложить на тот же таймер лишнюю функцию, добавляем себе ещё погрешности. Пока не ясно возможно ли будет реализовать автоопределение и как именно. Я ставил высшим приоритетом сделать замер максимально быстро, а не то "коридор" станет шире. Вычислить "где мы" и максимально точно, одна из важных задач.
Понятно. По этому ушел по другой тропинке...
Для прошлого твика Вильм-ы и счёта в попугаях, делал на просвет, но через пасик. В СРВ в ЛПМ Нака ZX9, лазерной резкой 24-х лопастные на просвет на самих подкассетниках.
Вот это поворот! Всё ставит с ног на голову. СРВ хорошо бы добить, но для меня это время и не малое. Месяца 1.5-2 потратил на усреднение по методу наименьших квадратов и то не всё хорошо. Новая идея есть, но надо тупо бросить всё, что б двигаться в этом направлении. А вот делать твик управления с возможностью последующего апгрейда до..., можно. И в разумные сроки получить что-то, что можно применить и использовать. Иначе получается сразу строим идеал, а к нему не особо готовы. СРВ лучше пока оставить до поры, но держать в уме для внедрения. Если получится, что альтернативное и удобоваримое, то хорошо - чуть разгружусь...
Вот тут нужны два разных метода. Опорный, по формуле определяет место и корректирует. Второй работает непосредственно с импульсами одного из подкассетников и учитывает поправку.
Делал. Всё равно пришлось ещё усреднять и этого оказалось мало. Метод надо другой...
Сложностей не вызывает. Идет поиск решения, которое можно повторить любому желающему. Вопрос кол-ва секторов на барабане все еще открыт. Например, частота вращения подающего узла на кассете С60 менее одного оборота в секунду в начале кассеты. Насколько будет критично 3-4 сектора? В В207 барабан состоит из 7 белых + 7 черных секторов. Почему бы не использовать это кол-во? Или есть основания использовать иное кол-во?
На левый подкассетник такая конструкция не помещается, если рассматривать все варианты расположения пассиков.
Увы, это не так, это слишком оптимистично. До 3-х секунд на 1 оборот по факту для разных типов кассет по метражу.
Оптроны на высоких ножках, установленные на опорах из Х-профиля, или на штырьках(под оптроном, для жесткости) пролезут. Масштабируйте габарит оптрона на чертеж и расположите их как это сделано у меня на чертеже и поместятся.

А зачем так спешить? Вывод значений на дисплей нет смысла делать чаще, чем оператор может их воспринимать. Максимум - раз в несколько десятков мс.
В AVR нет приоритетов прерываний, все делается вручную. Внутри менее важных прерываний можно разрешить другие прерывания, этим можно снизить их приоритет, чтобы не мешали.
Точно вычислить "где мы" - это главное, да. Но зачем это делать быстро? Оператор все равно не сумеет считать данные, если они будут быстро меняться.
Ничего не понял. А то, что тут делается, это не СРВ?
Расчёт происходит всегда по факту получение замера и в одной из версий, каждый замер участвовал в общем вкладе. Пропуск гарантировал уход коридора в сторону. До сих пор работало усреднение по набору данных. В данном случае выпадение полезных данных из ряда, однозначно скажутся на точности. Всё остальное считалось быстрее и выкладывалось в буфер для вывода. Когда оттуда происходит забор, не важно.
У меня другая информация. "Чем меньше адрес вектора прерывания, тем у него выше приоритет."
Разрешить SEI уже в прерывании? Можно будет проверить на досуге...
Название ветки вроде было "Твик управления деки VILMA 204-STEREO [2022]". Тут вообще хотел развеяться после напрягов по СРВ. А по самому СРВ ещё успеем поговорить и поделать. Хотя одно другому не мешает... развеяться наверное не судьба.
Да, так сказано в документации, но это не совсем верный термин. AVR не имеет приоритетов прерываний. То, что связано с адресом вектора, это последовательность обработки прерываний. А это другое. Т.е. если запросы поступили одновременно, первым будет обработано прерывание с меньшим адресом. Или если прерывания были запрещены, а за это время накопились запросы, то они тоже будут обработаны в порядке возрастания адреса. Но настоящие приоритеты работают по-другому: если во время выполнения обработчика одного прерывания появляется запрос более приоритетного, то обработчик прерывается и начинает выпоняться более приоритетный. У AVR такого нет, при входе в обрабочик все остальные прерывания автоматически запрещаются.
Да. Это "закат солнца вручную", ну то есть ручная реализация приоритетов. В компиляторе Си от IAR для этого есть даже ключевое слово __nested, которое разрешает вложенные прерывания. У меня в счетчике для катушечника выходы датчика вращения используют прерывание PCINT. Это прерывание я не хочу пропустить, поэтому надо сделать так, чтобы другие не мешали - для всех других добавляю это ключевое слово. Например, вот обработчик прерывания по захвату таймера, которое используется для замера скорости. Захват уже произошел аппаратно, взять данные из регистра можно с задержкой, поэтому я разрешаю для этого прерывания вложенные:
Код: Выделить всё
#pragma vector = TIMER1_CAPT_vect
__nested __interrupt void Capture_Handler(void)
{
bla-bla-bla...
}
Код: Выделить всё
465 #pragma vector = TIMER1_CAPT_vect
\ In segment CODE, align 2, keep-with-next
466 __nested __interrupt void Capture_Handler(void)
\ Capture_Handler:
467 {
\ 00000000 9478 SEI
\ 00000002 93FA ST -Y, R31
\ 00000004 93EA ST -Y, R30
...
А, в этом смысле. Но управление невозможно делать в отрыве от счетчика. У меня он будет "жить" в центральном процессоре, так как сильно многое на него завязано. А другие процессы ему мешать не должны, прерывание датчиков сделаем вручную более приоритетным.
Это понятно что очерёдность, приоритеты многозадачности в той же NT - это другое. Есть задача "выжать всё", знаем что делать, сделаем. Другой вопрос, что два прерывания от INT могут произойти одновременно, что не есть хорошо...Liv писал(а): ↑05 янв 2023, 23:21То, что связано с адресом вектора, это последовательность обработки прерываний. А это другое. Т.е. если запросы поступили одновременно, первым будет обработано прерывание с меньшим адресом. Или если прерывания были запрещены, а за это время накопились запросы, то они тоже будут обработаны в порядке возрастания адреса. Но настоящие приоритеты работают по-другому:...
Во! Важно понять в какой момент снова разрешить глобальные прерывания внутри другого прерывания!
Будут обработаны по очереди. Если оба критичны по времени, тогда плохо. Если критично одно, во втором можно разрешить вложенные.
Как можно скорей. Компилятор это делает первой командой обработчика. Эта команда добавляется в обработчки прерываний, которые хотим сделать приоритетом пониже. Всякое промедление увеличит latency для более приоритетного прерывания.
Знаком с такой ситуацией. Она возникает при измерении интервалов по захвату таймера, когда таймер дополнительно расширен дополнительной переменной. И тут есть подводный камень - переполнение таймера может произойти между чтением таймера и чтением флага переполнения. В таком случае инкремент не нужен. Надо дополнительно проверять считанное значение таймера, если оно близко к переполнению, то как раз эта ситуация. Или останавливать таймер перед чтением, но это не всегда допустимо. Тут можно, раз он потом обнуляется.DrLithium писал(а): ↑06 янв 2023, 01:46Добавлял в прерывание по INT, уже после фотографирования набежавшего в таймере, проверку переполнения таймера. В таймере делал инкремент третьего байта - это дополнительный, в два ни как - мало. Если флаг переполнения таймера взведён, то инкрементировал фото третьего байта и сбрасывал флаг прерывания таймера (теперь инкрементировать уже не зачем), после чего его обнулял. А не то в след. раз в замер могли попасть лишние 65536 тиков. Но это очень редко.