Merge branch 'dev_blackpill' into 'main'

Dev blackpill

See merge request imia/dji-gimbal-foc!1
This commit is contained in:
RENAUD Lucien 2022-11-08 14:32:56 +00:00
commit c2faec0432
39 changed files with 21323 additions and 116818 deletions

3
.gitignore vendored
View File

@ -1,4 +1,3 @@
.pio
.vscode
/.*/
/Kicad/Breakout_board/Breakout_DJI_Gimbal-backups
/Kicad/STM32_DJI_Gimbal/STM32_DJI_Gimbal-backups

Binary file not shown.

View File

@ -0,0 +1,63 @@
(footprint "TPS61088" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(descr "RHL (R-PVQFN-N20) FFW")
(tags "Integrated Circuit")
(attr smd)
(fp_text reference "IC**" (at 0 -0.15) (layer "F.SilkS")
(effects (font (size 1.27 1.27) (thickness 0.254)))
(tstamp 16c306e9-e442-40b3-877f-c797d356ff0e)
)
(fp_text value "TPS61088" (at 0 -0.15) (layer "F.SilkS") hide
(effects (font (size 1.27 1.27) (thickness 0.254)))
(tstamp 2a31e99f-1567-4f7f-ae66-6831c74be055)
)
(fp_text user "${REFERENCE}" (at 0 -0.15) (layer "F.Fab")
(effects (font (size 1.27 1.27) (thickness 0.254)))
(tstamp 289ff8d3-2318-42c5-8b7c-3417f6fc6136)
)
(fp_line (start 1 -2.25) (end 1.65 -2.25) (layer "F.SilkS") (width 0.1) (tstamp 224a4508-b903-4bec-bffe-a329e8e427f1))
(fp_line (start -1.65 2.25) (end -1 2.25) (layer "F.SilkS") (width 0.1) (tstamp 2a3bfb9e-092a-4ee6-aa15-b3a5c34c7e69))
(fp_line (start -0.8 -2.7) (end -0.8 -2.7) (layer "F.SilkS") (width 0.1) (tstamp 55ab3813-9643-496d-b4e1-570f63a0ae80))
(fp_line (start -1 -2.25) (end -1.65 -2.25) (layer "F.SilkS") (width 0.1) (tstamp 7b40331a-5007-44fc-9897-6670f326a16e))
(fp_line (start -0.5 2.25) (end 0.5 2.25) (layer "F.SilkS") (width 0.1) (tstamp 7e15bb82-3533-45a3-8c8e-da54a22e66c0))
(fp_line (start 1 2.25) (end 1.65 2.25) (layer "F.SilkS") (width 0.1) (tstamp 9fb0fd85-c202-461c-b11b-b36d0a60786e))
(fp_line (start -0.5 -2.25) (end 0.5 -2.25) (layer "F.SilkS") (width 0.1) (tstamp b9307b9b-bb22-4fb4-9f5a-a13256690faa))
(fp_line (start -0.7 -2.7) (end -0.7 -2.7) (layer "F.SilkS") (width 0.1) (tstamp c9d1b597-d1f3-4e37-8495-7bbc1fa6fd76))
(fp_arc (start -0.7 -2.7) (mid -0.75 -2.65) (end -0.8 -2.7) (layer "F.SilkS") (width 0.1) (tstamp 0461202c-9c8d-47bf-945b-b6dcdce4dbec))
(fp_arc (start -0.8 -2.7) (mid -0.75 -2.75) (end -0.7 -2.7) (layer "F.SilkS") (width 0.1) (tstamp 2ea84639-1539-4604-ac1d-7fe5d2437052))
(fp_line (start -2.95 -3.75) (end 2.95 -3.75) (layer "F.CrtYd") (width 0.1) (tstamp 38f89fba-1e33-4006-a1b7-19ec49668db0))
(fp_line (start 2.95 3.45) (end -2.95 3.45) (layer "F.CrtYd") (width 0.1) (tstamp 5ba94818-cbf9-4290-b41f-3bdd4f163875))
(fp_line (start 2.95 -3.75) (end 2.95 3.45) (layer "F.CrtYd") (width 0.1) (tstamp 8c2033a9-6a19-49d1-839f-5572e58a9b26))
(fp_line (start -2.95 3.45) (end -2.95 -3.75) (layer "F.CrtYd") (width 0.1) (tstamp fc004a83-678b-4c4a-a9fc-68643b8ee356))
(fp_line (start 1.75 -2.25) (end 1.75 2.25) (layer "F.Fab") (width 0.2) (tstamp 033710eb-92ba-4600-bb82-8e997072988d))
(fp_line (start 1.75 2.25) (end -1.75 2.25) (layer "F.Fab") (width 0.2) (tstamp 4bbdb673-b689-4644-bbdb-e581cabe560e))
(fp_line (start -1.75 2.25) (end -1.75 -2.25) (layer "F.Fab") (width 0.2) (tstamp 59646334-2178-4696-8863-721f0654095d))
(fp_line (start -1.75 -2.25) (end 1.75 -2.25) (layer "F.Fab") (width 0.2) (tstamp ad8f967f-3c5d-4478-a436-f12f3279e8cf))
(pad "1" smd rect (at -0.75 -2.15) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 60b4fd16-dcc1-4930-9fa0-1fda4139e4f0))
(pad "2" smd rect (at -1.65 -1.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a8d58e60-213b-450e-8bee-78da989739be))
(pad "3" smd rect (at -1.65 -1.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp db904b6f-3240-4d84-9b6e-68b54c07f86e))
(pad "4" smd rect (at -1.65 -0.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 03d6a208-31bc-43cf-9fd0-f36430b4e780))
(pad "5" smd rect (at -1.65 -0.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 9b5bdf68-1815-4c5e-94af-51cc65beee39))
(pad "6" smd rect (at -1.65 0.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 149981ef-2517-42ac-bf33-e93347b849b6))
(pad "7" smd rect (at -1.65 0.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 8fc051f5-fb72-4101-ae26-6dfa34384097))
(pad "8" smd rect (at -1.65 1.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp e1b97812-4166-49f7-8c06-b71966a6466f))
(pad "9" smd rect (at -1.65 1.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp b39fde77-c7b4-449e-a85f-6238b876c269))
(pad "10" smd rect (at -0.75 2.15) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp cc843ce3-9034-4010-9b1a-e045e758f8c4))
(pad "11" smd rect (at 0.75 2.15) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a7317140-c392-48ee-a4ab-b3e918620e77))
(pad "12" smd rect (at 1.65 1.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 83436220-4624-45f5-8a48-6778c0814bb1))
(pad "13" smd rect (at 1.65 1.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp be122c1c-61bb-41e3-8a85-54ba707e3e48))
(pad "14" smd rect (at 1.65 0.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 78c9d886-bcd4-47ce-a965-bf6e24ff7e41))
(pad "15" smd rect (at 1.65 0.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp cb79a967-140b-4164-9ee5-8405e4d37a1b))
(pad "16" smd rect (at 1.65 -0.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp f0991022-eac4-48f5-b547-c16b32523226))
(pad "17" smd rect (at 1.65 -0.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 78ca2947-0aa6-4f53-873c-1f1b95128d4a))
(pad "18" smd rect (at 1.65 -1.25 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 2d315cae-3ea0-4621-b40a-48ab3623bb86))
(pad "19" smd rect (at 1.65 -1.75 90) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 866f1a69-0927-45db-b090-aae2563d5bf6))
(pad "20" smd rect (at 0.75 -2.15) (size 0.24 0.6) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 1a7468dd-6294-4005-ae0b-7f13eac5c7eb))
(pad "21" smd rect (at 0 0) (size 2.19 3.19) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 267f2e26-878f-4d4a-b1de-bfadbdf79253))
(model "C:\\Users\\lurenaud\\Documents\\KiCad\\SamacSys\\SamacSys_Parts.3dshapes\\TPS61088RHLT.stp"
(offset (xyz 0 0 0.02999999888))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@ -588,6 +588,140 @@
)
)
)
(symbol "TPS61088RHLT" (pin_names (offset 0.762)) (in_bom yes) (on_board yes)
(property "Reference" "IC" (id 0) (at 26.67 22.86 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Value" "TPS61088RHLT" (id 1) (at 26.67 20.32 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Footprint" "BQ24031IRHLRQ1" (id 2) (at 26.67 17.78 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/tps61088.pdf" (id 3) (at 26.67 15.24 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Description" "Texas Instruments TPS61088RHLT, 3, Boost Converter, Synchronous Boost Converter 10A 4.5 12.6 V, 2.2 MHz 20-Pin" (id 4) (at 26.67 12.7 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Height" "1" (id 5) (at 26.67 10.16 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Mouser Part Number" "595-TPS61088RHLT" (id 6) (at 26.67 7.62 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Mouser Price/Stock" "https://www.mouser.co.uk/ProductDetail/Texas-Instruments/TPS61088RHLT?qs=MiqG6Kq1qKOeAwvWtl5eUw%3D%3D" (id 7) (at 26.67 5.08 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Manufacturer_Name" "Texas Instruments" (id 8) (at 26.67 2.54 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "Manufacturer_Part_Number" "TPS61088RHLT" (id 9) (at 26.67 0 0)
(effects (font (size 1.27 1.27)) (justify left) hide)
)
(property "ki_description" "Texas Instruments TPS61088RHLT, 3, Boost Converter, Synchronous Boost Converter 10A 4.5 12.6 V, 2.2 MHz 20-Pin" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "TPS61088RHLT_0_0"
(pin passive line (at 12.7 8.89 270) (length 5.08)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 12.7 -25.4 90) (length 5.08)
(name "SS" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 15.24 -25.4 90) (length 5.08)
(name "NC_1" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -17.78 180) (length 5.08)
(name "NC_2" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -15.24 180) (length 5.08)
(name "MODE" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -12.7 180) (length 5.08)
(name "VOUT_1" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -10.16 180) (length 5.08)
(name "VOUT_2" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -7.62 180) (length 5.08)
(name "VOUT_3" (effects (font (size 1.27 1.27))))
(number "16" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -5.08 180) (length 5.08)
(name "FB" (effects (font (size 1.27 1.27))))
(number "17" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 -2.54 180) (length 5.08)
(name "COMP" (effects (font (size 1.27 1.27))))
(number "18" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 30.48 0 180) (length 5.08)
(name "ILIM" (effects (font (size 1.27 1.27))))
(number "19" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 0 0) (length 5.08)
(name "EN" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 17.78 8.89 270) (length 5.08)
(name "AGND" (effects (font (size 1.27 1.27))))
(number "20" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 15.24 8.89 270) (length 5.08)
(name "EP_(PGND)" (effects (font (size 1.27 1.27))))
(number "21" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -2.54 0) (length 5.08)
(name "FSW" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -5.08 0) (length 5.08)
(name "SW_1" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -7.62 0) (length 5.08)
(name "SW_2" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -10.16 0) (length 5.08)
(name "SW_3" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -12.7 0) (length 5.08)
(name "SW_4" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -15.24 0) (length 5.08)
(name "BOOT" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 0 -17.78 0) (length 5.08)
(name "VIN" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
)
(symbol "TPS61088RHLT_0_1"
(polyline
(pts
(xy 5.08 3.81)
(xy 25.4 3.81)
(xy 25.4 -20.32)
(xy 5.08 -20.32)
(xy 5.08 3.81)
)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type background))
)
)
)
(symbol "WeAct_BlackPill_Part_Like" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at -12.7 27.94 0)
(effects (font (size 1.27 1.27)))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,226 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,1.700000X1.700000*%
%ADD11O,1.700000X1.700000*%
%ADD12C,0.800000*%
%ADD13C,6.400000*%
%ADD14C,0.700000*%
%ADD15C,4.400000*%
%ADD16C,1.700000*%
%ADD17C,1.050000*%
%ADD18R,1.050000X1.050000*%
%ADD19R,0.300000X0.750000*%
%ADD20R,0.230000X0.420000*%
G04 APERTURE END LIST*
D10*
%TO.C,J2*%
X164000000Y-127125000D03*
D11*
X164000000Y-129665000D03*
%TD*%
D12*
%TO.C,H6*%
X165250000Y-82350000D03*
X166947056Y-86447056D03*
X166947056Y-83052944D03*
X167650000Y-84750000D03*
D13*
X165250000Y-84750000D03*
D12*
X165250000Y-87150000D03*
X163552944Y-83052944D03*
X163552944Y-86447056D03*
X162850000Y-84750000D03*
%TD*%
%TO.C,H5*%
X165250000Y-112850000D03*
X166947056Y-116947056D03*
X166947056Y-113552944D03*
X167650000Y-115250000D03*
D13*
X165250000Y-115250000D03*
D12*
X165250000Y-117650000D03*
X163552944Y-113552944D03*
X163552944Y-116947056D03*
X162850000Y-115250000D03*
%TD*%
D14*
%TO.C,H4*%
X172166726Y-147666726D03*
X171000000Y-144850000D03*
X169833274Y-145333274D03*
X169350000Y-146500000D03*
X172166726Y-145333274D03*
X169833274Y-147666726D03*
X171000000Y-148150000D03*
D15*
X171000000Y-146500000D03*
D14*
X172650000Y-146500000D03*
%TD*%
%TO.C,H3*%
X172166726Y-140666726D03*
X171000000Y-137850000D03*
X169833274Y-138333274D03*
X169350000Y-139500000D03*
X172166726Y-138333274D03*
X169833274Y-140666726D03*
X171000000Y-141150000D03*
D15*
X171000000Y-139500000D03*
D14*
X172650000Y-139500000D03*
%TD*%
D12*
%TO.C,H2*%
X134750000Y-112850000D03*
X136447056Y-116947056D03*
X136447056Y-113552944D03*
X137150000Y-115250000D03*
D13*
X134750000Y-115250000D03*
D12*
X134750000Y-117650000D03*
X133052944Y-113552944D03*
X133052944Y-116947056D03*
X132350000Y-115250000D03*
%TD*%
%TO.C,H1*%
X134750000Y-82350000D03*
X136447056Y-86447056D03*
X136447056Y-83052944D03*
X137150000Y-84750000D03*
D13*
X134750000Y-84750000D03*
D12*
X134750000Y-87150000D03*
X133052944Y-83052944D03*
X133052944Y-86447056D03*
X132350000Y-84750000D03*
%TD*%
D10*
%TO.C,U1*%
X142380000Y-75870000D03*
D16*
X142380000Y-78410000D03*
X142380000Y-80950000D03*
X142380000Y-83490000D03*
X142380000Y-86030000D03*
X142380000Y-88570000D03*
X142380000Y-91110000D03*
X142380000Y-93650000D03*
X142380000Y-96190000D03*
X142380000Y-98730000D03*
X142380000Y-101270000D03*
X142380000Y-103810000D03*
X142380000Y-106350000D03*
X142380000Y-108890000D03*
X142380000Y-111430000D03*
X142380000Y-113970000D03*
X142380000Y-116510000D03*
X142380000Y-119050000D03*
X142380000Y-121590000D03*
X142380000Y-124130000D03*
X157620000Y-124130000D03*
X157620000Y-121590000D03*
X157620000Y-119050000D03*
X157620000Y-116510000D03*
X157620000Y-113970000D03*
X157620000Y-111430000D03*
X157620000Y-108890000D03*
X157620000Y-106350000D03*
X157620000Y-103810000D03*
X157620000Y-101270000D03*
X157620000Y-98730000D03*
X157620000Y-96190000D03*
X157620000Y-93650000D03*
X157620000Y-91110000D03*
X157620000Y-88570000D03*
X157620000Y-86030000D03*
X157620000Y-83490000D03*
X157620000Y-80950000D03*
X157620000Y-78410000D03*
X157620000Y-75870000D03*
%TD*%
D17*
%TO.C,P2*%
X161000000Y-91000000D03*
X161000000Y-93000000D03*
X161000000Y-95000000D03*
X161000000Y-97000000D03*
X161000000Y-99000000D03*
X161000000Y-101000000D03*
X161000000Y-103000000D03*
X161000000Y-105000000D03*
X161000000Y-107000000D03*
D18*
X161000000Y-109000000D03*
%TD*%
%TO.C,P1*%
X139000000Y-109000000D03*
D17*
X139000000Y-107000000D03*
X139000000Y-105000000D03*
X139000000Y-103000000D03*
X139000000Y-101000000D03*
X139000000Y-99000000D03*
X139000000Y-97000000D03*
X139000000Y-95000000D03*
X139000000Y-93000000D03*
X139000000Y-91000000D03*
%TD*%
D19*
%TO.C,J1*%
X139090000Y-140575000D03*
X139090000Y-142425000D03*
X147910000Y-142425000D03*
X147910000Y-140575000D03*
D20*
X140300000Y-140410000D03*
X140300000Y-142590000D03*
X140700000Y-140410000D03*
X140700000Y-142590000D03*
X141100000Y-140410000D03*
X141100000Y-142590000D03*
X141500000Y-140410000D03*
X141500000Y-142590000D03*
X141900000Y-140410000D03*
X141900000Y-142590000D03*
X142300000Y-140410000D03*
X142300000Y-142590000D03*
X142700000Y-140410000D03*
X142700000Y-142590000D03*
X143100000Y-140410000D03*
X143100000Y-142590000D03*
X143500000Y-140410000D03*
X143500000Y-142590000D03*
X143900000Y-140410000D03*
X143900000Y-142590000D03*
X144300000Y-140410000D03*
X144300000Y-142590000D03*
X144700000Y-140410000D03*
X144700000Y-142590000D03*
X145100000Y-140410000D03*
X145100000Y-142590000D03*
X145500000Y-140410000D03*
X145500000Y-142590000D03*
X145900000Y-140410000D03*
X145900000Y-142590000D03*
X146300000Y-140410000D03*
X146300000Y-142590000D03*
X146700000Y-140410000D03*
X146700000Y-142590000D03*
%TD*%
M02*

View File

@ -1,59 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10R,0.300000X0.750000*%
%ADD11R,0.230000X0.420000*%
G04 APERTURE END LIST*
D10*
%TO.C,J1*%
X139090000Y-140575000D03*
X139090000Y-142425000D03*
X147910000Y-142425000D03*
X147910000Y-140575000D03*
D11*
X140300000Y-140410000D03*
X140300000Y-142590000D03*
X140700000Y-140410000D03*
X140700000Y-142590000D03*
X141100000Y-140410000D03*
X141100000Y-142590000D03*
X141500000Y-140410000D03*
X141500000Y-142590000D03*
X141900000Y-140410000D03*
X141900000Y-142590000D03*
X142300000Y-140410000D03*
X142300000Y-142590000D03*
X142700000Y-140410000D03*
X142700000Y-142590000D03*
X143100000Y-140410000D03*
X143100000Y-142590000D03*
X143500000Y-140410000D03*
X143500000Y-142590000D03*
X143900000Y-140410000D03*
X143900000Y-142590000D03*
X144300000Y-140410000D03*
X144300000Y-142590000D03*
X144700000Y-140410000D03*
X144700000Y-142590000D03*
X145100000Y-140410000D03*
X145100000Y-142590000D03*
X145500000Y-140410000D03*
X145500000Y-142590000D03*
X145900000Y-140410000D03*
X145900000Y-142590000D03*
X146300000Y-140410000D03*
X146300000Y-142590000D03*
X146700000Y-140410000D03*
X146700000Y-142590000D03*
%TD*%
M02*

View File

@ -1,66 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.500000*%
%ADD11C,0.150000*%
%ADD12C,0.250000*%
%ADD13C,0.200000*%
G04 APERTURE END LIST*
D10*
X136800001Y-76000000D02*
G75*
G03*
X136800001Y-76000000I-1J0D01*
G01*
D11*
X137300000Y-78500000D02*
X136800000Y-79000000D01*
X136300000Y-78500000D02*
X136800000Y-79000000D01*
X136800000Y-79000000D02*
X136800000Y-77118033D01*
X137918034Y-76000000D02*
G75*
G03*
X137918034Y-76000000I-1118034J0D01*
G01*
D12*
%TO.C,J1*%
X143633333Y-137552380D02*
X143633333Y-138266666D01*
X143680952Y-138409523D01*
X143776190Y-138504761D01*
X143919047Y-138552380D01*
X144014285Y-138552380D01*
X142633333Y-138552380D02*
X143204761Y-138552380D01*
X142919047Y-138552380D02*
X142919047Y-137552380D01*
X143014285Y-137695238D01*
X143109523Y-137790476D01*
X143204761Y-137838095D01*
D13*
X147500000Y-142650000D02*
X147100000Y-142650000D01*
X147500000Y-140350000D02*
X147100000Y-140350000D01*
X138860000Y-141900000D02*
X138860000Y-141300000D01*
X139900000Y-140350000D02*
X139500000Y-140350000D01*
X148140000Y-141700000D02*
X148140000Y-141300000D01*
X139900000Y-142650000D02*
X139500000Y-142650000D01*
%TD*%
M02*

View File

@ -1,154 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.250000*%
%TD*%
G04 APERTURE END LIST*
D10*
X167500000Y-146000000D02*
G75*
G03*
X169500000Y-146000000I1000000J0D01*
G01*
X169500000Y-140000000D02*
G75*
G03*
X167500000Y-140000000I-1000000J0D01*
G01*
X176000000Y-138500000D02*
G75*
G03*
X174000000Y-136500000I-2000000J0D01*
G01*
X170071798Y-135964100D02*
G75*
G03*
X172071797Y-136500000I2000002J3464100D01*
G01*
X165999959Y-131303848D02*
G75*
G03*
X168000000Y-134767949I4000041J48D01*
G01*
X167269235Y-118108801D02*
G75*
G03*
X166000000Y-120559190I1730765J-2450399D01*
G01*
X167269231Y-118108795D02*
G75*
G03*
X167269231Y-112391205I-2019231J2858795D01*
G01*
X165999992Y-109940810D02*
G75*
G03*
X167269231Y-112391205I3000008J10D01*
G01*
X167269235Y-87608801D02*
G75*
G03*
X166000000Y-90059190I1730765J-2450399D01*
G01*
X167269231Y-87608795D02*
G75*
G03*
X167269231Y-81891205I-2019231J2858795D01*
G01*
X165999992Y-79440810D02*
G75*
G03*
X167269231Y-81891205I3000008J10D01*
G01*
X166000000Y-76500000D02*
G75*
G03*
X163000000Y-73500000I-3000000J0D01*
G01*
X137000000Y-73500000D02*
G75*
G03*
X134000000Y-76500000I0J-3000000D01*
G01*
X132730765Y-81891199D02*
G75*
G03*
X134000000Y-79440810I-1730765J2450399D01*
G01*
X132730769Y-81891205D02*
G75*
G03*
X132730769Y-87608795I2019231J-2858795D01*
G01*
X134000008Y-90059190D02*
G75*
G03*
X132730769Y-87608795I-3000008J-10D01*
G01*
X132730765Y-112391199D02*
G75*
G03*
X134000000Y-109940810I-1730765J2450399D01*
G01*
X132730769Y-112391205D02*
G75*
G03*
X132730769Y-118108795I2019231J-2858795D01*
G01*
X134000008Y-120559190D02*
G75*
G03*
X132730769Y-118108795I-3000008J-10D01*
G01*
X134000004Y-139685045D02*
G75*
G03*
X138840602Y-148251294I9999996J-5D01*
G01*
X138840604Y-148251290D02*
G75*
G03*
X143679492Y-149500000I4838896J8751290D01*
G01*
X174000000Y-149500000D02*
G75*
G03*
X176000000Y-147500000I0J2000000D01*
G01*
X167500000Y-140000000D02*
X167500000Y-146000000D01*
X169500000Y-146000000D02*
X169500000Y-140000000D01*
X176000000Y-147500000D02*
X176000000Y-138500000D01*
X174000000Y-136500000D02*
X172071797Y-136500000D01*
X170071797Y-135964102D02*
X168000000Y-134767949D01*
X166000000Y-131303848D02*
X166000000Y-120559190D01*
X166000000Y-109940810D02*
X166000000Y-90059190D01*
X166000000Y-79440810D02*
X166000000Y-76500000D01*
X163000000Y-73500000D02*
X137000000Y-73500000D01*
X134000000Y-76500000D02*
X134000000Y-79440810D01*
X134000000Y-90059190D02*
X134000000Y-109940810D01*
X134000000Y-120559190D02*
X134000000Y-139685045D01*
X143679492Y-149500000D02*
X174000000Y-149500000D01*
M02*

File diff suppressed because it is too large Load Diff

View File

@ -1,333 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10R,1.600000X0.410000*%
%ADD11RoundRect,0.135000X0.135000X0.185000X-0.135000X0.185000X-0.135000X-0.185000X0.135000X-0.185000X0*%
%ADD12RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
%ADD13R,0.800000X2.700000*%
%ADD14R,0.700000X0.600000*%
%ADD15RoundRect,0.225000X0.250000X-0.225000X0.250000X0.225000X-0.250000X0.225000X-0.250000X-0.225000X0*%
%ADD16RoundRect,0.250000X-0.787500X-0.925000X0.787500X-0.925000X0.787500X0.925000X-0.787500X0.925000X0*%
%ADD17RoundRect,0.250000X0.787500X0.925000X-0.787500X0.925000X-0.787500X-0.925000X0.787500X-0.925000X0*%
%ADD18RoundRect,0.225000X-0.225000X-0.250000X0.225000X-0.250000X0.225000X0.250000X-0.225000X0.250000X0*%
%ADD19RoundRect,0.225000X0.225000X0.250000X-0.225000X0.250000X-0.225000X-0.250000X0.225000X-0.250000X0*%
%ADD20R,1.700000X1.700000*%
%ADD21O,1.700000X1.700000*%
%ADD22C,0.800000*%
%ADD23C,6.400000*%
%ADD24C,0.700000*%
%ADD25C,4.400000*%
%ADD26C,1.700000*%
%ADD27R,1.500000X1.000000*%
%ADD28C,0.950000*%
%ADD29RoundRect,0.150000X-0.150000X0.587500X-0.150000X-0.587500X0.150000X-0.587500X0.150000X0.587500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,U2*%
X155808600Y-132115000D03*
X155808600Y-132750000D03*
X155808600Y-133385000D03*
X155808600Y-134020000D03*
X155808600Y-134655000D03*
X155808600Y-135290000D03*
X155808600Y-135925000D03*
X155808600Y-136560000D03*
X150500000Y-136560000D03*
X150500000Y-135925000D03*
X150500000Y-135290000D03*
X150500000Y-134655000D03*
X150500000Y-134020000D03*
X150500000Y-133385000D03*
X150500000Y-132750000D03*
X150500000Y-132115000D03*
%TD*%
D11*
%TO.C,R3*%
X148914300Y-134000000D03*
X147894300Y-134000000D03*
%TD*%
D12*
%TO.C,R2*%
X147894300Y-135087500D03*
X148914300Y-135087500D03*
%TD*%
%TO.C,R1*%
X148846000Y-136250000D03*
X147826000Y-136250000D03*
%TD*%
D13*
%TO.C,L1*%
X151650000Y-129500000D03*
X153850000Y-129500000D03*
%TD*%
D14*
%TO.C,D1*%
X157800000Y-132900000D03*
X157800000Y-131500000D03*
%TD*%
D15*
%TO.C,C5*%
X143750000Y-140275000D03*
X143750000Y-138725000D03*
%TD*%
D16*
%TO.C,C4*%
X160962500Y-129000000D03*
X156037500Y-129000000D03*
%TD*%
D17*
%TO.C,C3*%
X148962500Y-129337500D03*
X144037500Y-129337500D03*
%TD*%
D18*
%TO.C,C2*%
X152379300Y-137837500D03*
X153929300Y-137837500D03*
%TD*%
D19*
%TO.C,C1*%
X148679300Y-132837500D03*
X147129300Y-132837500D03*
%TD*%
D20*
%TO.C,J2*%
X164000000Y-127125000D03*
D21*
X164000000Y-129665000D03*
%TD*%
D22*
%TO.C,H6*%
X165250000Y-82350000D03*
X166947056Y-86447056D03*
X166947056Y-83052944D03*
X167650000Y-84750000D03*
D23*
X165250000Y-84750000D03*
D22*
X165250000Y-87150000D03*
X163552944Y-83052944D03*
X163552944Y-86447056D03*
X162850000Y-84750000D03*
%TD*%
%TO.C,H5*%
X165250000Y-112850000D03*
X166947056Y-116947056D03*
X166947056Y-113552944D03*
X167650000Y-115250000D03*
D23*
X165250000Y-115250000D03*
D22*
X165250000Y-117650000D03*
X163552944Y-113552944D03*
X163552944Y-116947056D03*
X162850000Y-115250000D03*
%TD*%
D24*
%TO.C,H4*%
X172166726Y-147666726D03*
X171000000Y-144850000D03*
X169833274Y-145333274D03*
X169350000Y-146500000D03*
X172166726Y-145333274D03*
X169833274Y-147666726D03*
X171000000Y-148150000D03*
D25*
X171000000Y-146500000D03*
D24*
X172650000Y-146500000D03*
%TD*%
%TO.C,H3*%
X172166726Y-140666726D03*
X171000000Y-137850000D03*
X169833274Y-138333274D03*
X169350000Y-139500000D03*
X172166726Y-138333274D03*
X169833274Y-140666726D03*
X171000000Y-141150000D03*
D25*
X171000000Y-139500000D03*
D24*
X172650000Y-139500000D03*
%TD*%
D22*
%TO.C,H2*%
X134750000Y-112850000D03*
X136447056Y-116947056D03*
X136447056Y-113552944D03*
X137150000Y-115250000D03*
D23*
X134750000Y-115250000D03*
D22*
X134750000Y-117650000D03*
X133052944Y-113552944D03*
X133052944Y-116947056D03*
X132350000Y-115250000D03*
%TD*%
%TO.C,H1*%
X134750000Y-82350000D03*
X136447056Y-86447056D03*
X136447056Y-83052944D03*
X137150000Y-84750000D03*
D23*
X134750000Y-84750000D03*
D22*
X134750000Y-87150000D03*
X133052944Y-83052944D03*
X133052944Y-86447056D03*
X132350000Y-84750000D03*
%TD*%
D20*
%TO.C,U1*%
X142380000Y-75870000D03*
D26*
X142380000Y-78410000D03*
X142380000Y-80950000D03*
X142380000Y-83490000D03*
X142380000Y-86030000D03*
X142380000Y-88570000D03*
X142380000Y-91110000D03*
X142380000Y-93650000D03*
X142380000Y-96190000D03*
X142380000Y-98730000D03*
X142380000Y-101270000D03*
X142380000Y-103810000D03*
X142380000Y-106350000D03*
X142380000Y-108890000D03*
X142380000Y-111430000D03*
X142380000Y-113970000D03*
X142380000Y-116510000D03*
X142380000Y-119050000D03*
X142380000Y-121590000D03*
X142380000Y-124130000D03*
X157620000Y-124130000D03*
X157620000Y-121590000D03*
X157620000Y-119050000D03*
X157620000Y-116510000D03*
X157620000Y-113970000D03*
X157620000Y-111430000D03*
X157620000Y-108890000D03*
X157620000Y-106350000D03*
X157620000Y-103810000D03*
X157620000Y-101270000D03*
X157620000Y-98730000D03*
X157620000Y-96190000D03*
X157620000Y-93650000D03*
X157620000Y-91110000D03*
X157620000Y-88570000D03*
X157620000Y-86030000D03*
X157620000Y-83490000D03*
X157620000Y-80950000D03*
X157620000Y-78410000D03*
X157620000Y-75870000D03*
%TD*%
D27*
%TO.C,P2*%
X162600000Y-91000000D03*
D28*
X161000000Y-91000000D03*
X161000000Y-93000000D03*
D27*
X159400000Y-93000000D03*
X162600000Y-95000000D03*
D28*
X161000000Y-95000000D03*
X161000000Y-97000000D03*
D27*
X159400000Y-97000000D03*
X162600000Y-99000000D03*
D28*
X161000000Y-99000000D03*
X161000000Y-101000000D03*
D27*
X159400000Y-101000000D03*
D28*
X161000000Y-103000000D03*
D27*
X162600000Y-103000000D03*
D28*
X161000000Y-105000000D03*
D27*
X159400000Y-105000000D03*
D28*
X161000000Y-107000000D03*
D27*
X162600000Y-107000000D03*
X159400000Y-109000000D03*
D28*
X161000000Y-109000000D03*
%TD*%
D27*
%TO.C,P1*%
X137400000Y-109000000D03*
D28*
X139000000Y-109000000D03*
D27*
X140600000Y-107000000D03*
D28*
X139000000Y-107000000D03*
D27*
X137400000Y-105000000D03*
D28*
X139000000Y-105000000D03*
X139000000Y-103000000D03*
D27*
X140600000Y-103000000D03*
D28*
X139000000Y-101000000D03*
D27*
X137400000Y-101000000D03*
D28*
X139000000Y-99000000D03*
D27*
X140600000Y-99000000D03*
X137400000Y-97000000D03*
D28*
X139000000Y-97000000D03*
X139000000Y-95000000D03*
D27*
X140600000Y-95000000D03*
D28*
X139000000Y-93000000D03*
D27*
X137400000Y-93000000D03*
D28*
X139000000Y-91000000D03*
D27*
X140600000Y-91000000D03*
%TD*%
D29*
%TO.C,IC1*%
X164450000Y-121562500D03*
X162550000Y-121562500D03*
X163500000Y-123437500D03*
%TD*%
M02*

View File

@ -1,144 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(6.0.4)*%
%TF.CreationDate,2022-08-11T15:59:35+02:00*%
%TF.ProjectId,STM32_DJI_Gimbal,53544d33-325f-4444-9a49-5f47696d6261,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (6.0.4)) date 2022-08-11 15:59:35*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10R,1.600000X0.410000*%
%ADD11RoundRect,0.135000X0.135000X0.185000X-0.135000X0.185000X-0.135000X-0.185000X0.135000X-0.185000X0*%
%ADD12RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
%ADD13R,0.800000X2.700000*%
%ADD14R,0.700000X0.600000*%
%ADD15RoundRect,0.225000X0.250000X-0.225000X0.250000X0.225000X-0.250000X0.225000X-0.250000X-0.225000X0*%
%ADD16RoundRect,0.250000X-0.787500X-0.925000X0.787500X-0.925000X0.787500X0.925000X-0.787500X0.925000X0*%
%ADD17RoundRect,0.250000X0.787500X0.925000X-0.787500X0.925000X-0.787500X-0.925000X0.787500X-0.925000X0*%
%ADD18RoundRect,0.225000X-0.225000X-0.250000X0.225000X-0.250000X0.225000X0.250000X-0.225000X0.250000X0*%
%ADD19RoundRect,0.225000X0.225000X0.250000X-0.225000X0.250000X-0.225000X-0.250000X0.225000X-0.250000X0*%
%ADD20R,1.500000X1.000000*%
%ADD21RoundRect,0.150000X-0.150000X0.587500X-0.150000X-0.587500X0.150000X-0.587500X0.150000X0.587500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,U2*%
X155808600Y-132115000D03*
X155808600Y-132750000D03*
X155808600Y-133385000D03*
X155808600Y-134020000D03*
X155808600Y-134655000D03*
X155808600Y-135290000D03*
X155808600Y-135925000D03*
X155808600Y-136560000D03*
X150500000Y-136560000D03*
X150500000Y-135925000D03*
X150500000Y-135290000D03*
X150500000Y-134655000D03*
X150500000Y-134020000D03*
X150500000Y-133385000D03*
X150500000Y-132750000D03*
X150500000Y-132115000D03*
%TD*%
D11*
%TO.C,R3*%
X148914300Y-134000000D03*
X147894300Y-134000000D03*
%TD*%
D12*
%TO.C,R2*%
X147894300Y-135087500D03*
X148914300Y-135087500D03*
%TD*%
%TO.C,R1*%
X148846000Y-136250000D03*
X147826000Y-136250000D03*
%TD*%
D13*
%TO.C,L1*%
X151650000Y-129500000D03*
X153850000Y-129500000D03*
%TD*%
D14*
%TO.C,D1*%
X157800000Y-132900000D03*
X157800000Y-131500000D03*
%TD*%
D15*
%TO.C,C5*%
X143750000Y-140275000D03*
X143750000Y-138725000D03*
%TD*%
D16*
%TO.C,C4*%
X160962500Y-129000000D03*
X156037500Y-129000000D03*
%TD*%
D17*
%TO.C,C3*%
X148962500Y-129337500D03*
X144037500Y-129337500D03*
%TD*%
D18*
%TO.C,C2*%
X152379300Y-137837500D03*
X153929300Y-137837500D03*
%TD*%
D19*
%TO.C,C1*%
X148679300Y-132837500D03*
X147129300Y-132837500D03*
%TD*%
D20*
%TO.C,P2*%
X162600000Y-91000000D03*
X159400000Y-93000000D03*
X162600000Y-95000000D03*
X159400000Y-97000000D03*
X162600000Y-99000000D03*
X159400000Y-101000000D03*
X162600000Y-103000000D03*
X159400000Y-105000000D03*
X162600000Y-107000000D03*
X159400000Y-109000000D03*
%TD*%
%TO.C,P1*%
X137400000Y-109000000D03*
X140600000Y-107000000D03*
X137400000Y-105000000D03*
X140600000Y-103000000D03*
X137400000Y-101000000D03*
X140600000Y-99000000D03*
X137400000Y-97000000D03*
X140600000Y-95000000D03*
X137400000Y-93000000D03*
X140600000Y-91000000D03*
%TD*%
D21*
%TO.C,IC1*%
X164450000Y-121562500D03*
X162550000Y-121562500D03*
X163500000Y-123437500D03*
%TD*%
M02*

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
M48
; DRILL file {KiCad (6.0.4)} date Thu Aug 11 15:56:58 2022
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2022-08-11T15:56:58+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.4)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
INCH
%
G90
G05
T0
M30

View File

@ -1,201 +0,0 @@
M48
; DRILL file {KiCad (6.0.4)} date Thu Aug 11 15:56:58 2022
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2022-08-11T15:56:58+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.4)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
INCH
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C0.0157
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C0.0157
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T3C0.0197
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T4C0.0315
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T5C0.0394
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T6C0.0866
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T7C0.1260
%
G90
G05
T1
X5.3268Y-3.0669
X5.3268Y-3.5394
X5.3268Y-3.8543
X5.3268Y-4.8386
X5.3307Y-5.2598
X5.46Y-4.44
X5.4921Y-5.4764
X5.5315Y-5.5807
X5.5512Y-5.4724
X5.5709Y-5.5807
X5.6Y-5.03
X5.6Y-5.15
X5.6181Y-5.4921
X5.622Y-5.8465
X5.6772Y-5.2756
X5.7106Y-3.4902
X5.7106Y-4.2185
X5.7598Y-2.9488
X5.79Y-5.17
X5.84Y-4.99
X5.8661Y-5.4567
X5.87Y-5.59
X5.9291Y-3.811
X5.96Y-3.48
X6.0039Y-5.2854
X6.0079Y-3.9055
X6.0079Y-3.9882
X6.0079Y-4.0906
X6.0079Y-4.185
X6.0079Y-4.2874
X6.0079Y-4.3858
X6.0138Y-5.0787
X6.0748Y-2.9488
X6.1142Y-5.8465
X6.1417Y-4.0394
X6.1417Y-4.1417
X6.1417Y-5.1732
X6.1811Y-5.502
X6.2106Y-5.3445
X6.2992Y-4.8898
X6.3386Y-5.5118
X6.45Y-2.97
X6.4685Y-3.5
X6.4685Y-4.3661
X6.4685Y-4.7205
X6.5079Y-5.311
X6.5079Y-5.5669
X6.5079Y-5.8465
X6.8701Y-5.4331
X6.8701Y-5.8268
X6.8898Y-5.6299
T2
X6.6673Y-5.4921
X6.6673Y-5.7677
X6.6863Y-5.4462
X6.6863Y-5.5381
X6.6863Y-5.7218
X6.6863Y-5.8137
X6.7323Y-5.4272
X6.7323Y-5.5571
X6.7323Y-5.7028
X6.7323Y-5.8327
X6.7782Y-5.4462
X6.7782Y-5.5381
X6.7782Y-5.7218
X6.7782Y-5.8137
X6.7972Y-5.4921
X6.7972Y-5.7677
T3
X5.2106Y-3.3366
X5.2106Y-4.5374
X5.2383Y-3.2698
X5.2383Y-3.4034
X5.2383Y-4.4706
X5.2383Y-4.6042
X5.3051Y-3.2421
X5.3051Y-3.4311
X5.3051Y-4.4429
X5.3051Y-4.6319
X5.3719Y-3.2698
X5.3719Y-3.4034
X5.3719Y-4.4706
X5.3719Y-4.6042
X5.3996Y-3.3366
X5.3996Y-4.5374
X6.4114Y-3.3366
X6.4114Y-4.5374
X6.4391Y-3.2698
X6.4391Y-3.4034
X6.4391Y-4.4706
X6.4391Y-4.6042
X6.5059Y-3.2421
X6.5059Y-3.4311
X6.5059Y-4.4429
X6.5059Y-4.6319
X6.5727Y-3.2698
X6.5727Y-3.4034
X6.5727Y-4.4706
X6.5727Y-4.6042
X6.6004Y-3.3366
X6.6004Y-4.5374
T4
X5.4724Y-3.5827
X5.4724Y-3.6614
X5.4724Y-3.7402
X5.4724Y-3.8189
X5.4724Y-3.8976
X5.4724Y-3.9764
X5.4724Y-4.0551
X5.4724Y-4.1339
X5.4724Y-4.2126
X5.4724Y-4.2913
X6.3386Y-3.5827
X6.3386Y-3.6614
X6.3386Y-3.7402
X6.3386Y-3.8189
X6.3386Y-3.8976
X6.3386Y-3.9764
X6.3386Y-4.0551
X6.3386Y-4.1339
X6.3386Y-4.2126
X6.3386Y-4.2913
T5
X5.6055Y-2.987
X5.6055Y-3.087
X5.6055Y-3.187
X5.6055Y-3.287
X5.6055Y-3.387
X5.6055Y-3.487
X5.6055Y-3.587
X5.6055Y-3.687
X5.6055Y-3.787
X5.6055Y-3.887
X5.6055Y-3.987
X5.6055Y-4.087
X5.6055Y-4.187
X5.6055Y-4.287
X5.6055Y-4.387
X5.6055Y-4.487
X5.6055Y-4.587
X5.6055Y-4.687
X5.6055Y-4.787
X5.6055Y-4.887
X6.2055Y-2.987
X6.2055Y-3.087
X6.2055Y-3.187
X6.2055Y-3.287
X6.2055Y-3.387
X6.2055Y-3.487
X6.2055Y-3.587
X6.2055Y-3.687
X6.2055Y-3.787
X6.2055Y-3.887
X6.2055Y-3.987
X6.2055Y-4.087
X6.2055Y-4.187
X6.2055Y-4.287
X6.2055Y-4.387
X6.2055Y-4.487
X6.2055Y-4.587
X6.2055Y-4.687
X6.2055Y-4.787
X6.2055Y-4.887
X6.4567Y-5.0049
X6.4567Y-5.1049
T6
X6.7323Y-5.4921
X6.7323Y-5.7677
T7
X5.3051Y-3.3366
X5.3051Y-4.5374
X6.5059Y-3.3366
X6.5059Y-4.5374
T0
M30

View File

@ -1,127 +0,0 @@
{
"Header": {
"GenerationSoftware": {
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "(6.0.4)"
},
"CreationDate": "2022-08-11T15:59:35+02:00"
},
"GeneralSpecs": {
"ProjectId": {
"Name": "STM32_DJI_Gimbal",
"GUID": "53544d33-325f-4444-9a49-5f47696d6261",
"Revision": "rev?"
},
"Size": {
"X": 45.0,
"Y": 76.25
},
"LayerNumber": 2,
"BoardThickness": 1.6,
"Finish": "None"
},
"DesignRules": [
{
"Layers": "Outer",
"PadToPad": 0.15,
"PadToTrack": 0.15,
"TrackToTrack": 0.15,
"MinLineWidth": 0.2,
"TrackToRegion": 0.25,
"RegionToRegion": 0.25
}
],
"FilesAttributes": [
{
"Path": "STM32_DJI_Gimbal-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-F_Silkscreen.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-B_Silkscreen.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "STM32_DJI_Gimbal-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "STM32_DJI_Gimbal-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "STM32_DJI_Gimbal-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup": [
{
"Type": "Legend",
"Name": "Top Silk Screen"
},
{
"Type": "SolderPaste",
"Name": "Top Solder Paste"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Top Solder Mask"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "F.Cu"
},
{
"Type": "Dielectric",
"Thickness": 1.51,
"Material": "FR4",
"Name": "F.Cu/B.Cu",
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "B.Cu"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Bottom Solder Mask"
},
{
"Type": "SolderPaste",
"Name": "Bottom Solder Paste"
},
{
"Type": "Legend",
"Name": "Bottom Silk Screen"
}
]
}

View File

@ -445,19 +445,19 @@ $SKPOLY
9
$TDCREATE
40
2459786.689388692
2459860.72133081
9
$TDUCREATE
40
2459786.606055359
2459860.637997477
9
$TDUPDATE
40
2459786.689427303
2459860.721388206
9
$TDUUPDATE
40
2459786.60609397
2459860.638054873
9
$TDINDWG
40
@ -505,7 +505,7 @@ $SPLINESEGS
9
$HANDSEED
5
C8
CC
9
$SURFTAB1
70
@ -885,7 +885,7 @@ $PSTYLEMODE
9
$FINGERPRINTGUID
2
{89ba04fc-ac94-4044-8963-20492f950a77}
{2329590a-49b4-444d-ac96-2db2d5f6239a}
9
$VERSIONGUID
2
@ -1871,7 +1871,7 @@ AcDbCircle
0
CIRCLE
5
94
92
330
1F
100
@ -1897,7 +1897,7 @@ AcDbCircle
0
CIRCLE
5
95
93
330
1F
100
@ -1923,7 +1923,7 @@ AcDbCircle
0
CIRCLE
5
96
94
330
1F
100
@ -1949,7 +1949,7 @@ AcDbCircle
0
CIRCLE
5
97
95
330
1F
100
@ -1975,7 +1975,7 @@ AcDbCircle
0
LINE
5
A0
A2
330
1F
100
@ -1991,7 +1991,7 @@ Continuous
100
AcDbLine
10
-6.3205080757
-6.0
20
-49.5
30
@ -2005,7 +2005,7 @@ AcDbLine
0
LINE
5
A1
A3
330
1F
100
@ -2029,13 +2029,13 @@ AcDbLine
11
-16.0
21
-39.6850454238
-39.5
31
0.0
0
LINE
5
A2
A4
330
1F
100
@ -2065,7 +2065,7 @@ AcDbLine
0
LINE
5
A3
A5
330
1F
100
@ -2095,7 +2095,7 @@ AcDbLine
0
LINE
5
A4
A6
330
1F
100
@ -2125,7 +2125,7 @@ AcDbLine
0
LINE
5
A5
A7
330
1F
100
@ -2155,7 +2155,7 @@ AcDbLine
0
LINE
5
A6
A8
330
1F
100
@ -2185,66 +2185,6 @@ AcDbLine
0
LINE
5
A7
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
16.0
20
-31.3038475773
30
0.0
11
16.0
21
-20.5591901454
31
0.0
0
LINE
5
A8
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
20.0717967697
20
-35.9641016151
30
0.0
11
18.0
21
-34.7679491924
31
0.0
0
LINE
5
A9
330
1F
@ -2261,15 +2201,15 @@ Continuous
100
AcDbLine
10
24.0
16.0
20
-36.5
-29.5717967697
30
0.0
11
22.0717967697
16.0
21
-36.5
-20.5591901454
31
0.0
0
@ -2289,6 +2229,36 @@ Continuous
370
25
100
AcDbLine
10
23.3305466007
20
-36.1134908997
30
0.0
11
18.0
21
-33.0358983849
31
0.0
0
LINE
5
AB
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
26.0
@ -2305,36 +2275,6 @@ AcDbLine
0
LINE
5
AB
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
19.5
20
-46.0
30
0.0
11
19.5
21
-40.0
31
0.0
0
LINE
5
AC
330
1F
@ -2351,15 +2291,15 @@ Continuous
100
AcDbLine
10
17.5
19.5
20
-40.0
-45.5
30
0.0
11
17.5
19.5
21
-46.0
-40.5
31
0.0
0
@ -2381,15 +2321,15 @@ Continuous
100
AcDbLine
10
-1.5
17.5
20
-40.5
30
0.0
11
-11.5
17.5
21
-40.5
-45.5
31
0.0
0
@ -2411,15 +2351,15 @@ Continuous
100
AcDbLine
10
-11.5
2.5
20
-40.5
-46.5
30
0.0
11
-11.5
2.5
21
-43.0
-41.5
31
0.0
0
@ -2441,15 +2381,15 @@ Continuous
100
AcDbLine
10
-11.5
0.5
20
-43.0
-41.5
30
0.0
11
-1.5
0.5
21
-43.0
-46.5
31
0.0
0
@ -2471,13 +2411,103 @@ Continuous
100
AcDbLine
10
-1.5
15.0
20
-40.5
30
0.0
11
5.0
21
-40.5
31
0.0
0
LINE
5
B1
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
5.0
20
-40.5
30
0.0
11
5.0
21
-43.0
31
0.0
0
LINE
5
B2
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
5.0
20
-43.0
30
0.0
11
-1.5
15.0
21
-43.0
31
0.0
0
LINE
5
B3
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbLine
10
15.0
20
-43.0
30
0.0
11
15.0
21
-40.5
31
@ -2485,7 +2515,7 @@ AcDbLine
0
ARC
5
B1
B4
330
1F
100
@ -2517,39 +2547,7 @@ AcDbArc
0
ARC
5
B2
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbCircle
10
-6.3205080757
20
-39.5
30
0.0
40
9.999999999999883
100
AcDbArc
50
241.0602926965
51
270.0
0
ARC
5
B3
B5
330
1F
100
@ -2567,21 +2565,21 @@ AcDbCircle
10
-6.0
20
-39.6850454238
-39.5
30
0.0
40
10.0
9.999999999999972
100
AcDbArc
50
180.0
51
238.9397073035
270.0
0
ARC
5
B4
B6
330
1F
100
@ -2613,7 +2611,7 @@ AcDbArc
0
ARC
5
B5
B7
330
1F
100
@ -2645,7 +2643,7 @@ AcDbArc
0
ARC
5
B6
B8
330
1F
100
@ -2677,7 +2675,7 @@ AcDbArc
0
ARC
5
B7
B9
330
1F
100
@ -2709,7 +2707,7 @@ AcDbArc
0
ARC
5
B8
BA
330
1F
100
@ -2741,7 +2739,7 @@ AcDbArc
0
ARC
5
B9
BB
330
1F
100
@ -2763,7 +2761,7 @@ AcDbCircle
30
0.0
40
2.999999999999979
2.999999999999986
100
AcDbArc
50
@ -2773,7 +2771,7 @@ AcDbArc
0
ARC
5
BA
BC
330
1F
100
@ -2795,7 +2793,7 @@ AcDbCircle
30
0.0
40
3.000000000000005
3.0
100
AcDbArc
50
@ -2805,7 +2803,7 @@ AcDbArc
0
ARC
5
BB
BD
330
1F
100
@ -2827,7 +2825,7 @@ AcDbCircle
30
0.0
40
3.000000000000007
2.999999999999996
100
AcDbArc
50
@ -2837,7 +2835,7 @@ AcDbArc
0
ARC
5
BC
BE
330
1F
100
@ -2859,7 +2857,7 @@ AcDbCircle
30
0.0
40
2.999999999999986
2.999999999999982
100
AcDbArc
50
@ -2869,7 +2867,7 @@ AcDbArc
0
ARC
5
BD
BF
330
1F
100
@ -2901,7 +2899,7 @@ AcDbArc
0
ARC
5
BE
C0
330
1F
100
@ -2933,7 +2931,7 @@ AcDbArc
0
ARC
5
BF
C1
330
1F
100
@ -2965,7 +2963,7 @@ AcDbArc
0
ARC
5
C0
C2
330
1F
100
@ -2997,7 +2995,7 @@ AcDbArc
0
ARC
5
C1
C3
330
1F
100
@ -3029,7 +3027,7 @@ AcDbArc
0
ARC
5
C2
C4
330
1F
100
@ -3047,11 +3045,11 @@ AcDbCircle
10
20.0
20
-31.3038475773
-29.5717967697
30
0.0
40
4.000000000000004
3.999999999999989
100
AcDbArc
50
@ -3061,7 +3059,7 @@ AcDbArc
0
ARC
5
C3
C5
330
1F
100
@ -3077,23 +3075,23 @@ Continuous
100
AcDbCircle
10
22.0717967697
25.3305466007
20
-32.5
-32.6493892846
30
0.0
40
3.999999999999886
3.999999999999445
100
AcDbArc
50
240.0
51
270.0
257.1877039013
0
ARC
5
C4
C6
330
1F
100
@ -3115,17 +3113,17 @@ AcDbCircle
30
0.0
40
2.000000000000004
2.000000000000007
100
AcDbArc
50
0.0
51
90.0
77.1877039013
0
ARC
5
C5
C7
330
1F
100
@ -3143,7 +3141,7 @@ AcDbCircle
10
18.5
20
-40.0
-40.5
30
0.0
40
@ -3157,7 +3155,7 @@ AcDbArc
0
ARC
5
C6
C8
330
1F
100
@ -3175,12 +3173,76 @@ AcDbCircle
10
18.5
20
-46.0
-45.5
30
0.0
40
1.0
100
AcDbArc
50
180.0
51
0.0
0
ARC
5
C9
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbCircle
10
1.5
20
-41.5
30
0.0
40
1.000000000000001
100
AcDbArc
50
0.0
51
180.0
0
ARC
5
CA
330
1F
100
AcDbEntity
8
0
6
Continuous
62
7
370
25
100
AcDbCircle
10
1.5
20
-46.5
30
0.0
40
1.000000000000002
100
AcDbArc
50
180.0
@ -3229,7 +3291,7 @@ ACAD_SCALELIST
3
DWGPROPS
350
C7
CB
0
DICTIONARY
5
@ -3485,7 +3547,7 @@ D2
0
XRECORD
5
C7
CB
102
{ACAD_REACTORS
330
@ -3537,9 +3599,9 @@ lurenaud
40
0.0
41
2459786.606055359
2459860.637997477
42
2459786.60609397
2459860.638054873
1
90

View File

@ -1,56 +1,25 @@
"Source:","D:\lulu\Documents\Inria\DJI Gimbal\Kicad\STM32_DJI_Gimbal\STM32_DJI_Gimbal.kicad_sch"
"Date:","11/08/2022 17:08:12"
"Tool:","Eeschema (6.0.4)"
"Generator:","C:\Program Files\KiCad\6.0\bin\scripting\plugins/bom_csv_grouped_by_value.py"
"Component Count:","23"
"Individual Components:"
"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","Description","Height","MFR","MPN","Manufacturer_Name","Manufacturer_Part_Number","Mouser Part Number","Mouser Price/Stock"
"","","C1","220n","Device:C","Capacitor_SMD:C_0603_1608Metric","~","","","Yageo","CC0603KRX7R6BB224","","","",""
"","","C2","1u","Device:C","Capacitor_SMD:C_0603_1608Metric","~","","","Yageo","CC0603ZRY5V7BB105","","","",""
"","","C3","47u","Device:C_Polarized","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C","~","","","AVX","TPSC476K010T0350 ","","","",""
"","","C4","220u","Device:C_Polarized","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C","~","","","AVX","TPSC227M006R0125","","","",""
"","","C5","220n","Device:C","Capacitor_SMD:C_0603_1608Metric","~","","","Yageo","CC0603KRX7R6BB224","","","",""
"","","D1","MBR0520","Diode:MBR0520","Diode_SMD:D_SOD-523","http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf","","","Onsemi","NSR05T30XV2T5G ","","","",""
"","","H1","M3","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3_Pad_Via","~","","","","","","","",""
"","","H2","M3","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3_Pad_Via","~","","","","","","","",""
"","","H3","CAM_M2","Mechanical:MountingHole","MountingHole:MountingHole_2.2mm_M2_Pad_Via","~","","","","","","","",""
"","","H4","CAM_M2","Mechanical:MountingHole","MountingHole:MountingHole_2.2mm_M2_Pad_Via","~","","","","","","","",""
"","","H5","M3","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3_Pad_Via","~","","","","","","","",""
"","","H6","M3","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3_Pad_Via","~","","","","","","","",""
"","","IC1","DS28E05R+T","DJI_Gimbal:DS28E05R+T","Package_TO_SOT_SMD:SOT-23","","","","","","","","",""
"","","J1","BM20B_0.8_-34DS-0.4V_53_","DJI_Gimbal:BM20B_0.8_-34DS-0.4V_53_","DGI_Gimbal:BM20B0834DS04V53","https://www.hirose.com/en/product/document?clcode=CL0684-9020-0-53&productname=BM20B(0.8)-34DS-0.4V(53)&series=BM20&documenttype=2DDrawing&lang=en&documentid=0001372404","Board to Board & Mezzanine Connectors 34P DR RCP B2B/B2FPC 0.8mm H 0.4mm P VSMT","0.9","","","Hirose","BM20B(0.8)-34DS-0.4V(53)","798-BM20B0834DS04V53","https://www.mouser.co.uk/ProductDetail/Hirose-Connector/BM20B08-34DS-04V53?qs=AAveGqk956HKBDZ2sUIWMg%3D%3D"
"","","J2","Conn_01x02","Connector_Generic:Conn_01x02","Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical","~","","","","","","","",""
"","","L1","1.5uH","Device:L","Inductor_SMD:L_Taiyo-Yuden_NR-30xx","~","","","Taiyo\ Yuden","NR3015T1R5N ","","","",""
"","","P1","CF_EXP_LEFT","DJI_Gimbal:CF_EXP_LEFT","DGI_Gimbal:BF090-10-X-B2","","","","","","","","",""
"","","P2","CF_EXP_RIGHT","DJI_Gimbal:CF_EXP_RIGHT","DGI_Gimbal:BF090-10-X-B2","","","","","","","","",""
"","","R1","4.7","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-074R7L","","","",""
"","","R2","82k","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-0782KL ","","","",""
"","","R3","27k","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-0727KL ","","","",""
"","","U1","WeAct_BlackPill_Part_Like","DJI_Gimbal:WeAct_BlackPill_Part_Like","DGI_Gimbal:YAAJ_WeAct_BlackPill_2","","","","","","","","",""
"","","U2","MAX1763","DJI_Gimbal:MAX1763","Package_SO:QSOP-16_3.9x4.9mm_P0.635mm","https://datasheets.maximintegrated.com/en/ds/MAX1763.pdf","","","","","","","",""
"Collated Components:"
"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","Description","Height","MFR","MPN","Manufacturer_Name","Manufacturer_Part_Number","Mouser Part Number","Mouser Price/Stock"
"1","2","C1, C5","220n","Device:C","Capacitor_SMD:C_0603_1608Metric","~","","","Yageo","CC0603KRX7R6BB224","","","",""
"2","1","C2","1u","Device:C","Capacitor_SMD:C_0603_1608Metric","~","","","Yageo","CC0603ZRY5V7BB105","","","",""
"3","1","C3","47u","Device:C_Polarized","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C","~","","","AVX","TPSC476K010T0350 ","","","",""
"4","1","C4","220u","Device:C_Polarized","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C","~","","","AVX","TPSC227M006R0125","","","",""
"5","1","D1","MBR0520","Diode:MBR0520","Diode_SMD:D_SOD-523","http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf","","","Onsemi","NSR05T30XV2T5G ","","","",""
"6","4","H1, H2, H5, H6","M3","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3_Pad_Via","~","","","","","","","",""
"7","2","H3, H4","CAM_M2","Mechanical:MountingHole","MountingHole:MountingHole_2.2mm_M2_Pad_Via","~","","","","","","","",""
"8","1","IC1","DS28E05R+T","DJI_Gimbal:DS28E05R+T","Package_TO_SOT_SMD:SOT-23","","","","","","","","",""
"9","1","J1","BM20B_0.8_-34DS-0.4V_53_","DJI_Gimbal:BM20B_0.8_-34DS-0.4V_53_","DGI_Gimbal:BM20B0834DS04V53","https://www.hirose.com/en/product/document?clcode=CL0684-9020-0-53&productname=BM20B(0.8)-34DS-0.4V(53)&series=BM20&documenttype=2DDrawing&lang=en&documentid=0001372404","Board to Board & Mezzanine Connectors 34P DR RCP B2B/B2FPC 0.8mm H 0.4mm P VSMT","0.9","","","Hirose","BM20B(0.8)-34DS-0.4V(53)","798-BM20B0834DS04V53","https://www.mouser.co.uk/ProductDetail/Hirose-Connector/BM20B08-34DS-04V53?qs=AAveGqk956HKBDZ2sUIWMg%3D%3D"
"10","1","J2","Conn_01x02","Connector_Generic:Conn_01x02","Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical","~","","","","","","","",""
"11","1","L1","1.5uH","Device:L","Inductor_SMD:L_Taiyo-Yuden_NR-30xx","~","","","Taiyo\ Yuden","NR3015T1R5N ","","","",""
"12","1","P1","CF_EXP_LEFT","DJI_Gimbal:CF_EXP_LEFT","DGI_Gimbal:BF090-10-X-B2","","","","","","","","",""
"13","1","P2","CF_EXP_RIGHT","DJI_Gimbal:CF_EXP_RIGHT","DGI_Gimbal:BF090-10-X-B2","","","","","","","","",""
"14","1","R1","4.7","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-074R7L","","","",""
"15","1","R2","82k","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-0782KL ","","","",""
"16","1","R3","27k","Device:R","Resistor_SMD:R_0402_1005Metric","~","","","Yageo","AC0402FR-0727KL ","","","",""
"17","1","U1","WeAct_BlackPill_Part_Like","DJI_Gimbal:WeAct_BlackPill_Part_Like","DGI_Gimbal:YAAJ_WeAct_BlackPill_2","","","","","","","","",""
"18","1","U2","MAX1763","DJI_Gimbal:MAX1763","Package_SO:QSOP-16_3.9x4.9mm_P0.635mm","https://datasheets.maximintegrated.com/en/ds/MAX1763.pdf","","","","","","","",""
Reference(s),Value,Footprint,DNP,MFR,MPN,Qty
C1,47u,Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C,,AVX,TPSC476K010T0350 ,1
"C2, C5",100n,Capacitor_SMD:C_0402_1005Metric,,Murata,GRM155R71A104KA01J,2
"C3, C10",220n,Capacitor_SMD:C_0603_1608Metric,,Yageo,CC0603KRX7R6BB224,2
C4,1u,Capacitor_SMD:C_0603_1608Metric,,Yageo,CC0603ZRY5V7BB105,1
C6,8.2n,Capacitor_SMD:C_0402_1005Metric,,Murata,GRM155R71C822KA01D,1
C7,27p,Capacitor_SMD:C_0402_1005Metric,,Murata,GRM1555C1H270JA01D,1
C8,560p,Capacitor_SMD:C_0402_1005Metric,,Murata,GRM155R71H561KA01D,1
C9,220u,Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C,,AVX,TPSC227M006R0125,1
"H1, H2, H5, H6",M3,MountingHole:MountingHole_3.2mm_M3_Pad_Via,DNP,,,4
"H3, H4",CAM_M2,MountingHole:MountingHole_2.2mm_M2_Pad_Via,DNP,,,2
IC1,DS28E05R+T,Package_TO_SOT_SMD:SOT-23,,Maxim,DS28E05R+T ,1
IC2,TPS61088RHLT,DGI_Gimbal:TPS61088,,Texas Instruments,TPS61088RHLT,1
J1,BM20B_0.8_-34DS-0.4V_53_,DGI_Gimbal:BM20B0834DS04V53,,Hirose,BM20B(0.8)-34DS-0.4V(53),1
J2,Conn_01x02,Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical,,Amphenol,10129378-910002BLF,1
JP1,Jumper,Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm,DNP,,,1
L1,1u,Inductor_SMD:L_Coilcraft_XxL4020,,Coilcraft,XAL4020-102MEC,1
P1,CF_EXP_LEFT,DGI_Gimbal:BF090-10-X-B2,,,,1
P2,CF_EXP_RIGHT,DGI_Gimbal:BF090-10-X-B2,,,,1
R1,255k,Resistor_SMD:R_0402_1005Metric,,Vishay,CRCW0402255KFKED,1
R2,133k,Resistor_SMD:R_0402_1005Metric,,Yageo,RC0402FR-07133KL,1
R3,36.5k,Resistor_SMD:R_0402_1005Metric,,Yageo,AC0402FR-0736K5L,1
R4,470k,Resistor_SMD:R_0402_1005Metric,,Yageo,RC0402FR-07470KL,1
R5,97.6k,Resistor_SMD:R_0402_1005Metric,,Vishay,CRCW040297K6FKED,1
U1,WeAct_BlackPill_Part_Like,DGI_Gimbal:YAAJ_WeAct_BlackPill_2,,,,1

Can't render this file because it has a wrong number of fields in line 7.

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
"zones": 1.0
},
"ratsnest_display_mode": 0,
"selection_filter": {
@ -18,7 +18,7 @@
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
@ -63,7 +63,7 @@
36
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
"zone_display_mode": 1
},
"meta": {
"filename": "STM32_DJI_Gimbal.kicad_prl",

View File

@ -381,7 +381,6 @@
"microvia_drill": 0.1,
"name": "Power",
"nets": [
"+3V3",
"+5V"
],
"pcb_color": "rgba(0, 0, 0, 0.000)",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,3 @@
(fp_lib_table
(lib (name "DGI_Gimbal")(type "KiCad")(uri "${KIPRJMOD}/DGI_Gimbal.pretty")(options "")(descr ""))
(lib (name "SamacSys_Parts")(type "KiCad")(uri "D:/lulu/Documents/Kicad/SamacSys_Parts.pretty")(options "")(descr ""))
)

View File

@ -29,11 +29,11 @@ Connected directly to a MCU (here a STM32 Nucleo F401RE) and with the Simple FOC
## Position estimation with the integrated linear hall sensors
### 1. Setup
Each motor is composed of two ratiometric linear hall sensors. (Texas Instrument DRV5053 Analog-Bipolar Hall Effect Sensor) They are placed at around 120º from each other (eyes measured) and measure the magnetic field of the rotor.
Each motor is composed of two linear hall sensors. (Texas Instrument DRV5053 Analog-Bipolar Hall Effect Sensor) They are placed at around 120º from each other (eyes measured) and measure the magnetic field of the rotor.
<img src="docs/Hallmotor.jpg" height=300>
Ratiometric means that the output signal is proportional to the voltage supply to the sensor. In this setup, with 5V supply, the output measured is between 520mV and 1.5V, so a 1V amplitude signal.
They are linear sensor, the output voltage correspond to a magnetic fields, regardless of the voltage supplied. In our case the output signal is between 1V and 1.65V.
### 2. Measures

View File

@ -1,98 +0,0 @@
# DJI Gimbal Retro-Engineering
The aim of this project is to be able to use the 3-axis DJI gimbal with a custom open source controller. This high quality gimbal is very tiny and easy to find as replacement part which makes it very suitable for DIY projects.
## Description
todo
## Pinout identification
The Gimbal is composed of a flex PCB with a main connector and 3 smaller for each motor. The main end connector is a 40-pin mezzanine board to board connectors. In order to work easily I have designed a breakout board which open to a 2.54" header.
Here is the strategy I followed to find the pinout:
1. Find all equipotential pins:
With a multimeter set to continuity tests, and test all the combinations
2. Group remaining pins by motor
With the multimeter find all the pins connected to the motor connector. (Reapeat 3 times)
3.
### Open-loop control
Each motor has its own drivers a MP6536. Which makes it easy as no additional hardware is necessary to drive the motors.
There are 4 pins from the MP6536:
1. PWM1
2. PWM2
3. PWM3
4. Fault : Output. When low, indicates overtemperature, over-current, or under-voltage.
Connected directly to a MCU and with the Simple FOC Library, open-loop control works quite well. However due to open-loop control, it cannot know when a "step" is missed so misalignment can occur. Also, the motor tends to become quite hot due to the continuous current sent to the coils.
## Position estimation with the integrated linear hall sensors
### 1. Setup
Each motor is composed of two ratiometric linear hall sensors. (Texas Instrument DRV5053 Analog-Bipolar Hall Effect Sensor) They are placed at around 120º from each other (eyes measured) and measure the magnetic field of the rotor.
![Photo of the stator](Hallmotor.jpg)
Ratiometric means that the output signal is proportional to the voltage supply to the sensor. In this setup, with 5V supply, the output measured is between 520mV and 1.5V, so a 1V amplitude.
### 2. Measures
These oscilloscope traces are the sensor output when rotating the rotor forth and back. (a bit less than 180º on the 3rd motor)
The channel 0 (Yellow) is the Hall 1 and the Channel 1 (Green) is the Hall 2
![hall sensors traces](courbes.png)
We can see that in the first movement (positive rotation), the green is out of phase of π/2.`
![Sinwave figure](cosSinEncoderDiagram.png)
### 3. Encoding the position
1. Get the absolute angle within a period
Since the 2 signals correspond to a cos and sin signals, it is possible to compute the angle inside the period using arctan2 function. However, we have more than one period, it is so necessary to increment a position.
$$\theta= atan2(a,b)$$
2. Incremental position
To increment the position, it is necessary to start from 0 at a known postion. For that the motor is moved in open loop to one end and the position is set to 0.
Then we need to sum all the delta of movement at each measure sample.
$$\phi_t=\phi_{t-1} + (\theta_t - \theta_{t-1})mod(-\pi;\pi)$$
## Coding the solution
1. Get the angle in the perdiod
In order to compute the angle from the cos and sin with atan, it is necessary to remap the values of the analog readings from -1 to 1.
Beforehand, the maximum and minimum peak of the signals need to be found. It can be done by swiping the motor on startup in open-loop mode.
Then the arctan function can be applied. It is preferable to use arctan2 as it will give an angle within the 4 quadrants (-π,π). Whereas arctan give an angle between (-π/2,π/2). [Wikipedia](https://en.wikipedia.org/wiki/Atan2)
```C++
float LinearHallSensor::Callback() // Return the estimated position of the sensor
{
A = norm(analogRead(CH1),minCh1, maxCh1); //read analog values and normalise between [-1;1]
B = norm(analogRead(CH2),minCh2, maxCh2);
theta = atan2(A,B); // Compute the absolute angle in the period
phi = phi + dist_angle(theta, theta_prev); // increment the difference
theta_prev = theta; // save fot nex time
return phi;
}
float norm(float x, float in_min, float in_max) //return the input value normalised between [-1;1]
{
return (float)(x + 1.0) * (2.0) / (float)(in_max - in_min) -1.0;
}
float dist_angle(float newAngle, float prevAngle) // return the difference modulo [-pi;pi]
{
float diff = newAngle - prevAngle;
while (diff < (-M_PI))
diff += 2 * M_PI;
while (diff > M_PI)
diff -= 2 * M_PI;
return diff;
}
```

View File

@ -16,3 +16,21 @@ monitor_port = COM3
monitor_speed = 115200
lib_archive = no
lib_deps = askuric/Simple FOC@^2.2.2
[env:Blackpill]
platform = ststm32
board = blackpill_f401cc
upload_protocol = dfu
framework = arduino
lib_archive = no
lib_deps =
askuric/Simple FOC@^2.2.2
Wire
SPI
monitor_port = COM5
monitor_speed = 115200
build_flags =
-D PIO_FRAMEWORK_ARDUINO_ENABLE_CDC
-D USBCON
; -D SIMPLEFOC_STM32_DEBUG
monitor_dtr = 1

43
pythonGUI/gimbal_gui.py Normal file
View File

@ -0,0 +1,43 @@
import pygame
import serial
import time
ser = serial.Serial('COM5',115200, timeout=0.01)
print(ser.name)
pygame.init()
pygame.joystick.init()
pad = pygame.joystick.Joystick(0)
pad.init()
print(pad.get_name())
def remap(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
while(True):
pygame.event.pump()
X_axis = round(pad.get_axis(2),4)
Y_axis = round(pad.get_axis(3),4)
Z_axis = round(pad.get_axis(0),4)
# print(f'Axis 2: {X_axis}\tAxis 3: {Y_axis} \tAxis 0: {Z_axis}')
X_axis = round(remap(X_axis,-1,1,0,1000))
Y_axis = round(remap(Y_axis,-1,1,0,1000))
Z_axis = round(remap(Z_axis,-1,1,0,1000))
# print(f'Axis X: {X_axis}\tAxis Y: {Y_axis} \tAxis Z: {Z_axis}')
ser.write(('X'+str(X_axis)+'\n').encode())
ser.write(('Y'+str(Y_axis)+'\n').encode())
ser.write(('Z'+str(Z_axis)+'\n').encode())
income = ser.readline()
if (len(income)>0):
print(income)
# time.sleep(0.1)

149
pythonGUI/joystickTest.py Normal file
View File

@ -0,0 +1,149 @@
import pygame
pygame.init()
# This is a simple class that will help us print to the screen.
# It has nothing to do with the joysticks, just outputting the
# information.
class TextPrint:
def __init__(self):
self.reset()
self.font = pygame.font.Font(None, 25)
def tprint(self, screen, text):
text_bitmap = self.font.render(text, True, (0, 0, 0))
screen.blit(text_bitmap, (self.x, self.y))
self.y += self.line_height
def reset(self):
self.x = 10
self.y = 10
self.line_height = 15
def indent(self):
self.x += 10
def unindent(self):
self.x -= 10
def main():
# Set the width and height of the screen (width, height), and name the window.
screen = pygame.display.set_mode((500, 700))
pygame.display.set_caption("Joystick example")
# Used to manage how fast the screen updates.
clock = pygame.time.Clock()
# Get ready to print.
text_print = TextPrint()
# This dict can be left as-is, since pygame will generate a
# pygame.JOYDEVICEADDED event for every joystick connected
# at the start of the program.
joysticks = {}
done = False
while not done:
# Event processing step.
# Possible joystick events: JOYAXISMOTION, JOYBALLMOTION, JOYBUTTONDOWN,
# JOYBUTTONUP, JOYHATMOTION, JOYDEVICEADDED, JOYDEVICEREMOVED
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True # Flag that we are done so we exit this loop.
if event.type == pygame.JOYBUTTONDOWN:
print("Joystick button pressed.")
if event.button == 0:
joystick = joysticks[event.instance_id]
if joystick.rumble(0, 0.7, 500):
print(f"Rumble effect played on joystick {event.instance_id}")
if event.type == pygame.JOYBUTTONUP:
print("Joystick button released.")
# Handle hotplugging
if event.type == pygame.JOYDEVICEADDED:
# This event will be generated when the program starts for every
# joystick, filling up the list without needing to create them manually.
joy = pygame.joystick.Joystick(event.device_index)
joysticks[joy.get_instance_id()] = joy
print(f"Joystick {joy.get_instance_id()} connencted")
if event.type == pygame.JOYDEVICEREMOVED:
del joysticks[event.instance_id]
print(f"Joystick {event.instance_id} disconnected")
# Drawing step
# First, clear the screen to white. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill((255, 255, 255))
text_print.reset()
# Get count of joysticks.
joystick_count = pygame.joystick.get_count()
text_print.tprint(screen, f"Number of joysticks: {joystick_count}")
text_print.indent()
# For each joystick:
for joystick in joysticks.values():
jid = joystick.get_instance_id()
text_print.tprint(screen, f"Joystick {jid}")
text_print.indent()
# Get the name from the OS for the controller/joystick.
name = joystick.get_name()
text_print.tprint(screen, f"Joystick name: {name}")
guid = joystick.get_guid()
text_print.tprint(screen, f"GUID: {guid}")
power_level = joystick.get_power_level()
text_print.tprint(screen, f"Joystick's power level: {power_level}")
# Usually axis run in pairs, up/down for one, and left/right for
# the other. Triggers count as axes.
axes = joystick.get_numaxes()
text_print.tprint(screen, f"Number of axes: {axes}")
text_print.indent()
for i in range(axes):
axis = joystick.get_axis(i)
text_print.tprint(screen, f"Axis {i} value: {axis:>6.3f}")
text_print.unindent()
buttons = joystick.get_numbuttons()
text_print.tprint(screen, f"Number of buttons: {buttons}")
text_print.indent()
for i in range(buttons):
button = joystick.get_button(i)
text_print.tprint(screen, f"Button {i:>2} value: {button}")
text_print.unindent()
hats = joystick.get_numhats()
text_print.tprint(screen, f"Number of hats: {hats}")
text_print.indent()
# Hat position. All or nothing for direction, not a float like
# get_axis(). Position is a tuple of int values (x, y).
for i in range(hats):
hat = joystick.get_hat(i)
text_print.tprint(screen, f"Hat {i} value: {str(hat)}")
text_print.unindent()
text_print.unindent()
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Limit to 30 frames per second.
clock.tick(30)
if __name__ == "__main__":
main()
# If you forget this line, the program will 'hang'
# on exit if running from IDLE.
pygame.quit()

BIN
requirements.txt Normal file

Binary file not shown.

View File

@ -1,16 +1,65 @@
#include "linearHallSensor.h"
#include <math.h>
float norm(float x, float in_min, float in_max, float out_min = -1.0, float out_max = 1.0)
{
return (float)(x - in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}
LinearHallSensor::LinearHallSensor(uint8_t ch1, uint8_t ch2, float minPos, float maxPos)
LinearHallSensor::LinearHallSensor(uint8_t ch1, uint8_t ch2)
{
_analogPin1 = ch1;
_analogPin2 = ch2;
_minPositionEndValue = minPos;
_maxPositionEndValue = maxPos;
}
inline uint32_t min(uint32_t arr[], int n)
{
uint32_t m = 0;
for (int i = 0; i < n; i++)
m = arr[i] < m ? arr[i] : m;
return m;
}
inline uint32_t max(uint32_t *arr, int n)
{
uint32_t m = 0;
for (int i = 0; i < n; i++)
m = arr[i] > m ? arr[i] : m;
return m;
}
inline uint32_t mean(uint32_t *arr, int n)
{
uint32_t m = 0;
for (int i = 0; i < n; i++)
m += arr[i];
return m / n;
}
inline uint32_t std_var(uint32_t *arr, int n)
{
uint32_t s = 0;
uint32_t m = mean(arr, n);
for (int i = 0; i < n; i++)
s += (arr[i] - m) * (arr[i] - m);
s /= (uint32_t)n;
s = sqrt(s);
return s;
}
void init_arr(uint32_t *arr, int n, uint32_t val)
{
for (int i = 0; i < n; i++)
arr[i] = val;
}
void print_arr(uint32_t *arr, int n)
{
Serial.printf("[");
for (int i = 0; i < n; i++)
Serial.printf("%lu,", arr[i]);
Serial.printf("]");
}
void LinearHallSensor::init(BLDCMotor motor)
@ -18,81 +67,131 @@ void LinearHallSensor::init(BLDCMotor motor)
MotionControlType prevController = motor.controller;
motor.controller = MotionControlType::angle_openloop;
float prevVoltageLimit = motor.voltage_limit;
motor.voltage_limit = 0.8;
motor.voltage_limit = 2.0;
uint32_t senseA = analogRead(_analogPin1);
uint32_t senseB = analogRead(_analogPin2);
// Swipe motor to search hard end and find max analog values of sensors
bool endFound = false;
const float step = 0.005;
const uint8_t epsilon = 3;
float currentPosition = 0.0;
_minCh1 = senseA;
_maxCh1 = senseA;
_minCh2 = senseB;
_maxCh2 = senseB;
const uint8_t N = 20;
uint32_t senseA[N];
uint32_t senseB[N];
// Swipe motor
for (float i = _minPositionEndValue; i <= _maxPositionEndValue; i = i + 0.005)
int ptr = 0;
init_arr(senseA, N, 0);
init_arr(senseB, N, 0);
senseA[ptr] = analogRead(_analogPin1);
senseB[ptr] = analogRead(_analogPin2);
_minCh1 = senseA[ptr];
_minCh2 = senseB[ptr];
_maxCh1 = _minCh1;
_maxCh2 = _minCh2;
Serial.println("\t- Finding end stops");
while (!endFound)
{
motor.move(i);
delay(1);
senseA = analogRead(_analogPin1);
senseB = analogRead(_analogPin2);
if (senseA > _maxCh1)
_maxCh1 = senseA;
else if (senseA < _minCh1)
_minCh1 = senseA;
if (senseB > _maxCh1)
_maxCh1 = senseB;
else if (senseB < _minCh2)
_minCh2 = senseB;
senseA[ptr] = analogRead(_analogPin1);
senseB[ptr] = analogRead(_analogPin2);
// Check if new extremes sensor values
if (senseA[ptr] > _maxCh1)
_maxCh1 = senseA[ptr];
else if (senseA[ptr] < _minCh1)
_minCh1 = senseA[ptr];
if (senseB[ptr] > _maxCh2)
_maxCh2 = senseB[ptr];
else if (senseB[ptr] < _minCh2)
_minCh2 = senseB[ptr];
if (std_var(senseA, N) < epsilon && std_var(senseB, N) < epsilon)
endFound = true;
ptr = (ptr + 1) % N;
// Move to new position
currentPosition += step;
motor.move(currentPosition);
delay(3);
}
_maxPositionEndValue = currentPosition - (step * (ptr > N ? N : ptr));
currentPosition = _maxPositionEndValue - M_PI / 16;
delay(100);
motor.move(currentPosition);
Serial.println("\t- Found first end stop : Max position = " + String(_maxPositionEndValue));
delay(100);
for (float i = _maxPositionEndValue; i >= _minPositionEndValue; i = i - 0.005)
{
motor.move(i);
delay(1);
senseA = analogRead(_analogPin1);
senseB = analogRead(_analogPin2);
if (senseA > _maxCh1)
_maxCh1 = senseA;
else if (senseA < _minCh1)
_minCh1 = senseA;
if (senseB > _maxCh1)
_maxCh1 = senseB;
else if (senseB < _minCh2)
_minCh2 = senseB;
}
// Min offset with 50 values average
// Swipe motor to search other hard end, and find eventually new max analog values of sensors
endFound = false;
init_arr(senseA, N, 0);
init_arr(senseB, N, 0);
ptr = 0;
while (!endFound)
{
senseA[ptr] = analogRead(_analogPin1);
senseB[ptr] = analogRead(_analogPin2);
// Check if new extremes sensor values
if (senseA[ptr] > _maxCh1)
_maxCh1 = senseA[ptr];
else if (senseA[ptr] < _minCh1)
_minCh1 = senseA[ptr];
if (senseB[ptr] > _maxCh2)
_maxCh2 = senseB[ptr];
else if (senseB[ptr] < _minCh2)
_minCh2 = senseB[ptr];
if (std_var(senseA, N) < epsilon && std_var(senseB, N) < epsilon)
endFound = true;
ptr = (ptr + 1) % N;
// Move to new position
currentPosition -= step;
motor.move(currentPosition);
delay(3);
}
_minPositionEndValue = currentPosition + (step * (ptr > N ? N : ptr));
Serial.println("\t- Found second end stop : Min position = " + String(_minPositionEndValue));
delay(100);
// Set min offset with 50 values average
float sum = 0.0;
_offset = 0.0;
for (uint8_t i = 0; i <= 49; i++)
{
_offset = 0.0;
sum += readSensorCallback();
}
_offset = -sum / 50.0;
_offset = sum / 50.0;
Serial.println("\n\rmaxA: " + String(_maxCh1) + "\tminA: " + String(_minCh1) + "\tmaxB: " + String(_maxCh2) + "\tminB: " + String(_minCh2));
Serial.println("Offset: " + String(_offset));
Serial.println("\t- maxA: " + String(_maxCh1) + "\tminA: " + String(_minCh1) + "\tmaxB: " + String(_maxCh2) + "\tminB: " + String(_minCh2));
Serial.println("\t- Offset: " + String(_offset));
// Detect max angle
for (float i = _minPositionEndValue; i <= _maxPositionEndValue; i = i + 0.01)
// Read max angle
for (float i = _minPositionEndValue; i <= _maxPositionEndValue; i = i + 0.0025)
{
motor.move(i);
delay(1);
_maxSensor = readSensorCallback();
}
Serial.println("current motor angle: " + String(motor.electricalAngle()));
delay(250);
// take average value of 50 values
// Set max take average value of 50 values
sum = 0.0;
for (uint8_t i = 0; i <= 49; i++)
sum += readSensorCallback();
_maxSensor = sum / 50.0;
Serial.println("Max sensor: " + String(_maxSensor));
Serial.println("\t- Max angle: " + String(_maxSensor));
// Recovering previous controller type and go in the middle
for (float i = _maxPositionEndValue; i >= _minPositionEndValue / 2.0; i = i - 0.01)
// Recovering previous controller type and go to 0
for (float i = _maxPositionEndValue; i >= (0); i = i - 0.005)
{
motor.move(i);
delay(1);
@ -126,5 +225,10 @@ float LinearHallSensor::readSensorCallback()
_estimatePosition += dist_angle(_currentPosition, _prevPosition);
_prevPosition = _currentPosition;
return (_estimatePosition + _offset) / 4.0;
return (_estimatePosition / 4.0 - _offset);
}
float LinearHallSensor::getMaxAngle()
{
return _maxSensor;
}

View File

@ -15,10 +15,8 @@ class LinearHallSensor
Linear Hall Sensor class constructor
@param ch1 Analog pin for channel 1
@param ch2 Analog pin for channel 2
@param minPos Minimum position in Openloop
@param maxPos Maximum position in Openloop
*/
LinearHallSensor(uint8_t ch1, uint8_t ch2, float minPos, float maxPos);
LinearHallSensor(uint8_t ch1, uint8_t ch2);
/**
@ -36,6 +34,14 @@ class LinearHallSensor
float readSensorCallbackStateMachine();
float readSensorCallback();
/**
* @brief retrun the max angle of the motor
*
* @return max angle in rad
*/
float getMaxAngle();
private:
uint32_t _analogPin1;
@ -51,7 +57,7 @@ class LinearHallSensor
float _currentPosition;
float _estimatePosition; // current position + offset
float _offset; // offset angle measured at init
float _maxSensor; // Max angle value measured (so command from 0 to that value)
float _maxSensor; // Max range angle value measured (so command from 0 to that value)
float _minPositionEndValue; // min pos in open loop mode
float _maxPositionEndValue;

View File

@ -1,98 +1,176 @@
#include <Arduino.h>
#include <SimpleFOC.h>
#include <linearHallSensor.h>
#include <pinout.h>
BLDCMotor motor = BLDCMotor(4);
BLDCDriver3PWM driver = BLDCDriver3PWM(7, 8, 9);
BLDCMotor motor[3] =
{
BLDCMotor(4),
BLDCMotor(4),
BLDCMotor(4)};
LinearHallSensor linearSensor = LinearHallSensor(A0, A1, -0.75, 2.35);
BLDCDriver3PWM driver[3] =
{
BLDCDriver3PWM(M1_PWM1, M1_PWM2, M1_PWM3),
BLDCDriver3PWM(M2_PWM1, M2_PWM2, M2_PWM3),
BLDCDriver3PWM(M3_PWM1, M3_PWM2, M3_PWM3)};
void initSensor()
LinearHallSensor linearSensor[3] =
{
LinearHallSensor(M1_Hall1, M1_Hall2),
LinearHallSensor(M2_Hall1, M2_Hall2),
LinearHallSensor(M3_Hall1, M3_Hall2)};
void initSensor0()
{
linearSensor.init(motor);
linearSensor[0].init(motor[0]);
}
float callback0()
{
return linearSensor[0].readSensorCallback();
}
float callback()
void initSensor1()
{
return linearSensor.readSensorCallback();
linearSensor[1].init(motor[1]);
}
float callback1()
{
return linearSensor[1].readSensorCallback();
}
GenericSensor sensor = GenericSensor(callback, initSensor);
void initSensor2()
{
linearSensor[2].init(motor[2]);
}
float callback2()
{
return linearSensor[2].readSensorCallback();
}
float targetX = 0.0;
float targetY = 0.0;
GenericSensor sensor[3] =
{
GenericSensor(callback0, initSensor0),
GenericSensor(callback1, initSensor1),
GenericSensor(callback2, initSensor2)};
float target = 0.0;
float target[3] = {0.5, 0.5, 0.5};
String str;
void serialLoop()
{
static String received_chars;
while (Serial.available())
{
char inChar = (char)Serial.read();
received_chars += inChar;
if (inChar == '\n')
static String received_chars;
while (Serial.available())
{
target = received_chars.toFloat();
Serial.print("Target = ");
Serial.print(target);
received_chars = "";
char inChar = (char)Serial.read();
received_chars += inChar;
if (inChar == '\n')
{
target[0] = received_chars.toFloat();
Serial.print("Target = ");
Serial.print(target[0]);
received_chars = "";
}
}
}
}
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (float)(x - in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
return (float)(x - in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}
void initMotor(u_int8_t m)
{
Serial.printf("\n\t\t### MOTOR %d ###\n\n", m + 1);
driver[m].voltage_power_supply = 7.0;
driver[m].pwm_frequency = 50000;
Serial.printf("Driver%d init: %d\n", m + 1, driver[m].init());
motor[m].linkDriver(&driver[m]);
motor[m].useMonitoring(Serial);
motor[m].controller = MotionControlType::angle;
motor[m].foc_modulation = FOCModulationType::SinePWM;
motor[m].voltage_limit = 2.0;
motor[m].voltage_sensor_align = 2.0;
motor[m].PID_velocity.P = 0.05f;
motor[m].PID_velocity.I = 0.008;
motor[m].PID_velocity.D = 0.0;
motor[m].LPF_velocity.Tf = 0.02f;
motor[m].P_angle.P = 150.0;
motor[m].P_angle.I = 5.0;
motor[m].velocity_limit = 20;
// Init sensor
motor[m].init();
Serial.println("calibrating sensor in open loop...");
sensor[m].init();
Serial.printf("Sensor %d done\n", m + 1);
motor[m].linkSensor(&sensor[m]);
motor[m].init();
if (m == 2)
motor[m].initFOC(3.0, CW);
else if (m == 1)
motor[m].initFOC(3.79, CW);
// motor[m].initFOC();
else
motor[m].initFOC(0.18, CW);
Serial.printf("Motor %d Done\n", m + 1);
}
void setup()
{
Serial.begin(115200);
_delay(100);
Serial.println("INIT");
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
Serial.begin(115200);
delay(3000);
Serial.println("INIT");
driver.voltage_power_supply = 6.0;
driver.init();
motor.linkDriver(&driver);
motor.useMonitoring(Serial);
motor.controller = MotionControlType::angle;
motor.foc_modulation = FOCModulationType::SinePWM;
motor.voltage_limit = 1.5;
motor.voltage_sensor_align = 0.8;
motor.PID_velocity.P = 0.075f;
motor.PID_velocity.I = 0.01;
motor.PID_velocity.D = 0.0;
motor.LPF_velocity.Tf = 0.01f;
motor.P_angle.P = 120.0;
motor.P_angle.I = 10.0;
motor.velocity_limit = 50;
pinMode(LED_BUILTIN, OUTPUT); // Lightup LED
digitalWrite(LED_BUILTIN, LOW);
motor.useMonitoring(Serial);
// Init sensor
motor.init();
Serial.println("calibrating sensor in open loop...");
sensor.init();
Serial.println("Done");
delay(1000);
motor.linkSensor(&sensor);
motor.init();
// motor.initFOC(5.48, CCW);
motor.initFOC();
motor[1].useMonitoring(Serial);
initMotor(2);
initMotor(1);
initMotor(0);
}
void loop()
{
serialLoop();
motor.move(target);
motor.loopFOC();
motor.monitor();
int len = Serial.available();
if (len > 0)
{
str = Serial.readStringUntil('\n'); // get new targets from serial (target are from 0 to 1000)
char axis = str[0];
str.remove(0, 1);
str.remove(len,1);
switch (axis)
{
case 'X':
target[1] = str.toFloat();
// Serial.println("Target X: " + String(target[1]));
target[1] = mapfloat(target[1], 0.0, 1000.0, 0.0, linearSensor[1].getMaxAngle()); // remap targets to motor angles
break;
case 'Y':
target[0] = str.toFloat();
// Serial.println("Target Y: " + String(target[0]));
target[0] = mapfloat(target[0], 0.0, 1000.0, 0.0, linearSensor[0].getMaxAngle()); // remap targets to motor angles
break;
case 'Z':
target[2] = str.toFloat();
// Serial.println("Target Z: " + String(target[2]));
target[2] = mapfloat(target[2], 0.0, 1000.0, 0.0, linearSensor[2].getMaxAngle()); // remap targets to motor angles
break;
default:
break;
}
}
for (u_int8_t i = 0; i < 3; i++) // update motor target and Run FOC
{
// serialLoop();
// Serial.println("Target" + String(i) + ": " + String(target[i]));
motor[i].move(target[i]);
motor[i].loopFOC();
// motor[i].monitor();
}
}

29
src/pinout.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef pinout_h
#define pinout_h
#include "Arduino.h"
// PCB board : STM32 DJI Gimbal V1.0
#define M1_PWM1 PA10
#define M1_PWM2 PA9
#define M1_PWM3 PA8
#define M1_Fault PB12
#define M1_Hall1 PB1
#define M1_Hall2 PA5
#define M2_PWM1 PB9
#define M2_PWM2 PB8
#define M2_PWM3 PB7
#define M2_Fault PB10
#define M2_Hall1 PA4
#define M2_Hall2 PA3
#define M3_PWM1 PB0
#define M3_PWM2 PA7
#define M3_PWM3 PA6
#define M3_Fault PA0
#define M3_Hall1 PA2
#define M3_Hall2 PA1
#endif