Jump to content
artos5

Тактирование одного таймера от другого таймера stm32f100

Recommended Posts

Добрый день уважаемые ! 

Необходимо решить одну задачу , максимально аппаратно :

Нужно одним таймером формировать меандр , частота которого меняется в регистре предделителя . А вторым таймером на большей частоте в 8 - 16 раз нужно измерять сигнал и оцифровывать при помощи АЦП через DMA . Формирование меандра и точки измерения сигнала должны быть синхронизированы . Как это решить?

Сейчас сделал программно так:

в прерывании по переполнению таймера я инкрементирую переменную и когда она достигнет 8 - 16 , инвертирую бит для формирования меандра . Этим же таймером в связке с dma выполняется оцифровка сигнала на входе АЦП . Входов АЦП 3 , что дополнительно усложняет задачу..

Все было бы хорошо , но не устраивает великоватый джиттер меандра.

диапазон частот формируемого меандра 500-22000Гц (чем выше тем лучше).

Количество точек оцифровки тоже чем выше тем лучше .

пример кода могу позже показать , когда свет появится ..

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
On 15.07.2019 at 20:42, DYeliyev said:

вместо прерывания лучше

А можете пример дать?

Мне вообще надо генерировать меандр и через равные промежутки оцифровывать 1 канал АЦП (он очень важен) , но есть проблема... Используется ещё 2 канала АЦП . Они менее преоритетны , но они сильно мешают чёткому измерению в равные промежутки и сильно замедляют скорость работы одного важного канала. 

Меандр может формироваться до 20кгц , а измерять аналоговый сигнал нужно через равные интервалы времени и с максимально возможной частотой . Чем больше тем лучше . Например 16 семплов за период ШИМ .

То есть этот 1 канал должен оцифровывать с частотой 320кГц .

Мне видится вариант пдп + таймер . И все три канала оцифровывать с частотой в три раза выше требуемой . Но тогда сильно грузится шина , что приводит к замедлению работы другой периферии ..

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

так у вас шим или меандр с изменяемой частотой ?  это как-бы немного разные вещи. 

Share this post


Link to post
Share on other sites

При помощи аппаратного модуля ШИМ формируется меандр. Прямоугольные импульсы одинаковой скважностью и длительностью.

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

 

Ребята , кто подскажет, можно так сделать? Нормально работать будет?  :

есть один важный вход АЦП и есть два не сильно важных входа.

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

Идея просто раз в 2 секунды измерять низко приоритетные входы АЦП. А две секунды измерять высокоприоритетный вход.

Share this post


Link to post
Share on other sites

Если устроит, то есть регулярные каналы и можно настроить групповое преобразование. В группе может быть до 16 каналов. Можно сделать 14 преобразований важного канала и 2 преобразования вспомогательных каналов. При этом можно задать любой порядок следования каналов например: 1,1,2,1,1,3,1,1... Не надо будет перенастраивать, ДМА будет складывать так как зададите. Число каналов и последовательность задается в регистрах ADC_SQR1,2,3.

Share this post


Link to post
Share on other sites

Во , это вроде подходит, а может и нет... Можете пример инициализации скинуть?

Мне нужно за период меандра как можно больше сэмплов выполнять. 

Короче говоря нужно в дальнейшем выполнять над данными ЦОС. 

Нужно минимальное искажение меандра и минимальная нестабильность точек оцифровки .

Share this post


Link to post
Share on other sites

Делал типа такого

  ADC_InitStr.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStr.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStr.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStr.ADC_NbrOfChannel = 4;
  ADC_InitStr.ADC_ScanConvMode = ENABLE;
  ADC_InitStr.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_Init( ADC1, &ADC_InitStr );
	
  ADC_RegularChannelConfig( ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
  ADC_RegularChannelConfig( ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );
  ADC_RegularChannelConfig( ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );
  ADC_RegularChannelConfig( ADC1, ADC_Channel_TempSensor, 4, ADC_SampleTime_239Cycles5 );
  ADC_TempSensorVrefintCmd( ENABLE );
	
  ADC_DMACmd( ADC1 , ENABLE );
  ADC_Cmd( ADC1, ENABLE );

ADC_InitStr.ADC_NbrOfChannel = 4; - это число каналов в группе ставите 16

ADC_RegularChannelConfig( ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 ); - число 1 - канал 0 будет запущен первым и т. д.

Лучше порядок преобразований и число задать через регистры ADC_SQR1, ADC_SQR2 и ADC_SQR3.

ADC_SQR1 = 0х00F00000; - типа такого.

 

Share this post


Link to post
Share on other sites

Спасибо за пример ! Через 2-3 дня попробую как с командировки приеду .

Ещё вопросик :

Если я выберу 1.5 цикл преобразования , какая будет реальная частота работы АЦП при максимальной тактовой?

В МК ещё при этом запущено пару таймеров и ЦАП два канала через DMA.

Share this post


Link to post
Share on other sites

112233.jpg.492f73fe54bb329d1df8ea8c09273da2.jpg

Максимальная частота АЦП 12 МГц. Около 850 000 преобразований в секунду. Другая периферия на время преобразования не влияет. В ДМА лучше для АЦП поставить высший приоритет.

Share this post


Link to post
Share on other sites
1 minute ago, MasterElectric said:

Бери камнь под задачу, а не говно мамонта 12 летней давности

Я знаю что этот камень не подходит. Но поставлена задача под имеющееся железо сделать прошивку .

Я бы взял МК stm32f205/207. Но этого сделать не могу :)

Share this post


Link to post
Share on other sites
Posted (edited)

@artos5 разгони немного АЦП до 14 и по идее сможешь все 3 вычитывать до 22000 * 16 семплов.Судя что при 12 он способен дать 1 Мсемпл

@artos5  Настрой таймер на 16 кратный счет это будет период, 1 канал формирует меандр на половине периода, 2 канал пинает ДМА для АЦП, ДМА настрой на выборку нужного количества каналов * на 2, кольцевой режим, на 1/2 можно обрабатывать первую половину данных. Ну и третий канал будет сдвигать значение компарэ для второго канала.

Edited by MasterElectric

Share this post


Link to post
Share on other sites
42 minutes ago, MasterElectric said:

 

16 выборок на период может быть и избыточно . Достаточно 22кГц * 4..5 выборок . Но пусть возьмём с запасом .

16 всего выборок . 14 выборок из важного входа АЦП , а две оставшиеся выборки из вспомогательных входов .

Вспомогательные входы поместить в начало и конец , чтобы лучше анализировать потом синусоидальный сигнал.

Share this post


Link to post
Share on other sites

Для ЦОС  нужно выборку делать строго периодически, даже если брать 8 выборок на период то можно вычитывать все 3 канала. т.е. за раз вычитывать 3 канала и все.

Share this post


Link to post
Share on other sites
6 minutes ago, MasterElectric said:

за раз вычитывать 3 канала и все.

Понял. Хорошо, тогда вопрос :

сколько можно сделать выборок из 3 каналов при времени преобразования 1.5 такта ? 1.5*3+12.5? Или (1.5+12.5)*3 Тактов?

Share this post


Link to post
Share on other sites
Posted (edited)

Лучше уменьшить время преобразования, и есть табличка зависимости скорости преобразования и входного сопротивления АЦП, оно меняется. Там бы хоть 1 раз получилось. Зачем несколько раз измерять подряд, потом еще усреднять вручную надо.

Edited by MasterElectric

Share this post


Link to post
Share on other sites

Я смотрел этот параметр . При 1.5 сопротивление 400 Ом по моему . На вход АЦП сигнал идёт из операционника mcp6022. Нужно посмотреть , позволяет ли он работать на такую нагрузку ..

Посмотрел при 7.5 такта , сопротивление 5 с копейками килоом .

И если расчеты верны то получится 3 канала опрашивать на частоте 200кгц . 10 выборок на период при 20кгц меандра. Теперь вопрос :

достаточно будет один таймер настроить на формирование меандра 20кгц , а второй в 10 раз выше для пинания дма? Когда запущу счётчик обоих обнулить , чтобы считали одинаково . Или это лишнее? Нужно определять сдвиг синусоиды от меандра .

Share this post


Link to post
Share on other sites
1 hour ago, MasterElectric said:

Для ЦОС  нужно выборку делать строго периодически

Скажите , с вами можно будет по вотсап пообщаться или по Скайпу?

Share this post


Link to post
Share on other sites
2 hours ago, artos5 said:

достаточно будет один таймер настроить на формирование меандра 20кгц , а второй в 10 раз выше для пинания дма?

Зачем два таймера. АЦП сам запускает ДМА по окончанию каждого преобразования. У АЦП есть режим запуска по триггеру. Таймер будет запускать все 10 преобразований по вашему меандру. Только посмотрите какие таймеры и по какому событию могут запускать АЦП.

Share this post


Link to post
Share on other sites

Так получается что нужно настроить чтобы срабатывало по событию переполнения таймера , который формирует меандр в регулярных каналах настроить группы трёх входов АЦП . Таким образом :

123 123 123 123 123 и по прерыванию таймера будет выполняться 15 измерений?

Share this post


Link to post
Share on other sites

Да. Обработку я делаю по прерываниям от ДМА - половина буфера и полный. Пока обрабатываю первую половину, заполняется вторая.

Share this post


Link to post
Share on other sites
9 hours ago, MasterElectric said:

 Настрой таймер на 16 кратный счет это будет период, 1 канал формирует меандр на половине периода, 2 канал пинает ДМА для АЦП, ДМА настрой на выборку нужного количества каналов * на 2, кольцевой режим, на 1/2 можно обрабатывать первую половину данных. Ну и третий канал будет сдвигать значение компарэ для второго канала.

Толку общаться нет т.к. в ЦОС я ничего не смыслю, но про выборки я где-то читал ну это и так логически понятно, пропускать чтение нельзя.

Share this post


Link to post
Share on other sites
26.07.2019 в 14:54, snn_krs сказал:

Да. Обработку я делаю по прерываниям от ДМА - половина буфера и полный. Пока обрабатываю первую половину, заполняется вторая.

Всем привет! 

Что-то меня запутали вы .

Судя по скрину приведенному ниже - это не так .

АЦП конвертирует после события , настроенному в регистрах , в нашем случае настроенном от события таймера. Мне надо (ещё раз объясню) вычислять угол сдвига фазы имея опорную фазу , в данном случае опираясь от генерируемого меандра . Поэтому, необходимо через равные промежутки периода меандра и равные точки начала конвертирования АЦП выполнять измерения . 

По скрину видно что АЦП выполняет одно преобразование после события от таймера , потом следующее после следующего , и т.д. То есть таймера нужно два применять , один таймер должен в 12 раз быстрее тикать от первого , и пинать АЦП . Как это все засинхронизировать чтобы не вылезла ошибка потом ?

Можно своими словами описать алгоритм действий и т.д.

Screenshot_2019-07-27-23-16-00-940_cn.wps.moffice_eng.png

26.07.2019 в 20:32, MasterElectric сказал:

Настрой таймер на 16 кратный счет это будет период, 1 канал формирует меандр на половине периода, 2 канал пинает ДМА для АЦП, ДМА настрой на выборку нужного количества каналов * на 2, кольцевой режим, на 1/2 можно обрабатывать первую

Что-то не догоню... Настроить чтобы делало 16 тиков и сбрасывался счётчик в ноль? То есть прескейлер 16 поставить ? Можно поподробнее расписать?

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Шаловливые ручки голове покою не дают,или наоборот. Прикольно!!!у меня камера алишная с аф фай ,смотрю за собакеном ...а у вас потихонечкк идет к умняшкедому.удачи
    • бп слабый - ток не мерял - да и роли не сыграет - будет больше-только плюсом - напряжение 12вольт видео сделал раньше ваших рекомендаций - ес нужно могу сделать 10 отверстий
    • Синий и коричневый соедединить и подключить к правому контакту розетки. А желтозеленый  - к левому. И послать тещу включать автомат.
    • Использовать можно все,даже шимку,но на какой шим собирать будешь,то и забивай в поиск,а выходное вмёравно считать,вот иисчитай свое напряжение.если раньше не делал иип,купи бу
    • Вы сами о ней заговорили зачем-то. На нет и суда нет. Гетинакс я сверлить своим не пробовал пока, не могу сравнивать. Просьба сделать подряд 5-6 отверстий "навылет" в текстолите, сверлом 3 мм. Не забудьте, плиз, озвучить подаваемое напряжение на мотор и ток через него.
    • у меня камера наблюдения, я ее выключаю когда дома) но она на потолке, со стула надо лезть) плюс иногда забываю включить... вот я решил вывести в интернет ее, что бы если забыл мог включить удаленно) за одно там же рядом свет идет барной стойки, вот и его туда же увел, так как его хочу включить обычно сидя за столом) а нужно вставать и со стула лезть включать)) но так как совсем лишиться включения света без мобилки не хотел, сделал еще сенсорную кнопку...  
    • Начни с работы приемника,пульт позже...
  • Покупай!

×
×
  • Create New...