ADC in STM32F373
20.01.2017, 02:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
ADC in STM32F373
Доброй ночи! Запутался с АЦП... Чтото видимо недочитал...Подскажите что неправильно сделал плиз.
Вот инит
|
PHP код:
|
void ADC_init(void)
{
/*
ADC_IN0 PA0
ADC_IN1 PA1
ADC_IN3 PA3
*/
RCC-›AHBENR |= RCC_AHBENR_GPIOAEN;
GPIOA-›MODER |= GPIO_MODER_MODER0 | GPIO_MODER_MODER1 | GPIO_MODER_MODER3; // PA0,1,3 - analog, MODER = 11
GPIOA-›OTYPER &=~ GPIO_OTYPER_OT_0 & ~GPIO_OTYPER_OT_1 & ~GPIO_OTYPER_OT_3 ; //OUT Push-pull PA0,1,3, OT4 = 00
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0 | GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR3; // OSPEEDR0,1,3 = 11 Hight
GPIOA-›PUPDR &= ~GPIO_PUPDR_PUPDR0 & ~GPIO_PUPDR_PUPDR1 & ~GPIO_PUPDR_PUPDR3; // PUPDR0,1,3 = 00 noPULLUP
// GPIOB-›AFR[0] |= (0x02 ‹‹ 4*6) | (0x02 ‹‹ 4*7); // AF2 PB6,7
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN; // включаем тактирование АЦП
ADC1-›CR2 |= ADC_CR2_CAL;
while ((ADC1-›CR2 & ADC_CR2_CAL)) ; //ждем окончания калибровки
ADC1-›CR1 |= ADC_CR1_JDISCEN // Discontinuous mode on injected channels
| ADC_CR1_JAUTO // Automatic Injected Group conversion
//| ADC_CR1_SCAN // Scan mode
| ADC_CR1_JEOCIE // Interrupt enable for injected channels
| ADC_CR1_EOCIE // Interrupt enable for EOC
| ADC_CR1_DISCNUM_1
;
ADC1-›CR2 |= ADC_CR2_JSWSTART // Start conversion of injected channels
;
// ADC1-›JOFR1 = ;
// у нас 4 инжектированных канала. Тут мы выбираем от 1 до 4 каналов рабочих. И выбираем номера канала.
ADC1-›JSQR |= ADC_JSQR_JL_1
| ADC_JSQR_JSQ2_0
| ADC_JSQR_JSQ3_1 | ADC_JSQR_JSQ3_0
;
NVIC_EnableIRQ(ADC1_IRQn); // включаем прерывания АЦП
ADC1-›CR2 |= ADC_CR2_ADON;
}
После запуска калибровки висит в вайле. А без калибровки не работает...
VSSA - на минусе
VDDA - на плюс 3.3в
VREF+ - на 3.3в
VDD - на 3.3в
VSSSD - на минусе
VDDSD - на 3.3в
VREFSD+ - на 3.3в
VDD - на 3.3в
VSS - на минусе
VBAT - на подключен
|
|
|
|
|
22.01.2017, 22:05
|
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: ADC in STM32F373
Сообщение от miwutka
|
Доброй ночи! Запутался с АЦП... Чтото видимо недочитал...Подскажите что неправильно сделал плиз.
Вот инит
|
PHP код:
|
void ADC_init(void)
{
/*
ADC_IN0 PA0
ADC_IN1 PA1
ADC_IN3 PA3
*/
RCC-›AHBENR |= RCC_AHBENR_GPIOAEN;
GPIOA-›MODER |= GPIO_MODER_MODER0 | GPIO_MODER_MODER1 | GPIO_MODER_MODER3; // PA0,1,3 - analog, MODER = 11
GPIOA-›OTYPER &=~ GPIO_OTYPER_OT_0 & ~GPIO_OTYPER_OT_1 & ~GPIO_OTYPER_OT_3 ; //OUT Push-pull PA0,1,3, OT4 = 00
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0 | GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR3; // OSPEEDR0,1,3 = 11 Hight
GPIOA-›PUPDR &= ~GPIO_PUPDR_PUPDR0 & ~GPIO_PUPDR_PUPDR1 & ~GPIO_PUPDR_PUPDR3; // PUPDR0,1,3 = 00 noPULLUP
// GPIOB-›AFR[0] |= (0x02 ‹‹ 4*6) | (0x02 ‹‹ 4*7); // AF2 PB6,7
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN; // включаем тактирование АЦП
ADC1-›CR2 |= ADC_CR2_CAL;
while ((ADC1-›CR2 & ADC_CR2_CAL)) ; //ждем окончания калибровки
ADC1-›CR1 |= ADC_CR1_JDISCEN // Discontinuous mode on injected channels
| ADC_CR1_JAUTO // Automatic Injected Group conversion
//| ADC_CR1_SCAN // Scan mode
| ADC_CR1_JEOCIE // Interrupt enable for injected channels
| ADC_CR1_EOCIE // Interrupt enable for EOC
| ADC_CR1_DISCNUM_1
;
ADC1-›CR2 |= ADC_CR2_JSWSTART // Start conversion of injected channels
;
// ADC1-›JOFR1 = ;
// у нас 4 инжектированных канала. Тут мы выбираем от 1 до 4 каналов рабочих. И выбираем номера канала.
ADC1-›JSQR |= ADC_JSQR_JL_1
| ADC_JSQR_JSQ2_0
| ADC_JSQR_JSQ3_1 | ADC_JSQR_JSQ3_0
;
NVIC_EnableIRQ(ADC1_IRQn); // включаем прерывания АЦП
ADC1-›CR2 |= ADC_CR2_ADON;
}
После запуска калибровки висит в вайле. А без калибровки не работает...
VSSA - на минусе
VDDA - на плюс 3.3в
VREF+ - на 3.3в
VDD - на 3.3в
VSSSD - на минусе
VDDSD - на 3.3в
VREFSD+ - на 3.3в
VDD - на 3.3в
VSS - на минусе
VBAT - на подключен
|
|
аналоговая часть не включена и ненастроенная частота для adc
|
|
|
|
22.01.2017, 23:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ADC in STM32F373
Спасибо, я уже разобрался. Если долго мучиться то что-нибудь получится )) Зато увидел что ацп делает 820000 измерений в секунду. Произвел такой замер... при частоте ядра 128 МГц. Интересно сколько надо измерений делать за 20 мкс чтобы получился trueRMS вольтметр...???
Кстати тут оцифровываются 3 канала по очереди. Когда тоже самое сделал на инжектированных то опрос трех происходил 8000 измерений в секунду и вывод на ЖК 16х2 был в хлам заторможенный... На форуме вычитал что сильно падает производительность ядра, но не думал что настолько....
Последний раз редактировалось miwutka; 22.01.2017 в 23:35.
|
|
|
|
23.01.2017, 01:32
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,274
Сказал спасибо: 11,856
Сказали Спасибо 4,157 раз(а) в 3,175 сообщении(ях)
|
Re: ADC in STM32F373
На тему TrueRMS надо отсюда например начать. Ну и оценить зависимость погрешности от числа измерений за период для реального сигнала не совсем синусоидальной формы одной частоты.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 23.01.2017 в 05:03.
|
|
|
|
25.01.2017, 23:18
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ADC in STM32F373
mike-y-k, я знаю как RMS считается... Мне интересно сколько нужно обеспечить выборок за единицу времени чтобы было TrueRMS......
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:39.
|
|