| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Някои въпроси относно АЦП-то на PIC18f452 /мерене на честота http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4675 |
Страница 1 от 2 |
| Автор: | nedev [ Сря Авг 22, 2007 10:35 am ] |
| Заглавие: | Някои въпроси относно АЦП-то на PIC18f452 /мерене на честота |
Здравейте! Нов съм във форума и в програмирането на контролери и това е първата ми тема, но се надявам да срещна вашето разбиране и помощ. За дипломната си работа имам за задача да измеря честотата на входен синусоидален сигнал с възможно най-голяма точност. Сигнала е от мрежата, така че честотата ще е сравнително постоянна величина - около 50Hz. За целта идеята ми за алгогритъм е следната: 1) Отчитам стойността на входната аналогова величина с дадена честота, много по-голяма от честотата на мерения сигнал (за която знам че е около 50Hz). 2) Съхранявам последните N стойности и на тяхна база откривам максимумите и минимумите на амплитудата. 3) Отчитам времето между два максимума като един период. 4) Усреднявам продължителността на (да речем) 20 периода и от там намирам някаква средна стойност за периода и от там съответно и честотата. 5) Обновявам визуализацията на резултатите на всеки 20 такива периода. Въпросите ми са: 1) Виждате ли нещо нередно в аллгоритъма, който съм избрал. Познанията ми по електротехника и схемотехника не са особено дълбоки и се притеснявам да не би да не доглеждам нещо и подхода ми да е грешен. 2) Каква е максималната честота, с която мога да извършвам измервания с АЦП-то, без да губя значително от точността и въобще без да имам проблеми в гореописания случай. (Кварца, който съм сложил е 27 MHz) По мои разсъждения стигнах до следния отговор: Гледайки ADCON2 контролния регистър за АЦПто там: - битове 5-3 определят времето за конвертиране на 1 бит, като цялото конветиране на стойността отнема 12*Tad. Според таблицата от дейташийта, която определя каква стойност трябва да се даде на Тad спрямо работната честота на контролера, следва, че трябва да избера 64Tosc. Тоест времето за едно мерене ми е 1/27е+6 * 64 * 12 = 2,8444e-5 = 28.44 uS От тук честотата на мерене ми е приблизително 35.162 kHz Следователно за един период на входния сигнал ще извърша 35162/50 = 703 измервания ? Ако извърша за един период 703 измервания това каква точност би трябвало да ми даде ... тоест през колко Hz дискрет ще мога да отчитам стойности ? Мога ли да избера 32Tosc, така че да вдигна честотата на конвертиране в моя случай. Изобщо как мога да получа максимална точност? Ще ви помоля за всякакви насоки и съвети, които можете да ми дадете! Благодаря ви предварително! |
|
| Автор: | plameniv [ Сря Авг 22, 2007 10:50 am ] |
| Заглавие: | Re: Някои въпроси относно АЦП-то на PIC18f452 /мерене на чес |
Нещо не мога да си обясня , за какво ти е ADC след като ще мериш честота На теб по скоро ти трябва може би компаратор , да засичаш времето да е по едно и също място на синусойдата , ADC-ата са бавни ще имаш много ядове иначе с компаратора не е така ! |
|
| Автор: | nedev [ Сря Авг 22, 2007 11:27 am ] |
| Заглавие: | |
Здравей, Ръководителя ми така ми каза да го правя. Може ли да ми поясниш малко по детайлно как точно имаш предвид да се реализира? CCP модула на процесора ли имаш предвид? |
|
| Автор: | /dev/null [ Сря Авг 22, 2007 11:34 am ] |
| Заглавие: | |
Бих го реализирал със ССР модула в режим capture. Като преди това се сложи един повторител (или инвертор) със тригер на Шмит на входа за да се получат хубави правоъгълни импулси със стръмни фронтове. Това няма да ти промени честотата. Помисли върху това да пуснеш пик-а на максимална честота и измервай примерно 100 пъти за секунда. |
|
| Автор: | Koleto [ Сря Авг 22, 2007 11:40 am ] |
| Заглавие: | |
Само като идея... Няма ли да е по-лесно да се засичат моментите в които напрежението минава през "нулата" и да се премери времето между две съседни преминавания.... ? За това мисля че АЦП не е необходимо и ще стане по-лесно... |
|
| Автор: | zaphod [ Сря Авг 22, 2007 2:53 pm ] |
| Заглавие: | |
не само че ще е по-лесно, но ще е и по-точно. и няма нужда да се усреднява от 20 периода измерването, а просто да се измери времето на 20 периода, същото е математически, но като реализация е много по-просто. |
|
| Автор: | Taner [ Сря Авг 22, 2007 9:38 pm ] |
| Заглавие: | |
Здравей, първо да ти кажа с АЦП-то не става, пробвах го и продължавам да се мъча, но не става. Пиша софтуер за инвертор работещ с фотоволтаични панели и отдаващ енергия в променливотоковата мрежа, и трябва да измеря дали напрежението и честотата на мрежата са в границите на нормалното. За напрежението става, със средната стойност. Но честота не става с АЦП-то. Така че не се мъчете с АЦП-то, просто не става, пробвах да хвана пресичане на нулата, не става, греши, след това пробвах и с намиране на максималните стойности, пак не става, пак греши. Направи ги с компаратор или с оптрон свързан към входа за прекъсване, защото той е чувствителен на фронт. |
|
| Автор: | sthx [ Сря Авг 22, 2007 10:26 pm ] |
| Заглавие: | |
Малко късно се намесвам, щото съм неграмотен и не разбирам от нищо от PIC-ове,още повече от PIC18f452. Все пак... Първо един съвет - накарай ръководителят ти да изнамери един работещ осцилоскоп и хвани активният край на сондата с ръка. Гаргата, която ще се покаже на осцилоскопа е формата на напрежението в мрежата. Ако не вярвате - вижте я на вторичната намотка на някой трансформатор. Прилича на синусоида, но не е - смачкана е, на едно место е назъбена, а може и да има остър пик, който няма да съвпада с максимума на амплитудата на псевдосинусоидата. Това е втората причина да не търсите максимума на сигнала. Първата причина е, че скоростта на изменение на сигнала там е най-малка и следователно грешката , която ще се допусне е най-голяма. Трябва да се мери при нулата. Наистина е неразумно от честота да се преминава в аналогов сигнал. Съветът с намиране на нулевото напрежение с оптрон или транзистори е удачен. Ако все пак ръководителят държи на наукообразната форма на работата - има и схеми наречени нулеви детектори, макар, че за получаване на честотна поредица не е задължително коефициентът на запълване да е точно 0.5 . Ако трябва да се мери по-точно може да се мери времето за N броя периода. И да се направи хубав анализ на грешките. Толкова. |
|
| Автор: | Yanek [ Сря Авг 22, 2007 11:55 pm ] |
| Заглавие: | |
Явно се оказва, че не е удачен варианта с АЦП. В този ред на мисли и малко като шега - защо не опиташ с дискретна фуриерова трансформация?
|
|
| Автор: | ps66 [ Чет Авг 23, 2007 7:17 am ] | |||||||||
| Заглавие: | Re: Някои въпроси относно АЦП-то на PIC18f452 /мерене на чес | |||||||||
Както ти е намекнал @Yanek - само FFT/FFT2 е вярното решение - това дето си го намислил .. мин/мах, времена ... би работило при идеални условия: 1 sin. без щум, ... в реалния свят нещата са много по-различни. 50Hz не е много ... но ще трябва да прочетеш за FFT а и цифровата обработка на сигнали си има "тънкости" (входен филтър с поне 1/2 оф честотата на дискретизация...) не знам пика до колко ще се справи, ... иначе има целочислени версии на FFT2, има RFFT2 ... с АЦП-то можеш доста точно да мериш еф. стойност ... |
||||||||||
| Автор: | nedev [ Пет Авг 24, 2007 9:45 am ] |
| Заглавие: | |
Здравейте! Първо искам да ви благодаря за насоките, които ми дадохте и главоболията, които ми спестихте! Реших да генерирам правоъгълни импулси от синусоидалния сигнал и да ги подавам директно на CCP модула в Capture mode, като използвам като компаратор за нулево ниво тригер на Шмит по следната схема: http://en.wikipedia.org/wiki/Image:Opam ... ircuit.svg Реализирам тригера с ОУ, TL081 (такъв имах под ръка). В статията в Уикипедия пишеше как да си определя широчината на хистерезиса чрез избор на R1 и R2 и направих праговете на превключване на тригера да са при +- 0.9V. Вчера успях да погледна изхода на тригера на осцилоскопа на един приятел и импулсите изглеждаха що годе правоъгълни (прикачвам снимка). Притесняват ме обаче някои неща: 1. Достатъчно правоъгълни ли са импулсите, за да мога безпроблемно директно да ги подавам на Capture входа на процесора. 2. Ценерите, които ползвам са на 4.7 V, така че амплитудата на сигнала също е в +- тези граници. Предполагам обаче, че трябва да отрежа отрицателната част от сигнала и така да подавам на входа на процесора. Как мога да реализирам това? Обикновен диод ще свърши ли работа? 3. Синусоидалния сигнал, който измерих директно на изхода на вторичната намотка на трансформатора, изглежда доста триъгълен (прикачвам снимка), което ме притеснява. Може би тук е мястото да отбележа, че осцилоскопа, на който гледах сигналите, беше доста доста стар; неизползван отдавна; руски; с кофти сонди; малък (някакъв преносим модел може би - около 20смх15смх25см; съвсем грубо на око). На какво може да се отдаде тази форма на сигнала? Нямам много опит при работата с осцилоскоп. 4. Най-голямото ми притеснение, идва от това, че според осцилоскопа, сигналите (на входа и на изхода на тригера на Шмит) имаха един и същи период (което е добре), но той беше доста различен от 20mS (което е 50Hz честота). Беше около 17mS. Може ли това също да се отдаде на грешка на осцилоскопа? Входния сигнал е от вторичната намотка на трансформатор 220V/2х12V 250mA. Не би трябвало трансформатора да променя честотата, нали така? Благодаря ви предварително! PS1. Извинявам се за кофти качеството на снимките PS2. Периода на двата сигнала на снимките е еднакъв - 5mS на деление. Амплитудата е различна (на синусоидалния сигнал е 4 пъти по-голяма от тази на импулсния) |
|
| Автор: | zmej [ Пет Авг 24, 2007 12:07 pm ] |
| Заглавие: | |
Вместо тригери, синусоидално-триъгълно-правоъгълни преобразуватели би могъл да сложиш един прост инвертиращ (ако искаш и неинвертиращ - все тая) усилвател с ОУ - към 200-300 пъти - получаваш (почти) правоъгълни импулси с достатъчно стръмни фронтове. Към изхода на ОУ-то слагаш диод, и обратната връзка я взимаш след диода - така получаваш еднополупериоден 'електронен' изправител. След това вече е ясно - съпротивление и ценер. Аз подавам така получения сигнал на прекъсване вместо на ССР, но това са подробности и избора си е твой. Също така е добре да мериш целия период, а не ширина на импулс. А още по-елементарно ще се получи с прост оптрон (обратно шунтиран с диод), колектора на изходния транзистор на който връзваш на прекъсване или ССР. Ама за дипломна (курсова или каквато и да е там) работа ти препоръчвам първия вариант. За АЦП-то вече са ти казали... Обърни внимание на стабилността на кварца - да не изскочат проблеми от там (имал съм такива случаи). Реално (при правилна постановка) само и единствено кварца ти определя цялата точност на измерване... Успех! |
|
| Автор: | stanleyhacker [ Пет Авг 24, 2007 4:33 pm ] |
| Заглавие: | |
Става и с един резистор 1мегаом към фаза. ама не е много за дипломна работа. |
|
| Автор: | MYXATA [ Пет Авг 24, 2007 7:58 pm ] | |||||||||
| Заглавие: | ||||||||||
Я ми обясни по-детайлно какво става с 1М към фаза макар, че може би първо на себе си трябва да го обясниш.....
|
||||||||||
| Автор: | ToHu [ Пет Авг 24, 2007 9:28 pm ] |
| Заглавие: | |
Ами задачката ти като цяло е елементарна. Вариантите са няколко, став и с АЦП-то, но не виздам защо трябва да се мъчиш толкова. Може да с енаправи както с фурие, така и с засичане м-у определени точки. Фурието е нещо което може би не си учил, а измерванетона период ще ти е по разбираемо, естетсвено преди това си трвбва еидн хубав цифров филтър, но като цяло, стандартния вариант е много по добър. Като правило се прави, с детектор на нулата и измерване между два сигнала. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|