![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
-
Постов
3 594 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
проверить:
- ножка для запуска загрузчика (P2.10)
- контрольная сумма по адресу 0x14
-
Я бы собрал источник тока 12мА (lm317 и резитор 100 Ом). Датчик и источник тока последовательно с блоком питания 24В (не меньше). Измеряем падение напряжения в дежурном режиме и при пожаре.
-
Предположу, что импульсы идут двухполярные 24 Вольта.
Положительный импульс нужен для передачи энергии на питание и для контроля состояния "ПОЖАР". Отрицательными импульсами контролируется оконечный элемент цепи, иначе говоря обрыв шлейфа (как правило, диод и резистор). При пожаре положительные импульсы шунтируются (как правило тиристор и диод). КЗ от ПОЖАРа отличается тем, что отрицательная полуволна в случае КЗ потребляет значительный ток.
-
Выпаять стабилизатор и подать соответствующее напряжение от мощного блока питания. Там где начнет греться - там и проблема!
-
Аналоговую часть тоже нужно разработать?
Алгоритмы шумоподавления нужны?
Файловая система FAT?
Запись по детектору нужна?
-
Спасибо за совет.Но нет аналоговых входов. Нужно использовать дополнительные модули для аналоговых входов. Что повисит стоимость системы в целом.
А 154?
-
да, с кондиционером забавно было читать ;)
ага. и опора по этой же причине показывала все что угодно, но не 1.2В - кондишн по сравнению со встроенной АЭС отдыхает)
-
Посыпаю голову пеплом...
Разобрался: действительно неправильно задавал время преобразования канала(
Теперь все хорошо
-
Время выборки АЦП на канале термодатчика правильно установлено?
Да.
Причем делал два варианта:
1. Запускал преобразование битом ADON (вручную) с фиксированной задержкой (много больше 17 мкс).
При этом наблюдались периодически три значения с АЦП! Т.е. три пика в ПРВ (плотность распределения вероятности) значений. Аналогичный результат (три пика) и с опорой (!). Сигнал с реального входа - один пик. Если задержку сделать рандомную, то пики размываютя, но все равно три максимума.
2. По событию T2C2 через DMA (450 мкс). Наблюдается один пик. Но зависит от температуры и очень сильно от частоты ядра. От периода дискретизации практически не зависит. Опора тоже "плавает". Значания "по даташиту" получаются при FPLL = 24МГц.
Калибровку включал - принципиально не помогает.
Впрочем, к АЦП есть еще один маленький вопросик. Что за "пила" с частотой дискретизации (44100Гц) наблюдается на входе АЦП болтающемся в воздухе?
Нет. Я конечно понимаю, что большое входное сопротивление, перезарядка УВХ и емкости пина; допускаю, что на входе АЦП нужно ставить полосовой фильтр (или ФНЧ) для "работы теоремы Котельникова" без наложения спектров, но:
1. А как же аналоговые входы с большим входным сопротивлением без "огорода"?
2. Как один знакомый возмущается: "зачем ставить операционник там, где можно использовать один транзистор с ОЭ"?
Теперь по теме:
В целом, STM32F мне очень нравятся.
LPC17xx тоже пробовал, но мало. Ближайшее время есть необходимость поделать кое-что на LPC1114 (светодиодом на нем уже моргал - понравилось, особенно цена), но в новые разработки закладываю STM32F10x.
У STM, на мой взгляд, очень удачно Ethernet в 64 ногом корпусе, правда при этом многим приходится жертвовать...
У LPC с ремапом пинов вроде лучше, у STM - бардак полный) - даже большая часть эраты этому посвящена.
У LPC1114 сначало смутило, что под ремап пина уделяется отдельный регистр (причем хаос полный) - потом ощутил в чем прелесть)...
-
Вообще-то у подавляющего большинства МК на время измерения температуры кристалла встроенным термодатчиком, рекомендуется переводить ядро в режим энергосбережения ("спячки"). В противном случае получается цена на дрова в соседней области, слабо коррелирующая с реальной температурой кристалла.
Хм... тем не менее если держать пальцем корпус десятые доли градуса начинают бежать вверх (корпус холоднее 36C). Показание температуры держатся крайне стабильно (в пределах 4-х единиц).
При скачкообразном изменении частоты ядра - температура тоже меняется скачкообразно.
При изменении частоты от 12МГц до 72МГЦ температура меняется с +70С на минус 10С.
Не верю, что при повышении частоты ядра "встроенный кондиционер"(?) сможет охладить кристалл на 80С за десятые доли секунды.
-
Это в любом кристалле так.
Обычно в качестве встроенного датчика стоит туподиод.
Да и что может намерить встроенный датчик, если его кристалл греет?
На мой взгляд, основное его предназначение - определить три области: слишком холодно-нормально-слишком горячо.
Датчик и должен показывать температуру кристалла.
У STM32F10x показания зависят... от частоты ядра, периодичности выборки, последовательности каналов.
Показания, от -10 до +70 (от 72МГц до 12МГц)! - значение получем в единицах, переводим в милливольты, затем в градусы.
Слишком-холодно и слишком-горячо не получается. Можно лишь сказать "за последние 10 секунд температура повысилась на 12 градусов".
-
По документации- надо ОЧЕНЬ внимательно читать, Yо, действительно, все описано.
Кристалл хороший, но, как уже писали- надо перед проектированием устройства внимательно все изучить, как что работает.
+1
Особенно понравилось "многа букаф" про встроенный температурный датчик...
Из которых самыми нужными были те, что в начале: мол, если хотите абсольтную температуру, то пользуйтесь внешними датчиками температуры; если достаточно увидеть динамику (теплее-холоднее) - то можно пользоваться встроенным )
-
ОВЕН ПЛК100 ?
-
Регистр SC->FLASHCFG и SC->CCLKCFG правильно записываете. Нужны ws для работы с флешкой. Инициализировать их надо ДО включения PLL!
Код бы глянуть...
-
На какой частоте работает PLL - смотреть внимательно
-
..Удивился.
Периферия, как раз – общее место.
Практически стандартная. У PIC-ов чуть получше, чем у AVR.
Интересовать может только конкретный список, у конкретной модели.
Ну, так, при выборе МК это и учитывается, а дальше-то, что на неё глядеть, на периферию?
Периферия может отличатся сильно! Например "практически стандартный" таймер у AVR и LPC-ARM:
- предделитель AVR есть степень двойки, у LPC - произвольный;
- разрядность у AVR 8 бит, у LPC 32 бита, у STM32F 16 бит;
- реализация ШИМ на AVR и на LPC(STM) "две разницы";
- на таймере STM делал захват сигнала: по фронту импульса счетчик обнулялся, по спаду происходил захват длительности импульса, по фронту - захват периода с последующем обнулением и прерыванием. В обработчике получал совершенно железные два числа: длительность и период. По сути анти-ШИМ, для получения сигнала от ИК-приемника. На AVR так не сделать!
Про DMA, ADC, DAC, Ethernet, USB я молчу...
Конечно если от таймера нужно лишь периодически возникающее прерывание или установка флажка, то... различий как таковых нет.
..А вот система команд..При смене семейства, сравните: 30 (примерно) против 130 (примерно). Это пустяк, разве (PIC и AVR)?
Если писать на C, то код практически "стандартный". Написал один раз библиотечку, а потом везде ее пользуешь. "Я так сто раз делал!" (с).
..Отладочные платы никогда не использовал..Вероятно, они, для каких-то кружков пионеров, что-ли.. :rolleyes:
Реально, в них нужды нет.
Т.е. Вы заливаете код в контроллер и он сразу же работает! Если так, то... возьмите меня в ученики.
-
Господа, я бы добавить хотел!
Дело в том, что контроллер по моему разумению - это не "тупая" молотилка команд, это еще и периферия!
"Правильная" программа для микроконтроллера (мнение субъективно) выглядит примерно так:
int main(void)
{
init_all();
while(1);
}
или так:
jmp RESET
RESET:
call InitAll
MAINLOOP:
rjmp MAINLOOP
При изучении конкретного контроллера бОльшую часть времени лучше тратить на изучение его периферии, а не системы команд. На C результат достигается быстрее; не лишено смысла понятие "переносимость" (замечательнейшее свойство!).
Ассемблер знать... желательно. Помню, случай когда, у программистов одного крупного нефтеперерабатывающего предприятия не "взлетела" наша DLLка связи - велетает странная ошибка, чуваки в панике: "ничего не работает! я вызываю функцию из библиотеки, а она приводит ошибке"... Десять секунд в отладчике под изумленными взглядами публики (мол, а что это такое? ассемблер?!) показали, что нарушены соглашения вызовов библиотечных функций. Поправили импорт - все заработало. Итого: можно было или отладчиком самостоятельно понять причину (подразумевается знание asm), или почитать доку на DLL (подразумевается знание руских букв и слов).
Я бы рекомендовал C для начала (про asm и машинный код достаточно просто знать, что такое тоже бывает).
И еще один совет: обязательно иметь при изучении железку с "кнопкой и светодиодом" - мощный мотиватор.
И еще одно наблидение: у новичка и у дядьки, разрабатывыющего устройства за деньги взгляды на предметную область сильно отличаются.
-
здесь не полный код. Нет настроек каких-то,которые идут до таймера.
Здесь достаточный код для генерации ШИМ сигнала на ноге PB7 указанного МК)
А Вы его уже запускали?
Достаточно:
1. Включить тактовые частоты таймера, порта, альтернативных функций;
2. Настроить порт на альтернативную функцию;
3. Настроить таймер на генерацию ШИМ;
4. Зациклится на месте.
0. Не использовать библиотеку от ST (опционально)
-
Попробывал код из сообщения #8. Все работает и в симуляторе (Keil) и в железе (STM32F103T8U6)!
-
#include "stm32f10x_map.h" #define RCC_APB1ENR_TIM4EN ((u32)(2)) #define RCC_APB2ENR_IOPAEN ((u32)(2)) #define RCC_APB2ENR_IOPBEN ((u32)(3)) #define RCC_APB2ENR_AFIOEN ((u32)(0)) #define RCC_CFGR_ADCPRE ((u32)(14)) #define RCC_CFGR_PPRE1 ((u32)(8)) #define AF_PP_50 ((u32)(11)) #define CFG_PIN7 ((u32)(28)) #define TIM_CCER_CC1E ((u32)(0)) #define TIM_CCER_CC2E ((u32)(4)) #define OC_MODE_PWM1 ((u32)(6)) #define TIM_CCMR1_OC1M ((u32)(4)) #define TIM_CCMR1_OC2M ((u32)(12)) #define TIM_CR1_CEN ((u32)(0)) #define TIM_CR1_ARPE ((u32)(7)) int main() { RCC->AHBENR=0; RCC->APB1ENR= (1<<RCC_APB1ENR_TIM4EN); RCC->APB2ENR= (1<<RCC_APB2ENR_IOPAEN) |(1<<RCC_APB2ENR_IOPBEN) |(1<<RCC_APB2ENR_AFIOEN); RCC->CFGR= (3<<RCC_CFGR_ADCPRE) |(4<<RCC_CFGR_PPRE1); GPIOB->CRL=(AF_PP_50<<CFG_PIN7); // T4_C2 TIM4->ARR=(12000000/75000)-1; // запись периода TIM4->PSC=0; // запись базы TIM4->CCR1=10; // длительность импульса DIM0 TIM4->CCR2=20; // длительность импульса DIM1 TIM4->CCER= (1<<TIM_CCER_CC1E) |(1<<TIM_CCER_CC2E); // разрешить первый и второй выходы сравнения TIM4->CCMR1= (OC_MODE_PWM1<<TIM_CCMR1_OC1M) // режим ШИМ для первого канала |(OC_MODE_PWM1<<TIM_CCMR1_OC2M); // режим ШИМ для второго канала TIM4->CNT=0; TIM4->CR2=0; TIM4->CR1= (1<<TIM_CR1_CEN) // разрешить счет |(1<<TIM_CR1_ARPE); // разрешить автоматическую перезагрузку while(1); }
В Keil даже симулируется...
АХТУНГ!
А есть ли четвертый таймер у 103T8?
-
А в регистре RCC_APB2ENR бит AFIO_EN установлен?
-
Ага.
Только стандарт у каждого свой :)
Наиболее стандартно, что 5 контакт - земля
Часто бывает, что 1 и 2 - это А и В
А MOXA, например, 3 и 4 любит под RS-485 задействовать:
N - 4-wire - 2-wire
1 - TxD+(B) - x
2 - TxD-(A) - x
3 - RxD+(B) - Data+(B)
4 - RxD-(A) - Data-(A)
5 - Gnd - Gnd
-
Неужто и вправду кто-то такое реально городит? Тем более что давно уже есть драйверы со встроенной оптоизоляцией и защитой.
Хотелось бы узнать названия.... чтоб "реально не городить"
-
Можно. Если напряжения на пинах 1-4 относительно пина 5 в диапазоне от 0 до 5 вольт, то RS-485; если плюс/минус 12 вольт, то RS-232. Необходимое подручное средство - вольтметр.
Подавление наносекундных помех (барьеры)
в Электробезопасность и ЭМС
Опубликовано · Пожаловаться
По-моему:
1. Тип резистора влияет на вид схемы замещения. Т.е. добавляются паразитные элементы: индуктивности, емкости, нелинейности и т.п. Для разных типов резисторов (конденсаторов, печатных проводников) - разные схемы замещения с разными значениями R, L и C. Плюс ко всему диапазоны входных величин разные, плюс всякого рода стабильности и т.п.
2. В 99% случаев резистор нужен для "работы закона Ома". Видимо, ток нужно ограничивать - поэтому и номинал больше.
3. см. п. 1
Вообще, у радиофизиков принято всем что "рояля не играет" пренебрегать. Так что в конкретных условиях все становится намного проще, чем может быть в строгой теории.