Страница 1 из 2

Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 13:54:51
Smokeman
Уважаемые форумчане, возникла такая задача. Необходимо замерять напряжение на 2-х клеймах генератора или сельсина, напряжение меняется от 0-100В, причем в зависимости от направления вращения меняется соответственно полярность питания. Предполагается использовать МК ATMEGA-8. Так же необходим удаленный контроль с компа, куда соответственно будут поступать данные, для этого предполагается использовать микросхему FT232RL для связи МК по USART и для подключения к USB порту.
Ничего не приходит на ум как сделать входное устройство с делителем напряжения, т.к. меняется полярность напряжения, посоветуйте у кого есть какие соображения по этому поводу!!

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 14:33:43
PB_EXPERT
Smokeman писал(а):Предполагается использовать МК ATMEGA-8...
...предполагается использовать микросхему FT232RL для связи МК по USART и для подключения к USB порту.
А зачем лишнее звено - FT232RL?
На ATMEGA-8 можно реализовать софтовую поддержку USB.

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 14:53:31
Smokeman
PB_EXPERT писал(а):
Smokeman писал(а):Предполагается использовать МК ATMEGA-8...
...предполагается использовать микросхему FT232RL для связи МК по USART и для подключения к USB порту.
А зачем лишнее звено - FT232RL?
На ATMEGA-8 можно реализовать софтовую поддержку USB.

Каким образом?

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 15:04:30
PB_EXPERT
Smokeman писал(а):Каким образом?
Например, таким http://mcselec.com/index.php?option=com ... &Itemid=57
В устройствах использован обычный ATmega8, который непосредственно подключается к USB

Вот аналогичный пример на Русском http://purebasic.mybb.ru/viewtopic.php?id=46

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 15:27:30
Danko
Smokeman писал(а): причем в зависимости от направления вращения меняется соответственно полярность питания.


клемы генератора -> делитель -> mega8 -> USB -> Комп

Интересно, что сгорит раньше?

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 17:41:31
of_silence
Интересно, что сгорит раньше?

Поддерживаю. гальваническая развязка не помешает. Если развязывать, я бы делал на генератор - делитель - контроллер самый дохлый - опторазвязка - FT232 - USB

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 19:07:46
Smokeman
Вот набросал примерную схемку, подскажите как тут сделать гальваническую развязку.
PIC-0001.jpg
(158.75 КБ) 993 скачивания

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 19:24:05
of_silence
между мегой и FT232 воткнуть по оптопаре туда и обратно. Земли и питания по левой и правой части схемы должны быть отдельные.

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Сб май 15, 2010 19:43:21
Smokeman
of_silence писал(а):между мегой и FT232 воткнуть по оптопаре туда и обратно. Земли и питания по левой и правой части схемы должны быть отдельные.

Питание FT232 я так понимаю будет от USB, на МЕГУ отдельное. Если есть какие-нибудь наброски относительно развязки, выложите плиз!

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вс май 16, 2010 13:57:59
Smokeman
Вот набросал схемку с развязкой на оптронах H11L1.
АЦП.gif
(46.48 КБ) 943 скачивания

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Пн май 24, 2010 02:06:12
vitecd
чот мне кажется, резистивный делитель при 0-100в это не очень хорошо... у меня на 15В уже нелинейная характеристика получается... хотя тут всего 1/3 делитель. а вот 100в просимулировать бы в excell для начала :)

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Пн май 24, 2010 14:32:28
Meteor
А поставить трансформатор (400Гц как понимаю раз сельсин) понижающий напряжение со 100В до 2...2,5В и привязать один из выводов к середине диапазона (те же 2,5В) нельзя?

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 17:58:22
Харизмат
Товарищи, коты. Можно ли как-нибудь мерить напряжение питания контроллера его собственным АЦП? Необходимо сделать мониторинг питания, чтобы в случае разрядки подать сигнла о необходимости заряда батареи. :roll: благодарю!

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 19:25:41
GP1
Харизмат писал(а):Товарищи, коты. Можно ли как-нибудь мерить напряжение питания контроллера его собственным АЦП? Необходимо сделать мониторинг питания, чтобы в случае разрядки подать сигнла о необходимости заряда батареи. :roll: благодарю!

Вообще никаких проблем.
Причем есть кача вариантов с выбором опорного напряжения.

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 21:16:35
zhu4er
Вот и мне интересно как запрограммировать АЦП на Меге8. Как раз хочу небольшой лабораторный блок питания забацать. Программы писать умею, но с АЦП первый раз сталкиваюсь.

Нашёл в Инете вот это: http://my-avr.at.ua/publ/1-1-0-15, но комментариев к данному проекту фиг да нифига. Может кто-нибудь сможет дать комментарии, а?

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 21:27:24
GP1
мда...
А почитать ДШ, книжки там разные умные, это никак...
Ну как же, супер программисту, программирующему на Си с помощью матеров СV, книжки-то читать, не по рангу.
просто жесть куда мы кОтимся :shock:

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 21:45:19
zhu4er
И читаем и учимся! И чем плох CVAVR? Может у меня времени нету АСМ выучить! Программлю на СИ, что знаю очень хорошо! А мне бы вот для интереса узнать что делает это прерывание? опишите строчки помеченные вопросиком...

Код: Выделить всё

interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR
{
static unsigned char input_index=0;
adc_data[input_index]=ADCH; //?
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) //?
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; //?
delay_us(10); //задержка перед началом преобразования
ADCSRA|=0x40; //старт АЦП

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 22:01:56
zhu4er
кое что просветила книженция "CVAVR пособие для начинающих" будем ковырять АЦП дальше

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Вт окт 05, 2010 23:20:35
Murav
zhu4er писал(а):И чем плох CVAVR?

CVAVR плох тем, что тамошним мастером пользуются люди, не способные без него написать этот же код. И как следствие, не понимающие, что код, сгенерённый мастером делает.
Например из всех строк, которые ты привёл на самом деле тебе нужна только
zhu4er писал(а):ADCSRA|=0x40; //старт АЦП

И то читабельность у такого кода нулевая - биты в регистрах очень желательно указывать по именам: ADCSRA|=(1<<ADSC);

Возможно ещё нужны строки
zhu4er писал(а):interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR
{

но вполне возможно можно обойтись и без них.

Так что для начала всё таки стоит почитать даташит http://www.atmel.com/dyn/resources/prod ... oc2486.pdf или его перевод http://www.gaw.ru/html.cgi/txt/doc/micr ... /index.htm (ATMega8 и ATMega128 весьма похожи, но всё таки не забывай поглядывать в даташит, мало ли чем они отличаются).

Вкратце, сначала нужно включить и инициализовать основные настройки АЦП(частота, наличие прерывания, режим постоянной работы, если он нужен) в регистре ADCSRA(а в более новых контроллерах есть ещё ADCSRB), после чего выставить в ADMUX нужный канал и вход опорного напряжения(обрати внимание, что после некоторых изменений этих настроек АЦП в течение некоторого времени будет измерять непойми что, так что сделанные в это время измерения использовать нельзя) и запустить АЦП флагом ADSC(та самая единственная нужная строка, про которую я писал выше) и затем когда он закончит работу и выставит флаг ADIF прочитать результат из ADCL и ADCH(читать их обязательно нужно именно в таком порядке).

Re: Меряем напряжение с помощью АЦП ATMEGA-8

Добавлено: Ср окт 06, 2010 09:52:21
Харизмат
Murav писал(а):Вкратце, сначала нужно включить и инициализовать основные настройки АЦП(частота, наличие прерывания, режим постоянной работы, если он нужен) в регистре ADCSRA(а в более новых контроллерах есть ещё ADCSRB), после чего выставить в ADMUX нужный канал и вход опорного напряжения(обрати внимание, что после некоторых изменений этих настроек АЦП в течение некоторого времени будет измерять непойми что, так что сделанные в это время измерения использовать нельзя) и запустить АЦП флагом ADSC(та самая единственная нужная строка, про которую я писал выше) и затем когда он закончит работу и выставит флаг ADIF прочитать результат из ADCL и ADCH(читать их обязательно нужно именно в таком порядке).

Ценная информация, особенно для тех, у кого с английским пока туго! Спасибо.