Из чего это следует? Вам известна площадь кристалла этого МК и нормы топологии? Совершенно пустое утверждение с Вашей стороны, отражающее лишь ВАШУ скупость. Уж извините великодушно...
Или лично мне слышать "лень читать/вникать" в листинг 12 штук машинных слов
Во первых, какие такие 12 машинных слов? В обсуждаемой портянке их СЕМЬДЕСЯТ (если я не сбился со счета). Во вторых, дело не в размерах портянки, а в ее ЧИТАБЕЛЬНОСТИ. Если применяются макросы, то приводят макросы вместе с кодом. Это по любому короче и понятнее. В третьих, нахрена мне разбирать портянку с неизвестным мне алгоритмом? Мне что, больше не на что убить время? Давайте я Вам приведу собственный фрагмент кода (а паче завершенную функцию) - посмотрим сколько Вы будете в ней разбираться, даже с комментариями... И это при том, что алгоритм реализованный в этой функции прост и понятен в математической интерпретации. Ваши потуги с освоением новых платформ МК натыкаются на УЖЕ ИМЕЮЩУЮСЯ безалаберность в кодописании. Вы хватаете инструменты архитектуры и применяете их совершенно рандомно, без желания понять для чего эти инструменты вообще были созданы. Почему они именно такие и никакие другие... В результате новая платформа становится дремучим лесом новых непонятных сущностей. А на самом деле, все сущности остались на своих местах, лишь их количество и внутреннее качество возросло.
И у меня на Pic18 & ICD-2 такая же хрень - отладчики и эмуляторы не работают, а в натуре - всё Ок. Но повторюсь - чья это жадность или тупость, моя или микрочипов ?
У меня такое ощущение, что Вы в слово "жадность" вкладываете какое то свое понятие... Аппаратная часть дебага - это структура ПОВЕРХ архитектуры МК. Если частота работы шин близка к предельной, блок отладки начинает сбоить. Особенно если учесть традиционную безалаберность в топологии шин ICSP от МК к отладчику и разные питания у отладчика и МК.
И второй момент - лично у меня спаяна/написана/чутка отлажена заготовка на Пик18Ф4431 которая вместо главного кварца использует LC контур с варикапом. А на основе второго кварца она измеряет и выводит на экран собственную тактовую частоту. Менять её самостоятельно и поддерживать заданной - не дописал, однако - в ходе тех экспериментов - верхний предел умножителя частоты х4 ~15.5 МГц в Пик-18Ф4431 был обозначен весьма явно на нескольких имеющихся у меня экземплярах при питании 5.05 вольта от близко расположенного вторичного стаба и нормальной керамики шунтирующей питание максимально близко к кристаллу.
Если не секрет, зачем вся эта шняга? Есть смутное подозрение, что Вы как то странно себе представляете работу цифровой петли регулирования... Бешеная разрядность, регулирование варикапом тактовой частоты МК...
Я выше ответил. Повторюсь в несколько более саркастичной форме, чтобы лучше дошло, наконец. Прошу не слишком обижаться. "Один дурак может написать то, что 100 мудрецов не поймут..." Я на сей раз был понятен, надеюсь?
Когда общение через монитор не в первый раз натыкается на различное толкование слов, и тем более когда видим прямое игнорирование написанного текста - То как можно "ответить", если есть сомнения что вопрос был прочитан именно тот и понят как ожидалось задавшим вопрос ?
Нет. Ибо слышать про "мудрецов" от форумчанина, игнорировавшего прямой вопрос про 12 слов и 24 бита и текста листинга из 9 строк - а потом рассказывающего что в 70+ строках ДРУГОГО листинга (где тот заданный вопрос не встречается и про который вопросы заданы не были) - не понятен алгоритм и каменты не те - ну, витиевато, согласен.
Из чего это следует? Вам известна площадь кристалла этого МК и нормы топологии? Совершенно пустое утверждение с Вашей стороны, отражающее лишь ВАШУ скупость.
Достаточно того, что известны цены и тактовые частоты одногодок Пик18F4431 в таком же корпусе. Более того - ICD-2 с 18F4550 работает на 48 МГц, а с 18F4431 - нет. И в этом свете - лично мне видятся именно искуственные препоны от микрочипов для проталкивания в рынок более новых процов с более сложной для программера системой команд. Влекущие за собой пятую колонну марионеток-бэйсикописателей, висящих на ниточках заокеанских регулярно обновляемых закрытых библиотек. Но например сознавал ли Иуда все последствия честно заработанных им 30 сребренников, или был лишь пешкой в высокой игре вечных антагонистов ?
Или лично мне слышать "лень читать/вникать" в листинг 12 штук машинных слов
Во первых, какие такие 12 машинных слов? В обсуждаемой портянке их СЕМЬДЕСЯТ (если я не сбился со счета).
Это особое умение - видеть вопрос там, где он не задан, и НЕ видеть его там, где он задан явно ? Ну так-то характеризует, согласен. Так вот же тот вопос, цитатирую второй разок, благо не сложно, спасибо движку форума:
Кстати есть тактический предметный вопрос по АСМ Пик-18. Как сделать короче используемую сейчас последовательность команд, вот кусок листинга:
Код:
000434 C117 F11A movff Angle_1,Angle_2 ; Младший 000438 C118 F11B movff Angle_1+1,Angle_2+1 ; 00043C C119 F11C movff Angle_1+2,Angle_2+2 ; Старший 000440 0E55 movlw low(0x555555) ; 000442 271A addwf Angle_2,F,BANKED ; А + В, результат В=B+A 000444 0E55 movlw high(0x555555) ; 000446 231B addwfc Angle_2+1,F,BANKED ; и сложим старшие байты - результат в В 000448 0E55 movlw upper(0x555555) ; 00044A 231C addwfc Angle_2+2,F,BANKED ; и сложим старшие байты - результат в В
Надо прибавить к источнику 24 бита константу (можно не константу-литерал а значение в ОЗУ) 24 бита и переслать это в приёмник 24 бита. Сейчас это 12 циклов как видно из листинга, можно сделать короче ? Источник портить нельзя.
И после этого были ответы, и после этого были рассуждалки, а потом мы внезапно 12 превратили в 72, ну в полночь, как тыкву, волшебство феи ?
Во вторых, дело не в размерах портянки, а в ее ЧИТАБЕЛЬНОСТИ. Если применяются макросы, то приводят макросы вместе с кодом. Это по любому короче и понятнее. В третьих, нахрена мне разбирать портянку с неизвестным мне алгоритмом? Мне что, больше не на что убить время?
Да ладно, и так всё заработало на Цлк/512 - шлифовано уже нормально. Более того - гадание на числовой гуще - сказало что Цлк/512 вычислитель - работает, но запасаса на остальное маловато. Цлк/640 - работает, но в одной из строк таблицы частот ШИМ частота биений маловата. В итоге - выбор пал на Цлк/768 как наиболее далёкую по частоте биений. И запаса на фон остаётся больше. И работает от встроенного 8 МГц RC гены - со снижением максимальной частоты синусоиды с ~килогерца до ~сотни герц. Так что - по листингу ~76 машинных слов - пока ОСТРОГО вопроса нет, спасибо за помощь. Как минимум именно потому, что разговаривать через монитор с не желающим читать - ну как с голубем в шахматы играть. А так-то да, именно тем, кто хочет блеснуть интеллектом и/или помочь укоротить те самые ~76 машинных слов хотя бы на 1 слово=цикл - просьба об оказании помощи в силе. А алгоритмы - ну они написаны в тех самых каментах, которых "много" и "они очевидны" но "не объясняют сути алгоритма". Ну или в коде в листинге. Цитатить/указывать могу/буду, но потом. Ну или абзац Подробное описание вычислителя фазного значения ШИМ как вариант.
Давайте я Вам приведу собственный фрагмент кода (а паче завершенную функцию) - посмотрим сколько Вы будете в ней разбираться, даже с комментариями...
Спасибо, рановато мне ещё такое. Тем более с учётом того, что комментарии - дело интимное. Особенно когда читающему листинг человеку кажется что они очевидны, но понять смысл вопроса инфы не достаточно .
И это при том, что алгоритм реализованный в этой функции прост и понятен в математической интерпретации.
Прикладная математика - не мой конёк, согласен. Но по алгоритмам на асме PDP-11 (~78 команд кстати) лично я успешно соперничал с более старшим товарищем с матфака в своё время. Далеко не последним на том матфаке по уровню головы.
натыкаются на УЖЕ ИМЕЮЩУЮСЯ безалаберность в кодописании.
Приятно видеть критику лично моего кодописания после жалоб на отсутствие исходного кода. Это такой например обоснованности выводов через сугубо последовательное логическое мышление ?
Ваши потуги с освоением новых платформ МК ... Вы хватаете инструменты архитектуры и применяете их совершенно рандомно, без желания понять для чего эти инструменты вообще были созданы. Почему они именно такие и никакие другие... В результате новая платформа становится дремучим лесом новых непонятных сущностей.
Откуда инфа что лично я начал осваивать Пик-24 ? Да, я создал прожект по вашим подсказкам, спасибо. Да, он скомпилился и мой страх перед сложностью инициализациеи таблицы указателей на прерывания - был не обоснован и с вашей помощью он развеян, спасибо. Но - осваивать - пока не начал. Ибо допилю вначале буратину на Пик-18 до исчерпания запаса плавучести. И ещё момент - шпаргалка 3 страницы по командам Пик-18 у лично меня до сих пор на столе когда я пишу код. И это за 10 годов писания на асме Пик-18 приступами пару/тройку раз в году. Боюсь даже представить - сколько времени уйдёт на привыкание к 300+ команд (шпаргалку 7 страниц распечатал и склепал и почитываю для зубрёжки) Пик-24/30.
Так же очевиден как и разница между 12 и 76 машинными словами в простыне вопроса, который не был задан ? Или так же очевиден как и разгадка на вопрос про глюки, которую лично я удалил из мессаги ? Ок, второй шанс - в чём причина глюков, какие есть предположения ?
И у меня на Pic18 & ICD-2 такая же хрень - отладчики и эмуляторы не работают, а в натуре - всё Ок. Но повторюсь - чья это жадность или тупость, моя или микрочипов ?
У меня такое ощущение, что Вы в слово "жадность" вкладываете какое то свое понятие...
Согласен, любопытно что это ощущение возникает именно на слове "жадность".
И второй момент - лично у меня спаяна/написана/чутка отлажена заготовка на Пик18Ф4431 которая вместо главного кварца использует LC контур с варикапом. А на основе второго кварца она измеряет и выводит на экран собственную тактовую частоту. Менять её самостоятельно и поддерживать заданной - не дописал, однако - в ходе тех экспериментов - верхний предел умножителя частоты х4 ~15.5 МГц в Пик-18Ф4431 был обозначен весьма явно на нескольких имеющихся у меня экземплярах при питании 5.05 вольта от близко расположенного вторичного стаба и нормальной керамики шунтирующей питание максимально близко к кристаллу.
Если не секрет, зачем вся эта шняга? Есть смутное подозрение, что Вы как то странно себе представляете работу цифровой петли регулирования... Бешенная разрядность, регулирование варикапом тактовой частоты МК...
Я не профи - какие у меня могут быть секреты ? Ответ был дан уже - бывают силовухи, работающие в резонансе. И частота резонанса могет плавать от внешних факторов (например внесения металла в индукционную печь). И плавать она могет сильно, но поддерживать её иногда надо точно. А степень совершенства цифровой петли регулирования в применении именно к той заготовке - поле не паханное пока что. Но запас по разгону Пик18Ф4431 был исследован чутка. Потому и без страха и упрёка был запаян более дешёвый гена 50 МГц в буратину частотника №2А - это однозначно меньше на ~1/4 чем она могёт объективно.
Последний раз редактировалось psw2.ru Вс янв 27, 2019 11:38:21, всего редактировалось 1 раз.
Я не профи - какие у меня могут быть секреты ? Ответ был дан уже - бывают силовухи, работающие в резонансе. И частота резонанса могет плавать от внешних факторов (например внесения металла в индукционную печь). И плавать она могет сильно, но поддерживать её иногда надо точно. А степень совершенства цифровой петли регулирования в применении именно к той заготовке - поле не паханное пока что. Но запас по разгону Пик18Ф4431 был исследован чутка. Потому и без страха и упрёка был запаян более дешёвый гена 50 МГц в буратину частотника №2А - это однозначно меньше на ~1/4 чем она могёт объективно.
Не буду комментировать остальное, скажу лишь, что ответ на 12 строк был мной дан ранее. И даже с вариантом. А то, что я обсуждал портянку из дизасма, Вы давно поняли. Иначе не упоминали бы про инлайн-макрос. Однако про частотник. Какой шаг перестройки частоты синуса? Нахрена нужно затевать всю эту перверзию с варикапом? Что, самый обычный программный DDS не катит? Сотня герц для DDS с накачкой в 50-100 кГц или около того - легко реализовать. ЗЫ. В догон. Выглядит странным, что человек когда то столкнувшийся с PDP-11 не может разделить код операции от адресной части в машинной инструкции при освоении новых платформ... Как же Вы писали для PDP-11 на асме? Там совершенно определенно в двухадресных инструкциях старшие три бита (восьмеричный ниббл) как раз и является кодом операции. А остальные - адресной частью. Например: 12737 - копирование константы следующей за инструкцией по адресу следующему за инструкцией. Сиречь, мнемоника ассемблера: mov<const>, [R7] Первый ниббл операнда в адресной части - тип адресации, второй ниббл - РОН через который происходит адресация. R7- счетчик команд.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
скажу лишь, что ответ на 12 строк был мной дан ранее. И даже с вариантом.
Прошу простить за слепоту и навязчивость, только что перечитал все ответы - но можно повторить якобы данный вариант из 3х циклов на байт вместо 4 в исходном листинге к вопросу ?
А то, что я обсуждал портянку из дизасма, Вы давно поняли. Иначе не упоминали бы про инлайн-макрос. Однако
Забавно, однако. Особенно про уверенность извне в том, что находится внутри лично моей головы. Листинг 12 машинных слов - это тоже 2 макроса, но лично я в погоне за урезанием не имеющего отношения к делу на мой взгляд - вырезал лишнее из листинга. А исходный текст на асме - выглядел так:
Код:
movff24 Angle_1,Angle_2 ; Готовим слагаемые Add24L Angle_2,BANKED,0x555555 ; Прибавляем опорный угол к смещению фазы +1/3 оборота А теперь он выглядит так: Add24L3 Angle_2,BANKED,Angle_1,BANKED,0x555555 ; D=B+A Прибавляем опорный угол к смещению фазы +1/3 оборота
И выполняется на 3 цикла быстрее, по 3 цикла на байт. Аргумент А могет быть константой-литералом или ОЗУ - будет всё-равно 3 цикла на байт.
про частотник. Частоту какую Вы генерируете в нагрузку (не частоту ШИМ, а частоту синуса управляющего ШИМом)? Какой диапазон и шаг ее перестройки?
Странный вектор вопросов, не пойму какое это имеет значение, но попробую ответить. Диапазон и шаг - настраиваются из меню на ходу единственным 8 бит задатчиком "максимальная частота". Соответственно - шаг частоты в выбранном диапазоне определяется выбранной максимальной частотой синуса, ибо минимальная всегда = 0. Максимальные частоты синусоиды - примерно от 25 до 1000 Гц выбираются, соответственно шаг единичного изменения частоты в выбранном диапазоне (задатчик скорости тоже 8 бит) - будет от 25/256=~0.1 до 1000/256=~4 герца.
Нахрена нужно затевать всю эту перверзию с варикапом? Что, самый обычный программный DDS не катит?
В частотнике и есть программный прямой цифровой синтез, как можно было заметить при чтении того абзаца "Подробное описание вычислителя фазного значения ШИМ", на который я уже давал сцыль выше и продублировал сейчас. Или при чтении каментов в простыне из ~76 слов=циклов. Могу продублировать для желающих помочь укоротить фазный вычислитель высокоуровневую абстрактную задачу - на входе адрес счётчика накопителя угла (из которого надо взять ~12 старших бит мгновенного угла синуса), адрес 16 бит буфера 12 бит беззнаковой амплитуды, начальный адрес таблицы синусов по 2 байта на отсчёт 2048 значений всего. На выходе - 10 или 11 или 12 или 13 или 14 бит (~4 октавы диапазон перестройки частоты ШИМ) значение в регистр длительности ШИМ (максимальное значение ШИМ/период меняется на ходу, связанные с этим коэффициенты находятся в ОЗУ и меняются вне этой задачи). Ограничение амплитуды сверху и снизу на ~1/10 тоже надо ибо полезно. Ограничители могут находится в ОЗУ или непосредственные - как быстрее. Решать задачу методом уменьшения разрядности представления данных - не разрешено. Но варикапное регулирование - не имеет отношения к частотнику. Оно имеет отношение к программному генератору двухтактного ШИМ (программная замена Tl494) для источника питания с частотой ШИМ 70-200 КГц и точной подстройкой частоты генератора - с точностью ~1/100.
ЗЫ. В догон. Выглядит странным, что человек когда то столкнувшийся с PDP-11 не может разделить код операции от адресной части в машинной инструкции при освоении новых платформ..
Не надо путать написание программ на макро асме и написание программ в машинных кодах. Но с макро асмом - лично я познакомился именно на RSX-11/PDP-11 она же СМ-ЭВМ номер не помню 256 кб ОЗУ/4 мб кастрюли/700К операций/сек размер ЦПУ ЭВМ кажется 3 шкафа как холодильник. И рядом ещё дисковые накопители как газовая плита с кастрюлями дисковых пакетов. И да, АЦПУ с "ромашкой" на рулоне. И где-то потерялись мои листинги программ на бэйсике и асме из тех времён. А вот систему кодировки команд PDP-11 само собой мы в факультативном порядке обсуждали, ибо как же без этого.
Вот так и писал - не думая. А в какой именно момент времени при написании программы на асме для PDP-11 - надо было знать куда именно в машинное слово пишется код операции, куда номер адресации операнда, а куда - номер РОН ? Я же не с консольного пульта команды для CPU руками в реальном времени топтал тумблерами для тестирования/отладки или для набивать загрузчик. Я как человек - в терминальном классе на 12 мест общался с компилятором асма/линкером ОС-РВ через 1200 бод интерфейс символьного терминала ввода/вывода. И сохранял мои файлы в директориях вида [2,200] например.
Там совершенно определенно в двухадресных инструкциях старшие три бита (восьмеричный ниббл) как раз и является кодом операции. А остальные - адресной частью. Например: 12737 - копирование константы следующей за инструкцией по адресу следующему за инструкцией.
Спасибо за ностальгию, лично я уже забыл что когда-то писал числа с префиксом О. Но RADIX-50 не забыл. Сведения об нюансах асма PDP-11 из лично моей головы удалились за давностью лет. Однако в команде - кроме КОП - были ещё по 6 бит на операнд (номер адресации и номер РОН). Итого на КОП остаётся 16-12=4 бита в двухадресных командах. А не 3, как написано выше. Но всё равно - спасибо за ностальгию.
Сиречь, мнемоника ассемблера: mov<const>, [R7] Первый ниббл операнда в адресной части - тип адресации, второй ниббл - РОН через который происходит адресация. R7- счетчик команд.
Да, те самые программные извороты ортогональной системы команд, когда все регистры и методы адресации равноправны с точки зрения простого АЛУ - это сказка, согласен. А не те самые сплошные исключения из ортогональности "для повышения плотности кода" (написанного на Си, не иначе), при "стоимости флеша ~0" (а зачем тогда повышать плотность кода, если выигрыш в бапках = 0, а программа на Си всё-равно и длиннее и медленнее ?).
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
В частотнике и есть программный прямой цифровой синтез, как можно было заметить при чтении того абзаца, на который я давал сцыль выше.
В DDS разрядность аккумулятора фазы определяется шагом частоты. Собственно если у Вас аккумумлятор фазы имеет 24 разряда, то синтез 1 синусоиды без регистра фазы даст всего одну сумму на цикл. С регистром фазы - две суммы. Трехфазный синус даст три суммы - ведущий синус и еще две фазы по 120 град. Предположим, генерирующий синус ШИМ имеет частоту 50 кГц, которую и есть смысл сделать частотой накачки DDS, обеспечив когерентность загрузки ШИМ со стартом очередного дьюти-цикла . Это дает примерно 50 точек синуса частотой 1 кГц. Если отвести на генерацию синус-ШИМа 20% производительности при штатных 10 МИПСах, то на все про все в прерывании таймера ШИМа нужно затратить не более 200 машинных циклов, включая латентность входа, сохранение-восстановление контекста и выход. Итого, чистыми на расчет фазы, выборку точки, загрузку PWM - примерно 180 машинных циклов. По моему, более чем достаточно. И не требуется никакой особой экономии.
ЗЫ. Векторное управление моментом двигателя (если нужно), по любому, на 18-м ПИКе не выйдет с обозначенными частотами синуса. ЗЗЫ. И по прежнему непонятна необходимость 24 разрядов. Такое разрешение по фазе не может быть реализовано в частотнике нагруженном на резонансный импеданс С ПОЛЬЗОЙ. Пустая трата ресурсов.
Оффоп. Я c PDP-11 работал в ее инкарнации "Электроника-60" и Электроника-81Б". Прямо в машинных кодах. Для управления матчастью БРЛС. и в технологических целях и в конечном изделии.
В частотнике и есть программный прямой цифровой синтез, как можно было заметить при чтении того абзаца, на который я давал сцыль выше.
В DDS разрядность аккумулятора фазы определяется шагом частоты.
Лично мне без радиотехнического образования - совершенно не понятно - как однозначно связан шаг (изменения ?) частоты и разрядность накопителя фазы. Можно подробнее ? Или это на поверку окажется как 3 бита КОП вместо 4 в двухоперандной команде PDP-11 ?
Собственно если у Вас аккумумлятор фазы имеет 24 разряда, то синтез 1 синусоиды без регистра фазы даст всего одну сумму на цикл. С регистром фазы - две суммы. Трехфазный синус даст три суммы - ведущий синус и еще две фазы по 120 град.
Это очевидно. Именно это и было "задачей про 3 цикла на байт" - суммирование. Но оно за рамками "задачи укорачивания ~76 циклов" фазного вычислителя. Однако - для (соблюдения доброй программерской традиции) избегания использования НЕ уникальных (в пределах контекста) идентификаторов - предлагаю заменить "цикл" на "оборот поля". Хотяб в контексте частотника.
Предположим, генерирующий синус ШИМ имеет частоту 50 кГц
Зачем предполагать ? Вполне достаточно по(д)глядеть - что в фабричных частотниках частота ШИМ - регулируемая величина. Иногда из достаточно широкого диапазона значений. И в моём случае - она меняется на 4 октавы на лету - от 1.5 до 23 КГц. Просто потому что 18F4431 генератор ШИМ позволяет именно 4 октавы без смены предделителей. Но ниже - плохо, писк и зарядка плавающего питания. Выше - тоже плохо, потери в силовухе. А оптимум - он зависит от конкретики и должен изменяться без перекомпиляции прожекта. Так что - в моём случае 18F4431 от гены 50 МГц - CLC/512 = это и есть 24 КГц максимальная частота ШИМ с точностью 10 бит. Либо 1.5 КГц с точностью 14 бит, либо ~20 штук значений частот между ними.
которую и есть смысл сделать частотой накачки DDS, обеспечив когерентность загрузки ШИМ со стартом очередного дьюти-цикла.
Синхронность ШИМ и вычислителя фазы - это хорошо, но у нас же не "однозадачный режим" и по камню на задачу ? Или мы именно для того мечтаем об новом более мощном проце - потому что ресурсы "старого" "научились/смогли" использовать на 1/10 ? Ну а "с помощью Си" - так и на все 9/10 пустых циклонопов ? Есть ещё прерывания АЦП. И есть ещё высокоприоритетные прерывания программного интерфейса 1-Ware с допустимым временем отклика ~5 мкСек. А приоритетов в Пик-18 всего 2. (И не надо рассказывать про вкусности Пик-24 - ибо там тоже всего 2 кажется теневых набора регистров). В итоге - лично мной после долгих экспериментов (история изменения версий даёт понять вкратце масштаб безумия) - была выбрана схема единого низкоприоритетного обработчика для АЦП и фазного вычислителя. Высокий приоритет - 1-ware и программное расширение Таймера-5 до 24 или 32 бит. В фоне интерфейс и прочие вычислительные задачи. Фазный вычислитель поначалу тоже был в фоне, потом я его перенёс в низкий приоритет. Но ради времени отклика фона - тяжёлые вещи типа БЦД преобразователя или делителя - были "попилены" для увеличения скорости отклика/равномерности загрузки фона.
Если отвести на генерацию синус-ШИМа 20% производительности при штатных 10 МИПСах
Это как конкретно, можно листинг кода ? Ведь мой (не сразу заданный) вопрос (про простыню из ~76 слов=циклов) - был именно в этом, согласен. Помогите лично мне укоротить этот код за искреннюю благодарность.
то на все про все в прерывании таймера ШИМа нужно затратить не более 200 машинных циклов, включая латентность входа, сохранение-восстановление контекста и выход. Итого, чистыми на расчет фазы, выборку точки, загрузку PWM - примерно 180 машинных циклов. По моему, более чем достаточно.
По моему - лишь сохранение/восстановление контекста - это чуть более 20 циклов, вот исходник - помочь посчитать ? Спойлер
Код:
LowInt: ;Единственное - АЦП, длинное и непредсказуемое IntAdc: ; Вобрало в себя АЦП, РТК и вращение счётчика PCPWM bcf PIR1,ADIF,ACCESS ; ADC Flag Clear максимально шустро ; И добавятся вычислители фаз из MainLoop - пропусков вычислителей теперь станет меньше ; А с откликом главного цикла 1 КГц можно будет не сильно дробить вычисления ; 18 750 Гц movff WREG,WREG_TEMP ;save working register movff STATUS,STATUS_TEMP ;save STATUS register movff BSR,BSR_TEMP ;save BSR register
; movff FSR0L,FSR0L_Temp ;Пока не используется ; movff FSR0H,FSR0H_Temp ;Пока не используется movff TBLPTRL,TBLPTRL_Temp ; movff TBLPTRH,TBLPTRH_Temp ; ; movff TBLPTRU,TBLPTRU_Temp ;Пока не используется ; movff EECON1,EECON1_Temp ; Проверяю Глюку с сохранением movff TABLAT,TABLAT_Temp ; movff PRODH,PRODH_Temp ; movff PRODL,PRODL_Temp ;
AdcIntNest ; Повторная обработка без потерь времени на сохранение контекста ; примерно 1 МИПС уходит на сохранение/восстановление контекста с частотой 18 750 Гц. ; Однако 2 МИПСа мы получаем от "разгона" до 12 МГц, надо тестировать 16 МГц.
У лично меня после ОСОБОЙ экономии - ну примерно так и выходит. Чутка подлиннее. Ибо накопление и пересылка в фон буферов АЦП тоже кушают циклы, счётчики времени тоже. А более в том единственном обработчике низко приоритетного прерывания - ничего и нет. Как видно из кода выше и вполне можно поглядеть в версии прожекта из частотника №2. Ну если не лень конечно читать чужие простыни листингов, согласен. Но что-то лично мне подсказывает - что не видать этому коду внешнего аудита.
ЗЗЫ. И по прежнему непонятна необходимость 24 разрядов.
Инерция - все просто. Именно потому что 256 не делится на 3 без остатка. И на 5 не делится и на 7 тоже. Так что ошибку округления - надо засунуть поглубже, благо разрядность накопителя фазы не так дорого стоит.
Ну если заранее полагать - что "пустое всё что не моё" - то согласен. Но какое это имеет отношение к просьбе (абстрактной) задачи укоротить код фазного вычислителя ?
Лично мне без радиотехнического образования - совершенно не понятно - как однозначно связан шаг (изменения ?) частоты и разрядность накопителя фазы. Можно подробнее ? Или это на поверку окажется как 3 бита КОП вместо 4 в двухоперандной команде PDP-11 ?
На поверку, уважаемый, совершенно безразлично сколько разрядов имеет КОП в DEC. Разговор был СОВЕРШЕННО О ДРУГОМ. Не стоит переводить стрелки на всякую несущественную подробность. О шаге частоты. Мне совершенно непонятен Ваш вопрос в контексте применения Вами программного DDS... А Вы собственно как считаете код частоты? Теория DDS говорит нам о том, что выходная частота синтезируемого сигнала равна произведению кода частоты и отношения частоты накачки к 2 в степени разрядности аккумулятора фазы. (Fdds=[code]*fmclk/2^N) Из чего очевидно следует, что дискретность частоты как раз и равна последнему отношению. Например, при частоте накачки DDS 65,536 кГц и 16-ти разрядном аккумуляторе фазы, разрешение по частоте (шаг частоты) составит в аккурат 1 Гц. Таким образом, мне совершенно непонятно зачем нужно изменять частоту ШИМ и отказываться от когерентной загрузки точек синусоиды в PWM. Контекст действительно получается поболее 20 инструкций. Но можно отдать на загрузку поболее 20%. Опять же выглядит странной Ваша телега впереди лошади - я имею ввиду высший приоритет 1Wire в системе, где все должно работать на выходной сигнал. Вы в курсе, что 1Wire отлично реализуется хардварно на практически любом интерфейсе от UART и SPI до PWM? То есть он может быть сформирован без блокирующих процедур и с низшим приоритетом.
Добавлено after 20 minutes 15 seconds: ЗЫ. А вот и ответ на мой вопрос относительно Вашего "DDS":
ЗЗЫ. И по прежнему непонятна необходимость 24 разрядов.
Инерция - все просто. Именно потому что 256 не делится на 3 без остатка. И на 5 не делится и на 7 тоже. Так что ошибку округления - надо засунуть поглубже, благо разрядность накопителя фазы не так дорого стоит.
На поверку, уважаемый, совершенно безразлично сколько разрядов имеет КОП в DEC. Разговор был СОВЕРШЕННО О ДРУГОМ. Не стоит переводить стрелки на всякую несущественную подробность.
Если инфа от собеседника содержит несущественные но НЕ точные сведения - то это как раз повод её проверять и обдумывать тщательнее, что лично я и делаю.
О шаге частоты. Мне совершенно непонятен Ваш вопрос в контексте применения Вами программного DDS... А Вы собственно как считаете код частоты?
А что такое "код частоты" и чем он отличается от "кода Хэмминга" или "манчестерского кода " на худой конец ? Хватит уже радиотехнического сленга, я же не выпускник радиофака. И повторю просьбу - не надо использовать НЕ уникальные идентификаторы ("код" в данном случае) в пределах контекста. Мы же об программировании ? А там "код" - это текст проги, например. А если "код частоты" - это величина приращения накопителя угла - то считаю её я на бэйсике, двумя способами. СпойлерДля пояснений есть абзац Преобразование 8 бит индекса скорости в 24 бита приращение накопителя угла поля., но мы же не читаем ссылок ? Например первый способ:
'1613*255 Count *18750 Hz/16 777 216 Count =459 Hz ' Const MaxData=5000,MaxUlong=4294967293'18446744073709551613 'Const MaxRPM=100000 ' Rev Per Minutes dim shared TestData(MaxData) As ULongInt dim As Integer I,J,K,i1,i2 Dim As Double MaxDelta,DeltaStep,MaxRPM,IntFreq Dim As Integer DeltaCur,DeltaOut Dim As String a, FileName Dim i3% : Input "Interrupt Freq, Hz:";IntFreq Input "Maximum RPM:";MaxRPM 'Input "Interrupt Freq:";MaxRPM MaxDelta=16777216/IntFreq Print MaxDelta,IntFreq', ' MaxDelta=MaxDelta*MaxRPM/(60*255) ' 'MaxDelta=MaxDelta/60 'MaxDelta=MaxDelta/18750 'MaxDelta=MaxDelta/255 DeltaStep=MaxDelta/256 ' FileName="c:\s2.inc" Open FileName for Output As 1 Print #1,"; MAX Delta=";MaxDelta;", Delta Step=";DeltaStep;", MAX RPM=";MaxRPM;", Interrupt Frequency=";IntFreq ' Print MaxDelta,DeltaStep', ' 'Input "MaxDelta,DeltaStep",a$ i=1:K=0 'Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"') ' Print #1,i i=2:K=1 ' Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"') 'Print #1,i I=3:K=1:i1=1:TestData(1)=2:' For i=3 to 10000000:' for j=1 to K:' i2= i mod TestData(j) if i2=0 then goto NextNumber' next j K=K+1:if K>MaxData goto EndTest TestData(K)=i:i3%=i3%+1' 'Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"') 'Print i, NextNumber: next i EndTest: Print K', ' 'Input "K",a$ For i=1 To 256 DeltaCur=i*DeltaStep For j=1 to K If TestData(j) > DeltaCur Then' if TestData(j)-DeltaCur <= DeltaCur - TestData(j-1) Then DeltaOut=TestData(j) Else DeltaOut=TestData(j-1) EndIf 'Print #1," db low(d'"; DeltaOut; "'), high(d'"; DeltaOut; "');"; i; "="; DeltaOut', upper(d'";i;"') a$=" db low(d'"+Trim$(Str$(DeltaOut)) a$=a$+"'), high(d'"+Trim$(Str$(DeltaOut)) a$=a$+"');"+Str$(i)+"="+Str$(DeltaOut) Print #1,a$ 'Print DeltaOut, GoTo NextStep EndIf Next j NextStep: Next i Print #1,";Simple256:;; Tab Simple first 0-255" For i=1 To 256 a$="; db low(d'"+Trim$(Str$(TestData(i))) a$=a$+"');" Print #1,a$; i; "="; TestData(i)', upper(d'";i;"') Next i Close #1 Print "Output data in ";FileName; input ", End Prog, Any Key 2 Exit",a$ end
И нужен ли второй, он тоже на бэйсике ? Но вернёмся к делу, согласен.
Теория DDS говорит нам о том, что выходная частота синтезируемого сигнала равна произведению кода частоты и отношения частоты накачки к 2 в степени разрядности аккумулятора фазы. (Fdds=[code]*fmclk/2^N)
Перечитал фразу выше несколько раз но в деталях не понял, хотя не понятных слов не встретил. Лично я НЕ проходил и НЕ читал никакую "теорию прямого числового синтеза частоты" - но с точки зрения программера и арифметики - согласен, частота переполнений накопителя фазы (она же частота оборотов поля синтезируемой синусоиды) - зависит от частоты прибавлений и от величины прибавляемого числа. И совершенно понятно что если прибавлять 1 к накопителю фазы с частотой F - то переполнение/оборот поля будет с частотой в 2^(N=разрядность накопителя фазы) реже. А если прибавлять с частотой F число 2^N - то переполнения будут происходить каждое прибавление. А всё остальное - (это лично моё допущение необоснованное) - где-то посередине. Иными словами - симулятор вращения (накопитель фазы) - он реализует деление с остатком (или умножение с избытком) через вычитание (или сложение) N раз M штук. Но за счёт замкнутой модели бесконечности (в двоичном накопителе фазы) - остаток переносится в следующий оборот и происходит плавная симуляция вращения. И если это записать математическими символами - то выходная F = F(прибавлений или вычитаний)*(прибавляемое или отнимаемое число)/2^(разрядность накопителя). И это в том числе написано в AD9833 стр. 12, но мы же не читаем портянок и сцылей, но засыпаем мой мозг "несущественными деталями" ? Тогда согласен - это совпадает с формой "(Fdds=[code]*fmclk/2^N)". С пятого прочтения и воспоминаний до лично меня дошло, спасибо.
Из чего очевидно следует, что дискретность частоты как раз и равна последнему отношению.
Пусть так, и что ? Эта "дискретность частоты" - она определяет вес младшего разряда приращения накопителя угла, но не "шаг частоты задатчика частотника", об котором лично я ответил выше.
Например, при частоте накачки DDS 65,536 кГц и 16-ти разрядном аккумуляторе фазы, разрешение по частоте (шаг частоты) составит в аккурат 1 Гц.
И что это нам даёт - что шаг частоты получился такой "ровный" и таблица синусов "на верхах" будет вырождаться в 2 или 4 или 8 значений с соответствующей вибрацией двигла ? Более того - предложенная к оптимизации "портянка из ~76 команд" - она абстрагирована от накопителя угла фазы - она не ведает его длинну. Ей на входе нужна разрядность таблицы синуса и не более. А сколько там в накопителе фазном разрядность - ну не пофик ли ей ? Более того - в том самом даташите на DDS AD9833 - накопитель фазы тоже длиннее чем таблица синусов более чем вдвое (12 бит и 28 бит примерно). Что на этот счёт говорит "Теория DDS" ? Наверное рассказывает про какую-либо "спектральную плотность шума" или подобные слышимые на слух вещи ?
Таким образом, мне совершенно непонятно зачем нужно изменять частоту ШИМ и отказываться от когерентной загрузки точек синусоиды в PWM.
Опять каша какая-то либо в моём понимании либо в изложении. Изохронное изменение накопителя угла на указанное приращение - это отдельный кусочек маленький проги, исполняемый с какой-то частотой. Фазный вычислитель скважности ШИМ - это другой кусочек проги, не обязательно синхронный изменениям накопителя угла. Хотя сейчас их частота одинакова (меняется через перекомпиляцию прожекта). А сама ШИМ генерация - это вообще аппаратный модуль с регистрами периода и длительности. Который вообще тупо генерит согласно схеме (ну генераторы защитных интервалов привносят чутка, как оказалось). А частота ШИМ - это компромисс в силовухе - уже говорил и повторюсь. И эта частота если будет опорной для синтезатора - то каша будет сложная для лично меня. Так что лично я довольно быстро от этого (привязки к частоте ШИМ) ушёл, как видно из "описания изменений", которые опять никто не читал.
Контекст действительно получается поболее 20 инструкций. Но можно отдать на загрузку поболее 20%.
Что значит "отдать" ? Прерывание фазных вычислителей и обработки АЦП - берёт столько, сколько берёт (а берёт оно сейчас примерно половину). Над ним - только сверх короткие, под ним - фон на остаточном принципе. Никакого квантования времени с вытесняющей многозадачностью - нет. Никто никому ничего не выделяет жёстко. Лишь изохронность (от источника времени, который сейчас автомат АЦП), но джиттер нарастает от начала к концу длинного обработчика прерывания. Но в частотнике это вроде на слух не заметно.
Опять же выглядит странной Ваша телега впереди лошади - я имею ввиду высший приоритет 1Wire в системе, где все должно работать на выходной сигнал. Вы в курсе, что 1Wire отлично реализуется хардварно на практически любом интерфейсе от UART и SPI до PWM? То есть он может быть сформирован без блокирующих процедур и с низшим приоритетом.
Ну когда лично я писал 1-Ware для самообучения - я мало читал интернеты, больше думал. Так что - это плод отдельных изысканий несколько лет назад. У меня сделано так. Зато я могу под 1-варе любую двунаправленную ногу отдавать, что иногда полезно.
ЗЗЫ. И по прежнему непонятна необходимость 24 разрядов.
Инерция - все просто. Именно потому что 256 не делится на 3 без остатка. И на 5 не делится и на 7 тоже. Так что ошибку округления - надо засунуть поглубже, благо разрядность накопителя фазы не так дорого стоит.
Это прикольно видеть - как лично мне со смайликами показывают даташиты на аналог девайс модули, на похожие которым лично я указывал ранее и в описании и в объяснялках. И почему у меня "DDS" а не DDS ? Потому что смайлики или в чём прикол ? Или именно потому что инженеры Аналог тоже накопитель угла сделали 28 бит а ПЗУ синуса входной угол 12 бит ? Или ещё почему ?
И что это нам даёт - что шаг частоты получился такой "ровный" и таблица синусов "на верхах" будет вырождаться в 2 или 4 или 8 значений с соответствующей вибрацией двигла ? ........ Или именно потому что инженеры Аналог тоже накопитель угла сделали 28 бит а ПЗУ синуса входной угол 12 бит ? Или ещё почему ?
28 разрядов накопителя фазы сделаны ровно для того, чтобы получить ВЫСОКОЕ РАЗРЕШЕНИЕ ПО ЧАСТОТЕ (малый шаг частоты). А смысла использовать их в ПЗУ синуса, если сам синус 10 разрядов, бестолково заполняя оное ПЗУ одинаковыми значениями, нет никакого. Разрядность по выходу и разрядность по входу не могут сильно отличаться. В районе самого быстрого изменения синуса соотношение разрядностей 12 к 10 является оптимальным (и даже немного избыточным по отношению к входной разрядности - в теории в 3,14 раз при реализованных 4, что естественно). Если Вы помните, производная в районе перехода через ноль равна амплитуде за радиан... Ровный получится "шаг" или неровный - для спектра это все лежит на уровне -60 дБ. И связано не с кратностью, а с самими ступеньками преобразования. Огибающая спектра представляется функцией Sin(x)/x. С точки зрения спектра направление преобразования не имеет значения. Патамушта комплексное преобразование Фурье симметрично. Более двух отсчетов за период полностью восстанавливают синус. И не имеет значения кратность. Каждая точка отсчета принадлежит синусоиде. В каком месте должна быть вибрация? С какого перепуга? О чем вообще можно говорить, когда в Вашей задаче речь идет о 50 точках на период и более. Уровень гармоник и их частотный спектр будут просто смешными для разговоров о "вибрациях". У Вас двигатель может "вибрировать" на частоте 49 кГц?
Однако, с точки зрения самого ЦАПа, коим является ШИМ, искажений синуса будет меньше, если этот самый ШИМ будет симметричен относительно выборок. То есть на каждый отсчет будет одинаковое количество периодов ШИМа и каждый период будет центрально-взвешенным. Особенно когда это количество периодов мало. Поэтому и алгоритмически и с точки зрения спектра когерентность загрузки и отсчетов DDS является несомненным благом. А что касается 20%, то речь шла о ПРИКИДОЧНОМ РАСЧЕТЕ ресурсов, отъедаемых DDS. Сколько времени потребует расчет и загрузка в интеррапте таймера ШИМ, столько по отношению к периоду ШИМ он и оттяпает от остальных задач. Остальное, включая 1Wire, я уже объяснил ранее. Нравится класть болт на выходной сигнал для свободного ремапа 1Wire - это Ваш выбор.... Однако он мне представляется еще более странным, чем игры с ДИП40 или ПИК18 в задачах, где это неуместно. Продолжайте пилить гирю, Шура!
А где опять повод для смайликов ? Гиря уже допилена, долго и с интересом. Сейчас - шлифовка и совершенствование, которые бесконечны. Даже у Билли Гейца с его Виндой и армией программеров. Но - есть вопросы, как обычно.
Более двух отсчетов за период полностью восстанавливают синус. И не имеет значения кратность. Каждая точка отсчета принадлежит синусоиде. В каком месте должна быть вибрация? С какого перепуга?
возникает стойкое ощущение, что эти даташиты на ИС прямого числового синтеза - лично я их читал внимательнее. Битов эдак на 5.
О чем вообще можно говорить, когда в Вашей задаче речь идет о 50 точках на период и более. Уровень гармоник и их частотный спектр будут просто смешными для разговоров о "вибрациях". У Вас двигатель может "вибрировать" на частоте 49 кГц?
И опять смайлики - над собой ? Или демон кроется в деталях, которые важны лишь для меня, а с точки зрения программера в машинных кодах - что 3 что 4 бита / что 3 что 4 цикла - "не важно и разговор не об этом" ?
, искажений синуса будет меньше, если этот самый ШИМ будет симметричен относительно выборок. То есть на каждый отсчет будет одинаковое количество периодов ШИМа и каждый период будет центрально-взвешенным. Особенно когда это количество периодов мало.
И это - согласен, хорошо, но в 18Fxx31 только один общий для всех ШИМ таймер. А фазы у нас 3 или 4. И как сделать ШИМ "симметричным относительно выборок" если фазы сдвинуты а таймер лишь один ? Или даташит опять не дочитался ? Или опять будет реклама 16 бит семейства, у которых я вроде встречал индивидуальные таймеры для каждого генератора ШИМ ? И более важное - какой именно выигрыш будет от такого усложнения схемы, если наше ухо один хрен выше 15 КГц слышит плохо ?
Алгоритмически - любопытно слушать человека, который поможет укоротить те самые 76 циклов абстрактной задачи. Ну или для начала 12 циклов сделать за 9 хотяб. Вместо загрузки мозга выискиванием и фильтрацией косяков "не существенной" информации. Которая на поверку оказывается не всегда полезной.
А что касается 20%, то речь шла о ПРИКИДОЧНОМ РАСЧЕТЕ ресурсов, отъедаемых DDS.
Это такой метод стёба - "ПРИКИДОЧНОМ РАСЧЕТ" ? С учётом того, что алгоритм до конца ещё НЕ утверждён, и в нём только 3 суммы и сохранение контекста, и ошибки учёта циклов и там и тут, и экономить не умеем, а потому и не желаем, ибо есть камни помощнее ?
Остальное, включая 1Wire, я уже объяснил ранее. Нравится класть болт на выходной сигнал для свободного ремапа 1Wire - это Ваш выбор....
А откуда следует, что включение/отключение 1-варе с парой датчиков - как-то заметно уху влияет на шумы мотора ? Или это очередное "мнение-объяснение", основанное на "ПРИКИДОЧНОМ РАСЧЕТЕ", в каждом шаге которого - "несущественная" ошибка ? Мне надо смайликов накидать гору типа фэйспалм или оно лишнее ?
инженеры Аналог тоже накопитель угла сделали 28 бит а ПЗУ синуса входной угол 12 бит ? Или ещё почему ?
А смысла использовать их в ПЗУ синуса, если сам синус 10 разрядов, бестолково заполняя оное ПЗУ одинаковыми значениями, нет никакого. Разрядность по выходу и разрядность по входу не могут сильно отличаться. В районе самого быстрого изменения синуса соотношение разрядностей 12 к 10 является оптимальным (и даже немного избыточным по отношению к входной разрядности - в теории в 3,14 раз при реализованных 4, что естественно). Если Вы помните, производная в районе перехода через ноль равна амплитуде за радиан...
А вот за эти сведения - искреннее спасибо от лично меня. Ибо когда лично я самостоятельно изобретал программный велосипед прямого численного синтезатора периодических табличных функций (это было до прочтения даташитов DDS микрух и статеек википедии) - вдаваться в математические абстракции и выводы из преобразования формул - как-то не дошли руки. И чтоб не напрягать мои мозги погружением в радианы 3.14 - вопрос - кто ближе к теоретическому идеалу - выбранная AD разрядность таблицы синусов 12 бит адреса/10 бит данных - или случайно получившаяся у меня в ходе реализации 12 бит вычислителя - 11 бит адрес и 12 бит данные синус ? Этот 1 бит информации нужен лишь для информации - переделывать всё-равно ничего не буду, ибо экономия быстродействия главнее. Но любопытно - у кого красивее синус, ну чисто теоретически ?
Ровный получится "шаг" или неровный - для спектра это все лежит на уровне -60 дБ.
Децибелы мощности и децибелы напряжения - это очень разные децибелы, согласен. А если 60 дБ по мощности = 1000 раз, то киловатты частотника дадут ватты гармоник в двигле. Что даже с учётом КПД магнитострикции или как ещё там двигло "поёт" - будет всё-равно и слышно и на нервы действовать.
И связано не с кратностью, а с самими ступеньками преобразования. Огибающая спектра представляется функцией Sin(x)/x. С точки зрения спектра направление преобразования не имеет значения. Патамушта комплексное преобразование Фурье симметрично.
А это - вообще лично мне не понятно, но объяснять не надо - рано это ещё лично мне. Но есть ещё вопрос, вынужден его повторить:
И это - согласен, хорошо, но в 18Fxx31 только один общий для всех ШИМ таймер. А фазы у нас 3 или 4. И как сделать ШИМ "симметричным относительно выборок" если фазы сдвинуты а таймер лишь один ? Или даташит опять не дочитался ?
Таймер не имеет никакого отношения к формированию собственно ШИМа, с тем лишь исключением, что у всех каналов присоединенных к этому таймеру будет одинаковая частота ШИМа. ШИМ формирует цифровой компаратор, а таймер просто наматывает круги. Какое это имеет отношение к сказанному мной относительно центровзвешенности и когерентности загрузки? Вместо фантазий про усложнение, изучите матчасть...
Цитата:
The PWM module has the following features: • Up to eight PWM I/O pins with four duty cycle generators. Pins can be paired to get a complete half-bridge control. • Up to 14-bit resolution, depending upon the PWM period. • “On-the-fly” PWM frequency changes. • Edge and Center-Aligned Output modes. • Single-Pulse Generation mode. • Programmable dead-time control between paired PWMs. • Interrupt support for asymmetrical updates in Center-Aligned mode. • Output override for Electrically Commutated Motor (ECM) operation; for example, BLDC. • Special Event Trigger comparator for scheduling other peripheral events. • PWM outputs disable feature sets PWM outputs to their inactive state when in Debug mode.
Алгоритмически - любопытно слушать человека, который поможет укоротить те самые 76 циклов абстрактной задачи. Ну или для начала 12 циклов сделать за 9 хотяб.
Это никакого отношения к алгоритму не имеет. Измените алгоритм и структуру программы - не потребуется тасовать из пустого в порожнее три команды.
Это такой метод стёба - "ПРИКИДОЧНОМ РАСЧЕТ" ? С учётом того, что алгоритм до конца ещё НЕ утверждён, и в нём только 3 суммы... бла-бла-бла
Вообще то сначала рассчитывают ресурсы задач, а лишь потом пишут алгоритм под ресурсы. А не наоборот. Это называется нисходящим программированием. От глобальных абстракций к частным.
А откуда следует, что включение/отключение 1-варе с парой датчиков - как-то заметно уху влияет на шумы мотора ?
Оттуда, что высший приоритет имеют задачи реального времени, а интерфейсы внешнего обмена не относятся к РВ. Никто не расставляет стулья в комнате в которой еще нет полов. А если и ставят, чтобы отдохнуть от ремонта, то не отодвигают для этого растворомешалку в дальний чулан.
кто ближе к теоретическому идеалу - выбранная AD разрядность таблицы синусов 12 бит адреса/10 бит данных - или случайно получившаяся у меня в ходе реализации 12 бит вычислителя - 11 бит адрес и 12 бит данные синус ? Этот 1 бит информации нужен лишь для информации - переделывать всё-равно ничего не буду, ибо экономия быстродействия главнее. Но любопытно - у кого красивее синус, ну чисто теоретически ?
У Вас вообще нет выбора. Ультразвук начинается от 20 кГц. При 40 МГц тактирования ШИМа при 10 разрядном ШИМе получится частота 39 кГц. При 11 разрядах - 19,5 кГц - уже может быть слышно или просто неприятно. Таким образом, входная разрядность никак не может быть 12. Только 10. Выходная - 8. Вот и весь расчет. У АД синус будет красивее, потому что накачка 16 или 25 МГц. Подавление ближайшей гармоники выше. И разрядность тут ничего не дает.
Децибелы мощности и децибелы напряжения - это очень разные децибелы, согласен. А если 60 дБ по мощности = 1000 раз, то киловатты частотника дадут ватты гармоник в двигле. Что даже с учётом КПД магнитострикции или как ещё там двигло "поёт" - будет всё-равно и слышно и на нервы действовать.
Ультразвук не слышен. Причем тут магнитострикция, если речь идет о примерно 40 кГц? А децибелы мощности и напряжения таки одни и те же. В смысле 60 дБ по напряжению на фиксированной нагрузке дадут те же самые 60 дБ по мощности. К слову, 60 дБ по мощности - это 1000000 раз...
И это - согласен, хорошо, но в 18Fxx31 только один общий для всех ШИМ таймер. А фазы у нас 3 или 4. И как сделать ШИМ "симметричным относительно выборок" если фазы сдвинуты а таймер лишь один ? Или даташит опять не дочитался ?
Таймер не имеет никакого отношения к формированию собственно ШИМа, с тем лишь исключением, что у всех каналов присоединенных к этому таймеру будет одинаковая частота ШИМа. ШИМ формирует цифровой компаратор, а таймер просто наматывает круги. Какое это имеет отношение к сказанному мной относительно центровзвешенности и когерентности загрузки?
Тогда лично я не понимаю термины/нить размышлений/заявлений про "центровзвешенность и когерентность загрузки". Центровзвешенность чего по отношению к чему ? Синхронность чего с чем ? Чем отличается синхронность от когерентности ?
Вместо фантазий про усложнение, изучите матчасть...
Цитата:
The PWM module has the following features:
Какую "матчасть" ? Именну ту, которую я описал в абзаце про ШИМ описания ? С картинками из даташитов дважды ? И которую использовал ? Как можно написать частотник, не читая описания PWM модуля ? Или это был очередной стёб - рассказывать лично мне про "изучите мат часть" того, что уже было лично мною сделано более года назад и опубликовано почти год назад ? Ну так-то да, фэйспалм не хватает, согласен.
Это никакого отношения к алгоритму не имеет. Измените алгоритм и структуру программы - не потребуется тасовать из пустого в порожнее три команды.
А как именно мне надо её изменить - сказать нет возможности ? Именно потому, что осознать как оно сделано сейчас - нет желания ковырять чужие простыни ? Я угадал всю глубину "прикидочного расчёта" ? Или недотянул ? Ах да, для глубины картины - 3 сложения в предложенном алгоритме, я помню. И да, страничку "ссылки" в той публикации - хотяб одним глазом заглянуть довелось ? Откуда следует - что если я даю ссылки на примеры микрочипа по частотникам, то я их не читал хотяб поверхностно ? Но при этом - картинки из этих описаний вставляю в своё описание частотника. Как это возможно без прочтения апноутов указанных ? Или опять собственную НЕ внимательность/НЕ желание читать - перекладываем на меня ? Забавно, согласен.
Это такой метод стёба - "ПРИКИДОЧНОМ РАСЧЕТ" ? С учётом того, что алгоритм до конца ещё НЕ утверждён, и в нём только 3 суммы... бла-бла-бла
Вообще то сначала рассчитывают ресурсы задач, а лишь потом пишут алгоритм под ресурсы. А не наоборот. Это называется нисходящим программированием. От глобальных абстракций к частным.
Вообще-то методов решения задач - чуть более одного. Более того - стройной сквозной всеохватной теории как решать задачи - не существует, как не существует ИИ. Ибо это во многом одно и то же. Можно было БЫ поглядеть на способы решения - если БЫ мне здесь предоставили код фазного вычислителя для осознания. Или хотя бы подробное описание алгоритма (какое есть в опубликованном мной коде и описаниях). Но - пока не предоставили. Или именно это мы называем "бла-бла-бла" ?
А откуда следует, что включение/отключение 1-варе с парой датчиков - как-то заметно уху влияет на шумы мотора ?
Оттуда, что высший приоритет имеют задачи реального времени, а интерфейсы внешнего обмена не относятся к РВ. Никто не расставляет стулья в комнате в которой еще нет полов. А если и ставят, чтобы отдохнуть от ремонта, то не отодвигают для этого растворомешалку в дальний чулан.
Опять теоретические попытки поспорить с прямым экспериментом ? А что главнее/первичнее - теория или эксперимент ? Особо когда мы не скорость света измеряем или массу протона например, а исследуем вот такую насквозь нелинейную систему как реализация частотника в дружественной многозадачности ?
кто ближе к теоретическому идеалу - выбранная AD разрядность таблицы синусов 12 бит адреса/10 бит данных - или случайно получившаяся у меня в ходе реализации 12 бит вычислителя - 11 бит адрес и 12 бит данные синус ? Этот 1 бит информации нужен лишь для информации - переделывать всё-равно ничего не буду, ибо экономия быстродействия главнее. Но любопытно - у кого красивее синус, ну чисто теоретически ?
У Вас вообще нет выбора. Ультразвук начинается от 20 кГц. При 40 МГц тактирования ШИМа при 10 разрядном ШИМе получится частота 39 кГц. При 11 разрядах - 19,5 кГц - уже может быть слышно или просто неприятно. Таким образом, входная разрядность никак не может быть 12. Только 10. Выходная - 8. Вот и весь расчет.
Вынужден повторить 2 вещи: 1. 14 бит счетчики времени многофазного ШИМа в 18Fxx31 питаются частотой не выше CLC/4 если верить даташиту. На практике при центрально-симметричном ШИМ питаются CLC/2 как показал реальный эксперимент НЕ в протеусе. 2. Выходы ШИМ подаются не в КТ315 или в 1531ЛА3, они подаются на драйверы IGBT ключей, для которых 1 микросекунда - это соизмеримо с минимальным полным временем изменения состояния ключа. И каждое изменение ключа - это потери/нагрев. В итоге - частота ШИМ ограничена сверху ~20 КГц, но на практике её делают ещё ниже, вплоть до 1 КГц. И конкретика компромисса выбора/регулирования частоты ШИМ - она определяется многими факторами, об которых при написании проги частотника нет информации. Как результат - частоту ШИМ проще подобрать экспериментально после присоединения к мозгам частотника конкретного двигла и конкретных транзисторов с драйверами.
Почему это "разрядность ничего не даёт ?" А что станет с разрядностью когда надо генерировать синус с амплитудой 1/16 например ? Или 1/128 ? И второй момент - быстродействие проги. Если 8 бит обоснованно маловато - то следующий (естественный/приспособленный к архитектуре) шаг - 12 бит, три тетрады, с учётом наличия команд тасования тетрад. Можно конечно и 10 бит адреса таблицы синусов маской выделять - никто не спорит. Но 12 бит лично мне удалось выделить из пары байт за 9 п.циклов, как видно из той "простыни ~76 п.циклов". Есть желание помочь укоротить хотя-бы на 1 п.цикл ? Я только спасибо скажу - повторюсь.
Децибелы мощности и децибелы напряжения - это очень разные децибелы, согласен. А если 60 дБ по мощности = 1000 раз, то киловатты частотника дадут ватты гармоник в двигле. Что даже с учётом КПД магнитострикции или как ещё там двигло "поёт" - будет всё-равно и слышно и на нервы действовать.
Ультразвук не слышен. Причем тут магнитострикция, если речь идет о примерно 40 кГц? А децибелы мощности и напряжения таки одни и те же. В смысле 60 дБ по напряжению на фиксированной нагрузке дадут те же самые 60 дБ по мощности. К слову, 60 дБ по мощности - это 1000000 раз...
За эту инфу - спасибо. Ибо "дециБелы" как единицу измерения отношений - лично я усвоил что 1 Белл = 1 десятичный порядок. Но потом кажется "Справочник телезрителя" Пясецкого внёс в мою юную голову кашу с мощностью/напряжением в применении дБ в контексте измерения КУ усилителей.
Отсылать меня к апноутам, которые я уже читал и не однократно - скажем так НЕ эффективно. А можно подробнее про "эллиптическое поле" своими словами ? Именно в контексте генерации синуса программным непосредственно-числовым синтезатором. Что именно там надо изменить в синусоидах, чтоб "поле" стало "эллиптическим" ? А до этого (без "векторного управления") оно было каким ? Круглым ?
Тогда лично я не понимаю термины/нить размышлений/заявлений про "центровзвешенность и когерентность загрузки". Центровзвешенность чего по отношению к чему ? Синхронность чего с чем ? Чем отличается синхронность от когерентности ?
1. Центровзвешенным называется ШИМ, у которого дьюти-цикл расположен по середине периода. То есть изменение ширины генерируемого импульса происходит ОТ ЦЕНТРА этого периода симметрично в разные стороны. 2. Когерентная загрузка ШИМа означает, что выборки синтезируемого сигнала загружаются синхронно с периодами ШИМ. То есть частоты ШИМ и накачки DDS равны или кратны с точностью до фазы. Проще говоря, каждый период (каждые два, три....) ШИМ происходит загрузка очередной точки синусоиды. В принципе, частота DDS может быть и асинхронна. Но тогда возникнут биения между ШИМ и частотой DDS в спектре генерируемого сигнала. 3. Синхронность и когерентность - полные синонимы.
Как можно написать частотник, не читая описания PWM модуля ? Или это был очередной стёб - рассказывать лично мне про "изучите мат часть" того, что уже было лично мною сделано более года назад и опубликовано почти год назад ?
Вообще то, это ВАШ проект, а не мой. Поэтому я не намерен изучать даташит конкретно на Вами используемый контроллер во всех подробностях. Я предлагаю помощь на основании своего собственно общего опыта и специальных знаний. Уверяю Вас, что это гораздо более продуктивный путь, нежели выдергивания отдельных сведений из оного даташита без всякого понимания смысла выдернутого. Такшта я даташит СМОТРЮ, прежде чем дать Вам ответ. Если Вы недоумеваете относительно центровзвешенности, то я вынужден давать цитату из даташита.
А как именно мне надо её изменить - сказать нет возможности ? Именно потому, что осознать как оно сделано сейчас - нет желания ковырять чужие простыни ? Я угадал всю глубину "прикидочного расчёта" ? Или недотянул ? Ах да, для глубины картины - 3 сложения в предложенном алгоритме, я помню.
Вы не предлагали НИКАКОГО алгоритма. Вы привели пару выдержек из кода. Причем тут алгоритм? Вы предлагаете мне вытягивать оный алгоритм из Ваших надерганных фрагментов? Увольте. Для того, чтобы посторонний человек стал разбираться с Вашими вопросами, нужно конспективно и понятно изложить СУТЬ ОБЩЕЙ ЗАДАЧИ, общего алгоритма, чтобы собеседник понимал КОНТЕКСТ в котором возник частный вопрос.
Более того - стройной сквозной всеохватной теории как решать задачи - не существует
Общей теории для любой задачи - нет. Общий метод решения ЛЮБЫХ задач - есть. От общего к частному. Конкретно для Вашей задачи общий алгоритм известен. Он единственный. И порядок команд для вычисления суммы или разности к нему отношения не имеет.
А что главнее/первичнее - теория или эксперимент ?
Безусловно теория. Эксперимент вторичен и призван ПРИ ПРАВИЛЬНОЙ ЕГО ПОДГОТОВКЕ подтвердить выдвинутую теорию или опровергнуть. Сам по себе эксперимент смысла не имеет и ничего доказать не может. Хотя бы потому, что чаще всего является нерепрезентативным частным случаем.
Вынужден повторить 2 вещи: 1. 14 бит счетчики времени многофазного ШИМа в 18Fxx31 питаются частотой не выше CLC/4 если верить даташиту. На практике при центрально-симметричном ШИМ питаются CLC/2 как показал реальный эксперимент НЕ в протеусе. 2. Выходы ШИМ подаются не в КТ315 или в 1531ЛА3, они подаются на драйверы IGBT ключей, для которых 1 микросекунда - это соизмеримо с минимальным полным временем изменения состояния ключа. И каждое изменение ключа - это потери/нагрев. В итоге - частота ШИМ ограничена сверху ~20 КГц, но на практике её делают ещё ниже, вплоть до 1 КГц. И конкретика компромисса выбора/регулирования частоты ШИМ - она определяется многими факторами, об которых при написании проги частотника нет информации. Как результат - частоту ШИМ проще подобрать экспериментально после присоединения к мозгам частотника конкретного двигла и конкретных транзисторов с драйверами.
Феерично: 1. Может у нас разные даташиты? Впрочем, возможно я не читал эррату.... Кстати, а что такое CLC? Частота осциллятора? Частота тактирования таймера в 4 раза ниже, чем разрешение PWM. Два бита делителя осциллятора используются при работе цифровых компараторов PWM. Это стандартная практика. 2. Когда я говорил про нисходящее программирования, я имел ввиду и нисходящую разработку схемы. Выбор быстродействия ключей и самих ключей по кошельку и доступности является САМЫМ ВЕРХНИМ уровнем абстракций. Если не считать покупку готового частотника. 3. Лично я использую IGBT от IXYS с рабочими частотами вплоть до 60 кГц. Рабочими, а не предельными. Примерно как этот. Откуда я могу знать про Ваши возможности и выбор?
А что станет с разрядностью когда надо генерировать синус с амплитудой 1/16 например ? Или 1/128 ?
Вас не смущает качество тихих звуков в фонограммах высококачественных записей? С чего Вы взяли, что динамический диапазон сигнала должен определяться при минимальной амплитуде этого сигнала? Вы сами выдвигаете странные теории и потом на основании них ставите вопросы...
Если 8 бит обоснованно маловато - то следующий (естественный/приспособленный к архитектуре) шаг - 12 бит
Разрядность аккумулятора фазы выбирают исходя из потребностей схемотехники и общего алгоритма, а не наличия или отсутствия возможности переставлять нибблы местами. А с точки зрения арифметики шаг выбора равен байту. После 8 следует 16 разрядов. 12 - частный случай 16.
А до этого (без "векторного управления") оно было каким ? Круглым ?
Не круглым, а круговым. Если честно, то при Вашем отношении к изучению материала выглядят сомнительными мои объяснения из области векторного представления сигналов... Пока воздержусь.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения