diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha index cc1ae30..fcf398f 100644 --- a/app/MDK-ARM/app.uvguix.h_zha +++ b/app/MDK-ARM/app.uvguix.h_zha @@ -530,7 +530,7 @@ 0 16 - 03000000960200008D060000D5020000 + 03000000960200008D060000A7030000 16 @@ -1150,7 +1150,7 @@ 0 16 - 0300000066000000F501000034030000 + 0300000066000000F501000062020000 16 @@ -1170,7 +1170,7 @@ 0 16 - 03000000960200008D060000D5020000 + 03000000960200008D060000A7030000 16 @@ -1190,7 +1190,7 @@ 0 16 - 03000000960200008D060000D5020000 + 03000000960200008D060000A7030000 16 @@ -1250,7 +1250,7 @@ 0 16 - 03000000960200008D060000D5020000 + 03000000960200008D060000A7030000 16 @@ -1270,7 +1270,7 @@ 0 16 - 03000000960200008D060000D5020000 + 03000000960200008D060000A7030000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC0100007B0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F801000064030000000000004F000000F80100007B0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000007B020000900600007F0200000100000001000010040000000100000007FDFFFF6D000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000006803000090060000D7030000000000007F02000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF80100004F000000FC0100007B0200000100000002000010040000000100000030FDFFFFB5030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F801000092020000000000004F000000F80100007B0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000007B020000900600007F0200000100000001000010040000000100000007FDFFFF6D000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000009602000090060000D7030000000000007F02000090060000C00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2537 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3651,9 +3651,9 @@ ..\..\src\umain.cpp - 23 + 9 127 - 154 + 155 1 0 @@ -3670,7 +3670,7 @@ ..\..\src\lncubator_temperature_control_service.hpp 0 - 17 + 26 55 1 diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro index 0e0fbea..cffbfd7 160000 --- a/dep/libiflytop_micro +++ b/dep/libiflytop_micro @@ -1 +1 @@ -Subproject commit 0e0fbea74859e71d34d2ccf6169b0da763fb95a4 +Subproject commit cffbfd7402411697415c57cc1dae7ce82d197827 diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp index 6edc82f..51e3cb2 100644 --- a/src/board/hardware.cpp +++ b/src/board/hardware.cpp @@ -335,8 +335,8 @@ void Hardware::tmc_init() { #endif m_tmc.tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig); - m_tmc.tmc4361motor1.setMaximumAcceleration(300000); - m_tmc.tmc4361motor1.setMaximumDeceleration(300000); + m_tmc.tmc4361motor1.setMaximumAcceleration(REG_MOTOR_CTRL_ACCELERATION); + m_tmc.tmc4361motor1.setMaximumDeceleration(REG_MOTOR_CTRL_DECELERATION); HAL_Delay(100); // 使能电机 @@ -348,9 +348,8 @@ void Hardware::tmc_init() { if (ic4361Version != 2) { ZLOGE(TAG, "TMC4361 or TMC2160 is not normal"); } - m_tmc.tmc4361motor1.rotate(300000); - #if TEST_TMC_ENCODER_DIRECTION + m_tmc.tmc4361motor1.rotate(300000); while (true) { HAL_Delay(100); ZLOGI(TAG, "TMC4361A: XACTUAL:%d ENC_POS:%d DIFF:%d", // diff --git a/src/board/project_board.hpp b/src/board/project_board.hpp index 3940bc7..93fceaf 100644 --- a/src/board/project_board.hpp +++ b/src/board/project_board.hpp @@ -59,23 +59,23 @@ typedef enum { 0x1029 温度传感器4-数值 #endif -#define REG_REBOOT_FLAG 0x0000 // 重启标识 -#define REG_EXCEPTION_FLAG 0x0100 // 异常标志位 -#define REG_TEMPERATURE_CTRL_KP 0x1000 // 温度控制PID:P (单位0.01) -#define REG_TEMPERATURE_CTRL_KI 0x1001 // 温度控制PID:I (单位0.01) -#define REG_TEMPERATURE_CTRL_KD 0x1002 // 温度控制PID:D (单位0.01) -#define REG_TEMPERATURE_CTRL_ERROR_LIMIT 0x1003 // 积分数值限制 -#define REG_TEMPERATURE_CTRL_MAX_OUTPUT 0x1004 // PID输出上限 -#define REG_TEMPERATURE_CTRL_MIN_OUTPUT 0x1005 // PID输出下限 -#define REG_TEMPERATURE_CTRL_MAIN_FAN_SPEED_AUTO 0x1006 // 自动控温时主风扇风速 -#define REG_TEMPERATURE_CTRL_SUB_FAN_SPEED_AUTO 0x1007 // 自动控温时次风扇风速 +#define REG_REBOOT_FLAG 0x0000 // 重启标识 +#define REG_EXCEPTION_FLAG 0x0100 // 异常标志位 +#define REG_TEMPERATURE_CTRL_KP 0x1000 // 温度控制PID:P (单位0.01) +#define REG_TEMPERATURE_CTRL_KI 0x1001 // 温度控制PID:I (单位0.01) +#define REG_TEMPERATURE_CTRL_KD 0x1002 // 温度控制PID:D (单位0.01) +#define REG_TEMPERATURE_CTRL_ERROR_LIMIT 0x1003 // 积分数值限制 +#define REG_TEMPERATURE_CTRL_MAX_OUTPUT 0x1004 // PID输出上限 +#define REG_TEMPERATURE_CTRL_MIN_OUTPUT 0x1005 // PID输出下限 +#define REG_TEMPERATURE_CTRL_MAIN_FAN_SPEED_AUTO 0x1006 // 自动控温时主风扇风速 +#define REG_TEMPERATURE_CTRL_SUB_FAN_SPEED_AUTO 0x1007 // 自动控温时次风扇风速 -#define REG_TEMPERATURE_CTRL_TARGET_TEMPERATURE 0x1011 // 控温区域-目标温度 -#define REG_TEMPERATURE_CTRL_MODE 0x1012 // 控温区域-控制模式 -#define REG_TEMPERATURE_CTRL_MANUAL_HEAT_PWM 0x1013 // 手动控制加热片PWM数值 -#define REG_TEMPERATURE_CTRL_MANUAL_MAIN_FAN_PWM 0x1014 // 手动控制主风扇PWM数值 -#define REG_TEMPERATURE_CTRL_MANUAL_SUB_FAN_PWM 0x1015 // 手动控制次风扇PWM数值 -#define REG_TEMPERATURE_CTRL_DUMPVALUE 0x1016 // 是否打印PID调试信息 +#define REG_TEMPERATURE_CTRL_TARGET_TEMPERATURE 0x1011 // 控温区域-目标温度 +#define REG_TEMPERATURE_CTRL_MODE 0x1012 // 控温区域-控制模式 +#define REG_TEMPERATURE_CTRL_MANUAL_HEAT_PWM 0x1013 // 手动控制加热片PWM数值 +#define REG_TEMPERATURE_CTRL_MANUAL_MAIN_FAN_PWM 0x1014 // 手动控制主风扇PWM数值 +#define REG_TEMPERATURE_CTRL_MANUAL_SUB_FAN_PWM 0x1015 // 手动控制次风扇PWM数值 +#define REG_TEMPERATURE_CTRL_DUMPVALUE 0x1016 // 是否打印PID调试信息 #define REG_TEMPERATURE_CTRL_MAIN_FAN_SPEED 0x1021 // 控温区域-散热区大风扇转速 #define REG_TEMPERATURE_CTRL_SUB_FAN_SPEED 0x1022 // 控温区域-散热区小风扇转速 @@ -87,6 +87,24 @@ typedef enum { #define REG_TEMPERATURE_CTRL_SENSOR3_TEMPERATURE 0x1028 // 温度传感器3-数值 #define REG_TEMPERATURE_CTRL_SENSOR4_TEMPERATURE 0x1029 // 温度传感器4-数值 +#define REG_MOTOR_CTRL_TARGET_POSITION1 0x2001 // 设置相对于入口目标位置(转到第几个子仓位,从0开始) +#define REG_MOTOR_CTRL_TARGET_POSITION2 0x2002 // 设置相对于出口目标位置(转到第几个子仓位,从0开始) +#define REG_MOTOR_CTRL_BACK_TO_HOME 0x2003 // BackToHome,写1触发动作 +#define REG_MOTOR_CTRL_ROATE_PULSE 0x2004 // 转多少个脉冲(正数为顺时针转,负数为逆时针转) +#define REG_MOTOR_CTRL_STOP 0x2005 // 停止电机运动 +#define REG_MOTOR_CTRL_CALIBRATE_POSITION 0x2006 // 设置当前位置为0号子仓位对其入口 +#define REG_MOTOR_CTRL_MAX_SPEED 0x2010 // 最高转速 +#define REG_MOTOR_CTRL_ENTRY_POSITION 0x2011 // 入口相对于零点的位置(出口相对于零点位置,出口位置会自己计算出来) +#define REG_MOTOR_CTRL_EXIT_POSITION 0x2012 // 出口相对于零点的位置 +#define REG_MOTOR_CTRL_ACCELERATION 0x2013 // 加速度 +#define REG_MOTOR_CTRL_DECELERATION 0x2014 // 减速度 +#define REG_MOTOR_CTRL_CURRENT_POSITION1 0x2021 // 当前位置(相对于入口处于第几个子仓位) +#define REG_MOTOR_CTRL_CURRENT_POSITION2 0x2022 // 当前位置(相对于出口口处于第几个子仓位) +#define REG_MOTOR_CTRL_CURRENT_POSITION3 0x2023 // 当前位置(相对于零点,单位是脉冲数) +#define REG_MOTOR_CTRL_CURRENT_POSITION4 0x2024 // 当前位置(单位是脉冲) +#define REG_MOTOR_CTRL_CURRENT_ACTION 0x2025 // 当前正在执行的动作 +#define REG_MOTOR_CTRL_CURRENT_STATE 0x2026 // 当前动作是否完成 0:空闲,1:正在执行,2:执行完成 + /******************************************************************************* * 温度控制相关常数 * *******************************************************************************/ @@ -101,3 +119,13 @@ typedef enum { #define TEMPERATURE_CTRL_MIN_OUTPUT (-50) // 限制制冷功率,如果出现制冷的时候,反而制热了,则增大这个值 #define TEMPERATURE_CTRL_DUMPVALUE (false) // 是否打印PID调试信息 + +/******************************************************************************* + * 孵育区转盘相关常数 * + *******************************************************************************/ +#define ONECIRCLE_USTEP_NUM (256 * 200 * 150) // 256:步长,200:电机分辨率,150:减速比 +#define REG_MOTOR_CTRL_MAX_SPEED_DEFAULT (500000) // 500kpps +#define SUB_POSITION_NUM (20) // 子仓位数量 +#define ONE_SUB_POSITION_WIDTH ((ONECIRCLE_USTEP_NUM) / SUB_POSITION_NUM) // +#define REG_MOTOR_CTRL_ACCELERATION_DEFAULT 300000 +#define REG_MOTOR_CTRL_DECELERATION_DEFAULT 300000 \ No newline at end of file diff --git a/src/lncubator_rotating_control_service.cpp b/src/lncubator_rotating_control_service.cpp index 5292204..11d9027 100644 --- a/src/lncubator_rotating_control_service.cpp +++ b/src/lncubator_rotating_control_service.cpp @@ -5,32 +5,45 @@ using namespace iflytop; #define UPDATE_ZERO_POSITION_ALWAYS 1 -const uint32_t LncubatorRotatingControlService::mc_onecircle_ustep_num = (256 * 200 * 150); -const uint32_t LncubatorRotatingControlService::mc_default_velocity = 500000; // 500kpps -const uint32_t LncubatorRotatingControlService::mc_one_sub_position_width = (256 * 200 * 50) / 20; - LncubatorRotatingControlService::LncubatorRotatingControlService() { m_hardware = NULL; m_motor = NULL; m_os = NULL; - m_workfinished = false; + m_workfinished = true; m_dowhat = kidle; - m_maxVelocity = mc_default_velocity; + m_maxVelocity = 0; m_inletPosition = 0; - m_outletPosition = m_inletPosition + mc_one_sub_position_width / 2; + m_outletPosition = computeOutletPosition(m_inletPosition); m_jobStep = 0; m_hasCalibratedHomePosition = false; } + +int32_t LncubatorRotatingControlService::computeOutletPosition(int32_t inletPosition) { + int32_t outletPosition = normalizePosition(inletPosition + ONECIRCLE_USTEP_NUM / 2); + return outletPosition; +} + LncubatorRotatingControlService::~LncubatorRotatingControlService() {} +int32_t LncubatorRotatingControlService::getVelocity() { return m_maxVelocity; } +int32_t LncubatorRotatingControlService::getInletPosition() { return m_inletPosition; } +int32_t LncubatorRotatingControlService::getOutletPosition() { return m_outletPosition; } + +void LncubatorRotatingControlService::setInletPosition(int32_t inletPosition) { + m_inletPosition = inletPosition; + m_outletPosition = computeOutletPosition(m_inletPosition); +} +void LncubatorRotatingControlService::setoutletPosition(int32_t outletPosition) { // + m_outletPosition = outletPosition; +} void LncubatorRotatingControlService::initialize(Hardware* hardware) { // m_hardware = hardware; m_motor = m_hardware->tmc_get_motor1(); m_os = m_hardware; - m_workfinished = false; + m_workfinished = true; m_dowhat = kidle; - m_maxVelocity = mc_default_velocity; + m_maxVelocity = 0; m_inletPosition = 0; - m_outletPosition = m_inletPosition + mc_one_sub_position_width / 2; + m_outletPosition = computeOutletPosition(m_inletPosition); /** * @brief 电机必须工作在位置模式 @@ -44,13 +57,40 @@ void LncubatorRotatingControlService::setVelocity(int32_t velocityMax) { m_maxVe void LncubatorRotatingControlService::registerListener(LncubatorRotatingControlServiceListener* listener) { // m_listener = listener; } + +int32_t LncubatorRotatingControlService::getPositionPulse() { + int32_t position = tmc_getPosition(); + return position; +} + +int32_t LncubatorRotatingControlService::computePositionIndex(int32_t position) { // + position = normalizePosition(position); + int index = position / ONE_SUB_POSITION_WIDTH; + int remainder = position % ONE_SUB_POSITION_WIDTH; + if (remainder > ONE_SUB_POSITION_WIDTH / 2) { + index++; + } + return normalizeIndex(index); +} + +int32_t LncubatorRotatingControlService::getPositionIndex(refpoint_t refpoint) { + int32_t position = tmc_getPosition(); + if (refpoint == REFPOINT_TYPE_INLET) { + return computePositionIndex(position - m_inletPosition); + } else if (refpoint == REFPOINT_TYPE_OUTLET) { + return computePositionIndex(position - m_outletPosition); + } + return 0; +} void LncubatorRotatingControlService::calibrationPosition(refpoint_t refpoint) { /** * @brief 此时是孵育船1对其了入口 */ if (refpoint == REFPOINT_TYPE_INLET) { m_inletPosition = tmc_getPosition(); - m_outletPosition = normalizePosition(m_inletPosition + mc_onecircle_ustep_num / 2); + m_outletPosition = computeOutletPosition(m_inletPosition); + } else if (refpoint == REFPOINT_TYPE_INLET) { + m_outletPosition = tmc_getPosition(); } } /******************************************************************************* @@ -66,18 +106,35 @@ void LncubatorRotatingControlService::tmc_roateToPosition(int32_t position, uint } int32_t LncubatorRotatingControlService::normalizePosition(int32_t position) { while (true) { - if (position > mc_onecircle_ustep_num) - position = position - mc_onecircle_ustep_num; + if (position >= ONECIRCLE_USTEP_NUM) + position = position - ONECIRCLE_USTEP_NUM; else if (position < 0) - position = position + mc_onecircle_ustep_num; + position = position + ONECIRCLE_USTEP_NUM; else break; } return position; } -void LncubatorRotatingControlService::tmc_moveBy(int32_t relativePosition, uint32_t velocity) { m_motor->moveBy(relativePosition, velocity); } -bool LncubatorRotatingControlService::hardware_isHomeRefSwitchTriggered() { return m_hardware->tmc_home_ref_switch_get_state(); } +int32_t LncubatorRotatingControlService::normalizeIndex(int32_t index) { + while (true) { + if (index >= SUB_POSITION_NUM) + index = index - SUB_POSITION_NUM; + else if (index < 0) + index = index + SUB_POSITION_NUM; + else + break; + } + return index; +} +void LncubatorRotatingControlService::tmc_moveBy( // + int32_t relativePosition, uint32_t velocity) { // + m_motor->moveBy(relativePosition, velocity); +} + +bool LncubatorRotatingControlService::hardware_isHomeRefSwitchTriggered() { // + return m_hardware->tmc_home_ref_switch_get_state(); +} /******************************************************************************* * JobBasic * @@ -115,6 +172,7 @@ void LncubatorRotatingControlService::changeState(dowhat_t tostate) { m_workfinished = true; } else { m_workfinished = false; + if (m_listener) m_listener->LncubatorRotatingControlService_startWorking(tostate); } } @@ -138,7 +196,7 @@ void LncubatorRotatingControlService::doRotateToHomeJobStep1() { */ ZLOGI(TAG, "doRotateToHomeJobStep1, rotate to +10 degree,leave from home"); m_jobStep = 1; - tmc_moveBy(mc_onecircle_ustep_num / 36, m_maxVelocity); // 此时处于零点位置,先顺时针转10度 + tmc_moveBy(ONECIRCLE_USTEP_NUM / 10, m_maxVelocity); // 此时处于零点位置,先顺时针转10度 } void LncubatorRotatingControlService::doRotateToHomeJobStep2() { /** @@ -146,7 +204,7 @@ void LncubatorRotatingControlService::doRotateToHomeJobStep2() { */ ZLOGI(TAG, "doRotateToHomeJobStep2, rotate to home"); m_jobStep = 2; - tmc_moveBy(-mc_onecircle_ustep_num, m_maxVelocity); + tmc_moveBy(-ONECIRCLE_USTEP_NUM, m_maxVelocity); } void LncubatorRotatingControlService::doRotateToHomeJob(interevent_t event) { if (event == kPeriodicJobEvent) { @@ -179,10 +237,10 @@ void LncubatorRotatingControlService::moveToSubPosition(refpoint_t refpoint, int changeState(kmoveSubPositionJob); // 出口 if (refpoint == REFPOINT_TYPE_OUTLET) { - int32_t targetPosition = m_outletPosition + positionIndex * mc_one_sub_position_width; + int32_t targetPosition = m_outletPosition + positionIndex * ONE_SUB_POSITION_WIDTH; tmc_roateToPosition(targetPosition, m_maxVelocity); } else if (refpoint == REFPOINT_TYPE_INLET) { - int32_t targetPosition = m_inletPosition + positionIndex * mc_one_sub_position_width; + int32_t targetPosition = m_inletPosition + positionIndex * ONE_SUB_POSITION_WIDTH; tmc_roateToPosition(targetPosition, m_maxVelocity); } else { ZLOGE(TAG, "refpoint error"); @@ -210,8 +268,8 @@ void LncubatorRotatingControlService::moveBy(int32_t pluseCount) { position += pluseCount; if (position <= 0) { position = 0; - } else if (position > mc_onecircle_ustep_num) { - position = mc_onecircle_ustep_num; + } else if (position > ONECIRCLE_USTEP_NUM) { + position = ONECIRCLE_USTEP_NUM; } tmc_roateToPosition(position, m_maxVelocity); } diff --git a/src/lncubator_rotating_control_service.hpp b/src/lncubator_rotating_control_service.hpp index 8adc0b3..a7967b6 100644 --- a/src/lncubator_rotating_control_service.hpp +++ b/src/lncubator_rotating_control_service.hpp @@ -30,6 +30,7 @@ class LncubatorRotatingControlServiceListener { virtual void LncubatorRotatingControlService_onMoveToHomeJobFinished() = 0; virtual void LncubatorRotatingControlService_onMoveSubPositionJobFinished() = 0; virtual void LncubatorRotatingControlService_onMoveByJobFinished() = 0; + virtual void LncubatorRotatingControlService_startWorking(int32_t dowhat) = 0; }; class LncubatorRotatingControlService : public HardwareListener, // @@ -40,20 +41,14 @@ class LncubatorRotatingControlService : public HardwareListener, // REFPOINT_TYPE_INLET, // 入口 REFPOINT_TYPE_ZERO, // 零点 } refpoint_t; - /******************************************************************************* - * 常量配置 * - *******************************************************************************/ - static const uint32_t mc_onecircle_ustep_num; - static const uint32_t mc_default_velocity; - static const uint32_t mc_one_sub_position_width; - - private: typedef enum { kidle, kmoveSubPositionJob, kmoveToHomeJob, kmoveByJob, } dowhat_t; + + private: typedef enum { kPeriodicJobEvent, kHomeSwitchTriggeredEvent, @@ -88,10 +83,17 @@ class LncubatorRotatingControlService : public HardwareListener, // void periodicJob(); void setVelocity(int32_t velocityMax); - void setInletPositionAndOutletPosition(int32_t inletPosition, int32_t outletPosition); - int32_t getVelocity() { return m_maxVelocity; } - int32_t getInletPosition() { return m_inletPosition; } - int32_t getOutletPosition() { return m_outletPosition; } + int32_t getVelocity(); + void setInletPosition(int32_t inletPosition); + int32_t getInletPosition(); + void setoutletPosition(int32_t outletPosition); + + int32_t getOutletPosition(); + int32_t getPositionPulse(); + int32_t getPositionIndex(refpoint_t refpoint); + + bool isWorkFinished() { return m_workfinished; } + dowhat_t getDoWhat() { return m_dowhat; } void moveToHome(); void moveBy(int32_t pluseCount); @@ -104,7 +106,6 @@ class LncubatorRotatingControlService : public HardwareListener, // * @param positionIndex 第几个位置 */ void calibrationPosition(refpoint_t refpoint); - /******************************************************************************* * OVERRIDE HardwareListener * *******************************************************************************/ @@ -119,7 +120,6 @@ class LncubatorRotatingControlService : public HardwareListener, // void doRotateToHomeJob(interevent_t event); void doRotateToHomeJobStep1(); void doRotateToHomeJobStep2(); - void doMoveToSubPositionJob(interevent_t event); void doMoveByJob(interevent_t event); void changeState(dowhat_t state); @@ -129,6 +129,9 @@ class LncubatorRotatingControlService : public HardwareListener, // void tmc_roateToPosition(int32_t position, uint32_t velocity); void tmc_moveBy(int32_t relativePosition, uint32_t velocity); int32_t normalizePosition(int32_t position); + int32_t normalizeIndex(int32_t index); + int32_t computePositionIndex(int32_t position); + int32_t computeOutletPosition(int32_t inletPosition); bool hardware_isHomeRefSwitchTriggered(); }; diff --git a/src/umain.cpp b/src/umain.cpp index 912c78a..51b4def 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -6,6 +6,8 @@ #include "libtrinamic/src/ic/tmc2160.hpp" #include "libtrinamic\src\ic\tmc4361A.hpp" // +#include + #include "board/hardware.hpp" #include "i2c.h" #include "libiflytop_micro\stm32\basic\zsignal.hpp" @@ -15,14 +17,14 @@ #include "lncubator_temperature_control_service.hpp" #define TAG "main" -#define ACTIVE_REG(reg, mask, initval) IflytopCanProtocolStackProcesser::activeReg(&IflytopCanStackConfig, reg, mask, initval) -#define UPDATE_REG(reg, value, periodms) \ - { \ - static uint32_t lastReportTicket = 0; \ - if (m_hardware.hasPassedMS(lastReportTicket) > periodms) { \ - lastReportTicket = m_hardware.getTicket(); \ - m_protocolStack.writeRegValue(reg, value, false); \ - } \ +#define ACTIVE_REG(reg, mask, initval) IflytopCanProtocolStackProcesser::activeReg(&IflytopCanStackConfig, reg, mask, (initval)) +#define UPDATE_REG(reg, value, periodms) \ + { \ + static uint32_t lastReportTicket = 0; \ + if (m_hardware.hasPassedMS(lastReportTicket) > (periodms + random(3))) { \ + lastReportTicket = m_hardware.getTicket(); \ + m_protocolStack.writeRegValue(reg, value, false); \ + } \ } using namespace iflytop; @@ -51,6 +53,7 @@ class Main : public HardwareListener, // virtual void LncubatorRotatingControlService_onMoveToHomeJobFinished(); virtual void LncubatorRotatingControlService_onMoveSubPositionJobFinished(); virtual void LncubatorRotatingControlService_onMoveByJobFinished(); + virtual void LncubatorRotatingControlService_startWorking(int32_t dowhat); /******************************************************************************* * override HardwareListener * @@ -67,9 +70,14 @@ class Main : public HardwareListener, // virtual icps::error_t IflytopCanProtocolStack_onHostRegisterReadEvent( // icps::Reg_t *reg, int32_t &value); - virtual void IflytopCanProtocolStack_onRegisterValueAutoReportEvent(icps::Reg_t *reg, int32_t &value); + virtual void IflytopCanProtocolStack_onRegisterValueAutoReportEvent(icps::Reg_t *reg, int32_t &value); }; +int random(int max) { + // TODO:使用STM32的随机数功能生成随机数 + return 0 % max; +} + /******************************************************************************* * CODE IMPL * *******************************************************************************/ @@ -139,6 +147,53 @@ icps::error_t Main::IflytopCanProtocolStack_onHostRegisterWriteEvent( // } else if (reg->add == REG_TEMPERATURE_CTRL_DUMPVALUE) { m_tempCtrl.setDumpValue((bool)newvalue); } + // 赋予转盘控制 + else if (reg->add == REG_MOTOR_CTRL_TARGET_POSITION1) { + if (m_rotatingCtrl.isWorkFinished()) { + m_rotatingCtrl.moveToSubPosition(m_rotatingCtrl.REFPOINT_TYPE_INLET, newvalue); + } else { + return icps::kDeviceBusy; + } + newvalue = 0; + } else if (reg->add == REG_MOTOR_CTRL_TARGET_POSITION2) { + if (m_rotatingCtrl.isWorkFinished()) { + m_rotatingCtrl.moveToSubPosition(m_rotatingCtrl.REFPOINT_TYPE_INLET, newvalue); + } else { + return icps::kDeviceBusy; + } + newvalue = 0; + } else if (reg->add == REG_MOTOR_CTRL_BACK_TO_HOME) { + if (m_rotatingCtrl.isWorkFinished()) { + m_rotatingCtrl.moveToHome(); + } else { + return icps::kDeviceBusy; + } + } else if (reg->add == REG_MOTOR_CTRL_ROATE_PULSE) { + if (m_rotatingCtrl.getDoWhat() == m_rotatingCtrl.kmoveByJob || // + m_rotatingCtrl.getDoWhat() == m_rotatingCtrl.kidle) { + m_rotatingCtrl.moveBy(newvalue); + } else { + return icps::kDeviceBusy; + } + } else if (reg->add == REG_MOTOR_CTRL_STOP) { + m_rotatingCtrl.stop(); + } else if (reg->add == REG_MOTOR_CTRL_CALIBRATE_POSITION) { + if (newvalue == 0) { + m_rotatingCtrl.calibrationPosition(m_rotatingCtrl.REFPOINT_TYPE_INLET); + } else if (newvalue == 1) { + m_rotatingCtrl.calibrationPosition(m_rotatingCtrl.REFPOINT_TYPE_OUTLET); + } + } else if (reg->add == REG_MOTOR_CTRL_MAX_SPEED) { + m_rotatingCtrl.setVelocity(newvalue); + } else if (reg->add == REG_MOTOR_CTRL_ENTRY_POSITION) { + m_rotatingCtrl.setInletPosition(newvalue); + } else if (reg->add == REG_MOTOR_CTRL_EXIT_POSITION) { + m_rotatingCtrl.setoutletPosition(newvalue); + } else if (reg->add == REG_MOTOR_CTRL_ACCELERATION) { + m_hardware.tmc_get_motor1()->setMaximumAcceleration(newvalue); + } else if (reg->add == REG_MOTOR_CTRL_DECELERATION) { + m_hardware.tmc_get_motor1()->setMaximumDeceleration(newvalue); + } return icps::kSuccess; } @@ -183,14 +238,47 @@ void Main::initializeIflytopCanProtocolStackProcesser() { ACTIVE_REG(REG_TEMPERATURE_CTRL_SENSOR2_TEMPERATURE /* */, icps::kr, 0); ACTIVE_REG(REG_TEMPERATURE_CTRL_SENSOR3_TEMPERATURE /* */, icps::kr, 0); ACTIVE_REG(REG_TEMPERATURE_CTRL_SENSOR4_TEMPERATURE /* */, icps::kr, 0); + + /******************************************************************************* + * 孵育区转盘控制 * + *******************************************************************************/ + ACTIVE_REG(REG_MOTOR_CTRL_TARGET_POSITION1 /* */, icps::kw, 0); + ACTIVE_REG(REG_MOTOR_CTRL_TARGET_POSITION2 /* */, icps::kw, 0); + ACTIVE_REG(REG_MOTOR_CTRL_BACK_TO_HOME /* */, icps::kw, 0); + ACTIVE_REG(REG_MOTOR_CTRL_ROATE_PULSE /* */, icps::kw, 0); + ACTIVE_REG(REG_MOTOR_CTRL_CALIBRATE_POSITION /* */, icps::kw, 0); + + ACTIVE_REG(REG_MOTOR_CTRL_MAX_SPEED /* */, icps::kwr, REG_MOTOR_CTRL_MAX_SPEED_DEFAULT); + ACTIVE_REG(REG_MOTOR_CTRL_ENTRY_POSITION /* */, icps::kwr, 0); + ACTIVE_REG(REG_MOTOR_CTRL_EXIT_POSITION /* */, icps::kwr, ONECIRCLE_USTEP_NUM / 2); + ACTIVE_REG(REG_MOTOR_CTRL_ACCELERATION /* */, icps::kwr, REG_MOTOR_CTRL_ACCELERATION_DEFAULT); + ACTIVE_REG(REG_MOTOR_CTRL_DECELERATION /* */, icps::kwr, REG_MOTOR_CTRL_DECELERATION_DEFAULT); + + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_POSITION1 /* */, icps::kr, 0); + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_POSITION2 /* */, icps::kr, SUB_POSITION_NUM / 2); + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_POSITION3 /* */, icps::kr, 0); + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_POSITION4 /* */, icps::kr, 0); + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_ACTION /* */, icps::kr, 0); + ACTIVE_REG(REG_MOTOR_CTRL_CURRENT_STATE /* */, icps::kr, 0); } void Main::LncubatorRotatingControlService_onException(exception_id_t exception) {} -void Main::LncubatorRotatingControlService_onMoveToHomeJobFinished() {} -void Main::LncubatorRotatingControlService_onMoveSubPositionJobFinished() {} -void Main::LncubatorRotatingControlService_onMoveByJobFinished() {} +void Main::LncubatorRotatingControlService_onMoveToHomeJobFinished() { // + m_protocolStack.writeRegValue(REG_MOTOR_CTRL_CURRENT_STATE, 1, false); +} +void Main::LncubatorRotatingControlService_onMoveSubPositionJobFinished() { // + m_protocolStack.writeRegValue(REG_MOTOR_CTRL_CURRENT_STATE, 1, false); +} +void Main::LncubatorRotatingControlService_onMoveByJobFinished() { // + m_protocolStack.writeRegValue(REG_MOTOR_CTRL_CURRENT_STATE, 1, false); +} +void Main::LncubatorRotatingControlService_startWorking(int32_t dowhat) { // + m_protocolStack.writeRegValue(REG_MOTOR_CTRL_CURRENT_STATE, 0, false); + m_protocolStack.writeRegValue(REG_MOTOR_CTRL_CURRENT_ACTION, dowhat, false); +} void Main::updateRegList() { // + UPDATE_REG(REG_TEMPERATURE_CTRL_MAIN_FAN_SPEED, m_hardware.fanReadState4(), 1000); UPDATE_REG(REG_TEMPERATURE_CTRL_SUB_FAN_SPEED, m_hardware.fanReadState0to3(), 1000); UPDATE_REG(REG_TEMPERATURE_CTRL_HEAT_TEMPERATURE, 0, 1000); @@ -200,6 +288,13 @@ void Main::updateRegList() { // UPDATE_REG(REG_TEMPERATURE_CTRL_SENSOR2_TEMPERATURE, m_hardware.temperature_get_temp(1) * 100, 1000); UPDATE_REG(REG_TEMPERATURE_CTRL_SENSOR3_TEMPERATURE, m_hardware.temperature_get_temp(2) * 100, 1000); UPDATE_REG(REG_TEMPERATURE_CTRL_SENSOR4_TEMPERATURE, m_hardware.temperature_get_temp(3) * 100, 1000); + + UPDATE_REG(REG_MOTOR_CTRL_CURRENT_POSITION1, m_rotatingCtrl.getPositionIndex(m_rotatingCtrl.REFPOINT_TYPE_INLET), 100); + UPDATE_REG(REG_MOTOR_CTRL_CURRENT_POSITION2, m_rotatingCtrl.getPositionIndex(m_rotatingCtrl.REFPOINT_TYPE_OUTLET), 100); + // UPDATE_REG(REG_MOTOR_CTRL_CURRENT_POSITION3, m_rotatingCtrl.getPositionIndex(m_rotatingCtrl.REFPOINT_TYPE_HOME), 100); + UPDATE_REG(REG_MOTOR_CTRL_CURRENT_POSITION4, m_rotatingCtrl.getPositionPulse(), 100); + UPDATE_REG(REG_MOTOR_CTRL_CURRENT_ACTION, m_rotatingCtrl.getDoWhat(), 33); + UPDATE_REG(REG_MOTOR_CTRL_CURRENT_STATE, m_rotatingCtrl.isWorkFinished(), 33); } void Main::main(int argc, char const *argv[]) { @@ -223,6 +318,8 @@ void Main::main(int argc, char const *argv[]) { // 初始化转盘控制器 m_rotatingCtrl.initialize(&m_hardware); m_rotatingCtrl.registerListener(this); + m_rotatingCtrl.setVelocity(m_protocolStack.readRegValue(REG_MOTOR_CTRL_MAX_SPEED)); + m_rotatingCtrl.setInletPosition(m_protocolStack.readRegValue(REG_MOTOR_CTRL_ENTRY_POSITION)); while (true) { m_hardware.periodicJob();