Перейти до публікації
Пошук в
  • Додатково...
Шукати результати, які містять...
Шукати результати в...

Модуль управления (8+1 входов, 8 выходов) с управлением

InSAn

Рекомендовані повідомлення

Может тогда master должен "собирать урожай" последовательно, со всех slaves ?

Имеено так Модбас и работает :)

 

circular buffer или можно даже fifo (с фиксированным размером), это такой механизм

 

Я знаю, что такое буфер :)

Но не вижу, как мастер может отловить нажатие кнопки на слейве (а не ее статус). Ведь к тому моменту, как мастер получит сигнал о нажатии - уже может произойти ее отпускание.

Именно поэтому слейвы программируются на обработку события, а мастеру лишь передают состояние.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Хвастаюсь :)

 

- 8 релейных выходов (6A 250VAC; 6A 30VDC)

- сохранение состояния выходов при отключении и последующем включении питания

 

 

PPS: Вопросы, предложения и критика приветствуются :)

 

 

 

Релейные выходы можно было бы полноценно использовать, если бы с каждого контакта отдельная клемма была, без общего провода. Релейные выходы так и делаются в промышленных контроллерах же.

 

 

Сохранять состояния выходов... Рано или поздно кого-то шарахнет.

Даже не вникая в рассуждения, так нельзя делать.

 

 

Как юзер может внести коррективы или изменить программу? Какой софт использовать?

 

 

Один хотя-бы вход сделать счетчиком, опционально.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Релейные выходы можно было бы полноценно использовать, если бы с каждого контакта отдельная клемма была, без общего провода. Релейные выходы так и делаются в промышленных контроллерах же.

8 релейных выходов - 16 контактов.

Где там общий провод?

 

Сохранять состояния выходов... Рано или поздно кого-то шарахнет.

Даже не вникая в рассуждения, так нельзя делать.

А стоило бы, наверное, вникнуть. :)

Ведь именно так работают импульсные реле (не электронные!) Eaton, ABB, Hageer и т.д., которые сохраняют свое состояние при исчезновении электричества.

 

Как юзер может внести коррективы или изменить программу? Какой софт использовать?

Любой, поддерживающий стандартный протокол Modbus RTU.

 

Один хотя-бы вход сделать счетчиком, опционально.

Спасибо, хороший вопрос...

Я думал над этим. Но в итоге решил, что счетчик будет более уместен в другом устройстве (например, в "комплекте" с аналоговыми входами).

Это же устройство - фактически замена восьми импульсных реле с функцией центрального выключателя и с продвинутыми возможностями контроля и управления.

 

Добавлено через 25 минут

Как юзер может внести коррективы или изменить программу? Какой софт использовать?

Любой, поддерживающий стандартный протокол Modbus RTU.

 

В сети множество бесплатного и условно-бесплатного ПО.

Например, Modbus Poll, TIK Modscan, Termite, Эмулятор Modbus, Modpoll Modbus Master Simulator и множество других.

 

Ж-)

Посилання на коментар
Поділитися на інших сайтах

Видимо, не вник. Я ж думал, идея приближается к PLC, а в этих реле я не очень понимаю, никогда не применял.
Посилання на коментар
Поділитися на інших сайтах

Я ж думал, идея приближается к PLC

 

Наоборот - отдаляется от ПЛК: это самодостаточное устройство, которое может взаимодействовать с ПЛК.

Посилання на коментар
Поділитися на інших сайтах

Atmega328

 

 

Если собираетесь дальше развивать проект, советую побыстрее уйти от атмела-микрочипа, там целый букет проблем

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

советую побыстрее уйти от атмела-микрочипа, там целый букет проблем

А можно подробнее о букете?

 

Добавлено через 4 минуты

Прототип беспрерывно работает несколько лет. Никаких проблем не заметил...

Посилання на коментар
Поділитися на інших сайтах

Если собираетесь дальше развивать проект, советую побыстрее уйти от атмела-микрочипа, там целый букет проблем

 

 

 

Какие проблемы на микрочипе?

Самый предсказуемый контроллер, самая лучшая документация.

Какие там проблемы?

  • Лайк 3
Посилання на коментар
Поділитися на інших сайтах

А можно подробнее о букете?

 

Добавлено через 4 минуты

Прототип беспрерывно работает несколько лет. Никаких проблем не заметил...

 

 

Из нерешенного- если использовать внутреннюю епром, при отключении питания пишется мусор.

 

А основная проблема в другом - эта атмега как маленький шкафчик - запихиваешь туда вещи, а они с другой стороны вылазят - то флэшка кончится, то быстродействия мало, то выводов не хватает.

 

Голоснул ногами сюда -

www.kosmodrom.com.ua/el.php?name=STM32F030C8T6

 

 

Куча периферии,

флэшки в 2 раза больше,

много выводов (если мало, есть такой же с еще больше выводов)

и все это стоит ровно в 2 раза дешевле атмеги.

И это самая младшая модель семейства

  • Лайк 2
Посилання на коментар
Поділитися на інших сайтах

А основная проблема в другом - эта атмега как маленький шкафчик - запихиваешь туда вещи, а они с другой стороны вылазят - то флэшка кончится, то быстродействия мало, то выводов не хватает.

Ну так это ведь не проблема железа - а проблема, создаваемая неправильным выбором элементарной базы.

Посилання на коментар
Поділитися на інших сайтах

Ну так это ведь не проблема железа - а проблема, создаваемая неправильным выбором элементарной базы.

Проект вырос, вначале помещался в atmega88 :))

Посилання на коментар
Поділитися на інших сайтах

Проект вырос, вначале помещался в atmega88 :))

 

У atmega есть одна замечательная штука, которой нет у Cortex: fuses.

Выжег по финалу - и все. Уже вычитать программу практически нереально.

Я так и не сумел на Cortex сделать так, чтобы нельзя было вычитать именно firmware.

Посилання на коментар
Поділитися на інших сайтах

Из нерешенного- если использовать внутреннюю епром, при отключении питания пишется мусор.

 

Теоретически это решить не сложно - но нужно пожертвовать одним аналоговым входом.

 

Суть идеи:

Данные пишем только в оперативку.

Отслеживается падение напряжения ниже некоторого порога.

Как только упало - сбрасываем в еепром.

Посилання на коментар
Поділитися на інших сайтах

Теоретически это решить не сложно - но нужно пожертвовать одним аналоговым входом.

 

Суть идеи:

Данные пишем только в оперативку.

Отслеживается падение напряжения ниже некоторого порога.

Как только упало - сбрасываем в еепром.

 

Ага, проходили на STM. Только там можно поставить СR2032. :-)

Пробовал сохранять без батарейки. Проблемы следующие:

 

1. Времянка. Можно успеть, а можно и не успеть, в зависимости скажем от того, замкнуты ли контакты реле или нет (они тоже "тянут" некоторый ток). При худших сценариях - мусор в EEPROM. Я сейчас уже не помню как у atmega, но обычно данные пишутся банками (кусочками). Если "сорвались в штопор" при записи банка - то только перепрошивка

2. Нужно не только свопиться в eeprom, но и предусматривать логику работы всей системы (и, кстати, связанных устройств) типа "по настоящему пропало/восстановилось питание", или "не по настоящему".

Запрещать например приемку и обработку внешних events

3. Собьются часы на устройстве. Если устройство представляет из себя "автономный кубик", который работает в том числе по расписанию, то это может оказаться неприятным сюрпризом.

 

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

Посилання на коментар
Поділитися на інших сайтах

Проблемы следующие:
Решаются просто - значит, не проблемы :)

 

1. Времянка. Можно успеть, а можно и не успеть, в зависимости скажем от того, замкнуты ли контакты реле или нет (они тоже "тянут" некоторый ток). При худших сценариях - мусор в EEPROM. Я сейчас уже не помню как у atmega, но обычно данные пишутся банками (кусочками). Если "сорвались в штопор" при записи банка - то только перепрошивка

Реле нужно питать отдельно от "камня". Заодно и проблема с помехами от катушки исчезает.

 

2. Нужно не только свопиться в eeprom, но и предусматривать логику работы всей системы (и, кстати, связанных устройств) типа "по настоящему пропало/восстановилось питание", или "не по настоящему".

Запрещать например приемку и обработку внешних events

Ну вот сами же и "решили" это "проблему" :)

 

3. Собьются часы на устройстве. Если устройство представляет из себя "автономный кубик", который работает в том числе по расписанию, то это может оказаться неприятным сюрпризом.
Если критично время - то нужно ставить внутренний аккумулятор/ионистор.

 

При разработке, моделирование этих самых пограничных условий - самая трудоемкая и сложная часть, особенно если устройство не автономно, а часть пусть даже микросети.
Да, конечно - тяжело заранее предусмотреть все нестандарные режимы... Но нужно к этому стремиться :)
  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Теоретически это решить не сложно -

 

Решил по другому- внешняя епром, тем более что у СТМ32 внутреннего и нет. На 2 килобайта стоит 3грн

 

 

Если у вас много релюшек, гляньте ULN2003, очень удобно

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Если у вас много релюшек, гляньте ULN2003, очень удобно

 

Лучше, если не нужна гальваническая развязка. Если нужна (например, разное питание процессора и катушек реле) - то существую оптроны Дарлингтона (например, MOCD223).

 

Кстати, вместо ULN2003 удобнее использовать ULN2803 - у нее восемь выходов вместо семи.

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Решил по другому- внешняя епром, тем более что у СТМ32 внутреннего и нет. На 2 килобайта стоит 3грн

 

Если у вас много релюшек, гляньте ULN2003, очень удобно

 

 

 

А чем встроенная flash на STM для хранения данных не устраивает ?

С 61 по 63 страницу например. Если конечно ваша прошивка все страницы не занимает.

Посилання на коментар
Поділитися на інших сайтах

А какая предполагаемая стоимость устройства?

 

Как девайс работает с пускателями? Как решается защита от помехи при размыкании катушки?

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

А какая предполагаемая стоимость устройства?
Пока не подсчитывал. Но могу точно сказать, что дешевле, чем 8 импульсных реле, которые заменяет данный девайс :)

 

Как девайс работает с пускателями?

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

 

Как решается защита от помехи при размыкании катушки?
Помехи фильтруются конденсатором.

Питание катушек (24В) отделено от основного питания (5В).

Посилання на коментар
Поділитися на інших сайтах

Помехи фильтруются конденсатором.

Питание катушек (24В) отделено от основного питания (5В).

InSAn, наверное мои знания безнадежно устарели, но насколько я знаю, такие помехи фильтруются путем диода, включенного в "обратку", параллельно контактам реле. flyback diode.

 

Добавлено через 7 минут

А чем встроенная flash на STM для хранения данных не устраивает ?

С 61 по 63 страницу например. Если конечно ваша прошивка все страницы не занимает.

unreal1975, не поленитесь изучить документацию под кристалл. Он более чем самодостаточный. Если бы у него был WiFi, то у меня бы и мыслей не возникло использовать что-либо иное. У кристалла есть еще RTC memory (SRAM), которая, при наличии батарейки, сохраняет свое состояние даже при пропадании питания. Я понимаю, что даже без понимания концепта, программу написать можно, но она будет крайне "горбатая". Вас пока спасает то, что никто не делал валидацию кода. На всякий случай, если вы не сможете разобраться самостоятельно (пример):

void flash_save ( const uint8_t *data, const uint16_t size, const uint32_t offset, const uint8_t page, const bool bErase )

{

uint32_t st_address = FLASH_BASE + page * 1024 + offset ;

uint32_t val ;

if ( bErase ) FLASH_ErasePage ( st_address ) ;

for ( uint16_t i = 0 ; i < size ; i += 4 )

{

val = *(data+i) ;

if ( i+1 < size )

val |= *(data+i+1)<<8 ;

else val &= 0x000000ff ;

if ( i+2 < size )

val |= *(data+i+2)<<16 ;

else val &= 0x0000ffff ;

if ( i+3 < size )

val |= *(data+i+3)<<24 ;

else val &= 0x00ffffff ;

FLASH_ProgramWord ( st_address + i, val ) ;

}

}

 

Перед и после, нужно не забыть unlock/lock.
Посилання на коментар
Поділитися на інших сайтах

InSAn, наверное мои знания безнадежно устарели, но насколько я знаю, такие помехи фильтруются путем диода, включенного в "обратку", параллельно контактам реле. flyback diode.

.

От ЭДС самоиндукции включают диод параллельно катушке реле. Параллельно контактам диод не вижу смысла - а если переменный ток через контакты коммутировать ?

  • Лайк 2
Посилання на коментар
Поділитися на інших сайтах

От ЭДС самоиндукции включают диод параллельно катушке реле. Параллельно контактам диод не вижу смысла - а если переменный ток через контакты коммутировать ?

Да, извиняюсь за неправильную формулировку. Конечно же контактам катушки. Это аксиома, не подлежащая обсуждению. Можно еще добавить варистор нужного номинала именно на контакты реле, которые на замыкание. Я обычно не добавляю.

 

 

Рисовать лениво, нашел схему в google, публикую, чтобы было понятнее:

https://www.stroimdom.com.ua/forum/attachment.php?attachmentid=636440&stc=1&d=1540064764

 

 

Внимание !!! Данная схема приведена только для того, чтобы было понятно как включать диод. Остальные компоненты схемы могут (и будут) меняться в зависимости от того, какое аппаратное решение вы выберите.

c2dZg.jpg.9857eb3a05f2b9098e17a3162e98c110.jpg

Посилання на коментар
Поділитися на інших сайтах

Ну и "вишенка на торте" для понимания того, почему перед использованием STM, нужно очень хорошо подумать "а оно мне нужно ?"

 

 

Пример инициализации таймера:

 

 

void InitializeTimer ()

{

RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM2, ENABLE ) ;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up ;

TIM_TimeBaseStructure.TIM_Prescaler = 83 ;

TIM_TimeBaseStructure.TIM_Period = 999 ;

TIM_TimeBaseInit ( TIM2, &TIM_TimeBaseStructure ) ;

TIM_ITConfig ( TIM2, TIM_IT_Update, ENABLE ) ;

TIM_Cmd ( TIM2, ENABLE ) ;

NVIC_InitTypeDef NVIC_InitStructure ;

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1 ;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;

NVIC_Init ( &NVIC_InitStructure ) ;

}

 

Это вам не заботливо подготовленными и достаточно простыми wrappers имени arduino team пользоваться. Тут придется разбираться и кодить по взрослому.

 

 

 

Да, кристалл продолжает хранить некоторые данные, и считать время, пока он на батарейке, но посмотрите пожалуйста на фрагмент кода, при помощи которого "это" реализуется (в качестве примера):

 

 

...

RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN ;

PWR->CR |= PWR_CR_DBP ;

flash_restore () ;

if ( ( RCC->BDCR & RCC_BDCR_RTCEN ) != RCC_BDCR_RTCEN )

{

RCC->BDCR |= RCC_BDCR_BDRST ;

RCC->BDCR &= ~RCC_BDCR_BDRST ;

RCC->BDCR |= RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_LSE ;

RTC->CRL |= RTC_CRL_CNF ;

RTC->PRLH = ( 32767&0x000F0000 ) >> 16 ;

RTC->PRLL = ( 32767&0x0000FFFF ) ;

RTC->CRH &= ~RTC_CRH_SECIE ;

RTC->CRL &= ~RTC_CRL_CNF ;

RCC->BDCR |= RCC_BDCR_LSEON ;

while ( ( RCC->BDCR & RCC_BDCR_LSEON ) != RCC_BDCR_LSEON ) ;

while( ( RCC->BDCR & RCC_BDCR_LSERDY ) == 0 ) ;

RTC->CRL &= (uint16_t)~RTC_CRL_RSF ;

while ( ( RTC->CRL & RTC_CRL_RSF ) != RTC_CRL_RSF ) ;

while ( ( RTC->CRL & RTC_CRL_RTOFF ) == 0 ) ;

}

else

{

RTC->CRL |= RTC_CRL_CNF ;

RTC->CRH &= ~RTC_CRH_SECIE ;

RTC->CRL &= ~RTC_CRL_CNF ;

}

...

 

Правда все понятно ? "оно" вам нужно такой ценой ?

Разработка какого-либо устройства может потребовать немеряно времени и сил. Как результат, стоимость итоговой разработки, станет сравнимой со стоимостью решений, который продают большие компании.

Это на счет советов "atmega плохо, STM лучше".

 

Из того, что я видел на "просторах интернета", большинство копипастит функции, которые кто-то писал для себя, для своих сценариев использования. Скопировали, "засунули" в свой код (иногда даже "не оборачивая"), и радуются пока "оно работает". Как только перестает - фсе ...

Змінено користувачем toksoft
  • Лайк 2
Посилання на коментар
Поділитися на інших сайтах

 

unreal1975, не поленитесь изучить документацию под кристалл. Он более чем самодостаточный. Если бы у него был WiFi, то у меня бы и мыслей не возникло использовать что-либо иное. У кристалла есть еще RTC memory (SRAM), которая, при наличии батарейки, сохраняет свое состояние даже при пропадании питания. Я понимаю, что даже без понимания концепта, программу написать можно, но она будет крайне "горбатая". Вас пока спасает то, что никто не делал валидацию кода. На всякий случай, если вы не сможете разобраться самостоятельно (пример):

Перед и после, нужно не забыть unlock/lock.

 

 

В 103 серии есть, в 030 нет (RTC). Код проверять никто не будет, так как у меня коммерческие проекты. Выбор внешней ЕПРОМ был обусловлен наличием готового примера в SPL, отсутсвием времени на отладку, да и в дальнейшем эти килобайты могут пригодиться

 

По поводу нужно или не нужно - на stm32 получаются намного более интересные устройства, а через пару месяцев приведенные выше простыни перестают впечатлять :)

особенно видно разницу если вы попытаетесь на авр застартовать ТФТ экранчик, хоть бы 2.4. Я тут выкладывал ссылку в теме про ардуино

 

 

Зы если хотите об этом поговорить, давайте запилим отдельной темой

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Створіть акаунт або увійдіть у нього для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!

Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.

Увійти зараз
×
×
  • Створити...