Перейти к содержанию
    

Alex-lab

Свой
  • Постов

    558
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные Alex-lab


  1. 7 hours ago, Леонид К. said:

    Вот и вся суть программы.

     Ну вот, за 20 минут, накидал, попробуйте поправить под себя https://www.dropbox.com/scl/fo/07w88uzt9d9tps1oahi34/h?rlkey=qx94669dowfygnes46u1teft4&dl=0

    Delphi 7.

    Там ехе-шник скомпилированный.

    Можно СОМ-порт добавить.

    Screenshot 2023-12-03 19.24.52.png

  2. 9 hours ago, Леонид К. said:

    Объектное программирование я не стал осваивать

     Оно не то, что бы сильно обязательное. Можете писать на процедурах.

  3. Не совсем понятно, почему сами не напишите это на том же Делфи? Накидать кнопок на форму и TChart для графиков, в чем тут проблема? Данные с порта принимаете с помощью компонента BComport.

    Давно бы уже сделали.

    Сколько строк кода в вашей программе, для понимания глубины?

  4. 3 hours ago, ChristinaChadzynski said:

    +Если допустимо снижение fрез,

    Нет, не допустимо. Полоса пропускания жестко задана. Интересно увеличить наклон спада характеристики дБ/Дек. Но в целом картина понятна.

  5. 11 hours ago, Xenia said:

    ак допустима ли такая замена?

    Буквально недавно с этим имел дело.

    Без переделок на плату bluepill встают процессоры F303CBT6 (понятно и с другой памятью).

    А под F431 G431(там гораздо выше рабочая частота), пришлось делать свою плату, правда без USB (мне не нужно).

  6. On 11/18/2023 at 2:42 PM, Aner said:

    Не так и много 5A. Озвучить требования к такому фильтру можете?

    Рабочая полоса до 7кГц, частота шим 100 кГц. Хочется пульсации меньше 1%. Сейчас около 5%.

    10 minutes ago, Точка Опоры said:

    P.S. Результат связи катушек немного предсказуем (белая линия).

    Спасибо, да, очень наглядно.

     

  7. Фильтр этот силовой, на 5А. Не радио. Сейчас это просто LC фильтр. Хотелось улучшить его АЧХ, путем добавления конденсаторов к отводам. Места для других дросселей нет.

  8. Доброго дня.

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

    Возможно ли получить LC фильтр Баттерворта более высокого порядка, если индуктивности намотаны на одном сердечнике, с отводами? Может быть с какими-то ухудшеными характеристиками?

    Благодарю за просвещение.

    ButterworthLC.png.gif

  9. 2 hours ago, Arlleex said:

    Тут еще пару тактов:

    if (!adc_d.b_diag_flag && !adc_d.b_inject && !adc_d.b_DontVoltage)

    Да, этот блок я заменил на одну переменную, предварительно собирающую все эти значения в кучу в начале, т.к. используются они два раза.

    7 minutes ago, jcxz said:

    Если уж хочется оптимизировать, то без включения головы и перетряхивания всего алгоритма - никак.

    Мой изначальный вопрос был вообще не об оптимизации, а почему такие простые операции превращаются в такой долго исполнимый код.

  10. 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 мкс нс.

  11. 2 hours ago, SVNKz said:

    советую начать с изучения истории

    За совет спасибо.

    Понятно, частота выборок влияет на АЧХ, а на какой фундаментальны параметр (из книг) влияет разрешение, кроме самой точности задания выходных уровней, как оно переходит в динамику? В моих книгах этого не было.

  12. 1 hour ago, jcxz said:

    Они что - volatile

    Да, некоторые были volatile, убрал полностью, общее время сократилось с 2,6 до 2,15.

    1 hour ago, Quasar said:

    А PLL ядра-то правильно настроена?

    Да, таймер работает корректно.

    25 minutes ago, firstvald said:

    а сишника не будет я так понял

    Первый пост чем не устраивает?

  13. 1 hour ago, Vlad_G said:

    Посмотрите что может HRTIM - например, может задать импульс посерёдь периода

    С этим вопросов нет, я именно в контексте высокого разрешения. Выше @khach уже указал на резонансные преобразователи, как пример.

  14. 1 hour ago, EdgeAligned said:

    Посмотрите ассемблерный листинг.

    Не уверен, вроде оно? Команд действительно много...

    Spoiler
    08000518 <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мкс). Разница не значительная.

  15. 26 minutes ago, dOb said:

    У вас очень много условных переходов, а каждый такой переход сбивает конвейер.

    Хм, интересно. То есть получается нужно как можно раньше узнать о нужном ветвлении сразу выбирать ветку целиком. У меня есть четыре параметра: положительный, отрицательный, ток или напряжение. То есть имеет смысл сразу сделать четыре варианта счетчика? А выбирать я могу на самом раннем этапе, оставив лишь один switch вместо ifs?

    25 minutes ago, jcxz said:

    А тормоза например из-за того, что какая-то из входных переменных - double

    Все целочисленное.

    33 minutes ago, jcxz said:

    как объявлена вся эта куча переменных/констант

    Там префиксы показывают. Константы просто числами.

  16. Доброго дня,

    Есть вот такой простой код, который суммирует данные с АЦП для последующей обработки. Частота ядра 72МГц. По факту, с помощью осциллографа, выяснилось, что этот кусок исполняется за примерно 2,6мкс, что кажется непомерно долгим для таких простых операций (в зависимости от условий выполняются отдельные ветви). GCC (Arduino).

    Может быть, что суммирование идет в 64битное целое вызывает проблему?

    Спасибо.

    Spoiler
    inline 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;
          }
        }
      }
        
    }

     

     

  17. То есть я правильно понимаю, что HRTIM это чистый маркетинг, по крайней мере если частоты не слишком высокие и хватает несколько сот или тысяч ступеней обычного ШИМ?

    Вот зачем он реально нужен, при том, что часто он работает не от нуля? То есть просто на 10 МГц преобразователь все равно не сделать (не касаясь железа).

  18. 1 hour ago, yamantau said:

    не ключами

    Ключами

    1 hour ago, Plain said:

    индуктивность дросселя вдвое меньше, скорость изменения тока вдвое больше, а значит и быстродействие вдвое больше.

    Это да, об этом и вопрос. Если это так, то качество регулирования должно улучшиться?

×
×
  • Создать...