Alex-lab
-
Постов
558 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные Alex-lab
-
-
9 hours ago, Леонид К. said:
Объектное программирование я не стал осваивать
Оно не то, что бы сильно обязательное. Можете писать на процедурах.
-
Не совсем понятно, почему сами не напишите это на том же Делфи? Накидать кнопок на форму и TChart для графиков, в чем тут проблема? Данные с порта принимаете с помощью компонента BComport.
Давно бы уже сделали.
Сколько строк кода в вашей программе, для понимания глубины?
-
3 hours ago, ChristinaChadzynski said:
+Если допустимо снижение fрез,
Нет, не допустимо. Полоса пропускания жестко задана. Интересно увеличить наклон спада характеристики дБ/Дек. Но в целом картина понятна.
-
Я правильно понимаю, что если исходить из уже готовой конструкции дросселя, то просто добавлением конденсаторов к отводам ему уже не улучшить АЧХ?
-
Just now, x893 said:
А по описанию нет отличий
Да, вы правы, я перепутал с G серией.
-
11 hours ago, Xenia said:
ак допустима ли такая замена?
Буквально недавно с этим имел дело.
Без переделок на плату bluepill встают процессоры F303CBT6 (понятно и с другой памятью).
А под
F431G431(там гораздо выше рабочая частота), пришлось делать свою плату, правда без USB (мне не нужно). -
On 11/18/2023 at 2:42 PM, Aner said:
Не так и много 5A. Озвучить требования к такому фильтру можете?
Рабочая полоса до 7кГц, частота шим 100 кГц. Хочется пульсации меньше 1%. Сейчас около 5%.
10 minutes ago, Точка Опоры said:P.S. Результат связи катушек немного предсказуем (белая линия).
Спасибо, да, очень наглядно.
-
Фильтр этот силовой, на 5А. Не радио. Сейчас это просто LC фильтр. Хотелось улучшить его АЧХ, путем добавления конденсаторов к отводам. Места для других дросселей нет.
-
Доброго дня.
Появился вопрос, с которым не смог справиться. Моделирование тут тоже не помогло, ибо не получилось магнитно связать индукторы.
Возможно ли получить LC фильтр Баттерворта более высокого порядка, если индуктивности намотаны на одном сердечнике, с отводами? Может быть с какими-то ухудшеными характеристиками?
Благодарю за просвещение.
-
23 minutes ago, jcxz said:
Т.е. - даже в минус ушли???! Вы же писали, про 2.6мкс.
Пардон, 150 нс, конечно.
-
2 hours ago, Arlleex said:
Тут еще пару тактов:
if (!adc_d.b_diag_flag && !adc_d.b_inject && !adc_d.b_DontVoltage)
Да, этот блок я заменил на одну переменную, предварительно собирающую все эти значения в кучу в начале, т.к. используются они два раза.
7 minutes ago, jcxz said:Если уж хочется оптимизировать, то без включения головы и перетряхивания всего алгоритма - никак.
Мой изначальный вопрос был вообще не об оптимизации, а почему такие простые операции превращаются в такой долго исполнимый код.
-
3 hours ago, dimka76 said:
представить массивами, то размер вашей функции можно сократить на 136 байт. А следовательно,
и время выполнения еще сократится.
Сокращать размер нет нужды. Но подход интересный. По факту, обращение к массивам сильно снижает быстродействие.
2 hours ago, Arlleex said:u8_p может принимать только 1 и 2?
Еще 0 и 3, но для них ничего делать не надо.
1 hour ago, dOb said:Все флаги загоняю в одну переменную. типа Bit0, Bit1 и так далее.
Да, так и с делал. Чуток помогло выиграть, порядка 150
мкснс. -
2 hours ago, SVNKz said:
советую начать с изучения истории
За совет спасибо.
Понятно, частота выборок влияет на АЧХ, а на какой фундаментальны параметр (из книг) влияет разрешение, кроме самой точности задания выходных уровней, как оно переходит в динамику? В моих книгах этого не было.
-
В целом не особо разобравшись в причинах, убрал все volatile и сделал предзагрузку данных из массивов в переменные, и в целом уложился в требуемый интервал с 11 до 8.5 мкс.
-
1 hour ago, jcxz said:
Они что - volatile
Да, некоторые были volatile, убрал полностью, общее время сократилось с 2,6 до 2,15.
1 hour ago, Quasar said:А PLL ядра-то правильно настроена?
Да, таймер работает корректно.
25 minutes ago, firstvald said:а сишника не будет я так понял
Первый пост чем не устраивает?
-
1 hour ago, Vlad_G said:
Посмотрите что может HRTIM - например, может задать импульс посерёдь периода
С этим вопросов нет, я именно в контексте высокого разрешения. Выше @khach уже указал на резонансные преобразователи, как пример.
-
-
1 hour ago, EdgeAligned said:
Посмотрите ассемблерный листинг.
Не уверен, вроде оно? Команд действительно много...
Spoiler08000518 <countiu()>: 8000518: 4b46 ldr r3, [pc, #280] ; (8000634 <countiu()+0x11c>) 800051a: 781a ldrb r2, [r3, #0] 800051c: b510 push {r4, lr} 800051e: 2a00 cmp r2, #0 8000520: d036 beq.n 8000590 <countiu()+0x78> 8000522: 4c45 ldr r4, [pc, #276] ; (8000638 <countiu()+0x120>) 8000524: 7823 ldrb r3, [r4, #0] 8000526: 2b02 cmp r3, #2 8000528: d111 bne.n 800054e <countiu()+0x36> 800052a: 4a44 ldr r2, [pc, #272] ; (800063c <countiu()+0x124>) 800052c: 4b44 ldr r3, [pc, #272] ; (8000640 <countiu()+0x128>) 800052e: 6818 ldr r0, [r3, #0] 8000530: e9d2 3100 ldrd r3, r1, [r2] 8000534: 181b adds r3, r3, r0 8000536: eb41 71e0 adc.w r1, r1, r0, asr #31 800053a: e9c2 3100 strd r3, r1, [r2] 800053e: 4a41 ldr r2, [pc, #260] ; (8000644 <countiu()+0x12c>) 8000540: 6813 ldr r3, [r2, #0] 8000542: 3301 adds r3, #1 8000544: 6013 str r3, [r2, #0] 8000546: 4a40 ldr r2, [pc, #256] ; (8000648 <countiu()+0x130>) 8000548: 6813 ldr r3, [r2, #0] 800054a: 3301 adds r3, #1 800054c: 6013 str r3, [r2, #0] 800054e: 7823 ldrb r3, [r4, #0] 8000550: 2b01 cmp r3, #1 8000552: d111 bne.n 8000578 <countiu()+0x60> 8000554: 4a3d ldr r2, [pc, #244] ; (800064c <countiu()+0x134>) 8000556: 4b3a ldr r3, [pc, #232] ; (8000640 <countiu()+0x128>) 8000558: 6818 ldr r0, [r3, #0] 800055a: e9d2 3100 ldrd r3, r1, [r2] 800055e: 181b adds r3, r3, r0 8000560: eb41 71e0 adc.w r1, r1, r0, asr #31 8000564: e9c2 3100 strd r3, r1, [r2] 8000568: 4a39 ldr r2, [pc, #228] ; (8000650 <countiu()+0x138>) 800056a: 6813 ldr r3, [r2, #0] 800056c: 3301 adds r3, #1 800056e: 6013 str r3, [r2, #0] 8000570: 4a35 ldr r2, [pc, #212] ; (8000648 <countiu()+0x130>) 8000572: 6813 ldr r3, [r2, #0] 8000574: 3301 adds r3, #1 8000576: 6013 str r3, [r2, #0] 8000578: 4a36 ldr r2, [pc, #216] ; (8000654 <countiu()+0x13c>) 800057a: 4c37 ldr r4, [pc, #220] ; (8000658 <countiu()+0x140>) 800057c: 6813 ldr r3, [r2, #0] 800057e: 3301 adds r3, #1 8000580: 6013 str r3, [r2, #0] 8000582: 4b36 ldr r3, [pc, #216] ; (800065c <countiu()+0x144>) 8000584: 781b ldrb r3, [r3, #0] 8000586: bb13 cbnz r3, 80005ce <countiu()+0xb6> 8000588: 7823 ldrb r3, [r4, #0] 800058a: 2b00 cmp r3, #0 800058c: d02f beq.n 80005ee <countiu()+0xd6> 800058e: bd10 pop {r4, pc} 8000590: 781b ldrb r3, [r3, #0] 8000592: 2b00 cmp r3, #0 8000594: d1f0 bne.n 8000578 <countiu()+0x60> 8000596: 4c28 ldr r4, [pc, #160] ; (8000638 <countiu()+0x120>) 8000598: 7823 ldrb r3, [r4, #0] 800059a: 2b02 cmp r3, #2 800059c: d109 bne.n 80005b2 <countiu()+0x9a> 800059e: 4a30 ldr r2, [pc, #192] ; (8000660 <countiu()+0x148>) 80005a0: 4b27 ldr r3, [pc, #156] ; (8000640 <countiu()+0x128>) 80005a2: 6818 ldr r0, [r3, #0] 80005a4: e9d2 3100 ldrd r3, r1, [r2] 80005a8: 181b adds r3, r3, r0 80005aa: eb41 71e0 adc.w r1, r1, r0, asr #31 80005ae: e9c2 3100 strd r3, r1, [r2] 80005b2: 7823 ldrb r3, [r4, #0] 80005b4: 2b01 cmp r3, #1 80005b6: d1df bne.n 8000578 <countiu()+0x60> 80005b8: 4a2a ldr r2, [pc, #168] ; (8000664 <countiu()+0x14c>) 80005ba: 4b21 ldr r3, [pc, #132] ; (8000640 <countiu()+0x128>) 80005bc: 6818 ldr r0, [r3, #0] 80005be: e9d2 3100 ldrd r3, r1, [r2] 80005c2: 181b adds r3, r3, r0 80005c4: eb41 71e0 adc.w r1, r1, r0, asr #31 80005c8: e9c2 3100 strd r3, r1, [r2] 80005cc: e7d4 b.n 8000578 <countiu()+0x60> 80005ce: 4a26 ldr r2, [pc, #152] ; (8000668 <countiu()+0x150>) 80005d0: 4b1b ldr r3, [pc, #108] ; (8000640 <countiu()+0x128>) 80005d2: 6818 ldr r0, [r3, #0] 80005d4: e9d2 3100 ldrd r3, r1, [r2] 80005d8: 181b adds r3, r3, r0 80005da: eb41 71e0 adc.w r1, r1, r0, asr #31 80005de: e9c2 3100 strd r3, r1, [r2] 80005e2: 4a22 ldr r2, [pc, #136] ; (800066c <countiu()+0x154>) 80005e4: 6813 ldr r3, [r2, #0] 80005e6: 3301 adds r3, #1 80005e8: 6013 str r3, [r2, #0] 80005ea: 7823 ldrb r3, [r4, #0] 80005ec: e7cf b.n 800058e <countiu()+0x76> 80005ee: 4b20 ldr r3, [pc, #128] ; (8000670 <countiu()+0x158>) 80005f0: 781b ldrb r3, [r3, #0] 80005f2: 2b00 cmp r3, #0 80005f4: d1cb bne.n 800058e <countiu()+0x76> 80005f6: 4a10 ldr r2, [pc, #64] ; (8000638 <countiu()+0x120>) 80005f8: 7813 ldrb r3, [r2, #0] 80005fa: 2b02 cmp r3, #2 80005fc: d10a bne.n 8000614 <countiu()+0xfc> 80005fe: 491d ldr r1, [pc, #116] ; (8000674 <countiu()+0x15c>) 8000600: 480f ldr r0, [pc, #60] ; (8000640 <countiu()+0x128>) 8000602: 880b ldrh r3, [r1, #0] 8000604: 6840 ldr r0, [r0, #4] 8000606: 4283 cmp r3, r0 8000608: bfbf itttt lt 800060a: eb03 0343 addlt.w r3, r3, r3, lsl #1 800060e: 181b addlt r3, r3, r0 8000610: 109b asrlt r3, r3, #2 8000612: 800b strhlt r3, [r1, #0] 8000614: 7813 ldrb r3, [r2, #0] 8000616: 2b01 cmp r3, #1 8000618: d1b9 bne.n 800058e <countiu()+0x76> 800061a: 4a17 ldr r2, [pc, #92] ; (8000678 <countiu()+0x160>) 800061c: 4908 ldr r1, [pc, #32] ; (8000640 <countiu()+0x128>) 800061e: 8813 ldrh r3, [r2, #0] 8000620: 6849 ldr r1, [r1, #4] 8000622: 428b cmp r3, r1 8000624: bfbf itttt lt 8000626: eb03 0343 addlt.w r3, r3, r3, lsl #1 800062a: 185b addlt r3, r3, r1 800062c: 109b asrlt r3, r3, #2 800062e: 8013 strhlt r3, [r2, #0] 8000630: e7ad b.n 800058e <countiu()+0x76> 8000632: bf00 nop 8000634: 20000032 .word 0x20000032 8000638: 2000119a .word 0x2000119a 800063c: 200002d0 .word 0x200002d0 8000640: 20000ae8 .word 0x20000ae8 8000644: 20000b1c .word 0x20000b1c 8000648: 20000b24 .word 0x20000b24 800064c: 200002c8 .word 0x200002c8 8000650: 20000b20 .word 0x20000b20 8000654: 20000b28 .word 0x20000b28 8000658: 200021d6 .word 0x200021d6 800065c: 200021d2 .word 0x200021d2 8000660: 200002c0 .word 0x200002c0 8000664: 200002b8 .word 0x200002b8 8000668: 200002b0 .word 0x200002b0 800066c: 20000ae4 .word 0x20000ae4 8000670: 200021d4 .word 0x200021d4 8000674: 20000b80 .word 0x20000b80 8000678: 20000b7e .word 0x20000b7e
2 hours ago, jcxz said:При полной оптимизации у вас там ветвлений должно быть с гулькин нос.
Вообще пробовал все от -Os (2.8мкс) до -O3(2,6мкс). Разница не значительная.
-
26 minutes ago, dOb said:
У вас очень много условных переходов, а каждый такой переход сбивает конвейер.
Хм, интересно. То есть получается нужно как можно раньше узнать о нужном ветвлении сразу выбирать ветку целиком. У меня есть четыре параметра: положительный, отрицательный, ток или напряжение. То есть имеет смысл сразу сделать четыре варианта счетчика? А выбирать я могу на самом раннем этапе, оставив лишь один switch вместо ifs?
25 minutes ago, jcxz said:А тормоза например из-за того, что какая-то из входных переменных - double
Все целочисленное.
33 minutes ago, jcxz said:как объявлена вся эта куча переменных/констант
Там префиксы показывают. Константы просто числами.
-
Доброго дня,
Есть вот такой простой код, который суммирует данные с АЦП для последующей обработки. Частота ядра 72МГц. По факту, с помощью осциллографа, выяснилось, что этот кусок исполняется за примерно 2,6мкс, что кажется непомерно долгим для таких простых операций (в зависимости от условий выполняются отдельные ветви). GCC (Arduino).
Может быть, что суммирование идет в 64битное целое вызывает проблему?
Спасибо.
Spoilerinline void countiu () { if (b_voltamp == 1 ) { //Current calculations for current control if (u8_p == 2) { u64_tempin += i32_ADCcor[0]; u32_countin++; //Number of negative currents u32_countipn++; //Number of negative and positive currents } if (u8_p == 1) { u64_tempip += i32_ADCcor[0]; u32_countip++; //Number of positive currents u32_countipn++; //Number of negative and positive currents } } else if (b_voltamp == 0) { //Current calculations for voltage control if (u8_p == 2) { //It is not for correction, only for chronograms u64_tempin2 += i32_ADCcor[0]; } if (u8_p == 1) { u64_tempip2 += i32_ADCcor[0]; } } u32_countipnp++; //Number of total times for averaging chronogram data if (b_inject) { //Calculation of injected charge separately u64_tempQinj += i32_ADCcor[0]; u32_countQinj ++; } if (!b_diag_flag && !b_inject && !b_DontVoltage) { //Exclude amplitude of diagnostic and injecting pulses from peaks calculation if (u8_p == 2) { //Negative peak if (u16_Umaxn < i32_ADCcor[1]) { u16_Umaxn = (3 * u16_Umaxn + i32_ADCcor[1]) >> 2; } } if (u8_p == 1) { //Positive peak if (u16_Umaxp < i32_ADCcor[1]) { u16_Umaxp = (3 * u16_Umaxp + i32_ADCcor[1]) >> 2; } } } }
-
То есть я правильно понимаю, что HRTIM это чистый маркетинг, по крайней мере если частоты не слишком высокие и хватает несколько сот или тысяч ступеней обычного ШИМ?
Вот зачем он реально нужен, при том, что часто он работает не от нуля? То есть просто на 10 МГц преобразователь все равно не сделать (не касаясь железа).
-
Уже почти год пользуюсь чуть более старшей моделью HDO1074 - космолет в сравнении с прошлым DS1054z.
-
1 minute ago, Plain said:
Вы не озвучили критерий.
Критерий, величина пере-недо-регулирования.
-
1 hour ago, yamantau said:
не ключами
Ключами
1 hour ago, Plain said:индуктивность дросселя вдвое меньше, скорость изменения тока вдвое больше, а значит и быстродействие вдвое больше.
Это да, об этом и вопрос. Если это так, то качество регулирования должно улучшиться?
Ищу в Москве программиста, который может на Ассемблере или Паскале повторить программу, написанную под МС-ДОС
в Предлагаю работу
Опубликовано · Пожаловаться
Ну вот, за 20 минут, накидал, попробуйте поправить под себя https://www.dropbox.com/scl/fo/07w88uzt9d9tps1oahi34/h?rlkey=qx94669dowfygnes46u1teft4&dl=0
Delphi 7.
Там ехе-шник скомпилированный.
Можно СОМ-порт добавить.