ステッピングモータドライバL6740を動かした時のメモ

以下は最高速度まで行かなかった時のコード
一応メモ

SPIライブラリを使って自作した方

/*
  * All A pins  of AD5206 connected to +5V
  * All B pins of AD5206 connected to ground
  * An LED and a 220-ohm resisor in series connected from each W pin to ground
  * CS - to digital pin 10  (SS pin)
  * SDI - to digital pin 11 (MOSI pin)
  * CLK - to digital pin 13 (SCK pin)
*/
#include <SPI.h>
// set pin 10 as the slave select for the digital pot:
const int cspin = 10;

void setup() {
  pinMode (cspin, OUTPUT);
  SPI.begin(); 
  SPI.setBitOrder(MSBFIRST);           //in accordance with datasheet for l6470. MSBFIRST


}

void loop() {
  rotate(0x51);
  delay(5000);
  stop();
  delay(1000);
  rotate(0x50);
  delay(5000);
  stop();
  delay(1000);
}

void rotate(int dir){
  digitalWrite(cspin,LOW);
  SPI.transfer(dir);
  digitalWrite(cspin,HIGH);    

  digitalWrite(cspin,LOW);
  SPI.transfer(0xFF);
  digitalWrite(cspin,HIGH);     

  digitalWrite(cspin,LOW);
  SPI.transfer(0xFF);
  digitalWrite(cspin,HIGH);     

  digitalWrite(cspin,LOW);
  SPI.transfer(0xFF);
  digitalWrite(cspin,HIGH);     

}

void setMicroStep(){
  digitalWrite(cspin,LOW);
  SPI.transfer(0x16);
  digitalWrite(cspin,HIGH);       

  digitalWrite(cspin,LOW);
  SPI.transfer(0x);
  digitalWrite(cspin,HIGH);       
}

void stop(){
  digitalWrite(cspin,LOW);
  SPI.transfer(0xB0);
  digitalWrite(cspin,HIGH);       
}


拾ってきたコード

#include <SPI.h>
int  cs=10; //chip select 

void setup() {
  Serial.begin(9600);                  //setup serial communication for feedback
  SPI.begin();                         //let the SPI library handle mosi, miso, and ck.
  SPI.setBitOrder(MSBFIRST);           //in accordance with datasheet for l6470. MSBFIRST
  pinMode(cs,OUTPUT);
  
  //digitalWrite(cs, LOW);               //pull cs low to send command
  //SPI.transfer(0xD8);                  //reset pos via byte command
  //digitalWrite(cs, HIGH);              //pull it high because datasheet says aftter every byte to pull high
  //delay(1);                            //give the l6470 some time to think about what we just sent it.
   
}

void loop(){
  
  //== get sttus byte command ==//
  //digitalWrite(cs, LOW);
  //SPI.transfer(0xD0); //get status command in hex
  //unsigned int n = 1; //set these are variables jus to make sure recieve signal is changing to something else
  //unsigned int m = 1;
  //n = SPI.transfer(0x00);  //status Most sig byte.
  //m = SPI.transfer(0x00);  //status Least sig byte.
  //digitalWrite(cs, HIGH);  
  //Serial.println(n);      // output status return to see
  //Serial.println(m);
  
  //set max_speed register
  digitalWrite(cs, LOW);
  unsigned int maxSpeed = SPI.transfer(0x07);        //initial command byte
  unsigned int maxSpeed1 = SPI.transfer(0x00);       //MAx speed is a 10 bit register. This needs to be shifter twice to fill correct?
  unsigned int maxSpeed2 = SPI.transfer(0x00);
  digitalWrite(cs, HIGH);                            //Toggle back up
  Serial.print("Speed: ");
  Serial.println(maxSpeed);
  Serial.println(maxSpeed1);
  Serial.println(maxSpeed2);
  
  
  digitalWrite(cs, LOW);
  unsigned int elpos = SPI.transfer(0x02);
  unsigned int elpos1 = SPI.transfer(0x02);
  digitalWrite(cs, HIGH);
  Serial.print("elpos: ");
  Serial.println(elpos);
  Serial.println(elpos1);
  
  
  
  //test command
  //digitalWrite(cs, LOW);
  //SPI.transfer(0xD8); //reset pos
  //digitalWrite(cs, HIGH);
  //digitalWrite(cs, LOW);
  //unsigned int speed = 0;
  //SPI.transfer(0x14); //reset pos
  //digitalWrite(cs, HIGH);
  
    //test command
  digitalWrite(cs, LOW);
  SPI.transfer(0x51); //Run command
  SPI.transfer(0x00);
  SPI.transfer(0x01);
  SPI.transfer(0x11);
  digitalWrite(cs, HIGH);
  delay(1000);
   
 // HardHiz
  //digitalWrite(cs, LOW);
  //SPI.transfer(0xA8); //HIZ STOP
  //digitalWrite(cs, HIGH);
  
  delay(1000);
  
}