From 71657f9ba69fda5cf0f1b6613e3c464406c4a729 Mon Sep 17 00:00:00 2001 From: Jake <jake.read@cba.mit.edu> Date: Tue, 10 Apr 2018 00:27:09 -0400 Subject: [PATCH] does step accel segments --- circuit/README.md | 22 +++- circuit/mkstepper/eagle.epf | 42 ++++---- circuit/mkstepper/mkstepper.brd | 4 +- embedded/README.md | 10 ++ .../.vs/mkstepper-v011/v14/.atsuo | Bin 99840 -> 101888 bytes .../mkstepper-v011/Debug/Makefile | 10 +- ...amd51j18a_flash.ld => samd51j19a_flash.ld} | 8 +- ...{samd51j18a_sram.ld => samd51j19a_sram.ld} | 6 +- .../mkstepper-v011/apahandler.c | 47 ++++----- .../mkstepper-v011/apahandler.h | 3 +- embedded/mkstepper-v011/mkstepper-v011/main.c | 27 +++-- .../mkstepper-v011.componentinfo.xml | 14 +-- .../mkstepper-v011/mkstepper-v011.cproj | 12 +-- .../mkstepper-v011/mkstepper-v011/stepper.c | 97 +++++++++--------- .../mkstepper-v011/mkstepper-v011/stepper.h | 42 ++++---- .../mkstepper-v011/mkstepper-v011/tmc26.c | 4 +- 16 files changed, 193 insertions(+), 155 deletions(-) rename embedded/mkstepper-v011/mkstepper-v011/Device_Startup/{samd51j18a_flash.ld => samd51j19a_flash.ld} (95%) rename embedded/mkstepper-v011/mkstepper-v011/Device_Startup/{samd51j18a_sram.ld => samd51j19a_sram.ld} (97%) diff --git a/circuit/README.md b/circuit/README.md index 5039391..1434196 100644 --- a/circuit/README.md +++ b/circuit/README.md @@ -28,4 +28,24 @@ I had this manufactured, and got the solder stencil, so that just left me to pla  - \ No newline at end of file + + +## V0.3 + +Ok, I just blew one of these drivers up. Not sure what's up. + +There's also a stray issue where the first apaport isn't working. the uartport runs messages out, but is maybe not catching any characters in, or something else, who knows. + +I also notice that I see some current through the vcc pin apparently coming from the logic side, I should test to see if this is the case on the old drivers as well. I've compared schematics and I can't see any issues, so unless these came back from the fab with a trace error? + +That's it - I had accidentally set two polygons to the same rank in eagle, connecting the +3V3 net to one of the motor outputs. Whoops! Fixed this by cutting the trace. + +So, to rev: + - power lines are in sad, move to edge + - could do with only 2 mount holes, or three + - gnd plane is pretty dissatisfying + - lights are a bit close, tend to solder together + - just nix the usb, regulator, and power source switch + - go to AEAT6600 encoder, but make sure you test it with the mkbldc first + - min trace is still not 8mil for 2oz, should be + - it would be cool to be able to heatsink from the top, maybe mount the driver on the bottom? \ No newline at end of file diff --git a/circuit/mkstepper/eagle.epf b/circuit/mkstepper/eagle.epf index ec05ab8..922df8d 100644 --- a/circuit/mkstepper/eagle.epf +++ b/circuit/mkstepper/eagle.epf @@ -37,12 +37,12 @@ UsedLibrary="C:/EAGLE 8.3.2/lbr/ltspice/rload.lbr" UsedLibrary="C:/EAGLE 8.3.2/lbr/ltspice/sym.lbr" [Win_1] -Type="Schematic Editor" -Loc="926 0 1910 1007" -State=2 -Number=1 -File="mkstepper.sch" -View="69.3549 41.988 159.951 129.374" +Type="Board Editor" +Loc="0 0 1919 1016" +State=1 +Number=2 +File="mkstepper.brd" +View="-6.97066 -2.84297 80.9601 62.6704" WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524" PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0" PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6" @@ -58,14 +58,14 @@ DimensionExtWidths=" 0.127 0.254 0.1 0.13 0.26 0" DimensionExtLengths=" 1.27 2.54 1 2 3 0" DimensionExtOffsets=" 1.27 2.54 1 2 3 0" SmdSizes=" 0.3048 0.1524 0.4064 0.2032 0.6096 0.3048 0.8128 0.4064 1.016 0.508 1.27 0.6604 1.4224 0.7112 1.6764 0.8128 1.778 0.9144 1.9304 0.9652 2.1844 1.0668 2.54 1.27 3.81 1.9304 5.08 2.54 6.4516 3.2512 1.27 0.635" -WireBend=0 -WireBendSet=31 +WireBend=1 +WireBendSet=0 WireCap=1 MiterStyle=0 PadShape=0 ViaShape=1 PolygonPour=0 -PolygonRank=0 +PolygonRank=1 PolygonThermals=1 PolygonOrphans=0 TextRatio=8 @@ -80,17 +80,15 @@ SwapLevel=0 ArcDirection=0 AddLevel=2 PadsSameType=0 -Layer=91 -Views=" 1: 69.3549 41.988 159.951 129.374" -Sheet="1" +Layer=1 [Win_2] -Type="Board Editor" +Type="Schematic Editor" Loc="0 0 1919 1016" State=1 -Number=2 -File="mkstepper.brd" -View="10.3097 24.4002 22.1441 33.2175" +Number=1 +File="mkstepper.sch" +View="69.3549 41.988 159.951 129.374" WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524" PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0" PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6" @@ -106,14 +104,14 @@ DimensionExtWidths=" 0.127 0.254 0.1 0.13 0.26 0" DimensionExtLengths=" 1.27 2.54 1 2 3 0" DimensionExtOffsets=" 1.27 2.54 1 2 3 0" SmdSizes=" 0.3048 0.1524 0.4064 0.2032 0.6096 0.3048 0.8128 0.4064 1.016 0.508 1.27 0.6604 1.4224 0.7112 1.6764 0.8128 1.778 0.9144 1.9304 0.9652 2.1844 1.0668 2.54 1.27 3.81 1.9304 5.08 2.54 6.4516 3.2512 1.27 0.635" -WireBend=1 -WireBendSet=0 +WireBend=0 +WireBendSet=31 WireCap=1 MiterStyle=0 PadShape=0 ViaShape=1 PolygonPour=0 -PolygonRank=1 +PolygonRank=0 PolygonThermals=1 PolygonOrphans=0 TextRatio=8 @@ -128,7 +126,9 @@ SwapLevel=0 ArcDirection=0 AddLevel=2 PadsSameType=0 -Layer=1 +Layer=91 +Views=" 1: 69.3549 41.988 159.951 129.374" +Sheet="1" [Win_3] Type="Control Panel" @@ -137,7 +137,7 @@ State=1 Number=0 [Desktop] -Screen="6000 2160" +Screen="3840 1080" Window="Win_1" Window="Win_2" Window="Win_3" diff --git a/circuit/mkstepper/mkstepper.brd b/circuit/mkstepper/mkstepper.brd index 8682666..7663d56 100644 --- a/circuit/mkstepper/mkstepper.brd +++ b/circuit/mkstepper/mkstepper.brd @@ -1455,7 +1455,7 @@ design rules under a new name.</description> <vertex x="26.85" y="49.25"/> <vertex x="28.55" y="49.25"/> </polygon> -<polygon width="0.1524" layer="1" thermals="no" rank="2"> +<polygon width="0.1524" layer="1" thermals="no" rank="3"> <vertex x="34.95" y="39.85"/> <vertex x="34.95" y="49.25"/> <vertex x="38.45" y="49.25"/> @@ -1631,7 +1631,7 @@ design rules under a new name.</description> <contactref element="U$11" pad="1"/> <contactref element="U$14" pad="1"/> <contactref element="U$13" pad="1"/> -<polygon width="0.1524" layer="1" rank="5"> +<polygon width="0.1524" layer="1" rank="6"> <vertex x="1.75" y="58"/> <vertex x="1.75" y="1.75"/> <vertex x="43.25" y="1.75"/> diff --git a/embedded/README.md b/embedded/README.md index cc0f3da..6a35f85 100644 --- a/embedded/README.md +++ b/embedded/README.md @@ -533,3 +533,13 @@ Packet Handling and Passing, oh my! I'll take most of this from the code I've already written for the Router. +Done that, just have to debug one apaport and get the lights a flashing. I think this project should be the major touchstone for network code / all around infrastructure as it'll probably get the most love. + +## Step Linking and Acceleration + +So, I want to be able to send the command: + - Start Speed : Steps to take : End Speed + - or Steps to Take : End Speed and assume link from last block +And do linear interpretation. + +I should also, and as a starting exercise, re-write the relative speed and relative steps packet handlers to do ... relative, and real speeds in steps / s. \ No newline at end of file diff --git a/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo b/embedded/mkstepper-v011/.vs/mkstepper-v011/v14/.atsuo index bf5ec65953cbd5772f8fd9ee9aa64d80911873df..04bd86806200e9f88b4f0f1a9e5e0454b187544e 100644 GIT binary patch delta 2158 zcmZqZVQZMfHo=CGccZO76JNtcBd?V6ml-t}7#J7~Cs#35F&>`$mC2ujmw|ynm4Sg_ z@;y_f$p%bplS`Oen7EiH|6-P^mttUG_zwl#3=9k$P`)|?1A_zu0|N^K0|O@m1H(V4 zn!o@5|5s#SU{Hao<AKtA3=9mi3=9lA7#J9Yp<)LZ7#L)rY^e7C;z)cU1_m#%<=RjS zG#MBev=|r|bQl;I_AoFo=rJ%bs4*}w=rb@d7%(s}%wk|*Fk)a}FlJz2FkxU|FlAt1 zFk@g~FlS(3h@TiZ-yj*ubdZfH3=9mZ3=9lu3=9nE3=9kz3=9mJ3=9le3=9m}pb%Lj z?jTYN)l|p8z);V?z|g?Jz%Yp^hfiRU8HwS^u7nbvB2a@tE@5L}U=V=vxu7&G96@0% z#=yWJ&A`9_3P+H7SU7^h6c&!4H~@t|NFFU5VZrDGj;O&Cj+?l67$<XZf0@MN!U1wN zC>UVLka7LwQl4NIQBXWUQzqk~$zOTu8Eq$*^7=6|@-R%kVX6U2v75i}N>Ia`$zKEm zCLdukm|POz&&dD^cTiG;IcV}1kpQqOLFo}LSR&dpNydW(6s8C<nE(z@41jV0T=0tw zL^l(XhbEWEhOmG#Buo`ID23eu<xmEO$^ZS2Og=2q$N^G-;t-IXDlQzLyZ}n~FwL7w z^u94pj;-bqOkQ?G_4173nez(uxU>J()i6v9l$^XkLV@wX<b#F>1y3E_;(wL@$U`SJ zOZBpF4{nBufx?rQNk&Z)o52I}H7F&4@Z=?88VaDC1meJQk_7_;gCzq4gB1e<gAD@% z!{#?)B8-dVm=?J(fdT^LD42sLmyi$;{*w<g8M-3*pP`X~fuV_kfuWg!fuV(gfuWUw zfuW6ofuWs&fuVzefuWOufuS3kS$Y^47<w5P82Uh=J26n0amK_zVa}P*l4IAzz~IOY z3=9k#K@Ns$*}}lUu$6&<VJDOiN`U+f3=I1i7#MalFfiycFfi<8U|;~H!2Jvi42KvP z7!EQpFi0{mFdSxJU^v3Sz;F~~!NkPZlhjVIfQllR&o_Tj<6)enRKln+xm3xIlaU=- zRwCq;0vI_!2?;d<ReBgVNgZIEd_ZFx*^#Joc=BOc!^sUHESrDma4;@1VwvPr!e~0V z)Ty4;kb!|gaq>^6-`t=Cdj*sh85kzpn=}jZR(Ub!M>H_(2)_C6fYSG0pfs_0nNbwu zB*{ga7g^n7-rV5Qz-T!DaUw@%oGfx;TI9yG$c<%_hZ56dC7DG;=gFQ;ehN&R6|^2O zZVD>qot$1BzWG$V84IK0WX6=;lcicTC-*kpp1e2p>gM|m>li1W&sx9PCEb{1vcWO- z%{rY|SQZueO<!2Us6E-CSz~i>-&)2+huAhvn8nX31gZu%&!5l4#&~n`g{)=M57aPn zgACkUwk$|o5LCiL@;(CtD1LY*&!4{rY--QG62{3BR!DE3z{_}_anUcP?fLwSm5kE^ zG#I%y*Zyx7n>6$K_UjUi%8bic7@3y;vS#F%ezAp7Zo3>C<0JOT3pURL=}c!_#>dF9 zJ>G%wBje=0`8?CVn=-0wS2SU~&$!Hj5tM@`f829@`*kZuP48uKj7-xnWHIt==SgGy o!Z=+jl96vZUmoL`?YGPr)flJy<ug_=?wfuvfpPV8l|sfl0E<zvnE(I) delta 2299 zcmZpe!`9HlHo=CGYoo0`6W;^PbS;Ksml-V>7#I#1Os-<8VmvhYE0aG5I|BoQI0FO2 z<a?${lMR^ICYLa`F#Thi{EJztUV(vu;Xf1zLfI?~3=F~y3=G^*K0gBk0|x^GgE9jH zgBb$@gA&v{kTyQ38W||PgMoqJ-~a#r|Nj5~{{U1Bqz;4ypnOpV1_mJrn++uXUwdMp zFy|hK$bYqofy#;?BS2D?3=9lb3=9m`3=9l53=9mm3=9l*3=9lQCjXQ%kMw0=VDMvL zVDM*PU<hDfU<hPjU<hJhU<hVlU<hGgU<hSkU<hMiU<hYmV2EH~V2EU3V2EO1V2Ea5 zV2EL0V2EX4V2ER2U`T*koyfqzki@{iP%|+wouvyDVqX|5c@?us3|4j}c(95wFfgz& zFfd3!gOihifq@rl8z?wIegp+4hz9u?6r3VZd07Sq22gN<<Ukk{oS<L^sRIQsmf!>_ z`>)NwFfmvVIXtx`2QC~1K;Z~>7nIn<#ltu;<;x@<7Y<NJfI<hBFd3IlF69YkQ3HiM zG_5k)PX5YM&uBBbl-G}wfro*C0hBsn8a997m7tnolfMWCaHumdFlZv#&)Uqu!0=#l zrH~gVBgg|<NOF_E2>DMw%w#yZMA)B`QG<bj!2n5?wV#23;nC!ug5F?5ku|~$6+6uV zvP&CD*W?o6o=Gw@ctDX1!XWv{OJp<@KpazO1~g}2U;yQESgeBNHouV(VVoqDC11jj z%aF`q#9+pt$B@jhP&Q+mrUGAOmej7U68Ewn3=;#zCohmvVB9tNpyk7f1uT=7Nk?tc zIl#!cZSp}W`$;}WIG7k17*vp*^hG3q1C(b~kp)Y9dltztO%m~7L3O@J0PzM)(kNk6 zpIoZpH`!S;cC&(}3L^(7jCGOh*<2#g!#GLp#N=D1YM`=f^A|N9#!W^C7#a6~+`A}% zX_CQVa3nN@ux$Qez`;04!i57pE;g4)d}CBCWk_TwVkluKV8{p4pzyizc0(hl<Moh$ zb_YlPwU7QYObisByvRy!^8p(N#!1pmo12X4m?tSTOg^9>uz7+)0pr9F4aWY7fx?Ot z7#J8PGB7YqVqjpH0?o2h85kI*F)%PpXJBBM15z}Xfq`Kj0|Uc+1_p)&3=9kl85kHA zF)%PJh8B~%CQsy2_uT~54)Qz*Z$sm6hpLu>itlD%U;qWuUIqqmmH_Di;e!ke43ZNA ze{ZsCU>Ot+mLt-^i=3DiDKIT^W0~ZmG+9YYjRoX8cqRuWfyoVO0-FU~wlH#libqf} z2$N>z0##3&fBLF3O;!+FJo&JMA!|E0)BY6l;$%Qi3as5=xk_O#uu5<y-TX7KikC5C zaz=I7=2P)zER52V8B=yowr|#)T${6E(pvV(!S^&LA4t7AxwmQ4<ar-J!pkTB?c<od zVG4|GxcPKe6w{=&2Al6U)G<yrIL1C%C-=&v02dA&1_lOwlq4O{!#H_i<DSU|#|$Rl zZ&*7$-<DBx^0WfGMMZv-8#6MeE3h!?PM%h9i`{ekzJpw>ag!I^?cCh>teAOvfD<Fv z=GvppOw$+EFltYBXx7*q+~+3F-uc(zn8M72%?p+;W)rMsKmbr`l%70){^rfRPfu}) zg6bidBq)!A+~zWQ;oUo%PkdlwW%Ss5a<4hl@`tR9OlbCPF8CD3JUvdFanbY!c}BVI zate%(*th3NGrnNj{*I4Pf_3{tcE&hHu!_ka_gvq8SA<cSae9F@qwscK8^+J9(=WEb zv`t@V%owmez=?4K<K~G!@)@`1Ycoz{+sruOHS^@Y`8?CVyECe8m+4}B!nn+gkqMh= Fo&eW*1B3to diff --git a/embedded/mkstepper-v011/mkstepper-v011/Debug/Makefile b/embedded/mkstepper-v011/mkstepper-v011/Debug/Makefile index b582b1c..721ba48 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/Debug/Makefile +++ b/embedded/mkstepper-v011/mkstepper-v011/Debug/Makefile @@ -120,8 +120,8 @@ OUTPUT_FILE_DEP:= ./makedep.mk LIB_DEP+= LINKER_SCRIPT_DEP+= \ -../Device_Startup/samd51j18a_flash.ld \ -../Device_Startup/samd51j18a_sram.ld +../Device_Startup/samd51j19a_flash.ld \ +../Device_Startup/samd51j19a_sram.ld # AVR32/GNU C Compiler @@ -151,14 +151,14 @@ LINKER_SCRIPT_DEP+= \ ./%.o: .././%.c @echo Building file: $< @echo Invoking: ARM/GNU C Compiler : 6.3.1 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -x c -mthumb -D__SAMD51J18A__ -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\arm\CMSIS\5.0.1\CMSIS\Include" -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\include" -O1 -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -x c -mthumb -D__SAMD51J19A__ -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\arm\CMSIS\5.0.1\CMSIS\Include" -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\include" -O1 -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< Device_Startup/%.o: ../Device_Startup/%.c @echo Building file: $< @echo Invoking: ARM/GNU C Compiler : 6.3.1 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -x c -mthumb -D__SAMD51J18A__ -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\arm\CMSIS\5.0.1\CMSIS\Include" -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\include" -O1 -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -x c -mthumb -D__SAMD51J19A__ -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\arm\CMSIS\5.0.1\CMSIS\Include" -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\include" -O1 -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m4 -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< @@ -187,7 +187,7 @@ all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) $(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP) @echo Building target: $@ @echo Invoking: ARM/GNU Linker : 6.3.1 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -mthumb -Wl,-Map="mkstepper-v011.map" -Wl,--start-group -lm -Wl,--end-group -L"..\\Device_Startup" -Wl,--gc-sections -mcpu=cortex-m4 -Tsamd51j18a_flash.ld + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -mthumb -Wl,-Map="mkstepper-v011.map" -Wl,--start-group -lm -Wl,--end-group -L"..\\Device_Startup" -Wl,--gc-sections -mcpu=cortex-m4 -Tsamd51j19a_flash.ld @echo Finished building target: $@ "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe" -O binary "mkstepper-v011.elf" "mkstepper-v011.bin" "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "mkstepper-v011.elf" "mkstepper-v011.hex" diff --git a/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_flash.ld b/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_flash.ld similarity index 95% rename from embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_flash.ld rename to embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_flash.ld index 301f100..a915d1f 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_flash.ld +++ b/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_flash.ld @@ -1,7 +1,7 @@ /** * \file * - * \brief Linker script for running in internal FLASH on the SAMD51J18A + * \brief Linker script for running in internal FLASH on the SAMD51J19A * * Copyright (c) 2017 Microchip Technology Inc. * @@ -35,14 +35,14 @@ SEARCH_DIR(.) /* Memory Spaces Definitions */ MEMORY { - rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 + rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 bkupram (rwx) : ORIGIN = 0x47000000, LENGTH = 0x00002000 qspi (rwx) : ORIGIN = 0x04000000, LENGTH = 0x01000000 } /* The stack size used by the application. NOTE: you need to adjust according to your application. */ -STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x8000; +STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0xC000; /* Section Definitions */ SECTIONS diff --git a/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_sram.ld b/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_sram.ld similarity index 97% rename from embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_sram.ld rename to embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_sram.ld index 0303f06..2afa70f 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j18a_sram.ld +++ b/embedded/mkstepper-v011/mkstepper-v011/Device_Startup/samd51j19a_sram.ld @@ -1,7 +1,7 @@ /** * \file * - * \brief Linker script for running in internal SRAM on the SAMD51J18A + * \brief Linker script for running in internal SRAM on the SAMD51J19A * * Copyright (c) 2017 Microchip Technology Inc. * @@ -35,13 +35,13 @@ SEARCH_DIR(.) /* Memory Spaces Definitions */ MEMORY { - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 bkupram (rwx) : ORIGIN = 0x47000000, LENGTH = 0x00002000 qspi (rwx) : ORIGIN = 0x04000000, LENGTH = 0x01000000 } /* The stack size used by the application. NOTE: you need to adjust according to your application. */ -STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x8000; +STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0xC000; /* Section Definitions */ SECTIONS diff --git a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c index 36ab2b2..c89bf7b 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/apahandler.c +++ b/embedded/mkstepper-v011/mkstepper-v011/apahandler.c @@ -30,46 +30,43 @@ void apa_handle_packet(uint8_t *packet, uint8_t length){ case APA_HANDLER_INSIDE: switch (packet[i]){ - case DELIM_KEY_POSITION_FLOAT: - if(i + 5 > length){ - i ++; - } else { - float position = 0; - position = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb - stepper_targetposition_float(&stepper, position); - i += 5; // bring packet ptr to next key (should) - } - break; case DELIM_KEY_POSITION_STEPS: - if(i + 5 > length){ - i ++; + // should set 0 accel + if(i + 4 > length){ + i ++; // avoid hangup } else { int32_t steps = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb - stepper_targetposition_steps(&stepper, steps); - i += 5; // bring packet ptr to next key (should) - } - break; - - case DELIM_KEY_SPEED_FLOAT: - if(i + 5 > length){ - i ++; - } else { - float speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb - stepper_targetspeed_float(&stepper, speed); + stepper_steps(&stepper, steps); i += 5; // bring packet ptr to next key (should) } break; case DELIM_KEY_SPEED_STEPS: - if(i + 5 > length){ + // should set 0 accel + if(i + 4 > length){ i ++; // avoiding hangup } else { uint32_t speed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; // msb - stepper_targetspeed_steps(&stepper, speed); + stepper_speed(&stepper, speed); i += 5; // bring packet ptr to next key (should) } break; + + case DELIM_KEY_SEGMENT: + if(i + 12 > length){ // confirm: not i + 12 >= ? + i ++; // avoid hangup + } else { + // in steps / s + uint32_t startspeed = (packet[i+1] << 24) | (packet[i+2] << 16) | (packet[i+3] << 8) | packet[i+4]; + // in steps / s^2 + int32_t accel = (packet[i+5] << 24) | (packet[i+6] << 16) | (packet[i+7] << 8) | packet[i+8]; + // in steps + int32_t steps = (packet[i+9] << 24) | (packet[i+10] << 16) | (packet[i+11] << 8) | packet[i+12]; + stepper_segment(&stepper, startspeed, accel, steps); + i += 13; // ? not 12 ? + } + break; default: // probably an error diff --git a/embedded/mkstepper-v011/mkstepper-v011/apahandler.h b/embedded/mkstepper-v011/mkstepper-v011/apahandler.h index 1f7c5dc..009b4c6 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/apahandler.h +++ b/embedded/mkstepper-v011/mkstepper-v011/apahandler.h @@ -14,10 +14,9 @@ #define APA_HANDLER_OUTSIDE 0 #define APA_HANDLER_INSIDE 1 -#define DELIM_KEY_POSITION_FLOAT 127 // is 32 bit float -#define DELIM_KEY_SPEED_FLOAT 128 // is 32 bit float #define DELIM_KEY_POSITION_STEPS 129 // is 32 bit int #define DELIM_KEY_SPEED_STEPS 130 // is 32 bit int +#define DELIM_KEY_SEGMENT 131 void apa_handle_packet(uint8_t *packet, uint8_t length); void apa_return_packet(uint8_t *packet, uint8_t length); diff --git a/embedded/mkstepper-v011/mkstepper-v011/main.c b/embedded/mkstepper-v011/mkstepper-v011/main.c index 7a3169d..09c7a0a 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/main.c +++ b/embedded/mkstepper-v011/mkstepper-v011/main.c @@ -161,10 +161,7 @@ int main(void) /* Initialize the SAM system */ SystemInit(); clock_init(); - SysTick_Config(12000000); - - pin_t clockpin = pin_new(&PORT->Group[1], 2); - pin_output(&clockpin); + SysTick_Config(4000000); // lights stlb = pin_new(&PORT->Group[1], 14); @@ -202,6 +199,19 @@ int main(void) ups[0] = &up0; ups[1] = &up1; + up0_stlr = pin_new(&PORT->Group[0], 19); + pin_output(&up0_stlr); + pin_set(&up0_stlr); + up0_stlb = pin_new(&PORT->Group[0], 17); + pin_output(&up0_stlb); + pin_set(&up0_stlb); + up1_stlr = pin_new(&PORT->Group[0], 21); + pin_output(&up1_stlr); + pin_set(&up1_stlr); + up1_stlb = pin_new(&PORT->Group[0], 23); + pin_output(&up1_stlb); + pin_set(&up1_stlb); + apaport_build(&apap0, 0, &up0, &up0_stlr, &up0_stlb); apaport_reset(&apap0); apaport_build(&apap1, 1, &up1, &up1_stlr, &up1_stlb); @@ -246,11 +256,9 @@ int main(void) pin_output(&step_pin); pin_output(&dir_pin); - stepper = stepper_new(&step_pin, &dir_pin, 360.0, 64); + stepper = stepper_new(&step_pin, &dir_pin); stepper_reset(&stepper); - - stepper_targetspeed_steps(&stepper, 2000); - + uint8_t lpcnt = 0; uint8_t stpcnt = 0; @@ -258,7 +266,7 @@ int main(void) { apaport_scan(&apap0, 2); apaport_scan(&apap1, 2); - + if(stepper.position_ticks_target == stepper.position_ticks){ stpcnt ++; pin_clear(&stlr); @@ -288,6 +296,7 @@ minors: void SysTick_Handler(void){ // slow ticker pin_toggle(&stlb); + /* if(stepper.position_ticks_target == stepper.position_ticks){ stpcnt ++; diff --git a/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.componentinfo.xml b/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.componentinfo.xml index 517a711..2630963 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.componentinfo.xml +++ b/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.componentinfo.xml @@ -131,24 +131,24 @@ <SourcePath></SourcePath> </d4p1:anyType> <d4p1:anyType i:type="FileInfo"> - <AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\gcc\gcc\samd51j18a_flash.ld</AbsolutePath> + <AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\gcc\gcc\samd51j19a_flash.ld</AbsolutePath> <Attribute>config</Attribute> <Category>linkerScript</Category> <Condition>GCC Exe</Condition> - <FileContentHash>CF4FN7Jc1GGlwWZRgaNJqA==</FileContentHash> + <FileContentHash>Of63AdD4+Czq3mZiSTKfRg==</FileContentHash> <FileVersion></FileVersion> - <Name>gcc/gcc/samd51j18a_flash.ld</Name> + <Name>gcc/gcc/samd51j19a_flash.ld</Name> <SelectString></SelectString> <SourcePath></SourcePath> </d4p1:anyType> <d4p1:anyType i:type="FileInfo"> - <AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\gcc\gcc\samd51j18a_sram.ld</AbsolutePath> + <AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\SAMD51_DFP\1.0.70\gcc\gcc\samd51j19a_sram.ld</AbsolutePath> <Attribute>config</Attribute> <Category>other</Category> <Condition>GCC Exe</Condition> - <FileContentHash>UCVgCIkMhtRrpTXgb0K8mg==</FileContentHash> + <FileContentHash>wuv3TIKUypzM1AtgDfaRYQ==</FileContentHash> <FileVersion></FileVersion> - <Name>gcc/gcc/samd51j18a_sram.ld</Name> + <Name>gcc/gcc/samd51j19a_sram.ld</Name> <SelectString></SelectString> <SourcePath></SourcePath> </d4p1:anyType> @@ -157,7 +157,7 @@ <PackPath>C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/SAMD51_DFP/1.0.70/Atmel.SAMD51_DFP.pdsc</PackPath> <PackVersion>1.0.70</PackVersion> <PresentInProject>true</PresentInProject> - <ReferenceConditionId>ATSAMD51J18A</ReferenceConditionId> + <ReferenceConditionId>ATSAMD51J19A</ReferenceConditionId> <RteComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d4p1:string></d4p1:string> </RteComponents> diff --git a/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.cproj b/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.cproj index c32fc67..93b87e6 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.cproj +++ b/embedded/mkstepper-v011/mkstepper-v011/mkstepper-v011.cproj @@ -5,7 +5,7 @@ <ProjectVersion>7.0</ProjectVersion> <ToolchainName>com.Atmel.ARMGCC.C</ToolchainName> <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid> - <avrdevice>ATSAMD51J18A</avrdevice> + <avrdevice>ATSAMD51J19A</avrdevice> <avrdeviceseries>none</avrdeviceseries> <OutputType>Executable</OutputType> <Language>C</Language> @@ -42,7 +42,7 @@ </AsfFrameworkConfig> <avrtool>com.atmel.avrdbg.tool.atmelice</avrtool> <avrtoolserialnumber>J41800087098</avrtoolserialnumber> - <avrdeviceexpectedsignature>0x60060006</avrdeviceexpectedsignature> + <avrdeviceexpectedsignature>0x60060005</avrdeviceexpectedsignature> <avrtoolinterface>SWD</avrtoolinterface> <com_atmel_avrdbg_tool_atmelice> <ToolOptions> @@ -90,7 +90,7 @@ </ListValues> </armgcc.linker.libraries.LibrarySearchPaths> <armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections> - <armgcc.linker.miscellaneous.LinkerFlags>-Tsamd51j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags> + <armgcc.linker.miscellaneous.LinkerFlags>-Tsamd51j19a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags> <armgcc.assembler.general.IncludePaths> <ListValues> <Value>%24(PackRepoDir)\arm\CMSIS\5.0.1\CMSIS\Include\</Value> @@ -141,7 +141,7 @@ </armgcc.linker.libraries.LibrarySearchPaths> <armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections> <armgcc.linker.memorysettings.ExternalRAM /> - <armgcc.linker.miscellaneous.LinkerFlags>-Tsamd51j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags> + <armgcc.linker.miscellaneous.LinkerFlags>-Tsamd51j19a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags> <armgcc.assembler.general.IncludePaths> <ListValues> <Value>%24(PackRepoDir)\arm\CMSIS\5.0.1\CMSIS\Include\</Value> @@ -225,10 +225,10 @@ <Folder Include="Device_Startup\" /> </ItemGroup> <ItemGroup> - <None Include="Device_Startup\samd51j18a_flash.ld"> + <None Include="Device_Startup\samd51j19a_flash.ld"> <SubType>compile</SubType> </None> - <None Include="Device_Startup\samd51j18a_sram.ld"> + <None Include="Device_Startup\samd51j19a_sram.ld"> <SubType>compile</SubType> </None> </ItemGroup> diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.c b/embedded/mkstepper-v011/mkstepper-v011/stepper.c index 2a59f03..8b2034d 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/stepper.c +++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.c @@ -8,19 +8,14 @@ #include "stepper.h" #include "hardware.h" -stepper_t stepper_new(pin_t *step_pin, pin_t *dir_pin, float position_per_200_steps, uint32_t microsteps){ +stepper_t stepper_new(pin_t *step_pin, pin_t *dir_pin){ stepper_t stepper; stepper.step_pin = step_pin; stepper.dir_pin = dir_pin; - - stepper.position_per_200_steps = position_per_200_steps; - stepper.microsteps = microsteps; - + stepper.speed_period = 0; stepper.position_ticks = 0; - stepper.position = 0; - stepper.speed = 0; stepper.position_ticks_target = 0; @@ -30,65 +25,67 @@ stepper_t stepper_new(pin_t *step_pin, pin_t *dir_pin, float position_per_200_st void stepper_reset(stepper_t *stepper){ stepper->speed_period = 0; stepper->position_ticks = 0; - stepper->position = 0; - stepper->speed = 0; - stepper->position_ticks_target = 0; + stepper->dir_steps = 1; } -// position and speed by position_per_100_steps -// speed is position units / s -void stepper_goto(stepper_t *stepper, float position, float speed){ - // in steps / second - uint32_t discrete_speed = (speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps; - // in 3rds of microseconds (a result of timer settings) - stepper->speed_period = 3000000 / discrete_speed; - // in steps pulses - stepper->position_ticks_target = (position / (stepper->position_per_200_steps / 200)) * stepper->microsteps; -} - -void stepper_targetposition_float(stepper_t *stepper, float position){ - // do the business -} - -void stepper_targetposition_steps(stepper_t *stepper, int32_t position){ - stepper->position_ticks_target = position; -} - -void stepper_targetspeed_float(stepper_t *stepper, float speed){ - // do more business +void stepper_steps(stepper_t *stepper, int32_t position){ + stepper->position_ticks_target = abs(position); + stepper->position_ticks = 0; + if(position < 0){ + stepper->dir_steps = 0; + pin_clear(stepper->dir_pin); + } else { + stepper->dir_steps = 1; + pin_set(stepper->dir_pin); + } } -void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed){ - uint32_t speedmin = ((speed / (stepper->position_per_200_steps / 200)) * stepper->microsteps); // enforce no division by 0 +void stepper_speed(stepper_t *stepper, uint32_t speed){ // minimum of 1 step / s // if speed is 0, we leave speed at minimum and set state to not step? - (speedmin < 1) ? speedmin = 1 : (0); + (speed < 1) ? speed = 1 : (0); + stepper->speed = speed; // timing not accurate to real-world yet // timer is 48MHz clock on a DIV16, so we have 3 000 000 ticks / s (333ns resolution, wow) - stepper->speed_period = 60000000 / speedmin; + stepper->speed_period = 3000000 / speed; +} + +void stepper_segment(stepper_t *stepper, uint32_t startspeed, int32_t accel, int32_t steps){ + if(accel < 0){ + stepper->dir_accel = 0; + } else { + stepper->dir_accel = 1; + } + stepper->accel_period = 3000000 / abs(accel); // should check for / by 0 + stepper_speed(stepper, startspeed); + stepper_steps(stepper, steps); + TICKER_SYNC; + uint32_t now = TICKER; + stepper->last_accel = now; + stepper->last_step = now; } void stepper_update(stepper_t *stepper){ - if(stepper->position_ticks_target != stepper->position_ticks){ // still have somewhere to go + if(stepper->position_ticks_target > stepper->position_ticks){ // still have somewhere to go TICKER_SYNC; uint32_t now = TICKER; - // check if it's time to step - // todo: do timer update to fire this f'n at precisely the right time: nice for accel, deccel etc - if(now - stepper->last_time > stepper->speed_period){ - int32_t gap = stepper->position_ticks_target - stepper->position_ticks; - if(gap < 0){ - pin_set(stepper->dir_pin); // step forwards - pin_toggle(stepper->step_pin); - stepper->position_ticks --; - } else if (gap > 0) { - pin_clear(stepper->dir_pin); - pin_toggle(stepper->step_pin); - stepper->position_ticks ++; + // check if it's time to accel + if(now - stepper->last_accel > stepper->accel_period){ + if(stepper->dir_accel){ + uint32_t newspeed = stepper->speed + 1; + stepper_speed(stepper, newspeed); } else { - // nah + uint32_t newspeed = stepper->speed - 1; + stepper_speed(stepper, newspeed); } - stepper->last_time = now; + stepper->last_accel = now; + } + // check if it's time to step + if(now - stepper->last_step > stepper->speed_period){ + pin_toggle(stepper->step_pin); + stepper->position_ticks ++; + stepper->last_step = now; } // end step cycle }// end step if not there cycle diff --git a/embedded/mkstepper-v011/mkstepper-v011/stepper.h b/embedded/mkstepper-v011/mkstepper-v011/stepper.h index 581023a..e7811a1 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/stepper.h +++ b/embedded/mkstepper-v011/mkstepper-v011/stepper.h @@ -16,33 +16,30 @@ typedef struct { pin_t *step_pin; pin_t *dir_pin; - // currently + // currently.. why do we need so much state? uint32_t speed_period; - int32_t position_ticks; + uint32_t speed; + uint32_t accel_period; + uint32_t position_ticks; + uint32_t dir_steps; // 0 or 1 + uint32_t dir_accel; - // updating - uint32_t last_time; - - // float conversions - // not used in runtime, only during command calls - float position_per_200_steps; // units (mm or deg, probably) moved per full rotation - uint32_t microsteps; - float position; - float speed; + // tracking time for updates + uint32_t last_step; + uint32_t last_accel; // targets - int32_t position_ticks_target; + uint32_t position_ticks_target; }stepper_t; -stepper_t stepper_new(pin_t *step_pin, pin_t *dir_pin, float position_per_200_steps, uint32_t microsteps); +stepper_t stepper_new(pin_t *step_pin, pin_t *dir_pin); void stepper_reset(stepper_t *stepper); -void stepper_goto(stepper_t *stepper, float position, float speed); -void stepper_targetposition_steps(stepper_t *stepper, int32_t steps); -void stepper_targetposition_float(stepper_t *stepper, float position); -void stepper_targetspeed_steps(stepper_t *stepper, uint32_t speed); -void stepper_targetspeed_float(stepper_t *stepper, float speed); +void stepper_steps(stepper_t *stepper, int32_t steps); +void stepper_speed(stepper_t *stepper, uint32_t speed); + +void stepper_segment(stepper_t *stepper, uint32_t startspeed, int32_t accel, int32_t steps); void stepper_update(stepper_t *stepper); @@ -50,4 +47,13 @@ void stepper_current_position(stepper_t *steppper, float *position); void stepper_current_speed(stepper_t *stepper, float *speed); void stepper_currently(stepper_t *stepper, float *position, float *speed); +/* +step to-do + - everything is broken and untested + - refactor all for: + - dir-by-flag, assume no dir change per segment + - speed & periods unfuck + - update checks accel rate as well +*/ + #endif /* STEPPER_H_ */ \ No newline at end of file diff --git a/embedded/mkstepper-v011/mkstepper-v011/tmc26.c b/embedded/mkstepper-v011/mkstepper-v011/tmc26.c index cd26b8a..948268c 100644 --- a/embedded/mkstepper-v011/mkstepper-v011/tmc26.c +++ b/embedded/mkstepper-v011/mkstepper-v011/tmc26.c @@ -41,7 +41,7 @@ void tmc26_init(tmc26_t *tmc){ uint32_t sgthresh_mask = 0b00000111111100000000; int32_t sgthres_val = 60; uint32_t cscale_mask = 0b00000000000000011111; - uint32_t cscale_val = 20; + uint32_t cscale_val = 12; uint32_t sgcsconf = 0b11010000000000000000 | ((sgthres_val << 8) & sgthresh_mask) | (cscale_val & cscale_mask); tmc26_write(tmc, sgcsconf); @@ -73,6 +73,6 @@ void tmc26_enable(tmc26_t *tmc){ pin_clear(tmc->en_pin); } -tmc26_disable(tmc26_t *tmc){ +void tmc26_disable(tmc26_t *tmc){ pin_set(tmc->en_pin); } \ No newline at end of file -- GitLab