Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
motor.cpp@2:ff609fd0c51a, 2018-08-20 (annotated)
- Committer:
- duchung2603
- Date:
- Mon Aug 20 07:58:27 2018 +0000
- Revision:
- 2:ff609fd0c51a
- Parent:
- 1:c002cfb55315
- Child:
- 3:6898c5bd7fef
2nd_release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
duchung2603 | 0:a8339cee32b7 | 1 | #include "mbed.h" |
duchung2603 | 0:a8339cee32b7 | 2 | #include "motor.h" |
duchung2603 | 0:a8339cee32b7 | 3 | |
duchung2603 | 0:a8339cee32b7 | 4 | |
duchung2603 | 0:a8339cee32b7 | 5 | // ################################################################ |
duchung2603 | 0:a8339cee32b7 | 6 | // SPI通信フォーマットに合わせた供用体定義 |
duchung2603 | 0:a8339cee32b7 | 7 | // bit |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| |
duchung2603 | 0:a8339cee32b7 | 8 | // function | KeyBit | ChNumber | Motor Thlotle | |
duchung2603 | 0:a8339cee32b7 | 9 | // ################################################################ |
duchung2603 | 0:a8339cee32b7 | 10 | typedef union{ |
duchung2603 | 0:a8339cee32b7 | 11 | UINT16 spiCmd; |
duchung2603 | 0:a8339cee32b7 | 12 | struct{ |
duchung2603 | 0:a8339cee32b7 | 13 | UINT16 val : 8;//bit[ 7: 0] |
duchung2603 | 0:a8339cee32b7 | 14 | UINT16 ch : 4;//bit[11: 8] |
duchung2603 | 0:a8339cee32b7 | 15 | UINT16 key : 4;//bit[15:12] |
duchung2603 | 0:a8339cee32b7 | 16 | }bf; |
duchung2603 | 0:a8339cee32b7 | 17 | }SPI_CMD; |
duchung2603 | 0:a8339cee32b7 | 18 | |
duchung2603 | 0:a8339cee32b7 | 19 | |
duchung2603 | 0:a8339cee32b7 | 20 | // ############################################################### |
duchung2603 | 0:a8339cee32b7 | 21 | // グローバル変数 |
duchung2603 | 0:a8339cee32b7 | 22 | // ############################################################### |
duchung2603 | 0:a8339cee32b7 | 23 | static SPI spi (p5,p6,p7); // mosi, miso, clk |
duchung2603 | 0:a8339cee32b7 | 24 | static DigitalOut CS_n(p8); //SPIのチップセレクト |
duchung2603 | 0:a8339cee32b7 | 25 | static Serial pc (USBTX , USBRX ); |
duchung2603 | 0:a8339cee32b7 | 26 | |
duchung2603 | 0:a8339cee32b7 | 27 | MOTOR_THROTTLE mt={0,}; |
duchung2603 | 1:c002cfb55315 | 28 | static UCHAR value=0; |
duchung2603 | 0:a8339cee32b7 | 29 | |
duchung2603 | 0:a8339cee32b7 | 30 | //================================================================ |
duchung2603 | 0:a8339cee32b7 | 31 | //モーター制御モジュール初期化 |
duchung2603 | 0:a8339cee32b7 | 32 | //================================================================ |
duchung2603 | 0:a8339cee32b7 | 33 | void motorInit(){ |
duchung2603 | 0:a8339cee32b7 | 34 | spi.format(16,3) ;//SPIのフォーマット指定(bit長、極性) |
duchung2603 | 0:a8339cee32b7 | 35 | spi.frequency(500000) ;//クロック周波数 |
duchung2603 | 0:a8339cee32b7 | 36 | //Low有意なのでHighにしておく |
duchung2603 | 0:a8339cee32b7 | 37 | CS_n =1; |
duchung2603 | 0:a8339cee32b7 | 38 | } |
duchung2603 | 0:a8339cee32b7 | 39 | //---------------------------------------------------------------- |
duchung2603 | 0:a8339cee32b7 | 40 | //SPI送信 |
duchung2603 | 0:a8339cee32b7 | 41 | //---------------------------------------------------------------- |
duchung2603 | 0:a8339cee32b7 | 42 | void motorSpiSend |
duchung2603 | 0:a8339cee32b7 | 43 | (UCHAR ch //チャンネル番号 |
duchung2603 | 0:a8339cee32b7 | 44 | ,UCHAR val //モータ設定値0~255 |
duchung2603 | 0:a8339cee32b7 | 45 | ) |
duchung2603 | 0:a8339cee32b7 | 46 | { |
duchung2603 | 0:a8339cee32b7 | 47 | SPI_CMD cmd; |
duchung2603 | 0:a8339cee32b7 | 48 | //引数を送信するコマンドに成形 |
duchung2603 | 0:a8339cee32b7 | 49 | cmd.bf.key = 0xA; //キーbit :常に0xA |
duchung2603 | 0:a8339cee32b7 | 50 | cmd.bf.ch = ch; //チャンネル番号 :1~12が有効 |
duchung2603 | 0:a8339cee32b7 | 51 | cmd.bf.val = val; //モータースロットル :0~255 |
duchung2603 | 0:a8339cee32b7 | 52 | //チップセレクトアサート |
duchung2603 | 0:a8339cee32b7 | 53 | CS_n= 0; |
duchung2603 | 0:a8339cee32b7 | 54 | //データ出力 |
duchung2603 | 0:a8339cee32b7 | 55 | spi.write(cmd.spiCmd); |
duchung2603 | 0:a8339cee32b7 | 56 | //チップセレクトネゲート |
duchung2603 | 0:a8339cee32b7 | 57 | CS_n = 1; |
duchung2603 | 0:a8339cee32b7 | 58 | |
duchung2603 | 0:a8339cee32b7 | 59 | pc.printf("ch[%d] %d\r\n" , cmd.bf.ch , cmd.bf.val); |
duchung2603 | 0:a8339cee32b7 | 60 | } |
duchung2603 | 0:a8339cee32b7 | 61 | //================================================================ |
duchung2603 | 0:a8339cee32b7 | 62 | // |
duchung2603 | 0:a8339cee32b7 | 63 | //================================================================ |
duchung2603 | 1:c002cfb55315 | 64 | |
duchung2603 | 1:c002cfb55315 | 65 | void motorUp(){ |
duchung2603 | 2:ff609fd0c51a | 66 | int ch ,i; |
duchung2603 | 1:c002cfb55315 | 67 | |
duchung2603 | 1:c002cfb55315 | 68 | for (i=0; i<10; i++){ |
duchung2603 | 2:ff609fd0c51a | 69 | if (value != 0xFF) { |
duchung2603 | 1:c002cfb55315 | 70 | value++; |
duchung2603 | 1:c002cfb55315 | 71 | } |
duchung2603 | 0:a8339cee32b7 | 72 | for(ch=1; ch<3; ch++){ |
duchung2603 | 1:c002cfb55315 | 73 | motorSpiSend(ch,value); |
duchung2603 | 1:c002cfb55315 | 74 | wait(0.01); |
duchung2603 | 0:a8339cee32b7 | 75 | } |
duchung2603 | 1:c002cfb55315 | 76 | } |
duchung2603 | 0:a8339cee32b7 | 77 | /* |
duchung2603 | 0:a8339cee32b7 | 78 | for(ch=5; ch<9; ch++){ |
duchung2603 | 0:a8339cee32b7 | 79 | for(val=0; val<250; val +=5){ |
duchung2603 | 0:a8339cee32b7 | 80 | motorSpiSend(ch,val); |
duchung2603 | 0:a8339cee32b7 | 81 | wait(0.01); |
duchung2603 | 0:a8339cee32b7 | 82 | } |
duchung2603 | 0:a8339cee32b7 | 83 | } |
duchung2603 | 0:a8339cee32b7 | 84 | */ |
duchung2603 | 0:a8339cee32b7 | 85 | } |
duchung2603 | 0:a8339cee32b7 | 86 | |
duchung2603 | 2:ff609fd0c51a | 87 | void motorStop(){ |
duchung2603 | 0:a8339cee32b7 | 88 | int ch, v; |
duchung2603 | 0:a8339cee32b7 | 89 | /* |
duchung2603 | 0:a8339cee32b7 | 90 | for(ch=5; ch<9; ch++){ |
duchung2603 | 0:a8339cee32b7 | 91 | motorSpiSend(ch,0); |
duchung2603 | 0:a8339cee32b7 | 92 | wait(0.01); |
duchung2603 | 0:a8339cee32b7 | 93 | } |
duchung2603 | 0:a8339cee32b7 | 94 | } |
duchung2603 | 0:a8339cee32b7 | 95 | */ |
duchung2603 | 0:a8339cee32b7 | 96 | for(ch=1; ch<3; ch++){ |
duchung2603 | 2:ff609fd0c51a | 97 | for (v=value; v>0; v--){ |
duchung2603 | 0:a8339cee32b7 | 98 | motorSpiSend(ch,v); |
duchung2603 | 0:a8339cee32b7 | 99 | wait(0.01); |
duchung2603 | 0:a8339cee32b7 | 100 | } |
duchung2603 | 0:a8339cee32b7 | 101 | } |
duchung2603 | 2:ff609fd0c51a | 102 | value = 0; |
duchung2603 | 0:a8339cee32b7 | 103 | } |
duchung2603 | 0:a8339cee32b7 | 104 | |
duchung2603 | 0:a8339cee32b7 | 105 |