Jump to content
Карен Григорян

проблема с АЦП в stm32 при симуляции в Proteus

Recommended Posts

Posted (edited)

Здравствуйте, товарищи форумчане!

У меня вот такая проблемка: есть такая схема:

image.png.44a66c942a602b7fd28b8bee50f06f7b.png

По сути тут stm32 на который подаётся некоторое постоянное напряжение, а именно на вход PA1. МК получает его, приводит в цифровую форму (разрядность АЦП равна восьми) и выводит их при помощи восьми GPIO выводов, а именно PB0-PB7. Эти выводы соединены со схемой ЦАП, которая преобразует значение, полученное от stm32 обратно в аналоговую форму и выводит в пробнике R2(1).

Проблема в том результат выводится не верный. Точнее говоря не всегда верный. Когда я подаю 1В, то на выходе получаю 0,99В, что верно. Но когда, например, подаю 300мВ, то получаю 1.8В, что совсем не верно. Код прошивки предельно прост:

  while (1)
  {
        HAL_ADC_Start_IT(&hadc1);
        HAL_Delay(10);

}

Код колбека прерывания:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if(hadc->Instance == ADC1) //check if the interrupt comes from ACD1
    {
      int adc = HAL_ADC_GetValue(&hadc1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,(adc>>0)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,(adc>>1)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,(adc>>2)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,(adc>>3)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,(adc>>4)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,(adc>>5)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,(adc>>6)&1);
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,(adc>>7)&1);
    }
        }

На всякий случай вот настройка АЦП в stm32:

image.png.1299783535650086a3f09c69189fb8a7.png

Вот пример неправильного вычисления:

image.png.179d6bcbbbd0f4590fe34936fb2c1ce6.png

Edited by Карен Григорян

Share this post


Link to post
Share on other sites
Posted (edited)

Ну, потомучто это протеус, не стоит ему доверять на все сто. Да и в реальной схеме можете столкнуться с такой проблемой. Перед использованием АЦП его желательно откалибровать перед запуском.

Edited by Yuriy.pv

Share this post


Link to post
Share on other sites

Вебинар «Новинки и решения Traco для промышленных и отраслевых приложений» (28.10.2021)

Компэл 28 октября приглашает всех желающих принять участие в вебинаре, где будет рассмотрена новая и перспективная продукция компании Traco. Мы подробно рассмотрим сильные стороны и преимущества продукции Traco, а также коснемся практических вопросов, связанных с измерением уровня шумов, промывкой изделий после пайки и отдельно разберем, как отличить поддельный ИП Traco от оригинала.
Подробнее

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...

  • Сообщения

    • А я всёже добился своего,опять слетал правый канал,разобрал и перемычки на левый и правый каналы поставил,всё-равно не слушаю наушники,теперь красота.В сети читал многие не нашли причину,почему звук пропадает и повыбрасывали Свен -мс80. А  вообще Свен классная система,если доработать напильником. Вот так выглядит после доработки,для кухни хорошая система получилась,в громкоговорителях 70-х,1ГД-40 стоят между прочим,классный звук! 
    • Выздоравливайте, не забывайте лечить последствия и побочки, многие отмечают что они гораздо зловреднее чем сам ковид. Сам ещё как началось прошлой весной купил на Али пару оксиметров. Вот недавно только пригодились, семья большая + родственники. Редкий случай, когда покупка на Али реально полезная оказалась. Понятно что они +- километр меряют, но чисто как показометр, что имеет место быть тенденция ухудшения, вполне приемлемы. Да, парацетамол у меня в начале тоже сбивал температуру, а как стала подниматься выше 39 перестало сбивать, сильная потливость по ночам была. Прям просыпался от того, что весь и все вокруг мокрое. Потом сбивал уже анальгином температуру + когда на КТ поставили 15% и пневмония,  другой антибиотик стал пить (клацид, если кому интересно) и буквально в 3 дня уже почти здоров был. Ещё дней 10 кашель отходил. Антикоагулянт (эликвис) тоже прописывали на месяц, но я одну пачку на 10 дней пропил и забил. СтОит прилично, а поражение не большое было, ИМХО - перестраховываются врачи и всем по шаблону прописывают одно и тоже.  
    • Будем надеяться, что это единственная ошибка.  
    • Да, надо было написать pause, или хотя бы за неимением места  paus,  но я эту ошибку не заметил. Вот поэтому и нужна проверка программы другими радиолюбителями. 
    • Нет, нужно сначала попытаться решить проблему самостоятельно, и только потом спрашивать. Из чего складывается вывод АЦП на экран? Из измерения, усреднения по 40 точкам и преобразования в строку. В некоторых кривых библиотеках добавляется еще перевод в дробные числа, который, естественно, ухудшает точность и сильно ухудшает скорость. Вот по очереди эти шаги и проверяете. Правильно ли идет оцифровка одного измерения? Правильно ли срабатывает выбор канала (рекомендую проверить не только 0 и 1 каналы, но и остальные. Даже не только проверить, но и исправить чтобы работало)? Правильно ли идет усреднение? Правильно ли идет вывод? Я даже подскажу: проблема в функции readADC(). Ну и в Lcd_printf() - из-за дурацкой идеи преобразовывать целое число в дробное. Подобные вещи всегда считаются в фиксированной точке! Если бы ее заметили вы, сами бы и исправили. А то, что на нее случайно наткнулись, бездумно меняя константы - другой вопрос. Потом решить усреднять не по 40 точкам, а по 256 - "а-а-а, у вас ошибка". Не угадали, процессор 8-битный. Снова не угадали. Потому что деление на степень двойки не требует деления. А сформулировать по-человечески сложно? Количество шагов оцифровки в AVR фиксированное, 12.5 - эта цифра есть в даташите. Выходное значение АЦП физически не может принимать значения за пределами 0-1023. Либо 0-65536 при выравнивании влево. Э нет, это ведь у вас возникло непонимание. Все остальные прекрасно знают откуда и какие ограничения берутся. Вот разберитесь и изложите свое понимание здесь - чтобы мы могли проверить. А лучше на uin16_t из <inttypes.h>
    • Ну, раз нет других вариантов, будем полагаться на мою проверку программы. Итак:         МОДУЛЬ BLUETOOTH В РАДИОПРИЁМНИКЕ С ДИСПЛЕЕМ WH1602 Схема и программа приёмника являются дальнейшим развитием предыдущей программы. Электрическая схема радиоприёмника содержит цепи управления Bluetooth- модулем типа МН-М18, который имеет небольшие размеры. Модуль рассчитан на управление при помощи кнопок, роль которых в данной схеме выполняют ключи на транзисторах VT6…VT8. Можно применить любые маломощные n-p-n транзисторы. Питание модуля коммутируется при помощи ключа на полевом транзисторе VT5. Управлять модулем можно как от кнопок, так и при помощи пульта ДУ, который может быть любым, лишь бы он работал по протоколу NEC.    FM_M8A_1602_RDS_IR_BT.pdf FM_M8A_1602_RDS_IR_BT.hex

  • Пульт дубликатор для различных систем управления воротами, шлагбаумами и т.д. Частота 433, 315, 868 МГц. Список всех совместимых систем в описании

  • Similar Content

    • By Fordli
      Я написал программу последовательного порта с stm32, OP отправляет число, а затем возвращает число, но возвращаемое число - это какой-то неизвестный символ, скорость передачи синхронизирована 9608, стоп-биты данных и т.д. одинаковы, от tx до rx, все еще грязный код.
      Я поменял 3 помощника для отладки последовательного интерфейса, но они все одинаковые, кто-нибудь знает? Спасибо за ваш ответ.
    • By Solver
      Вопрос такой: как запросить содержимое корневого каталога при использовании библиотеки lfs.h. При этом я имею дело с чужим кодом и там файловая система уже отформатирована (когда-то) и смонтирована (при запуске устройства). Оперировать с каталогами и файлами имена которых я заведомо знаю (или сам создаю) у меня получатся, но для текущей задачи это мне никак не помогает.
      Вероятно мой вопрос очень простой и для многих очевидный, но я тем не менее не смог с наскока найти на него ответ ни в гугле, ни в lfs.h. Очень извиняюсь за невежество, я новичек
    • By hwmaker
      Добрый день.
      На проект требуется программист микроконтроллеров STM32 с пониманием Ethernet.
      Проект:
      плата работает под управлением STM32F413VGT6, представляет собой SIP-приставку для домофона.
      Для связи с Ethernet используется микросхема ENC424J600-I/P - мост SPI <-> Ethernet.
      Ниже приведено краткое описание функционала:
      Устройство должно обеспечивать:
          1.    Прием голоса из домофоной линии и оцифровка с помощью встроенного в контроллер АЦП.
          2.    Передача голоса по сети Ethernet по протоколу RTP. В качестве транспорта использовать UDP.
          3.    Прием голосовых сообщений по Ethernet по протоколу RTP и передачу их на встроенный ЦАП.
          4.    Микроконтроллер должен обеспечивать связь с внешним миром с помощью интерфейса Ethernet через микросхему ENC424J600-PT. 
          5.    Для установления соединения с сервером голосовых сообщений используется протокол SIP 2.0. с поддержкой методов, описанных в RFC 3261. 
          6.  Прием и отработку команд, приходящих по MQTT: открыть входную дверь, открыть шлагбаум и т.п.
          7.  WEB-интерфейс для удаленных настроект и мониторинга рабочих параметров устройства.
          8. Для работу через VPN-роутер контроллер должен поддерживать STUN.
          
      Есть проект для микроконтроллера для аналогичного устройства. Там используется STM32L475RET6.
      Для связи с Ethernet используется так же ENC424J600-I/P.
      Устройство успешно звонить по SIP на сервер. Выполняет приходящие MQTT-команды по открыванию дверей.
      Требуется: 
          поправить ПО под STM32F413VGT6, 
          добавить WEB-интерфейс, 
          добавить возможность удаленного обновления ПО через WEB-интерфейс,
          добавить возможность перезагрузки устройства через WEB-интерфейс,
          добавить возможность хранения данных абонентов во FLASH микроконтроллера и возможность синрохизации этих данных с сервером,
          добавить STUN, 
          исправить метод определения квартиры в которую звонят.
      Есть ТЗ на ПО.
    • By Uhbif
      Хочу сделать вольтамперметр на базе STM32L151, есть ли какие нибудь особенности при разводке платы? Свой вариант прикрепляю ниже. Буду благодарен за дельные комментарии. 
      ВА-30.dch
    • By dim21841
      Добрый день.
      Прошу помощи в выборе контроллера stm32 под следующую задачу:
      Bluetooth HC-05 (1 uart) необходимо связывать по uart с:
      1) MAX232 (2 uart) по 9600, иногда 115200,
      2) с Atmega328 (3 uart) по 115200.
      Задача stm32 выставлять скорость на hc-05 и соединять между собой нужные uart в соответствии с выбором (4 switch в dip-8 корпусе).
      Кто может что-то посоветовать?
      В stm32 пока совсем начинающий.
      STM32 выбрал потому что в перспективе хочу добавить возможность параллельно  выводить данные и на lcd.
      Зарание благодарен за помощь.
×
×
  • Create New...