RC plane motor questions



For serious applications: http://www.maxonmotorusa.com /
jsw
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
snipped-for-privacy@whidbey.com wrote:

I can't help with your questions, but let me chime in RE: Electronic Speed Controllers. Cooling is really *really* important. At least one popular model: http://www.elefun.no/p/prod.aspx?vW87
...uses a heat sink which only makes contact with a select few of the transistors it is meant to cool:
http://home.c2i.net/w-479147/temp/sink.jpg
This is a grid of 3 x 5 = 15 transistors with only 7 survivors after a hot run with low batteries.
--Winston
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

The damage was a result of a malfunction caused by water intrusion. I will add an update to that thread soon.
--
RoRo

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
snipped-for-privacy@whidbey.com wrote:

I'm not sure what you're making, but the power to weight of those brushless motors is quite impressive.
There's a catch though, if you're not using them to just run a fan, which is all they're good for.
they lack position sensors, so you can't just spin them back and forth like a regular motor unless you have some sort of really awesome motor controller.
They seem to now have brushless RC car motors and controllers. I'm not sure how those work though.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
On 06/23/2011 12:48 PM, Cydrome Leader wrote:

I believe the brushless car motors have hall sensors for commutation, the same as an industrial servo brushless would.
--

Tim Wescott
Wescott Design Services
  Click to see the full signature.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

The rc car's "electronic speed control" (ESC) support both sensor and sensor less brushless motors. You can program into the handheld transmitter throttle and braking endpoints and curves, linier or otherwise. The speed controlls can deliver lots of power. My Emaxx 1/10 scale rc truck will pull 300 amps acceleration and 180 amps on braking at 16.8 volts. With motors pulling lots of power things can get hot in a hurry. Spektrum transmitter's and receivers are what I prefer. The "2.4Ghz" units eliminate interference and channel crystal changing when near other units. They will automatically switch up to 80 channels/units in the same location. You program failsafe throttle and other servo positions in case of signal loss. Check your local rc racing club. They usually have a web site with help and buy/sell forums
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

R/C sends pulses to the servos or speed controls, they get a pulse about every 20mS or so. The pulse for neutral for a servo, or half speed for an ESC is approximately 1.5mS. The pulse width range is from 1mS to 2mS plus/minus a little fudging on the trim, etc. So, if you want to experiment you can use something like 555 timer IC's or I would suggest something like a Basic Stamp or Arduino. I prefer the Arduino because they are cheaper and much more powerful.
I don't know exactly how the R/C brushless motors and speed controls work, they may be something like sensorless vector ac drives. Anyway, I'm not sure exactly but they probably work a lot like 3 phase motors with AC variable speed drives.
I think some modern speed controls sense the pulse and automatically program themselves to work properly, the pulse they receive on power up is the OFF and then going the other way increases speed. For example, if they are powered up receiving 1ms pulses, that is off and 2ms pulses would be full throttle. Likewise if they are powered up receiving 2ms pulses then 1ms pulses would be full throttle.
Hope this helps
RogerN
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Since Roger is suggesting a roll-yer-own approach I thought I'd offer an example of a software only servo driver. - written for a 16 Mhz AT (way back last century)...
32K of MASM source code Assembles to a 3k executable file. :)
There is some pretty cool code in there. Table driven keyboard parser, default parameter cloning, automatic servo ramp back and forth.
The table driven key parser equalizes the overhead a lot better than a long list of "IF key = ???" tests. More readable too.
Since it's Assembly, it's pretty straight forward to port to any micro.
But trimmed down here of all the support stuff, DOS keys, printing, number formatting, screen stuff, etc.
The heart of the servo driver is located at K9: and calls a software delay loop at Dlay_Ax
Basic bit fiddling... Set the bit high, count on fingers and toes as directed, set the bit low. That makes the PWM signal that goes to the servo (or ESC).
Just below Start: is the key loop... wait for a key translate it to a (possible) key handler do the handler (change position, set a parameter, clone the program, etc) send another pulse loop back to do it all over again.
There are 4 delay parameters used in this program: I would think these would be common to any software only servo driver.
PT is the delay between pulse trains. This is a single channel driver, so this part simulates the time an 8 channel system would spend servicing the other 7 channels.
LD is a 1 msec lead in delay.
SD is a short delay to make the pulse width happen. (SD = 00h is left, SD = 80h is centered, SD = FFh is right) This delay will vary from 0 to 1 msec to make the PWM data pulse vary from 1 to 2 msec. Or in other words, this is the PWM DATA part.
PD is the time delay between pulses in a pulse train.
At a later time and faster computer (33 Mhz 386) I had eight channels running via a single printer port using the system timer. Those were fun days...
I think it would be easier to port to a PIC, Stamp, or Propeller than to get this running on my 2.6 GIG hz Windows machine. (getting ANY Real Time Controls running on a Windows machine is a pain)
Well, anyway, presented here just to dig the C-hags... :)
page ,132
LPT1 EQU 0278H    ' IO port addresses LPT2 EQU 0378H
;----------------------------------------------------;
CSEG SEGMENT 'CODE' ASSUME CS:CSEG, DS:CSEG, ES:CSEG ORG 100H ; FOR .COM FILE
SERVO PROC FAR
JMP START db cr,' ', cr,lf db tab,tab,tab,'Direct Control Servo Driver',cr,lf db tab,tab,tab,'Copyright Richard Lamb 1993', cr,lf db tab,tab,tab,'Demo: January 25, 1993', cr,lf db 26 ;================================================ ; PROGRAM DATA AREA ;================================================ org servo+70h
; ---------------------------------------------------- ; these parameters are updated via clone proceedure | ; | PT DW 0300H ; PULSE TRAIN DELAY | LD DW 013DH ; LEAD-IN DELAY (1 MSEC) | SD DW 0007H ; SHORT DELAY TO MAKE PULSES | PD DW 0400H ; DELAY BETWEEN PULSES | PC DB 0AH ; PULSE TRAIN COUNT | PORT DB 2 ; which printer port | RAMPFLAG DB 00H ; 0 = on, non-zero = off | RAMPDIR DB 00H ; 0 = one way, 1 = the other | SRV DB 01H ; SERVO CHANNEL NUMBER | POS DB 80H ; ATTEMPTED POSITION | ; | ; ----------------------------------------------------
LPT dw 00 ; LPT1 I/O ADDRESS
F_NAME db 'SERVO.COM',0    ; for clone routing f_hand dw 0
X_ROW DB 0 ; CURSOR ROW FOR LOC_XY X_COL DB 0 ; CURSOR COLUMN FOR LOC_XY X_CSR DW 0 ; CURSOR SIZE
CRT_HGT DB 24h ; bottom line (0 based) CRT_WID DB 79 ; rightmost column (0 based) COLOR DB 1FH ; COLOR ATTRIBUTE FOR CLS
M_open db tab,tab,'Error Locating File ',bell, '$' M_move db tab,tab,'Error Locating Data',bell, '$' M_writ db tab,tab,'Error Writing Data ',bell, '$' M_clos db tab,tab,'Error Closing File ',bell, '$' m_good db tab,tab,'SERVO.COM Defaults Updated ',bell,'$' M_Key db tab, ' [ Press a key to resume.. ]$' m_blank db tab,tab, 39 dup(' '),'$' m_lpt1 db 'LPT1$' M_LPT2 db 'LPT2$'
SCRTXT DB ' SERVO.COM Servo Timing Parameters Demo',cr,lf DB ' Direct Drive Method Copyright R. Lamb 1993',cr,lf db lf SCRW DB tab,' t - Train Delay T + Train Delay PT ',cr,lf SCRL DB tab,' l - Long Delay L + Long delay LD ',cr,lf SCRS DB tab,' s - Short delay S + Short Delay SD ',cr,lf SCRP DB tab,' p - Position P + Position POS',cr,lf DB tab,' r Ramp OFF R Ramp ON ',cr,lf DB cr,lf db lf DB tab,tab,' 1 2 Select servo channel 1 or 2',cr,lf db tab,tab,' 0 3 Turn OFF servos, or run BOTH ',cr,lf db tab,tab,' F1 F2 Select printer port 1 OR 2',cr,lf DB tab,tab,' X move to Right limit ', cr, lf DB tab,tab,' Y move to Left limit', cr, lf DB tab,tab,' Z move to Zero (centered) ',cr,lf db tab,tab,' Arrow keys - Top row = fast',cr,lf db tab,tab,' Mid row = medium',cr,lf db tab,tab,' Bot row = slow',cr,lf db tab,tab,' ~ to clone new defaults ',cr,lf DB tab,tab,' ESC to terminate program ',cr,lf db '$'
M_ON db 'On $' M_OFF db 'Off $' M_Left db 'Left $' M_RIGHT db 'Right$'
P_F1 DB 'F1 $' P_F2 DB 'F2 $' P_F3 DB 'F3 $' P_F4 DB 'F4 $' P_F5 DB 'F5 $' P_F6 DB 'F6 $' P_F7 DB 'F7 $' P_F8 DB 'F8 $' P_F9 DB 'F9 $' P_F10 DB 'F10$'
FUN_TAB: ;-------------------------------; ; LIST OF KEY CODES TO LOOK FOR ; ;-------------------------------;
DB '12' db '30' DB 'tT' DB 'pP' DB 'zZ' DB 'lL' DB 'sS' DB 'xX' DB 'yY' DB 'rR' db '~~'
DB 71, 72, 73 ; 7 8 9 KEYPAD KEYS DB 75, 5, 77 ; 4 5 6 (ARROWS) DB 79, 80, 81 ; 1 2 3
DB 59, 60, 61 ; F: 1 2 3 FUNCTION KEYS DB 62, 63, 64 ; F: 4 5 6 DB 65, 66, 67 ; F: 7 8 9 DB 68 ; F: 10
DB 0 ; ARNOLD
FUN_ADDR: ;-------------------------------; ; JUMP TABLE FOR HANDLER CODE ; ;-------------------------------;
DW chan1, chan2 dw chan3, chan0 DW decT, incT DW decP, incP DW zero, zero DW decL, incL DW decS, incS DW left, left DW right, right DW rampoff, rampon dw clone, clone
DW KHOME, KUARR, KPGUP DW KLARR, KEY5, KRARR DW KEND, KDARR, KPGDN
DW KFUN1, KFUN2, KFUN3 DW KFUN4, KFUN5, KFUN6 DW KFUN7, KFUN8, KFUN9 DW KFUN10
DW 0
;======================
START: mov bx, lpt1 cmp port, 1 jz P1
mov bx, lpt2
P1: mov lpt, bx
call Get_Rows_N_Cols CALL CLS CALL Screen
MOV DX, LPT ; SET DX TO POINT TO PRINTER PORT MOV AL, 0 OUT DX, AL ; SET ALL BITS LOW TO START
KEYLUP: CALL INKEY CALL UCASE
KESC: CMP AL, 27 ; ESCAPE KEY ? JNZ K1
QUIT: MOV ax, 1700h CALL loc_AX MOV AH,04CH ; MILLER TIME! MOV AL, 0 ; RETURN CODE INT 21H
;-------------------------------------------------
K1: MOV SI, OFFSET FUN_TAB ; SEARCH FUN_TABLE FOR KEY IN AL MOV BX, 0 ; CLEAR TABLE INDEX K3: CMP BYTE PTR [SI+BX], AL ; FIND HIM? JE K4 ; GOT HIM ! Jump to dispatcher... INC BX ; POINT TO NEXT BYTE CMP BYTE PTR [SI+BX], 0 ; CHECK END OF TABLE ? JE K0 ; END OF TABLE ! DON'T BOTHER. JMP SHORT K3 ; NO, KEEP LOOKIN...
;------------------------------------------------- K4: ; OK, AL HAS THE KEY - AND IT WAS IN THE LIST. ; BX HAS AN OFFSET COUNT (0 TO ?) BY ONESIES...
MOV AX, BX ; INDEX COUNT LEA BX, FUN_ADDR ; TABLE OF HANDLER ADDRESSES ADD AX, AX ; X2 ADD BX, AX ; OFFSET OF MATCHING HANDLER MOV BX, [BX] CALL BX ; DO HANDLER ROUTINE...
;--------------------------------------------------------- ;---------------------------------------------------------
K0: CMP rampflag, 0ffh ; no ramp if FF JZ k9 R0: CMP rampdir, 0 ; 0 is decrement JNZ r1 ; bif increment
CMP pos, 1 ; decrement pos JA r2
MOV rampdir, 1 ; change direction JMP r0 ;-------------
R2:
DEC pos ; decrememt pos call sho_pos JMP k8 ; doit
R1: CMP pos, 0ffh JB r3
MOV rampdir, 0 ; change dir JMP r0 ;-------------
R3: INC pos call sho_pos JMP k8 k8: MOV AX, 083BH ; show direction CALL LOC_AX            ; locate screen row, col
lea dx, M_Right cmp rampdir, 0 jz k81
lea dx, M_Left k81: call print$
K9: ; test table driven pulse routine =============== MOV AL, POS ; DESIRED SERVO POSITION MOV BL, AL ; KEEP POSITION CODE IN BL
MOV DX, LPT ; ACTIVE PRINTER PORT MOV AL, SRV ; SELECT SERVO CHANNEL NUMBER
OUT DX, AL ; START OF THE PULSE ****
K10: MOV CX, LD ; lead-in delay (1 mSec)
K10B: NOP ; 3 clock cycles NOP LOOP K10B
MOV CH,0 ; 2ND HALF; MOV CL,BL ; BL HAS POSITION CODE FROM TABLE
K12: PUSH CX MOV CX, SD ; short delay (1mSec/# of table positions) K12B: NOP LOOP K12B
NOP NOP
POP CX LOOP K12
MOV AL,0 ; TURN BITS OFF OUT DX, AL ; END OF THIS PULSE ****
; end of pulse routine ========================== MOV AX, PT ; delay between pulses CALL DLAY_AX JMP KEYLUP ; ROLL ANOTHER ONE.....
;--------------------------------------------------------- ;---------------------------------------------------------
SERVO ENDP
;--------------------------------------------------------- ;======================================================== DLAY_AX PROC NEAR ; LONG DELAY - AX HAS TICK ITERATIONS PUBLIC DLAY_AX, LD_1, LD_2
PUSH CX PUSH AX LD_1: MOV CX, 0FH ; LONG 'NUF ? LD_2: LOOP LD_2 DEC AX CMP AX, 0 JNZ LD_1 POP AX POP CX RET
DLAY_AX ENDP
;======================================================== ;======================================================== ;======================================================== ;======================================================== CSEG ENDS
END SERVO
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Back about 1985 I wrote a PC-AT assembly driver for an H bridge motor controller to test open-loop stepper damping schemes for a printer carriage drive. I don't have the code but IIRC it was only 10 - 20 lines, OUT instructions separated by fixed countdown loops to time the pulses.
jsw
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

A real programmer would use binary :-)

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
john B. wrote:

Not since John Von Neumann met the ENIAC...
--

Richard Lamb
http://www.home.earthlink.net/~cavelamb
  Click to see the full signature.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

I actually met a bloke that had worked on computers where to boot you had to enter a small "read that and do something about it" routine on the front panel.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

I'm a bloke who designed and built one. The manually entered bootstrap loader was a 32 byte loop that read in a Teletype tape, downwards so the final byte overwrote a jump destination to start the monitor program, which was a very simple operating system that could load more code from paper or magnetic tape.
IIRC the bootstrap loader began with a conditional jump to the monitor that wasn't true at cold start. The paper tape boot program changed it to JMP to skip the bootstrap loader at subsequent resets.
jsw
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Jim Wilkins wrote:

The Okuma OSP-2000 cnc control loaded with boot strap loader loop. You first have to manually set in about 21 bytes of code using switches to set up the computer to run the bootstrap from a short punch tape. Once you load the bootstrap the actual executive system tapes can be loaded. These machines used two 8K bubble memory boards. The newer options went with a cmos memory.
John
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Then I was a "real" programmer until I got tired of flipping switches and wired in an octal keypad. You would have posted in Morse from your home-built ham station.
.--- ... .--
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

In a sensorless system, the controller measures induced voltage on the non-driven phase of the motor to determine where in the commutation cycle it is. For startup, where the speed is zero and therefore no induced voltage is present, a special startup mode is needed. There are several different techniques for starting up reliably. The simplest method is to just commutate blindly at low speed for a while and see if any voltage appears. This technique will result in limited startup torque, and may even cause the motor to turn backwards a few degrees just as it starts.

Very similar, but they don't use a sine shaped drive. At partial power, the current is modulated, but the frequency and duty cycle remains constant through the whole cycle. At full power, the phase current is either full on or full off.

I have not seen a controller like that. In fact, I think it would be dangerous. The controllers I have seen, will emit beeping noises and refuse to start the motor at all until the operator has lowered the throttle to full stop first. Some controllers enter the configuration mode if they are switched on with the throttle at max.
--
RoRo

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Yeah, that's right, I was getting confused between my car speed controls and heli speed controls. The car reversible speed control automatically sets the zero speed on power up, this is because some transmitters have 50/50 forward reverse, some have 70/30 or somewhere around there. The heli speed controls start flashing and disable if they are above zero throttle. I haven't measured the pulse width connected to a speed control so I don't know if zero speed is 1ms or 2ms pulse. One of my heli speed controls has a governor, that might be nice for gyroscopes.
RogerN
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.