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

Artem

Свой
  • Постов

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

  • Посещение

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


  1. Спасибо, про переходной процесс читал. Просто хотелось вживую увидеть эти пресловутые АЧХ с ФЧХ уже в живом изделии :rolleyes: . Первый раз такое делаем, вот отсюда и интерес.

  2. Вот их (запасы по фазе и усилению) то и хотим измерить. Про петлевое усиление, это я что то с недосыпу сморозил :rolleyes: . Пробовали включать фильтр, тоже не видать почти. Подключали Network Analizer HP8751A. Он тоже какой то бред показывает - на низких частотах - шум. А на верхних - на частоте перехода усиления через 0, он показывает запас по фазе 98 градусов. Хотя рассчётное - 60...

  3. Вот этот документ http://www.polyscope.ch/dlCenter/ps/2009_8/08_09.05.pdf

    Вот схемы при себе нету, на работе она. Но если в кратце - косой полумост, с частотой 80кГц, выходной LC фильтр, и усилитель ошибки Type 3. PWM контроллер UC3845.

  4. Почитал, спасибо. Но это всё не то, к сожалению. По ссылкам описывается теоретическая и расчётная части. А мне всё таки хотелось узнать о измерении в уже готовом изделии.

  5. Спасибо за ответ, но искал, всё перерыл и не только тут. Но везде только сслылки на юнитродовские документы, а практических рекомендаций так и не нашол. Так же не нашёл, чтоб кто-нибудь поведал о своих измерениях.. :laughing:

    Ещё раз повторюсь - мне не нужны методы расчёта или настройки, это я уже сделал. Мне бы хотелось услышать о методах измерения. Интересно, кто как делает, ведь в помехах ничего не видно.. :rolleyes:

  6. Доброго времени суток. Собственно, суть вопроса в следующем: сделал источник питания с напряжением по выходу от 6 до 20 вольт, и током до 30 А. По топологии косого моста, контроль по напряжению, ШИМ контроллер - UC3845. Работает нормально, напряжение регулируется. Вот решил проверить его устойчивость и измерить петлевое усиление и запас по фазе. Сделали как описывается в юнитродовских документах - в разрыв делителя обратной связи последовательно добавили резистор на 50 ом, и через разделительный трансформатор с генератора подали синус (200mV) на резистор. Сначала смотрели осциллом - всё в помехах и не видно ничего. Точнее синус немного проглядывается сквозь помехи, но толком его не померить. Собственно вопрос: Кто как измеряет петлевое усиление и запас по фазе? Заранее спасибо.

  7. Сделали так: В файле icmp.c ф ф-ции icmp_input() строки:

       // adjust the checksum 
       if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) {
         iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1;
       } else {
         iecho->chksum += PP_HTONS(ICMP_ECHO << 8);
       }
    

    закомментировали, а сделали так:

    #if CHECKSUM_GEN_ICMP
       /* adjust the checksum */
       if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) {
         iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1;
       } else {
         iecho->chksum += PP_HTONS(ICMP_ECHO << 8);
       }
    #else /* CHECKSUM_GEN_ICMP */
       iecho->chksum = 0;
    #endif /* CHECKSUM_GEN_ICMP */
    

     

    Теперь полёт нормальный. Плата пингуется, страница загружается.

     

  8. Добрый день. У меня проблема была с файлом sdc_diskio.c (низкоуровневые функции работы с SD). А если ещё точнее, то проблема была с функцией Receive_DataBlock. Получалось, что я при чтении вылезал за область памяти прёмного буфера, и при этом портил структуру fs. После устранения, проблемы исчезли.

     

    PS. Письмо отправил

  9. Доброго времени суток.

    Необходимо разместить секцию во флеш после кода. А адрес этой секции поместить тоже во флеш по фиксированному адресу. Т.е. по фиксированному адресу будет лежать адрес конца прошивки. Делаю вот так:

    (IAR 6.10, STM32F103RET6)

     

    .icf файл:

    define symbol __ICFEDIT_size_vesionaddr__ = 0x04;
    
    define memory mem with size = 4G;
    define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
    define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
    
    
    // Создаём регион по фиксированному адресу
    define region VERADDR_region   = mem:[from __ICFEDIT_region_ROM_start__+0x400 _size __ICFEDIT_size_vesionaddr__];
    
    define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
    define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
    
    initialize by copy { readwrite };
    do not initialize  { section .noinit };
    
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    
    place in ROM_region     { readonly, section .versionsection};
    place in VERADDR_region { section .versionaddr };
    place in RAM_region     { readwrite,
                             block CSTACK, block HEAP };
    
    
    

     

    в файле main.c

    
    // Глобальные переменные
    
    #pragma section = ".versionsection"
    const char version_full [] @ ".versionsection" = "VERSION 30.05.2011 05:38:40";
    
    #pragma section = ".versionaddr"
    const char * version_addr  @ ".versionaddr" = __section_begin(".versionsection");
    

     

    IAR ругается вот такими словами:

    Error[Pe028]: expression must have a constant value

    на вот эту строку:

    const char * version_addr @ ".versionaddr" = __section_begin(".versionsection");

     

    Вот не пойму, вроде компилятор должен положить адрес versionsection в секцию versionaddr. А линкер засунет её в созданный для неё регион...

    Почему такого не происходит? Заранее спасибо.

     

  10. Сделал вот так:

    
    static FATFS fs;            // Work area (file system object) for logical drives 
    static FIL  fdst, data_file;            // file objects 
    
    void proba ()
    {
    volatile FRESULT res;		 // FatFs function common result code 
    UINT br, bw;					 // File read/write count 
    uint8_t str_cnt = 0;
    
    // Register a work area for logical drive 0
    f_mount(0, &fs);
    
    // Открываем файл
    res = f_open(&data_file, "test_cpy.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
    if(res)
    {
      res = res;
    }   
    
    
    buffer[0] = 'A';
    buffer[1] = 'B';
    buffer[2] = 'C';
    buffer[3] = 'D';
    buffer[4] = 'E';
    
    for(str_cnt = 0; str_cnt < 10; str_cnt++)
    {
    	res = f_lseek(&data_file, data_file.fsize);
    	br = 5;
    	res = f_write(&data_file, buffer, br, &bw);
    	if(res)
    	{
    		res = res;
    	}
    
    	f_puts ("Proba \r\n", &data_file);
    	f_sync (&data_file);
    }
    
    //---------------------------------------------------------------------------------
    // Вот этот блок добавил
    
       fdst = fdst;
    //---------------------------------------------------------------------------------
    
    f_close(&data_file);
    
    // Unregister a work area before discard it
    f_mount(0, NULL);
    }

     

    Вот только не понятно, почему если оставить неиспользуемый fdst , то всё работает, если его закомментировать, то опять с начала файла не пишет, и размер файла не больше 4033 байт. (забыл сказать , компилятор IAR ARM, FreeRTOS) размер стека увеличивал, не помогает...

    что такое может быть?

  11. Доброго времени суток! Микроконтроллер STM32 работает с SD картой по SPI. Прицеплена FATfs. Необходимо открыть файл для записи, если файла нет, то создать его и в него записать строку. Но вот в чём проблема, если в файле уже есть хоть один символ, то запись проходит успешно, а если файл только что создали, т.е. его размер равен 0 , то запись не происходит, f_write возвращает FR_INT_ERR. Не могу понять в чём проблема... Помогите кто чем может.. Заранее спасибо.

    Вот код:

    void proba ()
    {
    volatile FRESULT res;		 // FatFs function common result code 
    UINT br, bw;					 // File read/write count 
    uint8_t str_cnt = 0;
    
    // Register a work area for logical drive 0
    f_mount(0, &fs);
    
    // Открываем файл
    res = f_open(&fdst, "test_cpy.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
    if(res)
    {
      res = res;
    }   
    
    
    buffer[0] = 'A';
    buffer[1] = 'B';
    buffer[2] = 'C';
    buffer[3] = 'D';
    buffer[4] = 'E';
    
    for(str_cnt = 0; str_cnt < 10; str_cnt++)
    {
    	res = f_lseek(&fdst, fdst.fsize);
    	br = 5;
    	res = f_write(&fdst, buffer, br, &bw);
    	if(res)
    	{
    		res = res;
    	}
    
    	f_puts ("Proba \r\n", &fdst);
    	f_sync (&fdst);
    }
    
    f_close(&fdst);
    
    // Unregister a work area before discard it
    f_mount(0, NULL);
    }

     

    Добавлю:

    Файл не пишется размером больше 4033 байт.

     

     

    Сделал вот так:

    void proba ()
    {
    volatile FRESULT res;		 // FatFs function common result code 
    UINT br, bw;					 // File read/write count 
    uint8_t str_cnt = 0;
    
    // Register a work area for logical drive 0
    f_mount(0, &fs);
    
    // Открываем файл
    res = f_open(&fdst, "test_cpy.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
    if(res)
    {
      res = res;
    }   
    
    
    buffer[0] = 'A';
    buffer[1] = 'B';
    buffer[2] = 'C';
    buffer[3] = 'D';
    buffer[4] = 'E';
    
    for(str_cnt = 0; str_cnt < 10; str_cnt++)
    {
    	res = f_lseek(&fdst, fdst.fsize);
    	br = 5;
    	res = f_write(&fdst, buffer, br, &bw);
    	if(res)
    	{
    		res = res;
    	}
    
    	f_puts ("Proba \r\n", &fdst);
    	f_sync (&fdst);
    }
    
    //---------------------------------------------------------------------------------
    // Вот этот блок добавил
    
    for(str_cnt = 0; str_cnt < 10; str_cnt++)							
    {
    	res = f_lseek(&data_file, ((&data_file)->fsize));
    
    	f_puts ("Proba\r\n", &fdst);
    
    	 f_sync (&data_file);
    }
    //---------------------------------------------------------------------------------
    
    f_close(&fdst);
    
    // Unregister a work area before discard it
    f_mount(0, NULL);
    }

    и стало писаться с в только что созданный файл, и размер файла не ограничен.

    Ничего не понимаю, в чём дело? Что за танцы с бубном?

  12. по графику восстановления напряженя можно с довольно неплохой точностью определить и остаточную ёмкость.
    А по подробней можно? Как по графику восстановления напряжения можно определить остаточную ёмкость?
  13. Попробовал через JFlashARM законектится, в логе пишет:

     

    Application log started

    - J-Flash ARM V4.07b (J-Flash compiled Jun 10 2009 19:57:01)

    - JLinkARM.dll V4.07b (DLL compiled Jun 10 2009 19:56:22)

    Reading flash device list [C:\Program Files\SEGGER\JLinkARM_V407b\ETC\JFlash\Flash.csv] ...

    - List of flash devices read successfully (576 Devices)

    Reading MCU device list [C:\Program Files\SEGGER\JLinkARM_V407b\ETC\JFlash\MCU.csv] ...

    - List of MCU devices read successfully (337 Devices)

    Opening project file [C:\Program Files\SEGGER\JLinkARM_V407b\Default.jflash] ...

    - Project opened successfully

    Connecting ...

    - Connecting via USB to J-Link device 0

    - J-Link firmware: V1.20 (J-Link compiled Feb 20 2006 18:20:20 -- Update --)

    - JTAG speed: 200 kHz (Auto)

    - Initializing CPU core (Init sequence) ...

    - ERROR: Failed to connect

     

    Макетку проверял, нормально. Джамперы Boot - обои на земле.

  14. Доброго времени суток! Проблема такова: получил наконец-то долгожданные STM32F103RET6, соорудил макетку, подключил имеющийся J-Link. Взял пример от IAR... Но при нажатии на Download and Debug, выскакивает сообщение:

     

    Bad JTAG communication: Write to IR: Expected 0x1, got 0xf(TAP Command : 11)@ Off 0x64.

    Wrong AHB ID (15:3). Expected 0x04770001 (Mask 0x0FFFFF0F), Found 0x00000000

     

    Установил новые дрова от Segger V4.07b.

    J-Link у меня rev3.0. Вот не могу понять, он может работать с Cortex M3 или не может. Или он аппаратно не поддерживает Кортекса?

     

    Заранее огромное спасибо

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