ACS 712 Measure 1 Outline DC Measure p

  • Slides: 34
Download presentation
ACS 712 Measure 1

ACS 712 Measure 1

大綱 Outline 實驗目的 DC Measure……. . p. 4 系統架構 AC Measure………p. 18 DC Measure…….

大綱 Outline 實驗目的 DC Measure……. . p. 4 系統架構 AC Measure………p. 18 DC Measure……. . p. 6 實驗步驟 AC Measure………p. 19 DC Measure……p. 7~p. 13 程式介紹 DC Measure……. . p. 14 注意事項 DC Measure……. . p. 15~p. 16 實驗結果 AC Measure………p. 20~p. 24 AC Measure………p. 25 AC Measure………p. 26~p. 28 附錄 2

ACS 712 DC Measure 4

ACS 712 DC Measure 4

DC系統架構 研究背景        Load 實驗所需材料: Arduino UNO x 1 ACS 712 x 1

DC系統架構 研究背景        Load 實驗所需材料: Arduino UNO x 1 ACS 712 x 1 Power Supply x 1 Load x 1 ACS 712 30 A Arduino UNO DC Power Supply 5

研究背景 程式介紹 // 印出歸零值當參考 Serial. println("===== ACS 712_30 A by LIN =====");     Serial.

研究背景 程式介紹 // 印出歸零值當參考 Serial. println("===== ACS 712_30 A by LIN =====");     Serial. println(". . Zeroing !. . "); Serial. print("Zero_count = "); Serial. println(Zero_count); // 看看ACS 712無電流輸入時offset歸零值(理想=512) //利用內部參考1. 1 v電壓, 來讀取實際之Vcc電壓 Vcc = read. Vcc();    Serial. print("Vcc = "); Serial. print(Vcc); // 看看實際Vcc電壓(理想=5 V=5000 m. V) Serial. println("m. V (ideal Vcc = 5000 m. V)"); //ACS 712 output sensitivity(理想)=185 m. V/A at Vcc=5. 0 V Real_m. V_A=Vcc*Ideal_mv_A/5000. 0; Serial. print("Real_m. V_A = "); // ACS 712實際對應類比量輸出=? ? m. V/A Serial. print(Real_m. V_A); Serial. println("m. V (ideal Output_m. V_A = 66 m. V)"); Serial. println("---- Start testing ! -----"); 10 }

研究背景 程式介紹 void loop() {     // 讀取ADC值(取樣 1000次, 以便取得較穩定值) ADCcount=0. 0; for(int i

研究背景 程式介紹 void loop() {     // 讀取ADC值(取樣 1000次, 以便取得較穩定值) ADCcount=0. 0; for(int i = 0; i < 1000; i++) { ADCcount = ADCcount + analog. Read(A 0)/1000. 0; //因要取 1000次平均值再累加, 故除 1000 delay(1); //等待1 ms; 因 analog. Read() 此函式每次讀取需要約0. 1 ms }    // 將ADC換算成電流 // 公式: I=(count-Zero_count)(Vcc/1024)m. V/66 m. V // I_ave=(ADCcount-Zero_count)*(Vcc/1024. 0)*1000. 0/66; //(單位m. A 取樣 1000 次之平均值) I_ave=(ADCcount-Zero_count)*(Vcc/1024. 0)*1000. 0/Real_m. V_A; //(單位m. A 取樣 1000次之平均值) 11

研究背景 程式介紹 // 印出 Serial. print("ADC: ");     Serial. print((int)ADCcount, DEC); Serial. print(" =

研究背景 程式介紹 // 印出 Serial. print("ADC: ");     Serial. print((int)ADCcount, DEC); Serial. print(" = "); Serial. print( (int)I_ave, DEC ); //印出所測電流 Serial. print( " m. A" ); //(單位m. A) Serial. print( " = " ); Serial. print((float)I_ave/1000. 9, DEC); //(單位A)    Serial. println( " A" ); } 12

研究背景 程式介紹 //============================= // 利用內部參考1. 1 v電壓, 來讀取較精確Vcc +5 V電壓     //============================= long read.

研究背景 程式介紹 //============================= // 利用內部參考1. 1 v電壓, 來讀取較精確Vcc +5 V電壓     //============================= long read. Vcc() { long result; // Read 1. 1 V reference against AVcc ADMUX = _BV(REFS 0) | _BV(MUX 3) | _BV(MUX 2) | _BV(MUX 1); delay(2); // 等Vref穩定    ADCSRA |= _BV(ADSC); // 開始轉換 while (bit_is_set(ADCSRA, ADSC)); // 測量 result = ADCL; result |= ADCH<<8; result = 1125300 L / result; // 反推算出Vcc(單位m. V); 其中 1125300 = 1. 1*1023*1000 return result; // Vcc 單位mv } 13

ACS 712 AC Measure 17

ACS 712 AC Measure 17

AC系統架構 LOAD 實驗所需材料: Arduino UNO x 1 ACS 712 x 1 AC 110 V

AC系統架構 LOAD 實驗所需材料: Arduino UNO x 1 ACS 712 x 1 AC 110 V x 1 Load x 1 ACS 712 AC 110 V Arduino UNO 18

AC程式介紹 const int sensor. In = A 0; float get. VPP() int Sen =

AC程式介紹 const int sensor. In = A 0; float get. VPP() int Sen = 66; // 30 A之Sens值為 66 m. V { double V = 0; float result; int read. Value; //從sensor讀值 double VRMS = 0; int max. Value = 0; // 儲存最大值 double Irms = 0; int min. Value = 1024; // 儲存最小值 void setup(){ Serial. begin(9600); uint 32_t start_time = millis(); Serial. println("===== AC Irms by LIN ====="); Serial. println(“---- Start testing ! -----”); } void loop(){ V = get. VPP(); VRMS = (V/2. 0) *0. 707; Irms = ((VRMS * 1000. 000)/Sen-0. 074); Serial. print("Irms= "); Serial. print(Irms); Serial. println(" A "); } 21

AC程式介紹 while((millis()-start_time) < 1000) //1秒讀取樣品一次 { read. Value = analog. Read(sensor. In); // 讀取是否有新的數值

AC程式介紹 while((millis()-start_time) < 1000) //1秒讀取樣品一次 { read. Value = analog. Read(sensor. In); // 讀取是否有新的數值 if (read. Value > max. Value) { /*紀錄最大值*/ max. Value = read. Value; } if (read. Value < min. Value) { /*紀錄最小值*/ min. Value = read. Value; } } // 最大值減最小值 result = ((max. Value - min. Value) * 5. 0)/1024. 0; return result; } 22

AC程式介紹 int ADCcount; float I; // 所測電流值 float Zero_count; // ACS 712 無電流輸入時offset歸零值(理想=512) void

AC程式介紹 int ADCcount; float I; // 所測電流值 float Zero_count; // ACS 712 無電流輸入時offset歸零值(理想=512) void setup() { Serial. begin( 115200 ); Zero_count=0. 0; Zero_count = (Zero_count + analog. Read(A 0)); } unsigned long time; void loop() { time = micros(); // 設定讀取時間之精度 ADCcount = analog. Read(A 0); // 讀取類比電壓 I=4. 8828125 E-3*(ADCcount-Zero_count)/0. 067; Serial. print(time*1 E-6, 4); Serial. print(" "); Serial. println(I); } 24

Thank you for your attention 29

Thank you for your attention 29

研究背景 附錄 (Tera Term下載網址):     https: //osdn. net/projects/ttssh 2/releases/    進入網址往下拉至此畫面,點選exe. or zip. Download下來,安裝

研究背景 附錄 (Tera Term下載網址):     https: //osdn. net/projects/ttssh 2/releases/    進入網址往下拉至此畫面,點選exe. or zip. Download下來,安裝 31