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

    

Halfback

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Halfback

  • Звание
    Местный

Контакты

  • Сайт
    http://
  • ICQ
    0
  1. Цитата(vadimp61 @ Mar 15 2017, 23:07) Применяли ТИМ250 , и импорт от HALO TG05-2004NC Спасибо за наводку. ТИМ еще к тому же есть в перечне МОП. А в каких диапазонах скоростей у Вас работал ТИМ250 ? Судя по вот этой доке http://www.bec.spb.ru/tim.pdf на трансе ТИМ250 скорости выше 1кб/с врядли получиться добиться. Скорости 64к можно будет добиться на трансе типа ТИМ с группой не выше 5-й, например ТИМ85.
  2. Добрый день! Подскажите, пожалуйста, информацию (наименование, кто производит) по трансформаторам для аппаратуры со стыками С1-ФЛ-БИ (ГОСТ 27232-87) и С1-ТЧ (ГОСТ 25007-81). Приемка 5 приветствуется. Может есть какие-то импортные аналоги? Заранее спасибо!
  3. Цитата(WLESS.RU @ Feb 5 2016, 10:47) А на токоограничительном резисторе смотрели осциллограмму, есть ли уверенность, что транзистор полностью закрывается в промежутках между импульсами? И вообще, правильно ли его припаяли? Судя по осциллограмме полевик вроде закрывается. Форма сигнала на истоке - близкая к треугольной (пилообразной). Пик треугольника до ограничения 350мВ не доходит. Более подробные фотки смогу сделать только вечером. Полевик перепаивал (до этого стоял IRF7301) - ключи проверял. В принципе по фотке видно как к 4-й ноге (затвор) идет печать от LM3488. Цитата(bloody-wolf @ Feb 5 2016, 10:23) ЗЫ. в некоторых букварях пишут, что в сепике катушки должны быть магнитосвязанными. т.е. на одном феррите. да, я в курсе этой темы но такие дроссели на прилавках во всяких Чип-Дипах не найти. Расчет SEPIC согласно этой ссылке http://www.radiohlam.ru/teory/sepic_raschet.htm говорит о том, что у меня пиковый ток в катушке (L>17мкГн при F~500КГц) у полевика будет до 2А. У меня есть дроссель LQH88PN 22мкГн c максимальным током 2,7А. Тогда Rsense можно поставить = 0.35В/2А = 0.175 Ом -> 0.2 Ом (1,75А). И посмотреть, что с нагревом и токовым ограничением. Как я понимаю причиной перегрева дросселей может стать либо повышенный ток в намотанных проводах, либо разогрев феррита из-за высокочастотных штучек. Кстати, обратил внимание, что вне зависимости от частоты и дросселя ШИМ всегда начинается с 50%. Для нагрузки 200мА мне это полагается чрезмерным.
  4. Цитата(Jurenja @ Feb 5 2016, 09:52) Схема из даташита... А печатная плата? И какая вообще конструкция? Конструктивно всё расположено довольно плотно.
  5. Всем доброго времени суток. Собрал схему SEPIC на LM3488, вх. напряжение 9...30, выход 12В, выходной ток 200...1000 мА. На частото-задающую цепь поставил потенциометр на 150кОм. Дросселя ставил 6,8мкГн 10мкГн 22мкГн и 100мкГн семейства LQH6PP CDRH6D. Транзистор IRF7855. Ёмкость Cs также менял 1...4,4мкФ (керамика X5R). Схема вывода COMP - как в даташите. Токоограничительный Rsense 0,033 Ом. В целом - схема из даташита. схема дросселя LQH6PP Хочу сказать что очень сильно греются дроссели и полевик. Причем при нагрузке 200мА греется сильно но палец держать можно, при 800мА - палец держать невозможно. Менял дроссели, при помощи потенциометра задавал разные частоты на затвор транзистора (150...1000кГц) - толку никакого, кроме тех случаев когда дросселя выходили в насыщение и блок питания уходил с СС. Смотрел осциллограммы - на словах картина такая: импульсы на затвор приходят ровные (только rising в пике немного сглажен, falling падает четко). Напряжения на входе и выходе - при нагрузке 200мА стоят чётко, не плавают.; при нагрузке 800мА - возникают периодические импульсные помехи размахом ~ 1В. Что я делаю не так?
  6. Частично разобрался. Решил пока забить на UART и сделал долбатню пином. Все временные выдерки взял согласно даташиту на датчик. Всё четко как в аптеке. Свою задержку 1us замерял осциллом. Собственно основной цикл: Код#define ONEWIRE_LOW()     HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_RESET) #define ONEWIRE_HIGH() HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET) #define ONEWIRE_INPUT()  MX_GPIO_P10_Init(2) // IN NoPull #define ONEWIRE_OUTPUT_PP() MX_GPIO_P10_Init(1) // OUT PP #define ONEWIRE_OUTPUT_OD() MX_GPIO_P10_Init(0) // OUT OD #define ONEWIRE_READPIN() HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_10) #define DELAY_1us() {__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\                                         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\                                         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\                                         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\                                         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\                                         __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();} #define ONEWIRE_DELAY(delay_us) {for(volatile uint16_t i=0;i<delay_us-1;i++) DELAY_1us();} ...... volatile uint8_t ResetAnsw=0x55; uint8_t RxByte[9]={0,0,0,0,0,0,0,0,0}; volatile uint8_t Temperature=0; .... ResetAnsw=TM_OneWire_Reset();       TM_OneWire_WriteByte(0xcc); // skip ROM command       TM_OneWire_WriteByte(0x44); // convert T command       ONEWIRE_OUTPUT_PP();       ONEWIRE_HIGH();       HAL_Delay(800); // at least 750 ms for the default 12-bit resolution       ResetAnsw=TM_OneWire_Reset();       TM_OneWire_WriteByte(0xcc); // skip ROM command       TM_OneWire_WriteByte(0xbe); // read scratchpad command             for(uint8_t t=0;t<10;t++) RxByte[t]=TM_OneWire_ReadByte();         Temperature = ((RxByte[1]&7)<<4)|(RxByte[0]>>4); Но на самом деле дъявол кроется в этих функциях: CODEvoid SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } void MX_GPIO_P10_Init(uint8_t PC10_Mode) // 0- Out OD, 1- Out PP, 2- In { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ __GPIOD_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET); /*Configure GPIO pin : PC10 */ if(PC10_Mode==0) {GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; } else if(PC10_Mode==1) {GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;} else if(PC10_Mode==2) {GPIO_InitStruct.Mode = GPIO_MODE_INPUT;} GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } uint8_t TM_OneWire_Reset(void) { uint8_t i; ONEWIRE_OUTPUT_OD(); ONEWIRE_LOW(); ONEWIRE_DELAY(480); ONEWIRE_HIGH(); ONEWIRE_INPUT(); ONEWIRE_DELAY(70); i = ONEWIRE_READPIN(); ONEWIRE_DELAY(410); ONEWIRE_OUTPUT_OD(); return i; } void TM_OneWire_WriteByte(uint8_t byte) { uint8_t i = 8; ONEWIRE_OUTPUT_OD(); for(i=0;i<8;i++) { if((byte&0x01)==0x01) { ONEWIRE_LOW(); // Drive bus low ONEWIRE_DELAY(2); ONEWIRE_HIGH(); ONEWIRE_DELAY(55); //sample time slot for the slave //ONEWIRE_DELAY(2); //recovery time slot } else { ONEWIRE_LOW(); // Drive bus low ONEWIRE_DELAY(90); ONEWIRE_HIGH(); ONEWIRE_DELAY(2); //recovery time slot } byte=byte>>1; ONEWIRE_HIGH(); } } uint8_t TM_OneWire_ReadByte(void) { uint8_t i = 8, byte = 0; while (i--) { ONEWIRE_OUTPUT_OD(); ONEWIRE_LOW(); ONEWIRE_DELAY(2); ONEWIRE_INPUT(); ONEWIRE_DELAY(6); byte >>= 1; byte |= (ONEWIRE_READPIN() << 7); ONEWIRE_DELAY(50); } return byte; } Буду ли ковыряться с UART - не знаю. Слишком много времени убил на этот датчик.
  7. Спасибо что откликнулись. Тайминги на соответствие даташиту посмотрю. Могу вот что добавить: при запросе на преобразование 0хF0 (9600), 0xCC(115200), 0xBE(115200) при подключении по двухпроводной схеме (VCC и GND замыкаются и сажаются на землю, сигнальный на UART TX c подтяжкой к 3,3В через 3,3кОм) осциллограмма в точности как на этом рисунке В этом случае проседание длиться ~600мс. Если включаю по трехпроводной схеме то при таком же запросе проседания линии нет. Что бы это могло значить?
  8. Всем доброго времени суток! Есть проблема с датчиками DS18b20 Заказал пару штук этих датчиков во влагозащищенном исполнении. Подключил один из них по 2-проводной схеме - т.е. красный и черный провод объединил и посадил на "землю". Желтый провод сделал PullUP (к 3,3В через 3,3кОм) посадил на передатчик USART4. МК - STM32F103RE (отладочная плата - Махаон). Для упрощения жизни запустил CubeMX последней версии, настроил USART4 на HalfDuplex. И ситуация следующая: на F0 датчик отвечает E0, а вот на остальные команды не отвечает вообще никак. Ни на 0хсс 0хBE (чтение памяти 9 байт) ни на 0x33. Собственно, результаты смотрел в отладчике Keil и осциллографом. Скорость UART меняется адекватно, оценивал длительность импульсов согласно скорости. Код ниже: Код         uint8_t TxCmdReset=0xF0; uint8_t RxAnswReset1; uint8_t RxData[100]; uint8_t ow_buf[8]; HAL_HalfDuplex_EnableReceiver(&huart4);              MX_UART4_Init_wBoudRate(9600); //Reset     HAL_UART_Receive_IT(&huart4,&RxAnswReset1,1);         HAL_UART_Transmit(&huart4, &TxCmdReset, sizeof(TxCmdReset), 2);         for(i=0;i<1000;i++) {__NOP();}              MX_UART4_Init_wBoudRate(115200);     HAL_UART_Receive_IT(&huart4, RxData, sizeof(RxData));     OW_toBits(0xCC, ow_buf);     HAL_UART_Transmit(&huart4, (uint8_t *)ow_buf, 8, 3);     OW_toBits(0xB4, ow_buf);     HAL_UART_Transmit(&huart4, (uint8_t *)ow_buf, 8, 3);     HAL_Delay(2);     while(1); Кодvoid MX_UART4_Init_wBoudRate(uint32_t BoudRate) {   huart4.Instance = UART4;   huart4.Init.BaudRate = BoudRate;   huart4.Init.WordLength = UART_WORDLENGTH_8B;   huart4.Init.StopBits = UART_STOPBITS_1;   huart4.Init.Parity = UART_PARITY_NONE;   huart4.Init.Mode = UART_MODE_TX_RX;   huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;   huart4.Init.OverSampling = UART_OVERSAMPLING_16;      HAL_HalfDuplex_Init(&huart4); } Функция преобразования байта в 8 байт для отправки заимствован. Тем не менее его в отладчике проверял - замечаний нет. Кодvoid OW_toBits(uint8_t ow_byte, uint8_t *ow_bits) {         uint8_t i;         for (i = 0; i < 8; i++) {                if (ow_byte & 0x01) {                         *ow_bits = OW_1;                 } else {                         *ow_bits = OW_0;                 }                 ow_bits++;                 ow_byte = ow_byte >> 1;         } } Пробовал оба датчика - ведут себя одинаково. Значит есть надежда что ошибка в коде. Может кто прояснит в чем я не прав?
  9. на http://www.koe.j-display.com/ видел подобные дисплеи.
  10. всем доброго времени суток! все знают про таймер 555 (напр. TS555, микромощный) Но мне он может понадобиться при питающих напряжениях до 30В. Реально выше чем на 15В не нашел. Может бывают до 30В и выше? Городить линейник пока не хочу. Заранее спасибо!
  11. Цитата(x-men @ Jun 3 2015, 10:47) На всякий случай упомяну вариант без проводов. Если под водой, то получается, что объекты в пределах прямой видимости. И скорее всего не в городе. Так как рассстояние немаленькое то по радиоканалу будет проще. Можно использовать радиомодем типа невод. Частота открытая 433 МГц. До 5 километров связь он обеспечит. Желательно направленную антенну. 485 принимает. спасибо, на радиоканал в качестве надежного не могу рассматривать. В шторм и/или сильный ливень, я думаю, со связью гарантированно будут проблемы.
  12. Несколько вопросов начинающего

    проблема оказалась в определении очереди (привет CubeMX) КодosMessageQDef(Level2Storage_Queue, 4, WLevelData);   Level2Storage_QueueHandle = osMessageCreate(osMessageQ(Level2Storage_Queue), NULL); если заменить на классику КодRDLevel2Storage_QueueHandle = xQueueCreate(4,sizeof(WLevelData)); то структура передаётся без потерь. а проблема имхо кроется в Код#define osMessageQDef(name, queue_sz, type)   \ const osMessageQDef_t os_messageQ_def_##name = \ { (queue_sz), sizeof (type)  } osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id) {   (void) thread_id;     return xQueueCreate(queue_def->queue_sz, (uint32_t) sizeof(queue_def->item_sz)); }
  13. Несколько вопросов начинающего

    Всем доброго времени суток. Есть такая проблема - если в кратце - то при пеердаче структуры в очереди теряются элементы. Если по-конкретнне то есть вот такая структура: Код    typedef struct {             unsigned short int LSensor_Num;             unsigned short int WLevelValueAv;             unsigned short int TimeStartMeasure;             unsigned short int DurationMeasureSec;             } WLevelData; Очередь инициализирована так: Код  osMessageQDef(Level2Storage_Queue, 4, WLevelData);   Level2Storage_QueueHandle = osMessageCreate(osMessageQ(Level2Storage_Queue), NULL); Задачи инициализированы так: КодosThreadDef(TX_Task, Start_TX_Task, osPriorityNormal, 0, 128);   RD_TaskHandle = osThreadCreate(osThread(TX_Task), NULL);   osThreadDef(RX_Task, Start_RX_Task, osPriorityBelowNormal, 0, 128);   Storage_TaskHandle = osThreadCreate(osThread(RX_Task), NULL); Есть задача где раз в 6 секунд происходит запись в очередь Кодvoid Start_TX_Task(void const * argument) {     portTickType xLastWakeTime;     portBASE_TYPE xStatus;          WLevelData WLevel = {1,111,0,60};          xLastWakeTime = xTaskGetTickCount();   /* Infinite loop */   for(;;)   {         xStatus = xQueueSendToBack(Level2Storage_QueueHandle,&WLevel,0);         if(xStatus != pdPASS ) {} // Could not send to the queue     vTaskDelayUntil(&xLastWakeTime,6000);   } } Есть задача где периодически очередь считывается. Кодvoid Start_RX_Task(void const * argument) {     portBASE_TYPE xStatus;     portTickType xLastWakeTime;     WLevelData WLevel_rx;          xLastWakeTime = xTaskGetTickCount();   for(;;)   {         if(uxQueueMessagesWaiting(Level2Storage_QueueHandle)) {                 xStatus=xQueueReceive(Level2Storage_QueueHandle,&WLevel_rx,0);                 }     vTaskDelayUntil(&xLastWakeTime,130);   } } И в итоге прием происходит, но последние 2 значения (TimeStartMeasure и DurationMeasureSec) в структуре WLevel_rx всегда "0". Увеличивал кучу на 10кБ. Также увеличивал глубину стека в задачах. Приоритеты менял. Не помогло. МК: STM32F407VG, клок: 168МГц. Почему так?
  14. На основании вышесказанного вижу вариант купить 5 500-метровых бухт FTP/SFTP кабеля, соединить последовательно и проверить. Вопрос по гальванической изоляции, на мохе или ADuM - если ли в моём случае такая необходимость?
  15. Коллеги, спасибо что откликнулись! Вношу ясность. Скорость нужна 9600 б/сек. Выше нет необходимости.