From 4c3b8334dd7cf9af4049bab20f7474abf10e3119 Mon Sep 17 00:00:00 2001 From: Nils Schulte Date: Mon, 24 Jun 2024 18:58:00 +0200 Subject: [PATCH] fw: DRV8316 SPI init --- cad/standoff.FCStd | Bin 0 -> 61891 bytes cad/standoff.stl | Bin 0 -> 46784 bytes fw/src/main.cpp | 253 ++++++++++++++++++++++++++++++--------------- 3 files changed, 172 insertions(+), 81 deletions(-) create mode 100644 cad/standoff.FCStd create mode 100644 cad/standoff.stl diff --git a/cad/standoff.FCStd b/cad/standoff.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..9fcd9d7afc6bf27cffe7499c73aa3ad626fafda9 GIT binary patch literal 61891 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 Mu%HO>-%bDj061$R?*IS* literal 0 HcmV?d00001 diff --git a/cad/standoff.stl b/cad/standoff.stl new file mode 100644 index 0000000000000000000000000000000000000000..affd81953f42d18ee20b85be28497f6c32f88551 GIT binary patch literal 46784 zcmb_l3$P|dbsj;3Wk~>|rC0^X1_%}srGygL-GA=yBQA;}s2E;GFd`a(1W=aO?yQED zM`T@zJOYA17BQ9*6cyOrJNx^h6eViVq!z(SB9~G`6a-X==6t8m>Hf~lKYK4#`K#F5 z^qlW}r(dT}_w>xX;Wckww)Y$U-~M^l^;=i;YwCv|`OswZuir5~{`l21|8nN)$;Ol3 zrRmG=Id@W3%QQ`Zs;SR-*LjnBo_w!exgkp}48c;&7dh^KteM>Ty<>WotXs5la>~p> zQ>k@97>_$XKc$Be@K=st^e_Tm)b%oY7=ii2 zOU~$F1dn+}4m$lhbj{Tzy?Q4461J*HvEGQTs@wnP)%Crf_|q2UD7xnAl3qO%JsewA zq*!l6M~AEZ+CAgv`6Y!c0Kp8fM{Ynm!4Si`y9>KJ%dPDTHBxU$tvMU zh?K_&)(EpOM}eb(%!_Ilcex9s%s@iX4` zW#wRWM11r5546vF{Jhz@TgOYz{K3WJRioRr9E@O1RrULIf7>qo$meFSz3?R)-gDQQ z@wYztE9GExL>zg?@$G)6-ZOjp9S3cA=pR2aKJIB-YppW+(Ou3TKk(J(%3Ok4Kk1GW z+n=7ZarWEW9KVDS%)#iYdh*jpwqJSfGumB#@|PP<{mi-JLpQ%jIau!l+pij*RKL_X zez(VQ?UQ#rG&_Fz*-IF~e2lKDi{Ei@d+#nUZ13BA#D;%3cKP_s?=Dde)_dsbCrchy z7AVK1KYDX}$hz&?PwxD|C5&J`MvMQrXTSE+z4mRwrAL`n_3Nka z*FGZu-L&$+1B%pK%~Fsqu_*L|2OQ9!;>5X{rAj{f9Q5PAp9@F1GFLMnqpRw%eO}of zeES~lXMZ?e@}&O9;et6;1_Q4%q(w_FaTMlFdOC9>c zzaF1(?^_IU$;SQL*X_Sg`_4aq%WaHcDYmexj@fUY_JZ5?Z~x-G2L`LSOwbPvsRjS& z`LAlX`O@y~wY#kd2yRU-Q&n9j^>mH=H@feX#cUN@!hGUmws~2*?GFxU|KzBZOP=-Q zLE{tdI8p10(b1~cd~1*PZ}xj-`>&rl?lwlCHc?;6_GM#OmeQw6&Av%$c$=4Ay_gZK zH=@6MsJ}aYk&U2cJ%Gnw?F>a z#furie2lKDS6;kT`}uv2Zol#98`s~m+jGXh{P**fgY|y*BioO+tuHW+ou1gbz39lJ z+J}F3_F_gbAET>kn}51%cKv^!&_40IMeC1vd~W6w4}4TPSnraz|77Omz1JGYaZmhk z_G5>i(9WKF=we1NAET@4xT~(2-SelXwCCUUz-`a|<@GafebXh%!FpG1y>8}^Q!X)% zW6!#7_T`tK(%!Vy?u!}0e2lKDxwS{kUioKdw!hkS&21;#f6&bRzq(vGSntdQubo-^ z`^$}E+g*>Iy?N_1+qKvI;y^|)AET@4k`wRQ_|26o+M6H$=z*v2`r-PduV0}YjE)>@ zzQ1|n56)ZBuHS!hDa6R9w3O;IT$@1v401_Qj%^9 z$3@@YycAY#bKvAwv1F6i3G+pSlzb^l{%=xpDeWe&T}H5`s=9CO5hJw6x1~L#7B_j@ zGCCrpJw|Ac*GPLv8*K7k!U)!+{c41Mb+Ys;=?$B_k1{$Uq+gBDuWproC4Fg=_jX3G zCLJFmjE`qNv1q;Y>WPmvMn{BD znI$7wD()?b{+gl;+auGMA@5(we3kdkGyGX4_m7-LrpP5 zMo9fnFgIZ)lUAKz4oS0`#0)jX3>hKyKf%lfDMpKj+qi#CF+)ahnHa6JbB)<~E18{T zM$QOsO)is005wGb8NsDxK0!QsaJ~HS9oxMgUXI9e;*lknR>sT(Gg~UT#3eQ2lC=_- zFoG>)bXC1`ucPa8*KE~pxbRFw$PfXCgsK0jcU9*esJ`0il#3OyyD?V%@{zTUdRrUEjj;n8!D17$Q4I=%FU_M4y)#h)W zSbys5jkDhvt-^|B;wu(LM~=<^bxOVZ@@r<-|LE)uj9@A8-V@A)spPM_?gRC1kDfRC z@z1To%4^~)FGfeiZ+AJf9$$FG?DdzOvw;yTC9}{3^J3!o@MUM$-}&d=XV?B_)e>3J zO?(B(=!n>A)r$JAJ2r2;c$*a)7{O992Tm|ACXQ<_U0EM~>oFUjE$a{I$&*#*tiA#B zFQX%3r{AoUbxT#d#E>dNXz z5zH46)*d5j4@Iz)wT*FDFBwrUQ3Oj_k1>Sxk`a1|^$bO@g^bSQV?^UayjfMTUhD0X zRC4R>BlLFb;fi2BM(1%}(>PZI>$Op995x0=cgh&Fai<98V|4acHTf$=uwL^%#$mps zhA%Pyp$O(?{j^I&Z&;f!EQ7+qBsk=3@Y zMYN=KW$~5i)!5F`7LnDquFVLxB%)=tjrqK`)pkbM%&B~g&XHwpD`CW!rYg-9pZJ<)D*CKu6 zut>kQm2gH_6y8JU6-#X^VXSdfiuKxx#W-xmQrk*6BWyL%L+eTyE3evC!dR=R6zjE> zmvPw2tG1PJM%b#ThpsAF*J1@(+qxF3RFz`Awt_ScTS3;gcFqV}-SyD$`??aYv986O zjrk8=-`1Rph#ZcvwKLY|D%C+`O;sf;VXV(^Ac}EK zx)R3DL~Sc!>~biFlsuy&!geNVTM1*oL^&9NXv{U`9hTZw!q}}*4r#%RjtJXfscj{U zeIMmu1maNFly{11TM1*=Njan^W^_c@PElh5}wsTk8Ds}9Bml0TXxhD10*nxCU zoe?aBH5=xv6v@~Qqw&Y`Ww!LtT z07M$Q=Zat{?1N)|PYA5EEz0oyc15sM(L{UU8Ud6mx)RP7GGE>c_XuF@5rEVU_P>=+ zYIcnIB-NGeg?j{$5mGnU|5hnR>$($ae&+9Jb%?F+)bMUPkA8EH&L@QA@af?2d_X*baSdD`DJ~QH1TD_t5!XQBC)X zREqW5ogd?{`#AMYvc{2!6?c~uA<JBqTd z!9B=LLQ%0^yQ63vc1LmaklayZ1oJVvs&HrYjGbRF+Eea~%8Cy6Qk8@C+MQ8bLE4?s z(V=o@lo8Cw=&G_iyh~xb^!;)AE4vBlZm;Q`a))>6=j9GBBbYCuu|I~jLDJ24r*Dv! z#GPyWQaZ0#wuneleD_^WSS*!O5G^#xsS44XPBE7BTrFpr=$xgTuo%gi21W3dlAf#M zNxIX&|Is)gq+4ZA;qsDY?xJ(G;of$yMAr1|qdA@s9RhePaOOF^1<2qv&Z!iEX60?=I7}0 zRTXo%E=V~C(w?8J`uQKffA-UBmaA2Ms<12N`3pmI(fEJ-Qcv`Ah{$2Ro}W0j-|qdR z>&+^^0)(d_HSK)jFh`fKs+hxdF$dC~pR9W1p$A8YS_}GF$F7v;FAUK|Yn#{Jul#f* zq*$-#Cl2X}TSRoxRW-ixu=*q$AAU9)QmohW6UTgrE?RuaF(=pCtx4nDPo+c3^>R9K z%!h!KYcj;56}9^-zXH9UPE!1gfcUG7@bmbLK-%*I2V$SbuRzArZdG}n!Z;KGOK^n| zNPB+bc$w7IV;6mKge#~YJY&LAobDl-X$VMpenRXiZNBz>JJg~pAXp0R?@z&06(jr# zEO7+Vo}V~QlAd_%Rkd=UzvAhdu9WBZ5Zc4Lh%Q?0rKT~c92lK=Rt8e6*YgtxA#^-< z5nXguT`k_{sx`}%10Dy@u|SITdVb=-RjF7Y)JHjjrQq%SiI~6<5Y7Qjp6+opuB*%E z`3Z5>cJH74WGaVxeJ?pnVK(sRjjC!s1o#-8XB;g#W*Kim*6aDnDx0GQ5#V67oM@D} z*7}vsujr$YV!iy-#r%jax~iToF~ir=_|Q1P#~|xP{7|0%S}Kvu%{FTN3iNs!rA1Uz zJi~k(Kr>%eF^B774x~Ll)viTkwpJ@~Ta@BwGv-6|IV7h^|24R4kx%^DZiGg%ax#0I zo^P?}H6v`#swXAq#mDJsl@jj?i;OBpFkg=Y;_|~dEa&W4ubg`y%i2x3lc@gNK`;0 zp_C&dY_C|aFdAi=j<6kUMKF38Vf*TeU~~^*h1WKpIJ;Pt&wB}9K3`_S`X?e-O8D}r zw_yZJ*`0<`S5vKGDK1|!CqbfBQL0nB05sO-`Q#awT@@o5#oh%|l;J&6LJQO>RP5D6d% z>=|SCH?67*f}d6~Vg1w4lPGfmJ&X_^l~1uTA3v=UIk4A`-DX(D=s`rAR`J-~%5l4< zrB=}9mM$z!Ytg-4vDL&p2?v?q+^z`biyW-i)`L%h z!{T;DFkj|qP!86Mct@VQdkP#D-5WyJAC@*2g}>JQC*B+O%Y)$lODp> zJ5#K(^;r+WnleWNtGKj$E(3MdE4d=je`K#uIT#UpzOg6*?crXH5vW`= zY+mq?KIV%Yte4NQER2KCCo*5;V7+{XWnmnAGL!it2kYfCEDPh{6Q<0k z9F6=d|23`X&F5C+|Ht0WkxwxN(fY|6Mo7BfOO%7ptuP{TGY6kSVMNr#2tHH7h^UDX zd_sf~QIjF$Pt#hDlRCl=<00L(wBBy{=_>whTI)YEDX$=+rgRnmHm&uBnUq%$QB%5# zf1B3Yb|&Q&MAVe7;$O@-<*YN8BWj9>qSri*mUe2%8*qsC$){<=uZ-oL15#h|3@)AI zDGWgH6-LN4;R3(?8u=^#X@zZ# zFIvS{7{Rp=5nOVMan&lWg^1wNO7t?OxP74HTw33)h0duZm;6|AiOxjt@(B=JCj7tu zFrv!%@cRb1%4KqC{B2scU94I_IoNiK+qAA0Ru0%M`;=M^E>pCM%K_W*?v*5w?y;~m z(i&N2+oh(r+!GrsdERfgh;_Ieim-@Yr5M4r0BiggTM)fZ_H?!6u@+n&R&mME`|t)D zT#vP2hz1BQt$2p);pCbir;R}_hm7F7lg?!_2K^JQf;aH{+-zY+s8wuLOnL`oa@OzMqU`-Lh z?2KSd86k;jG79s-U!)ufg=%Lfw9DdMilo6~caxgn1SW`wcD2I%kJR{2} zmHJ22syl2nRt%#E@c?=5V?@-%2$=yyZ<;e05j8O)j?`k6SSOmM`4Z?V{+toaZ5;9^ zmE8Sc*Q%n45wOZfEhA9!qKOg7R@jW6t_L*DzAIfz|E7H(yur%;f0B6Od6tNP*T-A3 zx(ImJqN!l=USAIpH8DbZ9O)|Mz#Lq-8G+ak@73yB6*Vy;)=A-rni#>pL}D#GH=}$! zf{Q%b93H@DGDfhbh`kgZ0X)F`s*07>Dg^CB zBh)Ikgb`f6j8G1?%GMmJmo1D4)@yV4uvN+-V-5QZS+B2HB6nelEeJ~-!4_uu26e@j zSS<1stU{Z+4~~49ML4+L&37q>c??Zwd9{iyVFYW+2ub8U8P$c}=YF0oj0o0io^#kL z<*;2Gl|nzJnIX4RADhuRTQ6#2m4NrLLkTMnv|4h_#;Wl5*J2uUVy$x2CyI7kQN2c9(mIsHtF@)^@Oa zh^UDXu|0}a+%`oXR$J<-rZ{wnED zt;XfByE4{J#vy;OQ&d(EEXA=_kq3gMIvltoG=;~S_l0MKJ&W2y4k2$;L;POR;N0vaaB{n*lxU$Fck1eeL`Y6`-9 zxL)CMaQO-Y>dJb9BBF&uR@r=~2%DXIe363@Y!zD@5!S0!FIy-U!&hp4L_inrzMz*_ z?4xP6a2OG#juwvPQ#fpN>J_$d*ecXJ?(lT2Vr!#S<}(z*e8U_TfA%<-J940p;(ipY zV)QVA-!#Jr))YDT%{Gi4Mwow9tGE`1OKuUpBA9QO1EUD{Oi^-14OPF5=CU z1MTm<(xN5Jk5(}Py~JCS(ZdL~gwewYt_4O%1ZFYmr)sZ7eP(;Qi`?%ejIj7B*MjUC zPANGfEDBR8Mh{!%_tIerqlXbZ9*4(ZvMRM8x6N=1GJ>UIy%oDWvP>LNs?@rEyQan4 zTYzLARnqz$8$4@iwTt(>^bst@X^eBceFpD)0mt-NM!&9ur!$RXI)bIT9C(Wk-dh6> zo|nqZsb2}g)0xIG9l=t}hjQTEK6w8QIEvmBg{4R)$8*Lp9l=t}2Tk}^5x!Xjj^YRT z-Cfb!MMUv~jLR<8OYl zSg(|xug~DoyYvc1pE$H}z&%`_45atcxj!95PvWWrXC64A#I6*Zv%3D?y2G;!t- zud3-`ggs5%Lqtu?VNVnH5K)sM#IpPZs3PonPEFgBnx-k00slq>ONrOUbDj~Q92h~# zziM6K3k*HJ!T=6NuvPFQX*RGn7ybC2$r&^rRPDg6ql(mbgha~ zrF_E(9xL|Lcd@ETxTcO*mf5ONyhM1XY+;FY#b`<6n=ggKKs`j3;+ifDD7npQW6S_H zCu-W>nW^cBu=j836-EyuY$od=SX1U`U=^MuN3FstMo&cuw86XoY+pShSX1P%_f{&0 z&19NpO&Osaj9{s$9E#xYs4)j?iX0Y;_N-z}8PTBR@q2K-PdQf)BjQ);3Lx3HRcxiF-%81Eq#Z`E zRcviWG}IH-Dt_*^}caI~YnL~DjaK2p;%qRR4>C02BlKl%j$I|17+{__6X*esd2<98+ki8yZ z_Z{p~SCN}JWJfS_FyAl-boqWeN{SXu?NRs&1KOjHNc&~c+Jb3n+5gP78!cHjP`ixa zGDS3Vpx%9lp34!fWrXbG=6=O|sDbHiF1|0<4|<93S)w%u_eC=Tz0dbW8C`5b?J@_K ziP6IdE;*wkqKw+rGqPizM-@Z=H3%Hsv^Z4 zoQ75Qc6{Y1{VKoTUaZP*u2%~y|263CvbN0M%QW;D2;g^bP|im-3asV>%Qvrptus~Ew2jE)@k?L5^L z^&%om<;w`=U^^dM=Eh3w%S<3k4L9morYu^GXERlnyxO_z(?ZM@UQuDNV zujH&Lb2Q*65z<_3y+qO0{+iARNkl}HQmdvQ*5w#3axiz~urZ;!*eceP5e=+jzsu;U z2rY+=ZRKDDYswsoU@yw(VTAc8NE|(eBFN_rT0ty*F&_}}tPH-1q#VijVaEo)v~$C0wA1{EBn1!W`x>UB#^2(}R?n0) zTCndE;nyP~N;v{n!L#8Xq(mzBzLdskNzeE1{}>`&n1Zl!n5O9*Uc#~iZQPTD?sItU zb`h>=%LpzU3C5;g4UIAHOuBe3uJ3tk?4shkeIHt@0~Ccp6gEb_a(!x_tRNCd%Qum;-6g zPgZrmqJ*8Tu2kF+o)6JQYrn#mXw)j-D~1&7_55U&eY<85(M9L)<0!&+mm$S^JwI{S z7j*^^U3691mw|Mg``$gITrZ~+$9xD#xu%2=?~}iYb1(vF&kr0p znc4Ui$avbVD)*3#LlLk9R~Uh`=Nm`*;?xLNP(Qfm#ZsK^A)09jNO^uj*mtmM(G?IZ zh4wG^^cdk+V2LA;_WZq>ck51~E0i|C^JUs1x{K1i`%j9R}77!W$1 zyNE72e_u_@0gr>beUM_ko}bErt5UH*sE=|4OTpXueZ#;J5Y7Qjp6+qzSCqOOKtvAv zLY`U$ukR&iDbG(F^C9{i-ESg!3$k9!aDL}E&rxcXUx8jna60!Ae6dgwm|xLHA?0XD zdH%u>U9{**UtUxW#0fqIS+D0O4*MRYj#|G0y`F{?qMG6v=HmdG`KpRJTo-d7?fJofmMDb+$oEN0TCyvYe0r^Rb`4F((HKlUMY|zS=<#hfK zkE2g*fq|twe_@C&TIa!5zAV?`ig+@8+68IW>-mX8=D{r@y66}uijUIgV<5$PJwI_s z%rHyeYRm|h63;+S@Nk^yQp~~WK8Ndq6r(*qAtWN3l`qR_U5QuIXOw_oDbHURqKn4= zi#CK`_!VrB9j{3xBKjYr)3#| zwC4v7ixZQst`zvnY+xLU@GFc!+Vc~K%m%f5f!Jr9vCmO1wM9gOTI?dA*YgvH%u%&` zfw&f30l`ve!4fAj!mq#*M-mX; z5IUZ_2yigEsw7$($rp%~1Kz+RGS=()i32)3PV_6t@ie61eM+2299aqo=iqdYqj6o3 zat@?DKOy9M!n5+tVw6MuxtE-!;OCLQFhrljW;Nx&EaNT6dObgJ%!goW6T-f1tsIzN zJx*l3p1&{zI2f&8Aa3Og#L9s;NSAER@dx42^Ut{kk_^OIH9f`bTXVs!jsy7f5aV7;E7IJ$A7j3`C0 zl#MPcxs4CC%B8wxVm@6v=UCKr0l{d`Pga>PQ4aGTY86X){=yL8V>JFBzY-^kw^R<+ zYu?UEZeCQa@+;8cX;@+&)eyM4B@SF=zC0T!hwFlrb0F>cspQ=_(OZzEY{oIG=0o&3 zY_3(SY<|_cV!fW9teOu24o2(R88L%$*sQM{tk?4shs6wo2yif3SHg&Wa-1mMQaM~N z5S~sP7A*}TAZ3x0)h=ygqr!y^4!bOi)Up#|mCq}3H8{0b~_1k#?LIBdnD z9O!Yf-=6!G>-GE|!q+kZ(dVG3ufe#JldFngy`G;q2%+P-ivS0s^9oYS0dF8DdzFLr zdVb=74vrHY!BX%($WI7c34=pDjw74{`JV1^Xq@N>=Kvyd*dBm#z$1IfS<3Sh$9#xB zM>p#8HfOzj<(++r!FXQfif?^NA!)t10r2pPO*0Y+KA|$@=h7j?CsHCJl>@f( HGY$U-OQArZ literal 0 HcmV?d00001 diff --git a/fw/src/main.cpp b/fw/src/main.cpp index 39cddea..f45a334 100644 --- a/fw/src/main.cpp +++ b/fw/src/main.cpp @@ -11,6 +11,10 @@ #include "SimpleFOCDrivers.h" #include "encoders/esp32hwencoder/ESP32HWEncoder.h" +#include "motors/HybridStepperMotor/HybridStepperMotor.h" + +#include "drivers/drv8316/drv8316.h" + #include // #include "encoders/sc60228/MagneticSensorSC60228.h" @@ -49,8 +53,6 @@ #define SPI_CLK 15 #define SPI_DRV_SC 16 - - #define MOTOR #define SSIF_USBSERIAL #define FW_NO_WATCHDOG @@ -65,16 +67,17 @@ // }; #endif -const float voltage_factor = 19.31; const int voltage_lpf = 50; -const float anglefactor = 10000.0; // BLDC motor & driver instance // BLDCMotor motor = BLDCMotor(pole pair number); -ESP32HWEncoder encoder = ESP32HWEncoder(ENC_A, ENC_B, 2048); // The Index pin can be omitted +ESP32HWEncoder encoder = + ESP32HWEncoder(ENC_A, ENC_B, 2048 / 2); // The Index pin can be omitted #ifdef MOTOR BLDCMotor motor = BLDCMotor(11); // 24N22P -BLDCDriver3PWM driver = BLDCDriver3PWM(INHA,INHB,INHC); +// HybridStepperMotor motor = HybridStepperMotor(50, 3.7, 10, 4.5 / 1000); +DRV8316Driver3PWM driver = DRV8316Driver3PWM(INHA, INHB, INHC, SPI_DRV_SC); +// BLDCDriver3PWM driver = BLDCDriver3PWM(INHA,INHB,INHC); #endif // BLDCDriver3PWM driver = BLDCDriver3PWM(pwmA, pwmB, pwmC, Enable(optional)); @@ -87,50 +90,103 @@ USBCDC usbserial; // #define SSYNCIF Serial void read_i2c(uint8_t addr, uint8_t reg, uint8_t *buf, uint8_t len) { - Wire.beginTransmission(addr); - Wire.write(reg); // MAN:0x2E - int error = Wire.endTransmission(); - if (error != 0) { - // Serial.println("read error!"); - return; - } - delayMicroseconds(50); - int ret = Wire.requestFrom(addr, len); - // Serial.print("0x"); - // Serial.print(reg, HEX); - // Serial.print(": "); - Wire.readBytes(buf, ret); - // for (int i = 0; i < ret; ++i) { - // Serial.print("0x"); - // Serial.print(Wire.read(), HEX); - // Serial.print(" "); - // } - // Serial.println(); + Wire.beginTransmission(addr); + Wire.write(reg); // MAN:0x2E + int error = Wire.endTransmission(); + if (error != 0) { + // Serial.println("read error!"); return; + } + delayMicroseconds(50); + int ret = Wire.requestFrom(addr, len); + // Serial.print("0x"); + // Serial.print(reg, HEX); + // Serial.print(": "); + Wire.readBytes(buf, ret); + // for (int i = 0; i < ret; ++i) { + // Serial.print("0x"); + // Serial.print(Wire.read(), HEX); + // Serial.print(" "); + // } + // Serial.println(); + return; } void write_i2c(uint8_t addr, uint8_t reg_lsb, uint8_t val) { - Wire.beginTransmission(addr); - uint8_t data[] = {reg_lsb, val}; - Wire.write(data, sizeof data); - int error = Wire.endTransmission(); - if (error != 0) { - // Serial.println("write error!"); - return; - } + Wire.beginTransmission(addr); + uint8_t data[] = {reg_lsb, val}; + Wire.write(data, sizeof data); + int error = Wire.endTransmission(); + if (error != 0) { + // Serial.println("write error!"); + return; + } } -void write_dual_i2c(uint8_t addr, uint8_t reg_lsb, uint8_t val1, uint8_t -val2) { - Wire.beginTransmission(addr); - uint8_t data[] = {reg_lsb, val1, val2}; - Wire.write(data, sizeof data); - int error = Wire.endTransmission(); - if (error != 0) { - // Serial.println("write error!"); - return; - } +void write_dual_i2c(uint8_t addr, uint8_t reg_lsb, uint8_t val1, uint8_t val2) { + Wire.beginTransmission(addr); + uint8_t data[] = {reg_lsb, val1, val2}; + Wire.write(data, sizeof data); + int error = Wire.endTransmission(); + if (error != 0) { + // Serial.println("write error!"); + return; + } } +void status() { + + DRV8316Status status = driver.getStatus(); + SSYNCIF.println("DRV8316 Status:"); + SSYNCIF.print("Fault: "); + SSYNCIF.println(status.isFault()); + SSYNCIF.print("Buck Error: "); + SSYNCIF.print(status.isBuckError()); + SSYNCIF.print(" Undervoltage: "); + SSYNCIF.print(status.isBuckUnderVoltage()); + SSYNCIF.print(" OverCurrent: "); + SSYNCIF.println(status.isBuckOverCurrent()); + SSYNCIF.print("Charge Pump UnderVoltage: "); + SSYNCIF.println(status.isChargePumpUnderVoltage()); + SSYNCIF.print("OTP Error: "); + SSYNCIF.println(status.isOneTimeProgrammingError()); + SSYNCIF.print("OverCurrent: "); + SSYNCIF.print(status.isOverCurrent()); + SSYNCIF.print(" Ah: "); + SSYNCIF.print(status.isOverCurrent_Ah()); + SSYNCIF.print(" Al: "); + SSYNCIF.print(status.isOverCurrent_Al()); + SSYNCIF.print(" Bh: "); + SSYNCIF.print(status.isOverCurrent_Bh()); + SSYNCIF.print(" Bl: "); + SSYNCIF.print(status.isOverCurrent_Bl()); + SSYNCIF.print(" Ch: "); + SSYNCIF.print(status.isOverCurrent_Ch()); + SSYNCIF.print(" Cl: "); + SSYNCIF.println(status.isOverCurrent_Cl()); + SSYNCIF.print("OverTemperature: "); + SSYNCIF.print(status.isOverTemperature()); + SSYNCIF.print(" Shutdown: "); + SSYNCIF.print(status.isOverTemperatureShutdown()); + SSYNCIF.print(" Warning: "); + SSYNCIF.println(status.isOverTemperatureWarning()); + SSYNCIF.print("OverVoltage: "); + SSYNCIF.println(status.isOverVoltage()); + SSYNCIF.print("PowerOnReset: "); + SSYNCIF.println(status.isPowerOnReset()); + SSYNCIF.print("SPI Error: "); + SSYNCIF.print(status.isSPIError()); + SSYNCIF.print(" Address: "); + SSYNCIF.print(status.isSPIAddressError()); + SSYNCIF.print(" Clock: "); + SSYNCIF.print(status.isSPIClockFramingError()); + SSYNCIF.print(" Parity: "); + SSYNCIF.println(status.isSPIParityError()); + DRV8316_PWMMode val = driver.getPWMMode(); + SSYNCIF.print("PWM Mode: "); + SSYNCIF.println(val); + SSYNCIF.print("Recirculation: "); + SSYNCIF.println(driver.getRecirculationMode()); +} // Preferences prefs; SemaphoreHandle_t mutex; @@ -147,9 +203,9 @@ void foc_task(void *parameter) { #endif #ifdef MOTOR - // motors.target = s_foc.vt[i] / anglefactor; - // motors.loopFOC(); - // motors.move(); + // motors.target = s_foc.vt[i] / anglefactor; + // motors.loopFOC(); + // motors.move(); #else // sensors.update(); #endif @@ -177,17 +233,38 @@ void setup() { // SSYNCIF.print(__cplusplus); // Wire.setTimeOut(10); - // SPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, SPI_CS1); Wire.begin(I2C_SDA, I2C_SCL, 400000); - // write_i2c(0x36,0x07, 0b00000011); - write_i2c(0x36,0x09, 0b1000); - - encoder.init(); + pinMode(DRVOFF, OUTPUT); + digitalWrite(DRVOFF, 0); // enable + pinMode(INLA, OUTPUT); + digitalWrite(INLA, 1); // enable + pinMode(INLB, OUTPUT); + digitalWrite(INLB, 1); // enable + pinMode(INLC, OUTPUT); + digitalWrite(INLC, 1); // enable + // write_i2c(0x36,0x07, 0b00000011); + write_i2c(0x36, 0x09, 0xFF); + + encoder.init(); +#ifdef MOTOR + + driver.voltage_power_supply = 15; + SPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, SPI_DRV_SC); + driver.init(&SPI); + driver.setSlew(DRV8316_Slew::Slew_200Vus); + status(); + motor.linkDriver(&driver); + // motor.linkSensor(&encoder); + motor.foc_modulation = FOCModulationType::SpaceVectorPWM; + motor.voltage_sensor_align = 5; + motor.voltage_limit = 6; + motor.controller = MotionControlType::velocity_openloop; + motor.init(); + // motor.initFOC(); // sensor.init(&SPI); -#ifdef MOTOR // motors[i].linkSensor(&sensors[i]); #endif @@ -207,30 +284,30 @@ void setup() { // s_exchange.vcc_voltage_mV = GET_VCC; // drivers[0].voltage_power_supply = s_exchange.vcc_voltage_mV / 1000.0f; // for (int i = 1; i < NUM_MOTORS; i += 1) - // drivers[i].voltage_power_supply = drivers[0].voltage_power_supply; + // drivers[i].voltage_power_supply = drivers[0].voltage_power_supply; // s_foc = s_exchange; // for (int i = 0; i < NUM_MOTORS; i += 1) { #ifdef MOTOR - // drivers[i].init(); - // link driver - // motors[i].linkDriver(&drivers[i]); - // motors[i].voltage_sensor_align = 5; + // drivers[i].init(); + // link driver + // motors[i].linkDriver(&drivers[i]); + // motors[i].voltage_sensor_align = 5; - // set control loop type to be used - // motors[i].torque_controller = TorqueControlType::voltage; - // motors[i].controller = MotionControlType::velocity; + // set control loop type to be used + // motors[i].torque_controller = TorqueControlType::voltage; + // motors[i].controller = MotionControlType::velocity; - // contoller configuration based on the control type - // motors[i].PID_velocity.P = 0.35; - // motors[i].PID_velocity.I = 8; - // motors[i].PID_velocity.D = 0; + // contoller configuration based on the control type + // motors[i].PID_velocity.P = 0.35; + // motors[i].PID_velocity.I = 8; + // motors[i].PID_velocity.D = 0; - // default voltage_power_supply - // motors[i].voltage_limit = 3.4 * 3; + // default voltage_power_supply + // motors[i].voltage_limit = 3.4 * 3; - // velocity low pass filtering time constant - // motors[i].LPF_velocity.Tf = 0.01; + // velocity low pass filtering time constant + // motors[i].LPF_velocity.Tf = 0.01; #endif // } #ifdef MOTOR @@ -260,15 +337,18 @@ void setup() { // // if (prefs.isKey(pref_zero_key.c_str()) && // // prefs.isKey(pref_dir_key.c_str())) { // // motors[i].zero_electric_angle = - // // prefs.getFloat(pref_zero_key.c_str()); motors[i].sensor_direction = + // // prefs.getFloat(pref_zero_key.c_str()); motors[i].sensor_direction + // = // // (Direction)prefs.getInt(pref_dir_key.c_str()); // // } // motors[i].initFOC(); // // if (!prefs.isKey(pref_zero_key.c_str()) || // // !prefs.isKey(pref_dir_key.c_str())) { // // prefs.clear(); - // // prefs.putFloat(pref_zero_key.c_str(), motors[i].zero_electric_angle); - // // prefs.putInt(pref_dir_key.c_str(), (int)motors[i].sensor_direction); + // // prefs.putFloat(pref_zero_key.c_str(), + // motors[i].zero_electric_angle); + // // prefs.putInt(pref_dir_key.c_str(), + // (int)motors[i].sensor_direction); // // } // } #endif @@ -280,10 +360,9 @@ void setup() { #endif // xTaskCreatePinnedToCore(&comm_task, // Function name of the task - // "Comm", // Name of the task (e.g. for debugging) - // 4096, // Stack size (bytes) - // NULL, // Parameter to pass - // 1, // Task priority + // "Comm", // Name of the task (e.g. for + // debugging) 4096, // Stack size (bytes) NULL, + // // Parameter to pass 1, // Task priority // &taskCommHandle, // Assign task handle // 1 // Run on the non-Arduino (1) core // ); @@ -299,13 +378,25 @@ void setup() { // esp_task_wdt_add(NULL); // add current thread to WDT watch } -int i = 0; void loop() { +#ifdef MOTOR + // motor.loopFOC(); - encoder.update(); // optional: Update manually if not using loopfoc() - - // Access the sensor value - SSYNCIF.println(encoder.getAngle()); - delay(10); + motor.move(3); +#endif + // delay(100); + // static int i = 0; + // if (i++ % 100 == 0) + // status(); } + +// int i = 0; +// void loop() { + +// //encoder.update(); // optional: Update manually if not using loopfoc() +// // +// // Access the sensor value +// SSYNCIF.println(encoder.getAngle()); +// delay(10); +// } // esp_task_wdt_reset();