Хорошие уроки! Благодарю! Когда первый раз изучаешь материал, скорость не нужна) Это не олимпиада, скорость потом нарабатывается. Нужна скорость - на сайте можно прочитать)
sprintf может конвертировать ФЛОАТ в строку? Я пишу так: float f = 1.123456789; char c[50] = {}; //size of the number sprintf(c, "%g", f); Но после принта массив все равно остается пустой. Библиотека #include включена. МК - STM32F072
я вот не пойму одно, всё настроил, но откуда напряжение на ноге изначально если я ещё ничего не подавал? STM32f4 похоже изначально настраивает её в высокий уровень, это нормально?
Сделайте пожалуйста урок на Triple Interleaved mode с использованием DMA. Довольно сложно с этим всем разобраться самому. А вообще в идеале, что мне нужно: Triple Interleaved Mode, DMA и при этом сканирование 8-ми каналов. Это вообще возможно. Удачно получилось только реализовать поочередное сканирование 13-ти каналов АЦП в обычном режиме с использованием DMA. З.Ы. Если вопрос вас заинтересовал, возможно ли с вами связатсья по почте?
Здравствуйте, давно смотрю ваши ролики, они стали для меня очень полезными! Хотел бы узнать возможно ли как то передать сигнал с платы по USB но без USART ? Моя задача считать аналоговый сигнал и передать его на компьютер. Для начала хотелось бы просто посмотреть на форму сигнала. Можно ли это как то реализовать? Спасибо большое!
Можно задать опорное напряжение от внешнего источника на ногу Vref согласно datasheet на конкретный контроллер. Младший разряд в цифровых измерительных системах всегда "прыгает" на +/-1 значение (деление) в лучшем случае, при отсутствии шумов от входного сигнала и от самого АЦП.
Петр Долгих в принципе можно. Также можно и отфильтровать прыжки. Я показал вообще принцип программирования АЦП с помощью HAL, а дальше уже вопрос фантазии.
Петр Долгих а как кой смысл?, Как я понял из datasheet, опорное напряжение все равно больше питания микроконтроллера нельзя подать(3,6V). В дискавери Vref на Vdd посажен и все...
А будет видео с регулярными каналами и ДМА? Ну или просто преобразование нескольких каналов и распихивание в разные переменные. :-) Хотя, у меня есть мысль использовать именно непрерывное преобразование и ДМА. Кстати, по опорной напруге. Там можно их две делать, минимальную и максимальную.
Конечно, будет. Уже готово по прерываниям в регулярном канале, но ещё не заливал, надо доработать его немного. А следующим пойдёт в рейс именно регулярный DMA, так что ждите.
Здравствуйте Narod Stream! Подскажите пожалуйста, где узнать максимальную частоту оцифровки ацп? У меня плата с stm32f767, частота ядра 216 МГц. Нашел в RM, что ацп висит на шине APB2, которая делит частоту пополам. Еще предделитель делит на 4, больше не получается. Выходит 216/2/4=27 Мгц. Правильно рассуждаю? yadi.sk/i/8Uanr9qOHCpuGg Делаю индукционный нагреватель на 300 кГц, хочу сделать фапч программно. Скорости большие, но хранить и передавать данные с ацп не надо, обрабатываются на лету. Так что теоретически должно хватить )))
Здравствуйте! Нет такой величины - максимальная частота оцифровки АЦП. Поэтому каждый понимает под этим какие-то свои величины. Конкретнее скажите Вам нужен сэмплрейтинг или реальная частота колебаний, которую Вы хотите измерить? Сэмплрейтинг зависит от того, какое разрешение АЦП Вы выставите, 8 бит, 12, 16 или ещё какую. мегабиты в секунду Вы в принципе нормально рассчитали. Поэтому получаем что частота сэмплирования с разрешением 8 бит (градаций будет от 0 до 255 единиц) будет где-то 4 мегабита. Чтобы нам измерить синусоиду, то нам как минимум надо 20 сэмплов на один период, чтобы у нас хоть что-то нарисовалось. При 8-битном разрешении мы соответственно получим 200 килогерц максимальную частоту, которую мы сможем измерить. При 12-битном - меньше, при 16-битном - 100 килогерц. Да я по-моему в каком-то уроке это говорил, когда свой самодельный осциллограф подключал на F746. Если хотите большие частоты, то используйте внешний АЦП и контроллер, у которого есть широкий аппаратный параллельный порт (на 32 ноги). Тогда будет нормально. Это я тоже теоретически, так как такой целью не задавался. Поэтому не знаю таких контроллеров и таких АЦП. Только знаю, что они есть.
А, дошло, делим еще на 8 (процессов делений отрезка, как Вы рассказывали в видео про avr, каждый расходует один такт), итого 168,7 КГц. Плюс еще время на конверсию. Не найду, сколько это, пишут 15 тактов. Это общее время или каждое из 8 штук?
Это общее время, вернее не время, а количество тактов. как правило в Cube MX оно написано. Мне удалось где-то 100 герц колебаний замерить с разрешением 8 бит.
Не пойму, откуда берутся эти 4096 ? u = ((float)HAL_ADC_GetValue(&hadc1))*3/4096 Как быть если 5 вольт к примеру подавать? Или больше? Т.е. простенький вольтметр чтобы был. Делитель из резисторов надо ставить? Урок по вотчдогу будет?
1. Данная цифра из даташита. Если смотреть все уроки по АЦП, то то я где-то я делаю экскурс по даташиту, там есть формула расчета. Только там она несколько наоборот. Получается неизвестная величина в теле уравнения. Переворачиваем уравнение и получаем эту формулу. Вообще-то эта цифра очевидна, т.к. АЦП у нас 12-битный, 12 включенных бит это - FFF, т.е. 4095, а 0 мы используем тоже. Имеются споры насчет того, все таки 4096 или 4095. Вообще в даташите стоит 4095, но с 4096 у меня почему-то получилось точнее. 2. Если 5 вольт и больше, то тут только 1 вариант - собрать делитель на резизторах с тем учетом, чтобы на выходе делителя не превышалось 3 вольта, а 3 вольта - это максимальное опорное напряжение АЦП у нашего МК. А вот если мы хотим очень точно измерить малые напряжения, то опорное напряжение можно понижать, но тогда надо будет использовать внешнее опорное напряжение. Как-то так. 3. Урок по режимам низкого энергопотребления пока не стоит на повестке дня. Пока кроме него очень много разработанных, но не опубликованных проектов.
Странно, может я чего пропустил про 4096 в уроках....Спасибо большое за развёрнутый ответ:) Кстати, мне таки удалось запустить ILI9341 по SPI1. Дело было в двух лишних строках при отправке команд и данных. А урока не будет по LCD 2002 с кнопками? ( www.dfrobot.com/wiki/images/thumb/1/1e/Arduino_Shield8.png/600px-Arduino_Shield8.png ) Интересно было бы глянуть реализацию меню на нём или ILI9341. Меню, подменю...
Отлично! Дисплей, это хорошо. Пока не до кнопок. Вообще собирался. Там в принципе ничего сложного, я в обзоре физику этого дисплея с кнопками объяснял, там через АЦП заводится всё. Как будет время, замучу занятие. Я думаю, будет интересно
Добрый день! Просьба , почему бы Вам не писать коментарии по каждой строке кода , в каждом примере. Я думаю для новичков это будет большым плюсом ..смотря уроки иногда тяжело разобраться в коде..
Я больше сделаю - вместо комментариев я вживую объясню. А комментарии любой для себя напишет сам, как ему нравится. Зачем нам тратить драгоценное время на это. А вообще лучший комментарий - это грамотно и читабельно написанный код.
@@narodstream552 Согласен .. но когда открываешь код и смотришь урок, не очень удобно . Собственно в этом уроке по adc вы дали очень понятные коментарии все сразу понятно . Я по этому и затронул эту тему , так в остальных уроках на мой взглят этого нехватает.
Я смотрю, Вы всерьёз занялись моим воспитанием. Я постараюсь, конечно, последовать Вашим всем советам, но сейчас, простите, дела зовут, работаю над очень нужной видеодорожкой.
Напряжение 3.3 вольта! Делайте уроки покороче, 33 минуты для 7 строчек кода это ОЧЕНЬ долго. И рассказываете как не уверенно, как будь-то разбираетесь с STM32 прям во время записи видио.
Хорошие уроки! Благодарю! Когда первый раз изучаешь материал, скорость не нужна) Это не олимпиада, скорость потом нарабатывается. Нужна скорость - на сайте можно прочитать)
Спасибо за познавательные видео и продолжайте в том же духе.
Спасибо! Своей обратной связью Вы мне этот дух поднимаете!
Огромное Вам спасибо. Все видео получаются очень интересными и информативными.
Лайк ! очень интересно!
Спасибо!
Огромное Вам спасибо.
sprintf может конвертировать ФЛОАТ в строку? Я пишу так:
float f = 1.123456789;
char c[50] = {}; //size of the number
sprintf(c, "%g", f);
Но после принта массив все равно остается пустой. Библиотека #include включена. МК - STM32F072
Спасибо
я вот не пойму одно, всё настроил, но откуда напряжение на ноге изначально если я ещё ничего не подавал? STM32f4 похоже изначально настраивает её в высокий уровень, это нормально?
Сделайте пожалуйста урок на Triple Interleaved mode с использованием DMA. Довольно сложно с этим всем разобраться самому.
А вообще в идеале, что мне нужно: Triple Interleaved Mode, DMA и при этом сканирование 8-ми каналов. Это вообще возможно.
Удачно получилось только реализовать поочередное сканирование 13-ти каналов АЦП в обычном режиме с использованием DMA.
З.Ы. Если вопрос вас заинтересовал, возможно ли с вами связатсья по почте?
с каждым упоминанием предела измерения АЦП предел уменьшается на 1)
Здравствуйте, давно смотрю ваши ролики, они стали для меня очень полезными! Хотел бы узнать возможно ли как то передать сигнал с платы по USB но без USART ? Моя задача считать аналоговый сигнал и передать его на компьютер. Для начала хотелось бы просто посмотреть на форму сигнала. Можно ли это как то реализовать?
Спасибо большое!
Как правило по USB аналоговые сигналы не передаются. По данной шине передаётся информация в виде последовательного кода.
Конечно, можно. Данные АЦП после преобразования передаются по USB через VCP. Принимаете эти данные и визуализируете.
Можно задать опорное напряжение от внешнего источника на ногу Vref согласно datasheet на конкретный контроллер.
Младший разряд в цифровых измерительных системах всегда "прыгает" на +/-1 значение (деление) в лучшем случае, при отсутствии шумов от входного сигнала и от самого АЦП.
Петр Долгих в принципе можно. Также можно и отфильтровать прыжки. Я показал вообще принцип программирования АЦП с помощью HAL, а дальше уже вопрос фантазии.
narod stream Хотелось как-то вставить свои пять копеек и дополнить Ваш труд.
Петр Долгих а как кой смысл?, Как я понял из datasheet, опорное напряжение все равно больше питания микроконтроллера нельзя подать(3,6V). В дискавери Vref на Vdd посажен и все...
А будет видео с регулярными каналами и ДМА? Ну или просто преобразование нескольких каналов и распихивание в разные переменные. :-) Хотя, у меня есть мысль использовать именно непрерывное преобразование и ДМА. Кстати, по опорной напруге. Там можно их две делать, минимальную и максимальную.
Конечно, будет. Уже готово по прерываниям в регулярном канале, но ещё не заливал, надо доработать его немного. А следующим пойдёт в рейс именно регулярный DMA, так что ждите.
Здравствуйте Narod Stream! Подскажите пожалуйста, где узнать максимальную частоту оцифровки ацп?
У меня плата с stm32f767, частота ядра 216 МГц. Нашел в RM, что ацп висит на шине APB2, которая делит частоту пополам. Еще предделитель делит на 4, больше не получается.
Выходит 216/2/4=27 Мгц. Правильно рассуждаю? yadi.sk/i/8Uanr9qOHCpuGg
Делаю индукционный нагреватель на 300 кГц, хочу сделать фапч программно. Скорости большие, но хранить и передавать данные с ацп не надо, обрабатываются на лету. Так что теоретически должно хватить )))
Здравствуйте!
Нет такой величины - максимальная частота оцифровки АЦП.
Поэтому каждый понимает под этим какие-то свои величины.
Конкретнее скажите
Вам нужен сэмплрейтинг или реальная частота колебаний, которую Вы хотите измерить?
Сэмплрейтинг зависит от того, какое разрешение АЦП Вы выставите, 8 бит, 12, 16 или ещё какую. мегабиты в секунду Вы в принципе нормально рассчитали. Поэтому получаем что частота сэмплирования с разрешением 8 бит (градаций будет от 0 до 255 единиц) будет где-то 4 мегабита. Чтобы нам измерить синусоиду, то нам как минимум надо 20 сэмплов на один период, чтобы у нас хоть что-то нарисовалось. При 8-битном разрешении мы соответственно получим 200 килогерц максимальную частоту, которую мы сможем измерить. При 12-битном - меньше, при 16-битном - 100 килогерц. Да я по-моему в каком-то уроке это говорил, когда свой самодельный осциллограф подключал на F746. Если хотите большие частоты, то используйте внешний АЦП и контроллер, у которого есть широкий аппаратный параллельный порт (на 32 ноги). Тогда будет нормально.
Это я тоже теоретически, так как такой целью не задавался. Поэтому не знаю таких контроллеров и таких АЦП. Только знаю, что они есть.
А, дошло, делим еще на 8 (процессов делений отрезка, как Вы рассказывали в видео про avr, каждый расходует один такт), итого 168,7 КГц.
Плюс еще время на конверсию. Не найду, сколько это, пишут 15 тактов. Это общее время или каждое из 8 штук?
Это общее время, вернее не время, а количество тактов. как правило в Cube MX оно написано.
Мне удалось где-то 100 герц колебаний замерить с разрешением 8 бит.
Не пойму, откуда берутся эти 4096 ?
u = ((float)HAL_ADC_GetValue(&hadc1))*3/4096
Как быть если 5 вольт к примеру подавать? Или больше? Т.е. простенький вольтметр чтобы был. Делитель из резисторов надо ставить? Урок по вотчдогу будет?
1. Данная цифра из даташита. Если смотреть все уроки по АЦП, то то я где-то я делаю экскурс по даташиту, там есть формула расчета. Только там она несколько наоборот. Получается неизвестная величина в теле уравнения. Переворачиваем уравнение и получаем эту формулу. Вообще-то эта цифра очевидна, т.к. АЦП у нас 12-битный, 12 включенных бит это - FFF, т.е. 4095, а 0 мы используем тоже. Имеются споры насчет того, все таки 4096 или 4095. Вообще в даташите стоит 4095, но с 4096 у меня почему-то получилось точнее.
2. Если 5 вольт и больше, то тут только 1 вариант - собрать делитель на резизторах с тем учетом, чтобы на выходе делителя не превышалось 3 вольта, а 3 вольта - это максимальное опорное напряжение АЦП у нашего МК. А вот если мы хотим очень точно измерить малые напряжения, то опорное напряжение можно понижать, но тогда надо будет использовать внешнее опорное напряжение. Как-то так.
3. Урок по режимам низкого энергопотребления пока не стоит на повестке дня. Пока кроме него очень много разработанных, но не опубликованных проектов.
Странно, может я чего пропустил про 4096 в уроках....Спасибо большое за развёрнутый ответ:) Кстати, мне таки удалось запустить ILI9341 по SPI1. Дело было в двух лишних строках при отправке команд и данных.
А урока не будет по LCD 2002 с кнопками? ( www.dfrobot.com/wiki/images/thumb/1/1e/Arduino_Shield8.png/600px-Arduino_Shield8.png ) Интересно было бы глянуть реализацию меню на нём или ILI9341. Меню, подменю...
Отлично! Дисплей, это хорошо. Пока не до кнопок. Вообще собирался. Там в принципе ничего сложного, я в обзоре физику этого дисплея с кнопками объяснял, там через АЦП заводится всё. Как будет время, замучу занятие. Я думаю, будет интересно
Проблема с этим дисплеем, что кнопки на 5V работают, а у stm32 ацп 3.6V максимум и напрямую кнопки не подрубишь(делитель нужно городить)
Подскажите пожалуйста как провести калибровку ацп?
Разве не так нужно:
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
// код
}
Добрый день! Просьба , почему бы Вам не писать коментарии по каждой строке кода , в каждом примере. Я думаю для новичков это будет большым плюсом ..смотря уроки иногда тяжело разобраться в коде..
А ещё круче после каждой строчки кода было бы сплясать чечётку.
@@narodstream552 сплясать не нужно ... а хорошо было коментов больше... это все уроки.
Я больше сделаю - вместо комментариев я вживую объясню. А комментарии любой для себя напишет сам, как ему нравится. Зачем нам тратить драгоценное время на это. А вообще лучший комментарий - это грамотно и читабельно написанный код.
@@narodstream552 Согласен .. но когда открываешь код и смотришь урок, не очень удобно . Собственно в этом уроке по adc вы дали очень понятные коментарии все сразу понятно . Я по этому и затронул эту тему , так в остальных уроках на мой взглят этого нехватает.
Я смотрю, Вы всерьёз занялись моим воспитанием. Я постараюсь, конечно, последовать Вашим всем советам, но сейчас, простите, дела зовут, работаю над очень нужной видеодорожкой.
при установке функции sprintf,не компилируется хотя подключил stdio.h.Вывожу данные через USART на экран ПК.
причёт тут stdio? вы путаете с printf
Для тех, кому лень или с телефона видео по АЦП по АВР ч.1 : ua-cam.com/video/JUy8tAjBvhc/v-deo.html
Напряжение 3.3 вольта!
Делайте уроки покороче, 33 минуты для 7 строчек кода это ОЧЕНЬ долго.
И рассказываете как не уверенно, как будь-то разбираетесь с STM32 прям во время записи видио.
По поводу длительности согласен, но зато все понятно и разжевано! Я смотрю на скорости 1.5, в итоге все замечательно!
Разве не так нужно:
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
// код
}
так