Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Как се конфигурират споделените канали на ADC при STM32
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=15543
Страница 1 от 2

Автор:  E1 [ Съб Окт 14, 2017 6:29 pm ]
Заглавие:  Как се конфигурират споделените канали на ADC при STM32

Въпросът ми е за STM32F407. Налага ми се да включа още един канал на АЦП. Реших да ползвам канал 12 (PC2). Но не тръгва по стандартния начин. Понеже това е канал, който се използва и за трите АЦП, предполагам, че има нещо, което пропускам в конфигурацията. Не намирам нищо в datasheet-а.
Използвам MikroC за ARM.
Кодът, с който опитвам е:
Код:
  unsigned int adc_result = 0;
  GPIO_Analog_Input (&GPIOC_BASE, _GPIO_PINMASK_2);    // PC2 -> ANALOG
   ADC_Set_Input_Channel(_ADC_CHANNEL_12);  // Choose ADC channel 12 - PC2
   ADC1_Init();                                                   
   adc_result = ADC1_Get_Sample(12);        // Get ADC value from corresponding channel

Резултатът е винаги стойност, съответстваща на максимално напрежение.
Какво трябва да се добави, за да работи PC2 с ADC1?

Автор:  slav4o.com [ Съб Окт 14, 2017 8:37 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

От тия контролери нищо не разбирам, но такъв ефект може да се получи ако Vref+ e 0V. Например е на външен пин който в момента е лог 0.

Автор:  michev [ Съб Окт 14, 2017 9:07 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Не познавам МикроС, но не разбирам защо си написал
Цитат:
adc_result = ADC1_Get_Sample(12); // Get ADC value from corresponding channel

след като в документацията ти дават разни дефиниции от вида на _ADC_CHANNEL_0. Сигурен ли си че зад всяка стои просто число указващо канала а не някой адрес или маска?

Автор:  ToHu [ Съб Окт 14, 2017 9:11 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

И аз си нямам идея от този проц, но да няма някакъв крос бар, или да има някакво приорите, по пиновете, т.е. някак да са заделени за определени ADC-та ..виж какво прави тази функция ADC_set ....

Автор:  E1 [ Съб Окт 14, 2017 9:26 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Мисля, че има допълнително задаване в регистрите с кой ADC да се използва каналът. Но не мога да намеря как става това. Не знам защо нищо не пише в Datasheet-а. Свикнал съм с пиковете, а там всичко е в един документ. Тук вече видях, че някои функции се описват в отделни документи и започвам ровене къде...
ADC_Set_Input_Channel:
The function sets appropriate ADC channel as an analog input

Автор:  ToHu [ Съб Окт 14, 2017 9:53 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Ти чете ли си pdf-а, първо имат няколко режима на конверсия, имаш регистър ADC_SQRx " The total number of conversions in the regular group must be written in the L[3:0] bits in the ADC_SQR1 register" може да е нещо от това. Четъ по диагонал но доколкото виждам, тъйкато може да са в сканиращ режим трябва да сетваш този регистър, както и редът на сканирането ако са в скан режим, може би и ако си в сингъл режим е същото, както казах четъ по диагонал. Ей ти го секуенса :
In Single conversion mode the ADC does one conversion. This mode is started with the
CONT bit at 0 by either:
• setting the SWSTART bit in the ADC_CR2 register (for a regular channel only)
• setting the JSWSTART bit (for an injected channel)
• external trigger (for a regular or injected channel)
Once the conversion of the selected channel is complete:
• If a regular channel was converted:
– The converted data are stored into the 16-bit ADC_DR register
– The EOC (end of conversion) flag is set
– An interrupt is generated if the EOCIE bit is set
• If an injected channel was converted:
– The converted data are stored into the 16-bit ADC_JDR1 register
– The JEOC (end of conversion injected) flag is set
– An interrupt is generated if the JEOCIE bit is set

Също така ето какво пише за тези които са с по няколко : In multi ADC mode, the start of conversion is triggered alternately or simultaneously by the ADC1 master to the ADC2 and ADC3 slaves, depending on the mode selected by the MULTI[4:0] bits in the ADC_CCR register

Има и още доста писано специално когато си с няколко ADC-та, според мен всичк ое описано, но точно сега не съм в настроение да чета в детайли чаршафа на нещо което никога не съм изпозлвал, обикновенно е свързано с няколко листа хартия на които започваш и пишеш в кой регистър какво трбва да сетнеш.

Автор:  E1 [ Нед Окт 15, 2017 10:48 am ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Това, което изтеглих като документация са някакви общи приказки, които посочват режимите, но не и как се настройват.
Но ADCx_Init() в MikroC е инициализация на модула в основен режим - т.е. не би трябвало да се интересувам от допълнителните възможности. За тях се използва ADCx_Init_Advanced. От опит знам, че понякога се случва да пропуснат някоя настройка и ми се е налагало да добавям сетване на регистри в самия код.
....
Благодаря. Тони, тези за разлика от толкова необичания тук Microchip дават няколко документа и точно това нямам.

Автор:  Цецо [ Нед Окт 15, 2017 11:26 am ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Няма превклчване на споделените канали, можеш да преобразуваш и с трите конвертора на един пин. Не че им смисъл. В дейта шита има написано всичко, незнам къде са тия общи приказки.

Автор:  E1 [ Нед Окт 15, 2017 12:06 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Цецо, това свалих. Поне аз не намирам в него нищо конкретно за настройване на ADC: http://www.st.com/content/ccc/resource/ ... 035129.pdf
Сега остава да разбера и защо не тръгва ADC, ако каналът не се донастройва. Оставям пина напълно висящ и пак не сменя показанията.

Автор:  E1 [ Нед Окт 15, 2017 12:25 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

slav4o.com написа:
От тия контролери нищо не разбирам, но такъв ефект може да се получи ако Vref+ e 0V. Например е на външен пин който в момента е лог 0.

Може и така да се окаже. Сега видях, че пинът на Vref е несвързан.

Автор:  Цецо [ Нед Окт 15, 2017 2:38 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Това дето си свалил е дейта шита, да. Моя грешка трябва ти reference manual. Една дебела тухла, има я на страницата :)

Имай предвид, че референтния пин е изведен само на корпуси над 100 пина. Иначе ползваш vdd.

Автор:  E1 [ Нед Окт 15, 2017 2:49 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Моят е VGT6. Има изведен Vref(ползвам готова MCU карта на Mikroelektronika и не погледнах, че Vref не е свързан на картата, а на развойната система(която, обаче, аз не ползвам). Там е изтеглен към 1,8V. Ще сложа един делител на пина и да видим.
Подадох 1,65V на Vref, но пак същото. Още нещо пропускам...

Автор:  ToHu [ Нед Окт 15, 2017 5:29 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Ами в това кеото аз четох доколкото помня пишеше че не препоръчват един вход да се обработва едновременно от няколко АЦП-та, но това няма как да е причина за проблема.

Автор:  E1 [ Нед Окт 15, 2017 6:28 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

С пиковете никога не съм имал подобни проблеми. Тази играчка ме побърка направо. Постоянно има някаква "подробност", заради която нещата тръгват от десетия път.
Сега забелязах, че измерва нещо, но ще трябва да видя какви стойности връща. Vref на колко трябва да е? На половината или на Vcc?
Откакто свързах Vref, започна да забива главната програма.

Автор:  E1 [ Нед Окт 15, 2017 9:18 pm ]
Заглавие:  Re: Как се конфигурират споделените канали на ADC при STM32

Възможно ли е Vref да трябва да е към Vcc? При 1/2 Vcc(през делител) скалата(която показва какво чета) застава на средата без подадено ниво. При свързване към Vcc, полудява, както се и очаква, с оглед на това, че няма изтеглящи резистори на входа. Спряха и бъговете, които може би се дължаха на опит за излизане на графиката от полето на екрана(това винаги бъгва програмата).

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/