From 81a7e949b60910360c2b966bf3ab9ca774fabf43 Mon Sep 17 00:00:00 2001 From: AvatarSD Date: Sat, 11 Mar 2017 02:21:57 +0200 Subject: [PATCH 1/4] add rctimer nfs esc support add changes from https://github.com/vizual54/tgy repo --- rct30nfs.inc | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ rct45nfs.inc | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tgy.asm | 4 +++ 3 files changed, 161 insertions(+) create mode 100644 rct30nfs.inc create mode 100644 rct45nfs.inc diff --git a/rct30nfs.inc b/rct30nfs.inc new file mode 100644 index 0000000..9361aea --- /dev/null +++ b/rct30nfs.inc @@ -0,0 +1,77 @@ +;*************************************************************** +;* For RCTimer NFS 30A all n-Channel FETs * +;* Original fuses are -U lfuse:w:0x2f:m -U hfuse:w:0xCA:m * +;* By Nils Högberg * +;* * +;* https://github.com/sim-/tgy * +;*************************************************************** + +.equ F_CPU = 16000000 +.equ USE_INT0 = 0 ; used by channel C +.equ USE_I2C = 0 ; We could, no FETs are on the I2C ports +.equ USE_UART = 1 +.equ USE_ICP = 1 + + +;********************* +; PORT D definitions * +;********************* + +.equ ApFET = 4 +.equ AnFET = 5 +.equ BpFET = 3 +.equ BnFET = 7 +.equ CpFET = 2 + +.equ txd = 1 +.equ rxd = 0 + +.equ INIT_PD = (1< ?V at ADC2) +.equ mux_temperature = 1 ; ADC1 temperature input (100 from +5V, ?k NTC to gnd at ADC1) + + +.equ O_POWER = 220 +.equ O_GROUND = 39 + +.equ INIT_PC = 0 ;(1< ?V at ADC2) + + + +.equ O_POWER = 10 +.equ O_GROUND = 1 + +.equ INIT_PC = 0 +.equ DIR_PC = 0 + +;********************* +; PORT B definitions * +;********************* +;.equ = 5 ; SCK +;.equ = 4 ; MISO +;.equ = 3 ; MOSI +.equ AnFET = 2 +.equ BnFET = 1 +.equ CnFET = 0 + +.equ INIT_PB = 0 +.equ DIR_PB = (1< Date: Sat, 11 Mar 2017 02:41:10 +0200 Subject: [PATCH 2/4] Change config and add build support files --- MakeHexFiles.bat | 45 +++++++++++++++++++++++++++++++++++++++++++++ avra.exe | Bin 0 -> 86030 bytes tgy.asm | 22 +++++++++++----------- 3 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 MakeHexFiles.bat create mode 100644 avra.exe diff --git a/MakeHexFiles.bat b/MakeHexFiles.bat new file mode 100644 index 0000000..d0987fd --- /dev/null +++ b/MakeHexFiles.bat @@ -0,0 +1,45 @@ +REM build script v2.0 by Chris Osgood 2013-09-07 http://lunarflow.com/ + +@echo off +SETLOCAL enabledelayedexpansion + +IF "%1"=="" ( + FOR /F "tokens=1,2,*" %%i in (Makefile) DO ( + IF "%%i"=="ALL_TARGETS" ( + FOR %%F IN (%%k) DO ( + call :DoCompile %%~nF + IF !errorlevel! NEQ 0 goto error + ) + goto exit + ) + ) +) else ( + FOR %%F IN (%*) DO ( + call :DoCompile %%~nF + IF !errorlevel! NEQ 0 goto error + ) +) + +:exit +pause +goto :eof + +:error +echo ********** ERROR ********** +pause +goto :eof + +:DoCompile +echo. +echo ========== BUILD "%1" ========== +echo. +IF NOT EXIST %1.asm ( + COPY tgy.asm %1.asm + avra -fI -o %1.inc.hex -D %1_esc -e %1.eeprom -d %1.obj %1.asm + SET err=!errorlevel! + DEL %1.asm +) else ( + avra -fI -o %1.inc.hex -D %1_esc -e %1.eeprom -d %1.obj %1.asm + SET err=!errorlevel! +) +exit /B !err! diff --git a/avra.exe b/avra.exe new file mode 100644 index 0000000000000000000000000000000000000000..453c0980e1fce129bcaa0cb0542880594e5f95c1 GIT binary patch literal 86030 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

77Q|MU9Hp7z$TTsCv=1Tt6yX5E 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 cAx!D!cYDyS{^R%ml?Dn?+Dd0: hard-coded number of cells (for reliable LVC > ~4S) .equ BLIP_CELL_COUNT = 0 ; Blip out cell count before arming .equ DEBUG_ADC_DUMP = 0 ; Output an endless loop of all ADC values (no normal operation) @@ -241,18 +241,18 @@ ; Number of PWM steps (too high and PWM frequency drops into audible range) .if !defined(POWER_RANGE) -.equ POWER_RANGE = 800 * CPU_MHZ / 16 + MIN_DUTY +.equ POWER_RANGE = 1200 * CPU_MHZ / 16 + MIN_DUTY .endif .equ MAX_POWER = (POWER_RANGE-1) .equ PWR_COOL_START = (POWER_RANGE/24) ; Power limit while starting to reduce heating -.equ PWR_MIN_START = (POWER_RANGE/6) ; Power limit while starting (to start) -.equ PWR_MAX_START = (POWER_RANGE/4) ; Power limit while starting (if still not running) +.equ PWR_MIN_START = (POWER_RANGE/3) ; Power limit while starting (to start) +.equ PWR_MAX_START = (POWER_RANGE/2) ; Power limit while starting (if still not running) .equ PWR_MAX_RPM1 = (POWER_RANGE/4) ; Power limit when running slower than TIMING_RANGE1 .equ PWR_MAX_RPM2 = (POWER_RANGE/2) ; Power limit when running slower than TIMING_RANGE2 .equ BRAKE_POWER = MAX_POWER*2/3 ; Brake force is exponential, so start fairly high -.equ BRAKE_SPEED = 3 ; Speed to reach MAX_POWER, 0 (slowest) - 8 (fastest) +.equ BRAKE_SPEED = 5 ; Speed to reach MAX_POWER, 0 (slowest) - 8 (fastest) .equ LOW_BRAKE_POWER = MAX_POWER*2/3 .equ LOW_BRAKE_SPEED = 5 @@ -266,8 +266,8 @@ .if !defined(START_DELAY_US) .equ START_DELAY_US = 0 ; Initial post-commutation wait during starting .endif -.equ START_DSTEP_US = 8 ; Microseconds per start delay step -.equ START_DELAY_INC = 15 ; Wait step count increase (wraps in a byte) +.equ START_DSTEP_US = 6 ; Microseconds per start delay step +.equ START_DELAY_INC = 12 ; Wait step count increase (wraps in a byte) .equ START_MOD_INC = 4 ; Start power modulation step count increase (wraps in a byte) .equ START_MOD_LIMIT = 48 ; Value at which power is reduced to avoid overheating .equ START_FAIL_INC = 16 ; start_tries step count increase (wraps in a byte, upon which we disarm) From 833c9f90057a1b3c9d9ce00dbda18e1011b6985c Mon Sep 17 00:00:00 2001 From: AvatarSD Date: Sat, 11 Mar 2017 03:56:09 +0200 Subject: [PATCH 3/4] set rc cmd from 1000 to 2000 and change power_range --- .gitignore | 2 ++ tgy.asm | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 278494b..e333c41 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *.hex *.obj + +*.cof diff --git a/tgy.asm b/tgy.asm index 39b9595..cc1359d 100644 --- a/tgy.asm +++ b/tgy.asm @@ -212,10 +212,10 @@ ; These are now defaults which can be adjusted via throttle calibration ; (stick high, stick low, (stick neutral) at start). ; These might be a bit wide for most radios, but lines up with POWER_RANGE. -.equ STOP_RC_PULS = 1060 ; Stop motor at or below this pulse length -.equ FULL_RC_PULS = 1860 ; Full speed at or above this pulse length -.equ MAX_RC_PULS = 2400 ; Throw away any pulses longer than this -.equ MIN_RC_PULS = 768 ; Throw away any pulses shorter than this +.equ STOP_RC_PULS = 1000 ; Stop motor at or below this pulse length +.equ FULL_RC_PULS = 2000 ; Full speed at or above this pulse length +.equ MAX_RC_PULS = 2060 ; Throw away any pulses longer than this +.equ MIN_RC_PULS = 940 ; Throw away any pulses shorter than this .equ MID_RC_PULS = (STOP_RC_PULS + FULL_RC_PULS) / 2 ; Neutral when RC_PULS_REVERSE = 1 .equ RCP_ALIAS_SHIFT = 3 ; Enable 1/8th PWM input alias ("oneshot125") .equ BEEP_RCP_ERROR = 0 ; Beep at stop if invalid PWM pulses were received @@ -241,7 +241,7 @@ ; Number of PWM steps (too high and PWM frequency drops into audible range) .if !defined(POWER_RANGE) -.equ POWER_RANGE = 1200 * CPU_MHZ / 16 + MIN_DUTY +.equ POWER_RANGE = 1000 * CPU_MHZ / 16 + MIN_DUTY .endif .equ MAX_POWER = (POWER_RANGE-1) @@ -252,7 +252,7 @@ .equ PWR_MAX_RPM2 = (POWER_RANGE/2) ; Power limit when running slower than TIMING_RANGE2 .equ BRAKE_POWER = MAX_POWER*2/3 ; Brake force is exponential, so start fairly high -.equ BRAKE_SPEED = 5 ; Speed to reach MAX_POWER, 0 (slowest) - 8 (fastest) +.equ BRAKE_SPEED = 6 ; Speed to reach MAX_POWER, 0 (slowest) - 8 (fastest) .equ LOW_BRAKE_POWER = MAX_POWER*2/3 .equ LOW_BRAKE_SPEED = 5 From 7891433eeac8a1b0084a1711e9ae784d4a889d43 Mon Sep 17 00:00:00 2001 From: AvatarSD Date: Sat, 11 Mar 2017 04:19:39 +0200 Subject: [PATCH 4/4] disable runtime calibration --- tgy.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgy.asm b/tgy.asm index cc1359d..9ca1cf1 100644 --- a/tgy.asm +++ b/tgy.asm @@ -190,7 +190,7 @@ .equ MOTOR_REVERSE = 0 ; Reverse normal commutation direction .endif .equ RC_PULS_REVERSE = 0 ; Enable RC-car style forward/reverse throttle -.equ RC_CALIBRATION = 1 ; Support run-time calibration of min/max pulse lengths +.equ RC_CALIBRATION = 0 ; Support run-time calibration of min/max pulse lengths .equ SLOW_THROTTLE = 0 ; Limit maximum throttle jump to try to prevent overcurrent .equ BEACON = 1 ; Beep periodically when RC signal is lost .equ BEACON_IDLE = 0 ; Beep periodically if idle for a long period