目前针对于L99H92 的驱动探讨如下:
一、硬件连接:
软件代码:
- #include <SPI.h>
-
-
- const int EN_PIN = D2;
- const int DIAGN_PIN = D3;
- const int DIR_PIN = D4;
- const int MTPWM_PIN = D5;
- const int FSINB_PIN = D6;
-
-
- const int CS_PIN = D10;
-
- void setup() {
-
- SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
-
- Serial.begin(115200);
- Serial.println("UART Start");
-
- pinMode(CS_PIN,OUTPUT);
- pinMode(EN_PIN,OUTPUT);
- pinMode(DIAGN_PIN,INPUT);
- pinMode(DIR_PIN,OUTPUT);
- pinMode(MTPWM_PIN,OUTPUT);
- pinMode(FSINB_PIN,OUTPUT);
-
- digitalWrite(CS_PIN,HIGH);
- digitalWrite(EN_PIN,LOW);
- digitalWrite(FSINB_PIN, LOW);
- int Vst = digitalRead(DIAGN_PIN);
-
-
-
- digitalWrite(EN_PIN, HIGH);
- digitalWrite(FSINB_PIN, HIGH);
- }
- void loop() {
-
- digitalWrite(DIR_PIN,LOW);
- digitalWrite(MTPWM_PIN,HIGH);
-
- writeRegister(0x00, 0x03, 0x00,0x40 );
- delay(5000);
- }
-
-
- void writeRegister(uint8_t chipOP,uint8_t chipAddr, uint8_t Value1, uint8_t Value2) {
-
- digitalWrite(CS_PIN, LOW);
- SPI.transfer((chipOP<<6) | chipAddr );
- SPI.transfer(Value1);
- SPI.transfer(Value2);
-
- digitalWrite(CS_PIN, HIGH);
- }
-
-
- uint16_t readRegister_2Byte(uint8_t chipOP,uint8_t chipAddr) {
- uint16_t result;
- uint8_t date1, date2;
- uint8_t first = chipOP<<6;
- digitalWrite(CS_PIN, LOW);
-
- SPI.transfer(first | chipAddr);
-
- date1 = SPI.transfer(0x00);
- date2 = SPI.transfer(0x00);
-
- digitalWrite(CS_PIN, HIGH);
-
- result = (date1<<8) | date2;
- return result;
- }
测试硬件:
测试波形:
操作控制寄存器0x03;
读取状态寄存器GSB;
有个疑问GSB的寄存器地址是0x3E? 还是其他;
SDO 的输出,是opcode(2bit,01时候)+Address(6bit)+GSB(8bit)+data2+data1 ? 是这样?
其他问题正在确认中,
最终结果:
电机没有反应(电机在12V 其他板子测试正常);
请大家帮忙建议下;