2015年5月8日 星期五

HDD Motor Driver

總之這是一個三相無刷馬達的控制器,和電變有點像,
不過有幾個地方不一樣:

1.我用的是DRV11873,最大電流2A,電壓12V
2.用Attiny直接輸出PWM

大概就這兩點不一樣,因為硬碟馬達沒有受力的情形下其實電流非常小(不到0.01A)
所以其實用不著買電變來用,自己做一個小小張的就可以了,順帶一提這PCB忘了接最重要的PWM....所以你可以看到有條飛線在那邊

至於為啥不用NE555來生PWM,理由是因為我懶得畫了XDDD
而且Attiny24一個10元買太多了要消耗掉一些才行






2015年5月7日 星期四

FDC1004 With Arduino (Linkit one)



        FDC1004是Ti出的 I2C 電容測量ADC,使用起來滿方便的,體積也很小
        之後應該會拿來做一些Project
       
        電路方面很簡單,I2C和電源(3.3V)接起來就好



我現在的設定是200 sample/s , 4ch , continuous sampling , no offset/gain
Code 如下:

#include <Wire.h> 


int FDAddress = B1010000;


void setup() 

Serial.begin(115200);         

Wire.begin();      

    initFD();    
Serial.println("Setup");


void loop() 
{
  Serial.println(" ===========================================");
       
  for(int i=0; i<4; i++){
        uint32_t cap = ((read2byte(0x00+i*2)<<16)+read2byte(0x01+i*2))>>8;

        Serial.print("Input ");
        Serial.print(i);
        Serial.print(" ==> ");
        Serial.print(cap,HEX);
        Serial.print(" ==> ");
        Serial.print(cap/65536.0,5);
        Serial.println(" pf");


}
   Serial.println(" ===========================================");
        delay(1000);  
}





void initFD(){
for(int i=0; i<4; i++){
    write2byte(0x08+i,0x1C00+0x2000*i);
}
 write2byte(0x0c,0x5F0);  //All enable rate = 100


}

uint16_t read2byte(uint8_t address) {

Wire.beginTransmission(FDAddress);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(FDAddress, 2);
uint16_t data = Wire.read();
        data = (data<<8)+Wire.read();
return data;
}

void write2byte(uint8_t address,uint16_t data) {

Wire.beginTransmission(FDAddress);
Wire.write(address);
    Wire.write(data>>8);
    Wire.write(data);
Wire.endTransmission();

}