 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 03 04, 12:45. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » tachometras su serva
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
 |
 |
tachometras su serva |
Parašytas: 2012 03 31, 14:46 |
|
|
|
Susiduriau su problemele , nesugalvoju kaip apjungti apsuku dazni su servos valdymu , esme tokia tachometras rodyklinis ,o rodykle sukioja serva , nesugalvoju kaip padaryt ,kad tolygiai sukiotos serva pagal paduodama dazni nuo degimo. cia programa vien tik servos sukiojimui ir kelios reiksmes atitinkancios servos padeti. Apsukos nuo 0 iki ~16k rpm , geriausiai butu isnaudot visa servos diapazona. Apsuku diapazonas labai platu palyginus su servos pasukimo reiksme , nesugalvoju kaip padaryt kad tolygiai sukiotos serva nes jei surasyt su if apsuku reiksme tai toke servos reiksme , manau labai durnai bus ir taip gana kampuotai sokines rodykle , kaip protingiau galetu padaryt?
Kodas: |
#include <avr/io.h>
#include <util/delay.h>
void Wait()
{
uint8_t i;
for(i=0;i<50;i++)
{
_delay_loop_2(0);
_delay_loop_2(0);
_delay_loop_2(0);
}
}
void main()
{
TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);
ICR1=4999; //fPWM=50Hz
DDRD|=(1<<PD4)|(1<<PD5);
while(1)
{
OCR1A=97; //0 laipsniu
Wait();
OCR1A=316; //90 laipsniu
Wait();
OCR1A=425; //135 laipsniu
Wait();
OCR1A=535; //180 laipsniu
Wait();
}
}
|
|
|
|
|
|
 |
 |
tachometras su serva |
Parašytas: 2012 03 31, 20:15 |
|
|
|
dar pamirsau pasakyt kad galvojau su proporcija bandyt isisukt pvz 16k rpm atitinka 535 (180 laipsniu serva pasisukus) bet nelabai iseina nes serva nuo 0 iki 90 laipsniu labai didelis skirtumas (0 laipsniu -97 , 315 -90 laipsniu) o poto jau nuo 90 laipsniu paliginus daug mazesniu skirtumu keicias. |
|
|
|
|
 |
tachometras su serva |
Parašytas: 2012 04 01, 10:32 |
|
|
|
Toks varikliukas su dantraciais , vidui stovi variklio valdymas , dazniausiai pasisukimo padeti stebi potenciomeras pajungtas su galiniu dantraciu , valdoma pwm signalu. cia foto , yra visokiu modeliu.
 |
|
|
|
|
 |
tachometras su serva |
Parašytas: 2012 04 01, 11:18 |
|
|
|
aš daryčiau lentelę ir paskui dar panaudočiau tiesinę interpoliaciją
lengviausiai išsprendžia.
kitas būdas tai matematiškai išskaičiuoti... |
|
|
|
|
 |
tachometras su serva |
Parašytas: 2012 04 01, 12:14 |
|
|
|
ne neautopilota tiesiskai nelabai iseina ,nes va atkreipk demesi 0 ir 90 laipsniu.
Kodas: |
OCR1A=97; //0 laipsniu
Wait();
OCR1A=316; //90 laipsniu
Wait();
OCR1A=425; //135 laipsniu
Wait();
OCR1A=535; //180 laipsniu
Wait(); |
|
|
|
|
|
 |
 |
tachometras su serva |
Parašytas: 2012 04 01, 12:42 |
|
|
|
skaitai manuala, o matai spyga
juk aiskiai parasyta:
pwm periodas - 20ms
center impulso plotis - 1,5ms
ccw, kai impulso plotis ...1,7..2,0ms
cw, kai impulso plotis ...0,7..1ms
is cia iseina, kad PWM DUTY CYCLE turi buti:
center - (20-1)/20*100=95%
ccw - (20-1,7)/20*100=91,5%
cw - (20-0,7)/20*100=96,5%
pagal http://mil.ufl.edu/5666/handouts/ATMPWM.pdf
1.0ms = full left
1.5ms = middle
2.0ms = full right
full left = 0 degrees
middle = 45 degrees
full right = 90 degrees
daleiskim tavo serva yra 180+ laipsniu, tada
full left = 0 degrees
middle = 90+ degrees
full right = 180+ degrees
Note: You cannot use prescaler 1 or 1024 to generate a 50 Hz PWM with a 16 MHz:
Prescaler 1 cannot be used since 160000 too large to fit in TCR1.
TCR1 is a 16 bit register with a range from 0 to 65535.
Prescaler 1024 should not be used since you cannot put decimals into ICR1.
I would suggest prescaler 8 and set ICR1 to 20000 because this will allow you to change OCR1A
between 1000 and 2000 to obtain 1 - 2 ms high pulses.
TCNT1 = Value of Timer1
ICR1 = Sets the upper limit to Timer1 (creates 50 Hz signal)
OCR1A = Sets when the PWM signal should toggle.
OC1A = Output pin where the PWM actually comes out of. You will have to look at your data sheet to see
physically which pin it is.
To change the position of the servo, you would change OCR1A between 1000 and 2000.
Example C code:
OCR1A = 1500;
Or to have a for loop run through all the possible servo positions:
for(OCR1A=1000;OCR1A!=2000;OCR1A++)
{
delay_ms(1);
} |
|
|
|
|
 |
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
 |
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|

|
 |