![]() |
發布時間: 2021-6-5 14:52
正文摘要:參考了這個貼:http://www.raoushi.com/bbs/dpj-198071-1.html驅動電路一樣,自己再稍微修改一下。 剛開始一直在想怎么固定霧化片,還有用什么容器。忽然看到桌子上的飲料瓶,把霧化片放進瓶蓋,剛好卡緊。出霧量少 ... |
這個芯片怎么下載程序?直接用ch340可以下載嗎 |
啤酒瓶子老大 發表于 2021-6-8 02:46 我這個就是玩玩,性價比肯定沒有公司批量生產的高 |
淘寶里有一個大霧量的,24付的,一個電源板,一個控制板,才2元。![]() |
dj3365191 發表于 2021-6-6 10:23 美容的是不是用這樣的就不清楚了,小范圍使用還可以,也可以用來做簡易的濕度測試。200mL的水可以連續出霧12小時以上,500mL的水可以用一天了 |
不錯,手持式超聲波霧化美容也應該是這個原理 |
實際使用時R4焊接的是0.1uF的電容,R5阻值為100K。 |
代碼如下,比較亂,請自行根據實際使用情況修改: #include <STC8G.h> #include <intrins.h> #include<math.h> #define ulong unsigned long #define uint unsigned int #define uchar unsigned char typedef unsigned char U8; typedef unsigned int U16; typedef unsigned long U32; sfr INT_CLKO = 0x8f; sbit an1 =P3^0; //按鍵1 sbit an2 =P3^1; //按鍵2沒有使用 sbit Y0 =P3^2; //霧化片驅動 sbit Y1 =P3^3; sbit LED =P5^4; //指示燈 sbit ADC_VIN=P5^5; //輸入電壓檢測 bit standby; U16 num,num0,num1,*BGV,adcvref,adcvin; void delay1ms() //@24.000MHz { unsigned char i, j; _nop_(); i = 32; j = 40; do { while (--j); } while (--i); } void delay10ms() //@24.000MHz { unsigned char i, j, k; i = 2; j = 56; k = 172; do { do { while (--k); } while (--j); } while (--i); } void init1() //初始化 { P3M1=0x00;P3M0=0x0c; //高阻,23推挽,01準雙向口,開漏。 P5M1=0x20;P5M0=0x10; //5高阻,4推挽,準雙向口,開漏。 TMOD=0x11; TH0=(65536-40000)/256; TL0=(65536-40000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET0=1;ET1=1; TR0=1;TR1=0; BGV = (U16 code *)0x1ff7; //內部基準電壓 STC8G1K08/08A num=0;num0=0;num1=0; Y0=0; Y1=0; LED=1; EA=1; } U16 ADCRead() //讀取內部基準電壓 { U16 AD_Date=0; // 10位AD轉換值 U8 Tmpe; // 臨時變量用于將AD轉換出來的2個字節合成一個字節 ADC_CONTR |= 0x40; //開始AD轉換 _nop_();_nop_();_nop_(); while (!(ADC_CONTR & 0x20)); //查詢 ADC 完成標志 ADC_CONTR &= ~0x20; //清完成標志 AD_Date = ADC_RES; // 默認高字節高8位。 AD_Date <<= 2; Tmpe = ADC_RESL; // 默認低字節低2位。 Tmpe &= 0x03; // 屏蔽無關位 AD_Date |= Tmpe; // 高低字節拼接成一個10位數。 return AD_Date; } void getadcref() //內部基準電壓 { U8 i; U16 vref; ADC_CONTR =0x80; //打開AD電源 delay10ms(); ADCTIM = 0x3f; ADCCFG = 0x0f; //設置 ADC 時鐘為系統時鐘/2/16 ADC_CONTR = 0x8f; //使能 ADC 模塊,并選擇第 15 通道 ADCRead(); ADCRead(); //前兩個數據丟棄 for (i=0; i<16; i++) {vref += ADCRead();} //讀取 16 次數據 vref >>= 4; //取平均值 adcvref = (U16)(1024L* *BGV / vref); //計算 VCC 管腳電壓,即電池電壓 //注意,此電壓的單位為毫伏(mV) ADC_CONTR &= 0x7f; //關閉AD電源 } U16 ADchange() //AD轉換 { U16 AD_Date=0; // 10位AD轉換值 U8 Tmpe; // 臨時變量用于將AD轉換出來的2個字節合成一個字節 ADC_RES = 0; //清除結果寄存器 ADC_RESL = 0; //清除結果寄存器 ADC_CONTR = 0x85; TR0=0; TR1=0; ADC_CONTR |= 0x40; //開始AD轉換 //ADC_CONTR|=0x08; //開始AD轉換 _nop_();_nop_(); while (!(ADC_CONTR & 0x20)); //查詢 ADC 完成標志 ADC_CONTR &= ~0x20; //清完成標志 TR0=1; TR1=1; AD_Date = ADC_RES; // 默認高字節高8位。 AD_Date <<= 2; Tmpe = ADC_RESL; // 默認低字節低2位。 Tmpe &= 0x03; // 屏蔽無關位 AD_Date |= Tmpe; // 高低字節拼接成一個10位數。 return AD_Date; } void adcscancal() //AD轉換結果計算 { U8 jj,yy; U16 adcxx=0,max,min,test[18]; U32 tt=0; ADC_CONTR =0x80; //打開AD電源 delay1ms(); ADCTIM = 0x3f; ADCCFG = 0x0f; //設置 ADC 時鐘為系統時鐘/2/16 ADchange();ADchange(); //多次掃描,丟棄前兩次取平均值 for(jj=0;jj<18;jj++) { test[jj] = ADchange(); tt += test[jj]; } max=min=test[0]; for(yy=0;yy<18;yy++) { if(min>test[yy]) min=test[yy]; //最小值 if(max<test[yy]) max=test[yy]; //最大值 } adcxx=(tt-max-min)/16; //取平均值 adcvin=adcvref/1024.0*adcxx*11; ADC_CONTR &= 0x7f; //關閉AD電源 } void main() { init1(); getadcref(); //內部1.19V基準電壓 while(1) { if(an1==0){delay10ms();if(an1==0){standby=~standby;while(!an1);}} //AN1按鍵檢測 if(adcvin>4500&&adcvin<5500&&standby==1) //輸入電壓在4.5~5.5V范圍且standby為1時開始工作 { U8 jj; jj++; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //頻率微調:頻率低了減少_nop_();頻率高了增加 _nop_(); if(jj>2){jj=0;Y1=~Y1;Y0=~Y1;} if(num0>25){num0=0;LED=~LED;} //工作時指示燈以0.5秒間隔閃爍 } else{Y0=0;Y1=0;LED=1;} //standby為0時停止工作,指示燈常亮 } } void T0_time() interrupt 1 //T0 { TH0=(65536-40000)/256; TL0=(65536-40000)%256; //20mS-24M num0++; adcscancal(); } void T1_time() interrupt 3 //T1 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; //25mS 24M num1++; } |
lon7085 發表于 2021-6-5 17:21 驅動部分一樣的,修改部分增加了輸入電壓檢測,因為用到移動電源。還有增加了一路輸出,可以驅動水泵或者風扇,實際沒有使用(用這個霧化片工作好久,一瓶水也沒用多少)。 有時間的話,可以自己增加一個水量檢測,水不夠時就停止工作。 電路圖在審核,遲一些上傳。 |
感謝樓主分享!樓主修改的部份可否分享下? |
霧化片位置打了點熱熔膠,防止霧化片松動。5V供電,可以用移動電源供電。工作時主要發熱的是電感,6*8的,估計有60℃吧,用大一號的電感溫度應該會低很多 |