Stránka 1 z 1

Otáčkoměr pro 4T 4V motor

Napsal: 05 bře 2014, 13:48
od stres3d
Zdravím, chtěl bych si postavit otáčkoměr s LED segmentovkama na motorku viz nadpis - 4T a 4 válce. Jsou tam jenom dvě cívky.

S PIC mám jen okrajové zkušenosti a to ještě hlavně díky programu Great Cow BASIC. Dělat něco postupně sekvence, to mi problém nedělá, ale vymyslet něco co by měřilo frekvenci to už jo..
Potřeboval bych tedy radu a vhledem k tomu, že sem rovnou napíšu dva různé problémy, tak jestli mi budete odepisovat, popište je prosím zvlášť.

1) otáčkoměr co ukazuje i nad 10000 - stačí mi ukázat stovky a tisíce (+desetitisíc - motorka točí do cca 13000), na desítkách a jednotkách bude pořád 0.
Našel jsem tohle schéma, což se mi docela líbí vzhledem k jednoduchosti, na vstup bych dal napěťovej sledovač s OZ a vstup do OZ signál co má jít pro origo otáčkoměr. Je nutné použít externí krystal, nebo by na zobrazení +-50ot. (při 1149 bude 1100, při 1151 bude 1200) stačil originální oscilátor? Jak už jsem psal měl bych problém s programem. Četl jsem cosi o přerušení, ale nemůžu pořád pochopit jak ho využít - neviděli jste někde prográmek (nejlépe v basicu) který by vyhovoval tomu co bych potřeboval (v podstatě frekvenční čítač)?

2) jiné zapojení - ukazatel zařazeného kvaltu:
Moje představa - 200ms snímat počet pulzů (stejný zdroj signálu jako pro otáčkoměr), vydělit čase => frekvence a tu uložit do proměnné. Poté 200ms snímat hall snímač na řetězovém kolečku, kde je 8 pulzů na 1 otačku kolečka. => takže získat frekvenci a do jiné proměnné uložit počet otáček (aby bylo možné porovnávat viz dále). Poté bych měl v eprom uložené převodové poměry pro jednotlivé rychlosti a pomocí dělení ot. motoru / ot. řeť. kolečka = převodový poměr bych zjistil zda vypočítaný převodový poměr je s určitou tolerancí pár procent stejný jako ten v eeprom. podle toho by se nastavily výstupy na BCD dekodér pro LED segment (stačí 3 vývody) a tam se ukázala rychlost. Na PICu by měl být vstup pro neutrál a při něm ukázat asi 0, nebo nic to je jedno.
Takže bych potřeboval navést jak zařídit aby se po určitý čas četly pulzy a následně bych z toho získal frekvenci.

3) **** jenom dodatek ke dvojce - když bych použil PIC s HPWM tak bych po ukázání rychlosti ještě nastavil PWM na stejnou frekvenci jako byla frekvence od řetězového kolečka * proměná => dolazení toho co ukazuje rychloměr (budu měnit převodový poměr, tak aby ukazoval dobře). bojím se ovšem rychlosti - aby mi rychlost "neskákala" místo cca plynulého chodu.

Potřeboval bych hlavně vyřešit problém č.1 Díky, za pomoc.
Obrázek

Napsal: 06 bře 2014, 07:39
od Mira80
PIC obvody neumim, ale v atmelu si dokazu toto predstavit docela jednoduse

Co se tyce preruseni :
Jde o to, ze program ti obvykle bezi v nejake nekonecne smycce, ve kere se dokola provadi, co se provadet ma. A kdyz se ti zmeni na kratkou dobu hodnota na vstupu, tak se muze stat, ze se zmeni zrovna v okamziku, kdy se program nachazi v nejake jine casti a zrovna ten vstup netestuje, zda se zmenil ci ne. Typicky by se do talo rici takto

begin
while true do
begin
1. Otestuj vstup 1
2. Otestuj vstup 2
.
.
10 Otestuj vstup 10.
end;
end.

A kdyz prijde puls na vstupu 1 v okamziku, kdy porogram zrovna bude testovat vstup rekneme 7, tak se o te zmene na vstupu 1 vubec nedozvis. Proto se pouzivaji preruseni. V praxi to pak funguje takto

Procedura preruseni1
begin
citac1 := citac1 + 1;
end;

begin
while true do
begin
otestuj vstup2;
otestuj vstup3;
.
.
otestuj vstup 10;
end;
end.


V praxi to pak funguje tak, ze program bezi ve smycce, ale kdyz dojde ke zmene na vstupu 1, tak program prerusi svou cinnost a skoci do te procedury 1, udela co je v ni napsano a pak se zase vrati zpet do smycky hlavniho programu. Tak mas zajisteno, ze ti zadny puls na vstupu 1 neutece.
Preruseni muzes mit ruzne...bud tak jak je popsano, z externich vstupu nebo jsou preruseni i interni, napriklad od citace - kdyz pretece, vyvola se preruseni. Toho se vyuziva napr. pro zhotoveni casove zakladny, kdy vezmes krystal napriklad 14.7456 MHZ, jeho frekvenci prozenes delickou 256, nasledne privedes na 8 bitovy citac, ktery vzdy pri preteceni vyvola preruseni, v obsluze toho preruseni si do nejakeho sveho registru prictes jednicku. A az bude mit tvuj registr hodnotu 225, tak budes vedet, ze je to presne 1 sekunda (14.7456 MHz / 256 (delicka) / 256 (kapacita citace) = 225). Tj behem jedne sekundy se vyvola preruseni 225x.

Jedna vec bude pocitani otacek, druha vec, pak filtrovani, aby ta hodnota byla alespon trochu stabilni.