|
RC генератор на STM (генератор с переменным конденсатором) |
|
|
|
May 18 2017, 20:07
|
Группа: Участник
Сообщений: 14
Регистрация: 23-11-14
Пользователь №: 83 801

|
Hei! Помогите пожалуйста с идеями, как реализовать генератор на STM(8,32 - не важно) с внешним переменным конденсатором. блок схема примерно такая:  конденсатором определяется частота генератора, которая, в свою очередь, измеряется таймерами и пр. Сделать RC цепочку - запускать и останавливать таймер или сбрасывать его по прерыванию весьма нестабильный вариант, я уже пробовал. использовать внешние элементы для генератора - оно уже так работает, хочу убрать всю схему внутрь процессора. Спасибо!
Сообщение отредактировал rtype - May 18 2017, 20:09
|
|
|
|
|
May 22 2017, 17:09
|
Группа: Участник
Сообщений: 14
Регистрация: 23-11-14
Пользователь №: 83 801

|
Цитата(firew0rker @ May 19 2017, 06:08)  Тактирование системной шины SYSCLK можно настроить от встроенного генератора HSI (8МГц). К генератору HSЕ вместо кварцевого резонатора подключить по схеме замещения внешний переменный конденсатор с индуктивностью.
В Clock configuration register (RCC_CFGR) настроить MCO: Microcontroller clock output на HSE clock select. Это будет выход генератора. Его можно соединить со входом таймера, чтобы мерить частоту.
Кроме того, RTC может тактироваться от внешнего HSE (с делителем /128) и выдавать частоту делённую на 64 на выход CCO: Calibration clock output. трогать тактовую нет резона - она нужна для измерения измеряемого параметра. Таймер перепускать я пробовал, но, стабильность такого варианта оказалась хуже, чем измерять внешний генератор на двух инверторах: повторяемость результата измерения процентов 70, а с генератором около 95%. Изменение частоты внешнего генератора у меня 10-50kHz. предполагаемый процессор - stm8f003 или stm32f030.
Сообщение отредактировал rtype - May 22 2017, 17:09
|
|
|
|
|
May 23 2017, 09:35
|
Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716

|
Цитата(rtype @ May 23 2017, 00:09)  трогать тактовую нет резона - она нужна для измерения измеряемого параметра. Вместо внешнего генератора на двух инверторах можно использовать встроенный генератор микроконтроллера. Для частот 10-50kHz подойдёт LSE. Вместо часового кварца между выв. OSC32_IN и OSC32_OUT включить контур с внешним переменным конденсатором и катушкой. Мерить частоту относительно тактовой, как описано в «Calibration of the HSI» Reference manual, только наоборот, частоту HSI принять константой и вычислять частоту LSE.
|
|
|
|
|
May 23 2017, 19:05
|
Группа: Участник
Сообщений: 14
Регистрация: 23-11-14
Пользователь №: 83 801

|
Цитата(firew0rker @ May 23 2017, 12:35)  Вместо внешнего генератора на двух инверторах можно использовать встроенный генератор микроконтроллера. Для частот 10-50kHz подойдёт LSE. Вместо часового кварца между выв. OSC32_IN и OSC32_OUT включить контур с внешним переменным конденсатором и катушкой. Мерить частоту относительно тактовой, как описано в «Calibration of the HSI» Reference manual, только наоборот, частоту HSI принять константой и вычислять частоту LSE. Спасибо! катушки у меня нет за ненадобностью - только RC генератор, где конденсатор (емкость и ESR) зависит от измеряемого параметра. генератор конечно можно сократить до пары транзисторов. Ваш вариант вполне годный для stm32, где RTC есть, но и тогда часы перестанут работать, что тоже плохо, энергопотребление сложнее снизить будет. основной кандидат - stm8s003: я уже пробовал STM8S touch sensing key lib - там интересный алгоритм измерения емкости, но тоже не смог добиться более-менее повторяемых результатов (емкость конденсатора у меня на порядки больше, чем для touch key). как-то модифицировать эту библиотеку сил я в себе не нашел, т.к. результат не понятен, а методика с частотой генератора уже работает. Работасть с таймерами и прерываниями тоже не получилось с годным результатом.
|
|
|
|
|
May 27 2017, 05:45
|
Группа: Участник
Сообщений: 12
Регистрация: 15-05-17
Пользователь №: 97 085

|
Timer в STM32 может одновременно генерировать сигнал и измерять частоту. Один канал настраиваете на генерирование, а на другой канал поступают импульсы для измерения пропущенные через RC цепочку. Импульсы пропускаете через RC цепочку, через триггер Шмидта и измеряете длительность импульса. Вообще вариантов может быть много.
|
|
|
|
|
May 28 2017, 20:38
|
Группа: Участник
Сообщений: 14
Регистрация: 23-11-14
Пользователь №: 83 801

|
Hei! Самогенерация (RC генератор на логических инверторах). Частота изменяется примерно 5..100кГц, рабочий режим примерно 10..50.  в этом режиме все работает приемлемо, стабильность генерации достаточная, девиация частоты 5% в в течение минуты меня устраивает. Таже RC цепочка - интегратор, подключенная к генератору - для примера достаточно крайние значения частот.   очевидно, что добротность фильтра крайнее низкая. Это собственно и есть один из параметров измерения (меняется емкость и ESR). Поэтому измерение длительности импульса счетчиком получается плохо. при низкой частоте импульсов (примерно 5..10кГц) длительность импульса плавает на 20% между повторными измерениями. при высокой частоте, уровень сигнала низкий, усиливать его - поставить теже внешние элементы. Хочу также пояснить, что я не являюсь программистом или специалистом по однокристальным МК. Как запустить таймер управляемый от RC, желательно без прерываний? Спасибо!
|
|
|
|
|
May 29 2017, 10:45
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945

|
Цитата(Rst7 @ May 29 2017, 12:54)  Я что-то не пойму, Вам что измерить надо? Емкость датчика? Так есть более вменяемые методы, чем генератор заводить. И на современных микроконтроллерах очень удобно реализуются, нужен будет только один внешний операционник (правда быстродействующий и с полевиками на входе) плюс пара-тройка резисторов/конденсаторов. Покажите пожалуйста, очень интересно!
|
|
|
|
|
May 29 2017, 11:26
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE (alex2103 @ May 29 2017, 13:45)  Покажите пожалуйста, очень интересно! Запросто.
На картинке: Cx - собственно датчик. С2 - опорный конденсатор, его емкость для простоты можно выбрать как 2*Cxmax. V2R4 - ну типа ножка порта GPIO, среднепотолочная. Там сигнал возбуждения, для простоты - меандр от таймера. Вывод OUT подключается ко входу АЦП контроллера. Запуск преобразования производится в моменты времени 0.25Т (половина времени нуля на выводе EXC) и 0.75Т (половина времени единицы на выводе EXC) (см. положение курсоров). Потом берем разность между двумя измерениями, результат будет такой: V(0.25T)-V(0.75T)=V(EXC)*Cx/C2 => Cx=C2*(V(0.25T)-V(0.75T))/V(EXC). Усреднения и прочие пироги добавлять по вкусу. Прелести такой схемы в том, что левую по схеме обкладку Cx можно подключать к схеме хоть просто куском МГТФа, а правую - через экранированный кабель почти любой длины, его емкость не влияет на результат измерения. Ну и плюс такой способ измерения нечувствителен к утечкам в конденсаторе (в разумных пределах).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 29 2017, 12:13
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE (alex2103 @ May 29 2017, 14:47)  Rst7, спасибо за развернутый ответ. Непременно на досуге опробую! В реальных применениях какой операционник использовали если не секрет? Очень давно - 574УД3. Потом AD8065 (правда там питание 5В было). Вообще подходящих валом нынче. Я бы выбирал по параметрическому поиску у любого вменяемого производителя с 3.3В Rail-To-Rail I/O, полевики на входе, полоса единичного усиления не меньше 50-100МГц.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|