Sari la conținut
ELFORUM - Forumul electronistilor

Brushless comandat de pic


adrianfasie2007

Postări Recomandate

  • Răspunsuri 51
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • adrianfasie2007

    22

  • cirip

    9

  • 25L91N11

    4

  • francezu

    3

Top autori în acest subiect

NU am gasit de unde sa cumpar TDA sau LB si nici macar unul dintre driver-ele din aceasta lista http://www.findchips.com/avail?utm_sour ... +brushless

Va rog daca stiti o piesa mai uzuala cu care sa comand motorul. :cry:

 

Si in legatura cu ESC daca ii trimit un PWM cu alta perioada (mai mare), deoarece asa pleaca din lm555 pe care il am eu nu va merge? Ca pana la urma cred ca o sa cumpar un ESC.

Link spre comentariu

Nu ma supar, chiar iti dau dreptate, dar cu amperii rezolvam punand niste mos-uri. Facand un calcul ies cu mult peste un esc gata facut de pe site-urile de aeromodelism. exemplu http://www.sierra.ro/Regulator-electron ... 4531p.html numai ca am norocul sa fie zero pe stoc. :nebunrau: :bataie :aplauze

 

Imi mai puteti da cateva detalii cum sa comand un esc? Eu fac PWM-ul cu LM 555 ca aici http://www.dprg.org/tutorials/2005-11a/index.html Si am un C1 de 300nf si potentiometru de 100 in serie cu unul de 20, in total 120k. E bun acest pwm pentru ESC? formula este Frequency = 1.44 / (R1 * C1) La mine ar veni cam 40 Hz. E bun?

Link spre comentariu

Eu fac PWM-ul cu LM 555 ca aici[...].E bun?

Nu. PWMul ala este ptr comanda directa a motorului si poate avea factor de umplere intre 0-100%. Ca sa comanzi ESCul iti trebuie un semnal cu durata pulsului intre 1-2ms si perioada de repetitie de 20ms. Asta se traduce in factor de umplere intre 1/20 ... 2/20 = 5% ... 10%.Un exemplu: http://www.luolamies.org/misc/servo.htmlMai scotoceste dupa caracteristicile semnalului care comanda servo de modelism. Este identic.Cel mai comod se face generarea semnalului cu un procesor. Merge si cu 555, dar e greu de ajustat daca nu ai osciloscop. Dar daca ai deja procesor si il stapanesti, foloseste timerele. Poti genera usor puls de 1-2ms cu 1000 pasi (rezolutie de 1us), care se repeta la 20ms.EDIT: De fapt cred ca e musai sa pui procesor si accelerometru ca sa il tii orizontal, altfel se rastoarna din cauza diferentelor de tractiune. Procesorul tre' sa citeasca accelerometrul si sa ajusteze fin ESCurile, ca sa mentina zburatoarea la orizontala.
Link spre comentariu

Am atasat imaginea pentru a fi mai usor de intales ceea ce am facut. As vrea sa controlez esc-urile ajutandu-ma de lm555. Ce pic sa pun unde am scris PICxxxxx? Daca folosesc intrari analogice si citesc media tensiunii de la pwm-ul pe care il trimit de la LM555 se poate? Spuneti-mi va rog daca stiti de unde ma pot documenta in legatura cu limbajul de programare mikroc? Un tutorial ceva. Stiu doar asm si nu prea bine.

Link spre comentariu

Salut,Eu am impresia ca nu iti este prea clara functionarea.-Nu ai ce sa faci cu 3 procesoare acolo. Se calca pe bataturi intre ele. Nu ai nevoie decat de un procesor la emisie si unul la receptie.-Ce faci cu 3 bucati de 555 acolo, cand ai un procesor la dispozitie? Citirea intrarilor: potentiometre, contacte, date pe seriala sau ce vrei tu se face cu procesorul, nu cu 555. Ala e un element intermediar al carui rol nu il inteleg.-Transmisia canalelor se face prin asamblarea unui cadru (frame) PPM care contine informatia fiecarui canal analogic transmisa de 50 de ori pe secunda. E a doua oara cand scriu despre PPM, dar se pare ca nu iti capteaza atentia. Este vorba chiar de PPM (Pulse Position Modulation), nu este o greseala, nu am vrut sa scriu PWM.-Despre accelerometru, poate chiar si giroscop nu mai zic nimic.-Ceea ce vrei sa faci nu e simplu, dar nu e imposibil. Daca nu ai inca experianta, asta e una, dar nu incerca sa simplifici peste masura, ca nu merge.Lauda-ma gura! Am scris in asamblare softulet pentru aeromodel care despacheta 4 canale analogice cu un pic12F683 si mai facea si filtrare digitala (un fel de DSP rudimentar) ca sa reduca jiterul la servouri si sa nu permita acceleratii bruste la motoras, ca sa nu rup pinioanele de plastic. PICul scotea direct semnalul de comanda al unui MOSFET. E mult de munca, dar se poate.Una peste alte, inspira-te din ceea ce exista deja si nu incerca sa re-inventezi lucruri deja cunoscute si optimizate. In plus, e mai mare rasul sa folosesti un pumn de 555 cand ai un procesor pe care il poti pune la munca.Bafta!

Link spre comentariu

Este vorba chiar de PPM (Pulse Position Modulation), nu este o greseala, nu am vrut sa scriu PWM.

Chiar sa sti ca am crezut ca ai gresit. Acum sunt foarte lamurit cu aceasta parte si iti multumesc din suflet ca ai fost intelegator si ai explicat atat de bine.

Despre accelerometru, poate chiar si giroscop nu mai zic nimic.

Ai foarte mare dreptate in tot ce ai zis. eu sper pentru inceput sa-l fac sa zboare fara. Dupa aceea o sa-l mai dezvolt.

 

De aceasta data am rugamintea daca vrei za-mi explici acest fragment de program pe care l-am albastrit. Sau ca sa fie completa explicatia...,chiar tot. cum crezi. Nu prea imi este clar (sunt incepator). M-am documentat despre STATUS si Z dar nu intelg prea bine rolul aici :bataie . Multumesc tuturor!!!

 

; Clockspeed of 4 MHz (1 million instructions per second) assumed.

Loop

movlw SERVO_ON ; Set servo control output pin high

movwf SERVO_PORT ; and delay 0.5 to 2.1 ms

call PulseDelay

 

movlw SERVO_OF ; Servo control pin low

movwf SERVO_PORT

call Wait20ms ; A fixed delay.

 

goto Loop

 

PulseDelay

; Initial fixed delay of 499 + 2 µs

movlw 0x7d

movwf DELAY

nop ; 1 * DELAY µs

decfsz DELAY, f ; 1 * DELAY + 1 µs

goto $-2 ; 2 * DELAY - 2 µs

; Total delay: 4 * DELAY - 1

 

; Variable delay 0 – 1.7 milliseconds

movf PULSELEN, W ; If PULSELEN is 0, return here

btfsc STATUS, Z

return

movwf DELAY

AdjustLoop

nop ; 4 * DELAY µs

nop

nop

nop

decfsz DELAY, f ; 1 * DELAY + 1 µs

goto AdjustLoop ; 2 * DELAY - 2 µs

; Total delay 7 * DELAY - 1 µs

return

 

; Wait for around 20ms

Wait20ms

movlw 0x1a

movwf DELAY

IdleLoop

movlw 0xff ; 1 * DELAY µs

movwf DELAY1 ; 1 * DELAY µs

decfsz DELAY1, f ; DELAY * (1 * DELAY1 + 1) µs

goto $-1 ; DELAY * (2 * DELAY1 -2) µs

decfsz DELAY, f ; 1 * DELAY + 1 µs

goto IdleLoop ; 2 * DELAY - 2 µs

; Total delay 4 * DELAY - 1 + DELAY * (3 * DELAY1 -1) µs

return

Link spre comentariu

M-am documentat despre STATUS si Z dar nu intelg prea bine rolul aici

Instructiunea movf afecteaza registrul STATUS, mai exact bitul Z ( zero) al acestuia ( vezi in orice datasheet de pic la Instruction Set Summary). Daca operandul instructiunii are valoarea 0 -este setat bitul Z din registrul Status.

In cazul tau:

movf PULSELEN, W ; If PULSELEN is 0, return here

daca registrul PULSELEN are valoarea 0 - este setat bitul Z.

Mai departe se ramifica programul in functie de aceasta conditie.

In cazul tau:

btfsc STATUS, Z ; daca bit-ul Z este setat

return ; iesire din rutina PulseDelay

movwf DELAY ; altfel continua

..........

Link spre comentariu

As mai adauga doar ca, atunci cand nu esti sigur ce face o instructiune sau o secventa de program, foloseste cu incredere simulatorul din MPLAB si toate facilitatile pe care le are. Ai posibilitatea sa analizezi orice registru, variabile, sa injectezi valori la numite momente de timp, sa creezi stimuli externi, sa activezi analizorul logic, etc. E o bogatie.

Link spre comentariu

E Ca sa comanzi ESCul iti trebuie un semnal cu durata pulsului intre 1-2ms si perioada de repetitie de 20ms.

Am inteles! Dar programul nu respecta ceea ce ai zis tu.

In cazul tau:

btfsc STATUS, Z ; daca bit-ul Z este setat

return ; iesire din rutina PulseDelay daca iese pe aici 0.5 ms + 20 ms deci o perioada de 20,5 ms

movwf DELAY ; altfel continua dar daca continua 0.5 ms + 7*delay-1 + 20 ms (unde delay=pulselen)deci mai mare de 20,5 si daca pulselen=255 atunci ajunge pana la 22,2

 

Ce e scris cu rosu in citatul lui francezu am adaugat eu! Gresesc sau am zis bine. Daca am zis bine, inseamna ca nu se respecta ce a zis cirip in citatul cu care am inceput acest mesaj si cu care sunt de acord. Inseamna ca ESC-ul tolereaza micile diferente?

 

Va respect si va multumesc!

Link spre comentariu

Chiar sigur nu sunt, da' din cate am vazut eu, variind distanta dintre 2 pulsuri (cele 20 de ms) poti modifica viteza servo-ului. Lungimea pulsurilor (~1 ms, ~1.5 ms, 2 ms ) determina directia de miscare.

Dupa cum observi, am folosit peste tot semnul ~, adica exista ceva tolerante aici. Am gasit chiar un site cu datele mai multor servo-uri (DiY pentru trenulete) in care duratele anterioare difereau destul de mult.

 

Asa ca da, cele 20 ms, cred eu, sunt destul de tolerante; celelalte au toleranta mai mica, da' ceva-ceva variatii sunt permise si aici.

 

LE Vorbeam de semnale PPM aici, nu? :nas:

Link spre comentariu

Intrucat am vazut ca s-a facut usor o confuzie intre PWM si PPM, ma bag si eu cu cateva explicatii.Comanda respectiva se mai numeste si comanda proportionala si este de fapt o transmisie care se repeta la 20 ms. De obicei se face pentru maxim cinci canale, deorece impulsul maxim pe un canal este 1,6ms+-0,5 ms. Un canal este de asemenea centrat pe 1,6s, care este valoarea de zero. Deci daca impulsurile sunt de 1,6 s atunci canalul reslectiv are valoarea zero. Dupa cum impulsul creste sau scade rezulta, fata de 1,6 s, rezulta ca se schimba sensul de rotatie, astfel incat la 1,1 sau la 2,1 s obtinem viteza maxima intr-un sens sau celalalt sens.Altfel spus pe 0,5s trebuie sa se faca variatia complecta intru-sens al unui canal.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări