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

STM32F103 не пишет в TIM4->DIER

32 минуты назад, haker_fox сказал:

А потому, что это нередко сопровождается следующими трудностями:

...

Самая главная трудность не эта, а 5-я:

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

Например выкладывает a = b + c, совершенно не описывая что такое a, а что такое b, и в каком месте кода написана эта строка, видимо полагая, что зашёл на форум телепатов.

Это пункт мы как раз ярко и наблюдаем у данного ТС-а в этой теме.  :unknw:

А также ещё 6-й пункт:

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

Эти пункты как правило и приводят к тому, что на вопросы таких партизанов и отвечать нет совершенно никакого желания.  :unknw:

 

PS: Да - и самое главное (ТС-у я уже дважды на это намекал): Нет никакого смысла учить танцевать младенца, ещё не умеющего даже ходить. Начать нужно с изучения языка. Потом - освоения базовой периферии. Тогда, пару лет спустя, можно уже подумать об управлении BLDC. И то - только с управления по датчику положения ротора, до бездатчикового управления - надо ещё опыта набраться, ещё наверное год).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, MPetrovich said:

Ошибаться не зазорно, глупо не признавать ошибок.

Так выше вам подробно расписали ошибку:

2 hours ago, jcxz said:

Это определение массива типа char в ОЗУ размером 1 байт инициализированного строкой нулевой длины. Писать что-то бОльшее в такой "массив" - прямой путь к hard fault-у.

И очевидно, что никакой результат вашей itoa() в этот массив не влезет, а потрёт n-е количество байт памяти после массива ADC.

Вы же просто ответили, что всегда так поступаете...

 

13 minutes ago, MPetrovich said:

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

Да, архивы никто не любит, разбираться в куче чужих исходников некогда. Вы должны сами выделить компактный фрагмент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Сергей Борщ said:

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

Да, спасибо, я уже понял. 

 

5 minutes ago, Сергей Борщ said:

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

Вот Вы, пожалуй, единственный в этой теме, кто реально хочет помочь! Вот сразу конкретное предложение. СПАСИБО!!!

 

24 minutes ago, haker_fox said:

1. Проект, в котором предлагается найти ошибку - большой. И поверьте, хватает своих забот. Решение: сформулировать маленькую задачку, т.е. выделить из проекта маленькую проблему.

ДА, да, я уже написал выше, что прицеплять архив с проектом не имеет особого смысла. Я в этом уже неоднократно убеждался. Локальную задачу я попытался сформулировать, но, как оказалось, проблема даже не там, где казалась)))

7 minutes ago, haker_fox said:

Не ставлю целью уесть, но на каком основании вы предполагали, что так можно объявить безразмерный массив? Возможно опыт от другого языка? Вы же читали документацию на Си?

Это я не про Ваш ответ написал)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, aaarrr сказал:

Да, архивы никто не любит, разбираться в куче чужих исходников некогда. Вы должны сами выделить компактный фрагмент.

++ ...обычно ещё и надёрганных из разных чужих, в которых сам ТС ничего не понимает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, aaarrr said:

Так выше вам подробно расписали ошибку:

Если бы Вы  не дали конкретного ответа (за что ещё раз благодарю), то я его и не дождался бы от автора "расписания".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, MPetrovich said:

Это я не про Ваш ответ написал)))

Да это тут не при чём... Мне просто интересно, почему Вы так массив объявляете.

20 minutes ago, jcxz said:

Нет никакого смысла учить танцевать младенца, ещё не умеющего даже ходить. Начать нужно с изучения языка

ИМХО, святые слова! Тем более, автор использует Си. Старая добрая книжка Кернигана и Ричи (3-е издание) спасёт отца русской демократии. Это ТС сейчас только обнаружил, что его неправильно объявленный массив позволяет затирать смежные данные. А сколько ещё подобных ошибок он не нашёл?

 

Автор темы, попробуйте анализатор натравить на ваш код. 90% "глупых" ошибок он Вам найдёт на Ура!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, haker_fox said:

Да это тут не при чём... Мне просто интересно, почему Вы так массив объявляете.

Оттого, что не знал как правильно.:sorry:

 

1 hour ago, haker_fox said:

попробуйте анализатор натравить на ваш код. 90% "глупых" ошибок он Вам найдёт на Ура!

попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотел бы вот что еще уточнить: каким образом лучше осуществлять переключение каналов ШИМ? Регистром TIMx->CCMR1 + TIMx->CCMR2 биты OCxM =100b или регистром TIMx_CCER биты CCхE?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем-то без разницы. В регистре CCER вы можете дергать несколько ШИМов одновременно, только и всего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, Сергей Борщ said:

В регистре CCER вы можете дергать несколько ШИМов одновременно, только и всего.

Так я и в TIMx->CCMR1 + TIMx->CCMR2 могу так же несколько ШИМ-каналов переключать - 1+2 в TIMx->CCMR1 и 3+4 в TIMx->CCMR2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вопрос в следующем: какое значение выдаст АЦП при подаче на вход отрицательного сигнал величиной равной примерно величине падения на диоде. Дело в том, что я ограничил снизу входной сигнал уровнем земли, поставив диод в обратном включении. Соответственно, при подаче на вход отрицательного сигнала меньше, чем -0,6В(скажем -1В) на входе АЦП должно быть -0,6В

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, MPetrovich сказал:

Вопрос в следующем: какое значение выдаст АЦП при подаче на вход отрицательного сигнал величиной равной примерно величине падения на диоде. Дело в том, что я ограничил снизу входной сигнал уровнем земли, поставив диод в обратном включении. Соответственно, при подаче на вход отрицательного сигнала меньше, чем -0,6В(скажем -1В) на входе АЦП должно быть -0,6В 

Все SAR АЦП, применяемые в МК обычно меряют от -Vref до +Vref, которые обычно подключены к GND и VDDA. Все что выше +Vref дает максимальный код, все что ниже -Vref дает минимальный код. Но до определенного предела. Обратите внимание, что нижний предел входного напряжения МК ограничен GND - 0.3V
При еще большем отрицательном напряжении начнут приоткрываться защитные диоды, и весь кристалл может начать себя вести неадекватно. Из моей практики: аналоговые ключи начинают течь из канала в канал, компараторы и ОУ выдают на выходе непредсказуемые вещи...
Так что вход АЦП, если на нем возможно отрицательное напряжение, нужно защищать диодами шоттки и последовательными резисторами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, MPetrovich said:

На входе компаратор,

Не совсем так. Там матрица конденсаторов. Поглядите AN2834

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, Baser said:

вход АЦП, если на нем возможно отрицательное напряжение, нужно защищать диодами шоттки и последовательными резисторами.

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

 

4 hours ago, haker_fox said:

Там матрица конденсаторов. Поглядите AN2834

Спасибо за ссылку. Очень наглядно. По приведенной в апноте схеме, после конденсаторов все равно стоит компаратор, у которого на входе в общем случае: VCOMP= –VIN+ 1/n VREF. Тогда, при входном отрицательном напряжении, на входе компаратора будет: VCOMP= +VIN+ 1/n VREF. Надо полагать, что пока входное напряжение не достигнет нуля, в регистр будут записываться нули. Или я что-то упустил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...