123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605 |
- <!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=yes"><head><title>MOTINOVA E-Bike电气系统测试通信协议</title></head><link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/KaTeX/0.11.0/katex.min.css"><style type="text/css">body{
- font-family:"Helvetica Neue","Helvetica","Microsoft Yahei","微软雅黑","Lantinghei SC","STXihei","WenQuanYi Micro Hei",Arial,sans-serif;
- text-align:justify;margin:auto;font-size:14px;line-height:1.6em;
- color:#333;background:#fefefe;padding:15px;margin:30px auto;position: relative;
- -webkit-font-smoothing: antialiased;font-smoothing: antialiased;
- }
- @media screen and (min-width:1200px) {
- body {width:1000px;}
- }
-
- body{background: #f6f6f6;}
- body .content{
- padding: 20px 30px;background: #fff;
- border-radius:2px;box-shadow: 0 0 5px rgba(0,0,0,0.05);
- }
- body.code-theme-black{background: #222;}
- body.code-theme-black .content{background:#333;color:#bbb;}
- @media screen and (max-width:1200px){
- body{background:transparent;margin:0px auto;}
- body .content{padding:0 10px;border-radius: 0;box-shadow: none;}
- body.code-theme-black{background:#333;}
- body .markdown-menu{position: relative;margin: 20px 0 20px 0;top: 0;width: 100%;}
- }
- @media screen and (max-width:600px){
- .print-btn{display: none;}
- }
- @media print{
- body{background:transparent;padding:0 1cm;margin:0 auto 10px auto;font-size:13px;}
- body .content{padding:0;border-radius: 0;box-shadow: none;}
- .print-btn{display: none;}
- body.code-theme-black .content{color:#aaa;}
- }
-
- article,footer,header,nav{margin:0 auto}
- article{margin-top:4em;margin-bottom:4em;min-height:400px}
- footer{margin-bottom:50px}
- video{margin:2em 0;border:1px solid #ddd}
- nav{font-size:.9em;font-style:italic;border-bottom:1px solid #ddd;padding:1em 0}
- nav p{margin:0}
- details{margin: 15px 0;}
- summary{cursor:pointer;display: list-item;border-radius: 3px;}
- summary:hover{background-color:rgba(0,0,0,0.05);}
- summary:focus{outline: none;box-shadow: 0 0 3px #2196F3;}
- .h1,h1{font-size:2.2em;}
- .h2,h2{font-size:1.9em;}
- .h3,h3{font-size:1.6em;}
- .h4,h4{font-size:1.3em;}
- .h5,h5{font-size:1.2em;}
- .h6,h6{font-size:1.1em;}
- .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{
- font-family:inherit;font-weight:500;color: #333;
- line-height: 1.2em;padding: 0.3em 0;margin: 0.8em 0 0.2em 0;
- word-break: break-all;
- }
- .h1,h1{letter-spacing: 1px;border-bottom: 1px solid #ddd;}
- .h2,h2{padding-bottom: 0.15em;}
- .h1 + hr,h1 + hr{display:none;}
- p{-webkit-hypens:auto;-moz-hypens:auto;hyphens:auto;margin:0.2em 0;}
- p,li,div,ul{word-break: break-all;}
- blockquote{
- margin-left:1em;padding:10px 15px;
- margin:10px 0 20px 0;background: #f6f6f6;
- border-left:7px solid rgba(102,128,153,.1);
- background: rgba(102,128,153,.04);
- }
- blockquote p{margin:0;font-weight:400;line-height: 1.6em;}
- code{
- padding: 2px 4px;color: #c7254e;white-space: inherit;
- background-color:#f9f2f4;border-radius: 4px;
- }
- pre{display:block;padding:0;overflow:auto;margin:0 0 10px;font-size:1em;line-height:1.5;
- word-break: break-all;color:#333;background:none;border-radius:4px}
- code,kbd,pre,samp{
- font-family:Consolas,'Liberation Mono','Ubuntu Mono',Menlo,Courier,sans-serif;
- }
- pre code{font-size: calc(1em + 1px);background:#f8f8f8;color:#777;white-space:pre-wrap;padding:6px 1em;border:1px solid #eee;display: block;}
- a{color:#1980e6;text-decoration:none}
- a:hover{text-decoration:underline}
- a img{border:none}
- img{max-width: 100%;}
- h1 a,h1 a:hover{text-decoration:none}
- hr{border: 0 none;height: 4px;margin:0.4em 0;
- background: rgba(0, 0, 0, 0) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;
- }
- ul,ol{padding:0.2em 0 0.2em 2em;}
- table {border-collapse: collapse;border-spacing: 0;margin-bottom: 20px;}
- table thead{background: #eee;}
- table td,table th{padding: .5em;border: 1px solid #ddd;line-height: 1.5;}
- .markdown-flow{background:#fff;padding:15px 0;max-width:100%;overflow:auto;}
- .markdown-flow .label{color:#444;}
-
- .katex-display {text-align: center;font-size:1.3em;color: #000;margin-bottom: 1.5em;}
- .latex-inline .katex-display{display:inline-block;font-size: 0.8em;}
- .katex-display > .katex {white-space: pre-wrap;word-break: break-all;}
-
- div .hljs{color: #666;}
- .hljs-comment,.hljs-quote{color:#998;font-style:italic}
- .hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}
- .hljs-literal,.hljs-number,.hljs-tag .hljs-attr,
- .hljs-template-variable,.hljs-variable{color:teal}
- .hljs-doctag,.hljs-string{color:#d14}
- .hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}
- .hljs-subst{font-weight:400}
- .hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}
- .hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}
- .hljs-meta,.hljs-strong{font-weight:700}
- .hljs-link,.hljs-regexp{color:#009926}
- .hljs-bullet,.hljs-symbol{color:#990073}
- .hljs-built_in,.hljs-builtin-name{color:#0086b3}
- .hljs-meta{color:#999}
- .hljs-deletion{background:#fdd}
- .hljs-addition{background:#dfd}
- .hljs-emphasis{font-style:italic}
-
- .hljs{padding:0 !important;}
- .hljs ul {
- list-style: decimal;padding: 0px;
- position: relative;
- margin: 0px 0px 0 45px !important;
- padding: 5px 0;cursor: text;
- background: #fff;
- }
- .hljs ul:before {
- content: " ";cursor: default;
- position: absolute;top: -1px;left: -46px;bottom: -1px;width: 45px;
- background: #fafafa8f;
- border-radius: 4px 0 0 4px;
- border-right: 1px solid rgba(0, 0, 0, 0.03);
- }
- .hljs ul li{padding:0 10px;}
- .hljs ul li span{line-height: 18px;padding:0.4em 0 0 0;}
- .hljs ul li:nth-of-type(even){background: rgba(0,0,0,0.02);}
- .hljs ul li:hover{background: rgba(0,0,0,0.05);}
-
- ul.contains-task-list {padding: 0.2em 0 0.2em 0.5em;list-style: none;}
- ul.contains-task-list input{
- margin-right: 0.2em;
- height: 1em;
- font-size: 14px;
- vertical-align: text-bottom;
- position: relative;top: -1px;
- }
- ul.contains-task-list label{margin:0;}
- .footnotes{
- background: #fafafa;
- padding: 0 15px 0 0;
- border-radius: 4px;
- color: #888;
- }
- /* black theme */
- body.code-theme-black .h1,body.code-theme-black h1{border-bottom: 1px solid rgba(200,200,200,.2);}
- body.code-theme-black code,body.code-theme-black pre,body.code-theme-black pre code{color:#777;border-color:#444;border-color:rgba(0,0,0,.1);background:#444;background:rgba(0,0,0,.1)}
- body.code-theme-black code{color:#C5AC18;background:#555;background:rgba(255,255,255,0.15);}
- body.code-theme-black a{color:orange}
- body.code-theme-black .h1,body.code-theme-black h1,
- body.code-theme-black .h2,body.code-theme-black h2,
- body.code-theme-black .h3,body.code-theme-black h3,
- body.code-theme-black .h4,body.code-theme-black h4,
- body.code-theme-black .h5,body.code-theme-black h5,
- body.code-theme-black .h6,body.code-theme-black h6{
- color: #fff;
- }
- body.code-theme-black hr{border-bottom:solid 1px #444;border-color:rgba(200,200,200,.1);background-image:none;}
- body.code-theme-black table thead{background: #3e3e3e;}
- body.code-theme-black table td,body.code-theme-black table th{border-color:#444;border-color:rgba(200,200,200,.1)}
- body.code-theme-black .katex-display {color: #fff;}
-
-
- body.code-theme-black div .hljs{display:block;background:#23241f}
- body.code-theme-black .hljs,body.code-theme-black .hljs-subst,body.code-theme-black .hljs-tag{color:#f8f8f2}
- body.code-theme-black .hljs-emphasis,body.code-theme-black .hljs-strong{color:#a8a8a2}
- body.code-theme-black .hljs-bullet,body.code-theme-black .hljs-link,body.code-theme-black .hljs-literal,body.code-theme-black .hljs-number,body.code-theme-black .hljs-quote,body.code-theme-black .hljs-regexp{color:#ae81ff}
- body.code-theme-black .hljs-code,body.code-theme-black .hljs-section,body.code-theme-black .hljs-selector-class,body.code-theme-black .hljs-title{color:#a6e22e}
- body.code-theme-black .hljs-strong{font-weight:700}
- body.code-theme-black .hljs-emphasis{font-style:italic}
- body.code-theme-black .hljs-attr,body.code-theme-black .hljs-keyword,body.code-theme-black .hljs-name,body.code-theme-black .hljs-selector-tag{color:#f92672}
- body.code-theme-black .hljs-attribute,body.code-theme-black .hljs-symbol{color:#66d9ef}
- body.code-theme-black .hljs-class .hljs-title,body.code-theme-black .hljs-params{color:#f8f8f2}
- body.code-theme-black .hljs-addition,body.code-theme-black .hljs-built_in,body.code-theme-black .hljs-builtin-name,body.code-theme-black .hljs-selector-attr,body.code-theme-black .hljs-selector-id,body.code-theme-black .hljs-selector-pseudo,body.code-theme-black .hljs-string,body.code-theme-black .hljs-template-variable,body.code-theme-black .hljs-type,body.code-theme-black .hljs-variable{color:#e6db74}
- body.code-theme-black .hljs-comment,body.code-theme-black .hljs-deletion,body.code-theme-black .hljs-meta{color:#75715e}
-
- body.code-theme-black .hljs ul {background:inherit;}
- body.code-theme-black .hljs ul:before {background:rgba(80, 80, 80, 0.7);}
- body.code-theme-black .hljs ul li:nth-of-type(even){background: rgba(255,255,255,0.02);}
- body.code-theme-black .hljs ul li:hover{background: rgba(255,255,255,0.05);}
-
- body.code-theme-black table tr:nth-child(even) {background: #393939;}
- body.code-theme-black .footnotes{background: #444;}
- body.code-theme-black .markdown-tips-info{background-color: rgba(255,255,255,0.15);}
-
- body.code-theme-black .markdown-menu{background: #383e44;}
- body.code-theme-black .markdown-menu a{color:#fff;}
- body.code-theme-black .markdown-menu a:hover {background: rgba(221, 238, 255, 0.1);}
- .print-btn{
- position:fixed;padding:4px 20px;color:#444;font-size:1em;
- background:#eee;background:rgba(200,200,200,0.2);top:0;right:15px;
- border-radius: 0 0 3px 4px;opacity: 0.5;
- }
- .print-btn:hover{text-decoration: none;background: #14a2ff;color: #fff;opacity: 1;}
- .hidden{display:none !important;}
- /*markdown 锚点*/
- .target-menu{
- position: absolute;margin-left: -1.5em;
- display: inline-block;text-align: center;width: 2em;
- }
- h1:hover .target-menu,h2:hover .target-menu,h3:hover .target-menu,
- h4:hover .target-menu,h5:hover .target-menu,h6:hover .target-menu{display:block !important;visibility: visible !important;}
- body{
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- font-family: Verdana,"Lantinghei SC","Hiragino Sans GB","Microsoft Yahei",Helvetica,arial,sans-serif;
- }
- .markdown-menu{
- position: fixed;z-index: 9999;
- margin-left: 980px;top: 45px;
- width: 200px;max-height: 80%;
- border-radius: 4px;
- overflow: auto;padding:0;
- box-shadow:0px 0px 1px 0 rgba(0, 0, 0, 0.15), 0px 5px 10px rgba(0, 0, 0, .05);
- background: linear-gradient(110deg, #fff, #fafdff);
- }
- .markdown-menu ul{padding:0;margin:0;}
- .markdown-menu ul li:last-child {margin-bottom: 20px;}
- .markdown-menu a{
- color: #666;font-size:13px;text-decoration: none;display: block;
- padding:5px 10px 5px 10px;line-height: 1.2em;
- white-space: nowrap;overflow: hidden;text-overflow: ellipsis;
- transition: all 0.2s;
- }
-
- .markdown-menu a:hover{background:#def;color:#1890ff;}
- .markdown-menu .markdown-menu-h1{
- background: #1890ff;
- background: linear-gradient(-150deg, #1890ff, #2070e5);
- border-radius: 4px 4px 0 0;
- padding: 10px 0;margin-bottom: 10px;
- }
- .markdown-menu .markdown-menu-h1 a{
- white-space: initial;word-break: break-all;
- padding: 10px 10px;font-size:14px;line-height:1.5em;color: #fff;
- }
- .markdown-menu .markdown-menu-h1 a:hover{background:none;}
- .markdown-menu .markdown-menu-h2 a{padding:5px 10px 5px 1em;font-weight:600;}
- .markdown-menu .markdown-menu-h3 a{padding-left:2em;}
- .markdown-menu .markdown-menu-h4 a{padding-left:3em;}
- .markdown-menu .markdown-menu-h5 a{padding-left:4em;}
- .markdown-menu .markdown-menu-h6 a{padding-left:5em;}
- iframe{border: 1px solid rgba(0,0,0,0.05);}
- iframe.embed-show{
- width: 100%;height: 800px;
- box-sizing: border-box;
- border-radius:4px;margin-top: 10px;
- }
- .text-align-center{text-align:center}
- .markdown-alert{
- position: relative;display: inline-flex;
- box-sizing: border-box;
- width: 100%;line-height: 1.5;
- padding:8px 15px 8px 40px;margin: 6px 0;
- color: rgba(0,0,0,0.6);
- border-radius: 4px;
- border:1px solid #eee;
- background-color: #f6f6f6;
- border:none;
- }
- .markdown-alert p{padding: 0;margin: 0;}
- .markdown-alert-icon{
- font-size: 18px;height: 100%;
- position: absolute;left: 12px;
- top: 0;margin-top: 7px;
- }
- .markdown-alert-info{border-color:#91d5ff;background-color: #e6f7ff;}
- .markdown-alert-warning{border-color:#ffe58f;background-color: #fffbe6;}
- .markdown-alert-success{border-color:#b7eb8f;background-color: #f6ffed;}
- .markdown-alert-error{border-color:#f5222d;background-color: #fff1f0;}
- .markdown-alert-icon-success {color: #52c41a;}
- .markdown-alert-icon-info {color: #1890ff;}
- .markdown-alert-icon-warning {color: #faad14;}
- .markdown-alert-icon-error {color: #f5222d;}
-
- .markdown-tips{
- border-radius:2px;padding: 1em;position: relative;
- box-shadow: 0 0 2px rgba(0,0,0,0.1);
- }
- .markdown-tips-default{background: rgba(210, 210, 210, 0.1);}
- .markdown-tips-help{background: rgba(66, 185, 131, 0.1);}
- .markdown-tips-info{
- background-color: #f8f8f8;border-left: 4px solid #f66;
- padding: 12px 24px 12px 30px;
- border-radius: 0 2px 2px 0;
- }
- .markdown-tips-info:before{
- background-color: #f66;
- border-radius: 100%;
- color: #fff;content: "!";
- font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
- font-size: 14px;font-weight: 600;text-align: center;
- line-height: 20px;width: 20px;height: 20px;
- position: absolute;left: -12px;top: 14px;
- }</style><body ><div class="content"><div data-chunk="id-f130d9"><h1 data-link="#MOTINOVA-E-Bike电气系统测试通信协议"><a class="target-menu hidden" href="#MOTINOVA-E-Bike电气系统测试通信协议">#</a><a name="MOTINOVA-E-Bike电气系统测试通信协议"></a><p align="center">MOTINOVA E-Bike电气系统测试通信协议</p><p></p></h1>
- </div><div data-chunk="id-2407f5"><p align="right">20221128</p>
- </div><div data-chunk="id-344bc4"><p></p><div class="markdown-menu"><ul><li class="markdown-menu-h1"><a href="#MOTINOVA-E-Bike电气系统测试通信协议">MOTINOVA E-Bike电气系统测试通信协议</a></li><li class="markdown-menu-h2"><a href="#目的">目的</a></li><li class="markdown-menu-h2"><a href="#通信接口">通信接口</a></li><li class="markdown-menu-h2"><a href="#协议格式">协议格式</a></li><li class="markdown-menu-h3"><a href="#CAN接口协议格式">CAN接口协议格式</a></li><li class="markdown-menu-h3"><a href="#UART接口协议格式">UART接口协议格式</a></li><li class="markdown-menu-h2"><a href="#CRC32计算" style="position: relative;">CRC32计算</a></li><li class="markdown-menu-h2"><a href="#通信内容">通信内容</a></li><li class="markdown-menu-h3"><a href="#上位机设置电机助力档位">上位机设置电机助力档位</a></li><li class="markdown-menu-h3"><a href="#电机运行信息">电机运行信息</a></li><li class="markdown-menu-h3"><a href="#电机故障码定义">电机故障码定义</a></li><li class="markdown-menu-h3"><a href="#上位机控制电机开机">上位机控制电机开机</a></li></ul></div><p></p>
- </div><div data-chunk="id-143ac7"><h2 data-link="#目的"><a class="target-menu hidden" href="#目的">#</a><a name="目的"></a>目的</h2>
- </div><div data-chunk="id-e55afe"><p> 实现测试设备上位机和被测试电机之间数据双向通信,通过上位机可调节被测试电机的助力档位,并实时显示被测试电机的主要运行信息和故障状态。</p>
- </div><div data-chunk="id-adfae2"><h2 data-link="#通信接口"><a class="target-menu hidden" href="#通信接口">#</a><a name="通信接口"></a>通信接口</h2>
- </div><div data-chunk="id-134847"><ul>
- <li>CAN2.0,125 Kbps / 250 Kbps</li>
- <li>UART,115200 bps(需配合<font color="blue">MLD1/MLD3</font>使用)</li>
- </ul>
- </div><div data-chunk="id-04e60d"><h2 data-link="#协议格式"><a class="target-menu hidden" href="#协议格式">#</a><a name="协议格式"></a>协议格式</h2>
- </div><div data-chunk="id-4eec71"><h3 data-link="#CAN接口协议格式"><a class="target-menu hidden" href="#CAN接口协议格式">#</a><a name="CAN接口协议格式"></a>CAN接口协议格式</h3>
- </div><div data-chunk="id-c50912"><p>按照《MOTINOVA_E-Bike电气系统通信协议》中指定的协议格式内容,如下:</p>
- </div><div data-chunk="id-70b4da"><table>
- <thead>
- <tr>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">Mode</td>
- <td style="text-align:center">Len</td>
- <td style="text-align:center">Command</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-0a4e08"><h3 data-link="#UART接口协议格式"><a class="target-menu hidden" href="#UART接口协议格式">#</a><a name="UART接口协议格式"></a>UART接口协议格式</h3>
- </div><div data-chunk="id-01077c"><p>按照《MOTINOVA_E-Bike电气系统通信协议》中指定的数据包封装格式定义,如下:</p>
- </div><div data-chunk="id-a51a6d"><table>
- <thead>
- <tr>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">CAN ID</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">ID</td>
- <td style="text-align:center">Mode</td>
- <td style="text-align:center">Len</td>
- <td style="text-align:center">Command</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-5fbbb8"><p>其中,</p>
- <ol>
- <li>ID为11Bit的CAN报文ID,例如0x755,依次填写为0x07,0x55;</li>
- <li>Mode表示帧模式:0x11-读,0x16-写,0x0C-上报;</li>
- <li>Len表示命令段和数据段总长度,占用1Byte;</li>
- <li>Command表示命令字,占用2Bytes;</li>
- <li>Data表示数据段,长度不固定,Len - 2表示数据段长度,采用小端模式传递数据;</li>
- <li>CRC为校验位,占用4字节,由帧头开始,CAN_ID插入到帧头和帧模式之间,计算到数据段最后一个字<br>
- 节,计算结果高字节在前,如: CAN_ID为0x0710,数据帧为55 AA 11 03 22 01 00 CRC1 CRC2<br>
- CRC3 CRC4 F0,CRC计算函数输入数据为 55 AA 07 10 11 03 22 01 00,计算结果依次由高到低写<br>
- 入CRC1、CRC2、CRC3、CRC4。</li>
- </ol>
- </div><div data-chunk="id-0e8133"><h2 data-link="#CRC32计算" style="opacity: 1;"><a class="target-menu hidden" href="#CRC32计算">#</a><a name="CRC32计算"></a>CRC32计算</h2>
- </div><div data-chunk="id-f4baf2"><p> 为保证数据数据双向正确解析,数据发送和解析时统一按照下面计算方法。</p>
- </div><div data-chunk="id-17a907"><pre><code class="hljs"><ul><li><span>uint32_t Crc32Table[ 256 ] =
- </span></li><li><span>{
- </span></li><li><span> 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
- </span></li><li><span> 0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
- </span></li><li><span> 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD, 0x4C11DB70, 0x48D0C6C7,
- </span></li><li><span> 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75,
- </span></li><li><span> 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3,
- </span></li><li><span> 0x709F7B7A, 0x745E66CD, 0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039,
- </span></li><li><span> 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58, 0xBAEA46EF,
- </span></li><li><span> 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,
- </span></li><li><span> 0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49, 0xC7361B4C, 0xC3F706FB,
- </span></li><li><span> 0xCEB42022, 0xCA753D95, 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1,
- </span></li><li><span> 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D, 0x34867077, 0x30476DC0,
- </span></li><li><span> 0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072,
- </span></li><li><span> 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4,
- </span></li><li><span> 0x0808D07D, 0x0CC9CDCA, 0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE,
- </span></li><li><span> 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08,
- </span></li><li><span> 0x571D7DD1, 0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
- </span></li><li><span> 0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC,
- </span></li><li><span> 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6,
- </span></li><li><span> 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A, 0xE0B41DE7, 0xE4750050,
- </span></li><li><span> 0xE9362689, 0xEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2,
- </span></li><li><span> 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34,
- </span></li><li><span> 0xDC3ABDED, 0xD8FBA05A, 0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637,
- </span></li><li><span> 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB, 0x4F040D56, 0x4BC510E1,
- </span></li><li><span> 0x46863638, 0x42472B8F, 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,
- </span></li><li><span> 0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5,
- </span></li><li><span> 0x3F9B762C, 0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF,
- </span></li><li><span> 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623, 0xF12F560E, 0xF5EE4BB9,
- </span></li><li><span> 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B,
- </span></li><li><span> 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD,
- </span></li><li><span> 0xCDA1F604, 0xC960EBB3, 0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7,
- </span></li><li><span> 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71,
- </span></li><li><span> 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,
- </span></li><li><span> 0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2,
- </span></li><li><span> 0x470CDD2B, 0x43CDC09C, 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8,
- </span></li><li><span> 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24, 0x119B4BE9, 0x155A565E,
- </span></li><li><span> 0x18197087, 0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC,
- </span></li><li><span> 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D, 0x2056CD3A,
- </span></li><li><span> 0x2D15EBE3, 0x29D4F654, 0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0,
- </span></li><li><span> 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C, 0xE3A1CBC1, 0xE760D676,
- </span></li><li><span> 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,
- </span></li><li><span> 0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662,
- </span></li><li><span> 0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668,
- </span></li><li><span> 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
- </span></li><li><span>};
- </span></li><li><span>
- </span></li><li><span>uint32_t CRC32_Calculate( uint8_t *pData, uint16_t Length )
- </span></li><li><span>{
- </span></li><li><span> uint32_t nReg;
- </span></li><li><span> uint32_t nTemp = 0;
- </span></li><li><span> uint16_t i, n;
- </span></li><li><span>
- </span></li><li><span> nReg = 0xFFFFFFFF;
- </span></li><li><span> for ( n = 0; n < Length; n++ )
- </span></li><li><span> {
- </span></li><li><span> nReg ^= (uint32_t) pData[ n ];
- </span></li><li><span> for ( i = 0; i < 4; i++ )
- </span></li><li><span> {
- </span></li><li><span> nTemp = Crc32Table[ ( uint8_t )( ( nReg >> 24 ) & 0xFF ) ];
- </span></li><li><span> nReg <<= 8;
- </span></li><li><span> nReg ^= nTemp;
- </span></li><li><span> }
- </span></li><li><span> }
- </span></li><li><span> return nReg;
- </span></li><li><span>}
- </span></li><li><span>
- </span></li></ul></code></pre></div><div data-chunk="id-2175ee"><h2 data-link="#通信内容"><a class="target-menu hidden" href="#通信内容">#</a><a name="通信内容"></a>通信内容</h2>
- </div><div data-chunk="id-84b5c8"><p> 该份协议仅实现通过上位机设置被测试电机的助力档位和显示电机发送的运行信息等功能。</p>
- </div><div data-chunk="id-fd3739"><h3 data-link="#上位机设置电机助力档位"><a class="target-menu hidden" href="#上位机设置电机助力档位">#</a><a name="上位机设置电机助力档位"></a>上位机设置电机助力档位</h3>
- </div><div data-chunk="id-ce13d2"><table>
- <thead>
- <tr>
- <th style="text-align:center">ID</th>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x751</td>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">0x16</td>
- <td style="text-align:center">0x02</td>
- <td style="text-align:center">0x28 0x02</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-f6cf7f"><p><strong>数据段内容如下:</strong></p>
- <p><font color="red">byte1</font>: 0x00-OFF, 0x01-ECO, 0x02-NORM, 0x03-SPORT, 0x04-TURBO, 0x22-Walk, 0x33-SMART</p>
- <p><font color="red">byte2</font>: 0xF1-开灯, 0xF0-关灯</p>
- </div><div data-chunk="id-b00518"><p><strong>注意:</strong></p>
- <ol>
- <li>当测试未连接仪表需要通过上位机控制电机时,发送该指令;</li>
- <li>该指令需要在间隔1s内定时发送,否则电机会自动关闭助力,进入OFF档位;</li>
- <li>该指令发出后,电机会返回一次运行信息。</li>
- </ol>
- </div><div data-chunk="id-1175de"><h3 data-link="#电机运行信息"><a class="target-menu hidden" href="#电机运行信息">#</a><a name="电机运行信息"></a>电机运行信息</h3>
- </div><div data-chunk="id-6ce504"><table>
- <thead>
- <tr>
- <th style="text-align:center">ID</th>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x710</td>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">0x0C</td>
- <td style="text-align:center">0x22</td>
- <td style="text-align:center">0x10 0x20</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-16c3cc"><p><strong>数据段主要内容如下:</strong></p>
- <p><font color="red">byte1-byte2</font>: 车速,单位0.1km/h</p>
- <p><font color="red">byte3-byte4</font>: 电机转速,单位1rpm</p>
- <p><font color="red">byte7-byte8</font>: 母线电压,单位1mV</p>
- <p><font color="red">byte9-byte10</font>: 母线电流,单位1mA</p>
- <p><font color="red">byte11</font>: 踏频,单位1rpm</p>
- <p><font color="red">byte12</font>: 力矩,单位1N.m</p>
- <p><font color="red">byte14</font>: 助力档位,0x00-OFF, 0x01-ECO, 0x02-NORM, 0x03-SPORT, 0x04-TURBO, 0x22-Walk, 0x33-SMART</p>
- <p><font color="red">byte15</font>: 大灯状态,0xF1-开灯, 0xF0-关灯</p>
- <p><font color="red">byte16</font>: 剩余电量,单位1%</p>
- <p><font color="red">byte17-byte18</font>: 续航里程,单位1km,0xEEEE和0xFFFF为无效值</p>
- <p><font color="red">byte22</font>: PCB温度,偏移40,单位1℃</p>
- <p><font color="red">byte23</font>: 绕组温度,偏移40,单位1℃</p>
- <p><font color="red">byte25-byte26</font>: 开机后骑行里程,单位0.1km</p>
- <p><font color="red">byte27-byte28</font>: 开机后骑行时间,单位1s</p>
- </div><div data-chunk="id-1b50cf"><h3 data-link="#电机故障码定义"><a class="target-menu hidden" href="#电机故障码定义">#</a><a name="电机故障码定义"></a>电机故障码定义</h3>
- </div><div data-chunk="id-681154"><table>
- <thead>
- <tr>
- <th style="text-align:center">ID</th>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x710</td>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">0x0C</td>
- <td style="text-align:center">0x06</td>
- <td style="text-align:center">0x11 0x04</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-83e88c"><p><strong>数据段主要内容如下:</strong></p>
- <p>数据段故障码定义按照位或方式,1表示存在故障,存在故障时定时200ms发送故障码,故障全部消失后停止发送。</p>
- <p><font color="red">bit0</font>: 过流保护</p>
- <p><font color="red">bit1</font>: 欠压保护</p>
- <p><font color="red">bit2</font>: 过压保护</p>
- <p><font color="red">bit3</font>: 堵转保护</p>
- <p><font color="red">bit5</font>: 过热保护</p>
- <p><font color="red">bit6</font>: 速度传感器故障</p>
- <p><font color="red">bit7</font>: 力矩传感器故障</p>
- <p><font color="red">bit8</font>: 霍尔传感器故障</p>
- <p><font color="red">bit9</font>: 缺相保护</p>
- <p><font color="red">bit10</font>: 温度传感器故障</p>
- </div><div data-chunk="id-1c34ff"><h3 data-link="#上位机控制电机开机"><a class="target-menu hidden" href="#上位机控制电机开机">#</a><a name="上位机控制电机开机"></a>上位机控制电机开机</h3>
- </div><div data-chunk="id-b76755"><p> 当系统测试未连接仪表时,需要通过MLD1/MLD3连接电机,并用上位机控制电机开机。</p>
- </div><div data-chunk="id-e96e22"><table>
- <thead>
- <tr>
- <th style="text-align:center">ID</th>
- <th style="text-align:center">帧头</th>
- <th style="text-align:center">模式</th>
- <th style="text-align:center">命令段长度</th>
- <th style="text-align:center">命令字</th>
- <th style="text-align:center">数据段</th>
- <th style="text-align:center">CRC32</th>
- <th style="text-align:center">帧尾</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align:center">0x7FF</td>
- <td style="text-align:center">0x55 0xAA</td>
- <td style="text-align:center">0x16</td>
- <td style="text-align:center">0x03</td>
- <td style="text-align:center">0x22 0x01</td>
- <td style="text-align:center">Data</td>
- <td style="text-align:center">CRC32</td>
- <td style="text-align:center">0xF0</td>
- </tr>
- </tbody>
- </table>
- </div><div data-chunk="id-c166b3"><p><strong>数据段主要内容如下:</strong></p>
- <p><font color="red">byte1</font>: 开关机指令,0xF0-关机,0xF1-开机</p>
- <hr>
- </div><div data-chunk="id-d4defd"><p><strong>以上内容仅用于设备调试,不作其它用途。</strong><br>
- <strong></strong></p><p align="right"><strong>武汉天腾动力科技有限公司</strong></p><p></p>
- </div></div></body><html></head></html>
|