粉粉嫩嫩的18虎白女,白丝女仆猛 喷水爽自慰,欧美嫩小槡BBBB槡BBBB槡,午夜视频在线免费观看,国产一级a毛一级a看免费视频

當前(qian)位置 : 首頁 > 應用方案 > 車聯網方案 > 智能電動(dong)牙刷方案 

軟硬件全(quan)開(kai)源(yuan),航芯方(fang)案分(fen)享 | 智(zhi)能電動牙刷方(fang)案


當代口(kou)(kou)腔問題(ti)頻(pin)發,讓人(ren)們越來越重視口(kou)(kou)腔衛生。傳統的刷(shua)(shua)(shua)(shua)牙(ya)(ya)方(fang)式,由于(yu)(yu)個人(ren)習(xi)慣(guan)和刷(shua)(shua)(shua)(shua)牙(ya)(ya)方(fang)式的不同,會不同程度(du)地(di)導致牙(ya)(ya)齦(yin)受損,牙(ya)(ya)菌斑去除不徹(che)底等問題(ti)。而電動(dong)牙(ya)(ya)刷(shua)(shua)(shua)(shua)設備,基于(yu)(yu)其相對程序化(hua)的刷(shua)(shua)(shua)(shua)牙(ya)(ya)方(fang)式,可根據個人(ren)口(kou)(kou)腔特(te)性支持自主選擇(ze),調節(jie)刷(shua)(shua)(shua)(shua)牙(ya)(ya)力度(du)。而且在刷(shua)(shua)(shua)(shua)牙(ya)(ya)過(guo)程中,不需要過(guo)多的手部動(dong)作(zuo),僅需要調節(jie)刷(shua)(shua)(shua)(shua)牙(ya)(ya)的角度(du),更多的清潔(jie)工作(zuo)交付由牙(ya)(ya)刷(shua)(shua)(shua)(shua)本身的特(te)性來完成。方(fang)便(bian)人(ren)們的同時也更能(neng)有效的減少口(kou)(kou)腔問題(ti)。


電動牙刷類型


現在市面(mian)上電動牙刷品(pin)類(lei)繁多,從刷頭的方式可將其分為兩(liang)大類(lei)型:旋轉(zhuan)式和振(zhen)動式(也叫(jiao)聲波式)。參考



圖(tu)(tu)1. 電動(dong)牙刷工作方式對(dui)比(bi)圖(tu)(tu)


旋轉(zhuan)(zhuan)式(shi)(shi)電(dian)(dian)動(dong)(dong)牙(ya)刷(shua)(shua)是由(you)電(dian)(dian)機帶動(dong)(dong)刷(shua)(shua)頭(tou)(tou)旋轉(zhuan)(zhuan),牙(ya)面清潔度高(gao),但牙(ya)縫清潔能力薄弱且(qie)相較于振動(dong)(dong)式(shi)(shi),更易損傷牙(ya)釉質。而(er)振動(dong)(dong)式(shi)(shi),由(you)電(dian)(dian)機帶動(dong)(dong)刷(shua)(shua)頭(tou)(tou)進行上下的(de)(de)高(gao)頻振動(dong)(dong),高(gao)頻擺(bai)動(dong)(dong)的(de)(de)刷(shua)(shua)頭(tou)(tou)能高(gao)效完成洗(xi)刷(shua)(shua)牙(ya)齒的(de)(de)動(dong)(dong)作(zuo),可以(yi)(yi)讓(rang)牙(ya)膏與(yu)水的(de)(de)混合物產生大量微小的(de)(de)氣泡,氣泡爆裂時產生的(de)(de)壓(ya)力可以(yi)(yi)更深入牙(ya)縫達到深度的(de)(de)清潔效果。


振(zhen)(zhen)動(dong)(dong)式的實(shi)現有兩種(zhong)方(fang)式,一種(zhong)由偏心振(zhen)(zhen)動(dong)(dong)電(dian)機(ji)實(shi)現,多(duo)用(yong)于(yu)中低檔的電(dian)動(dong)(dong)牙(ya)刷方(fang)案。該種(zhong)方(fang)式的電(dian)動(dong)(dong)牙(ya)刷振(zhen)(zhen)動(dong)(dong)感(gan)強,振(zhen)(zhen)動(dong)(dong)無序。另(ling)一種(zhong)則(ze)是采用(yong)線性(xing)電(dian)機(ji),業內也稱之為磁懸浮電(dian)機(ji)。



圖(tu)(tu)2. 磁懸浮(fu)電機示意圖(tu)(tu)


磁(ci)懸浮(fu)電(dian)機(ji)的優(you)點在(zai)于其在(zai)工作運行噪聲小,機(ji)身振感低,振動能量(liang)集中,清潔(jie)效果佳。因此,本(ben)文采用ACM32F030作為(wei)主控芯片(pian),基(ji)于磁(ci)懸浮(fu)電(dian)機(ji)提出一款電(dian)動牙刷的設計方(fang)案。


設計(ji)方案


本文描述的電動(dong)牙刷方案,是基于上海航芯ACM32F030系列(lie)的MCU進(jin)行設計,整(zheng)體(ti)的方案框圖如下所示(shi):



圖(tu)3. 基于ACM32F030/070電動牙刷(shua)設計(ji)方案框圖(tu)


ACM32F0X0 系(xi)列(lie)是一款支持多種(zhong)低功耗(hao)模(mo)式的通(tong)用(yong)MCU。集(ji)成12位1.6 Msps高精(jing)度ADC以及比較器(qi)、運放(fang)、觸控(kong)按鍵(jian)控(kong)制(zhi)(zhi)器(qi)、段(duan)式LCD控(kong)制(zhi)(zhi)器(qi),內置高性能定(ding)時器(qi)、多路UART、LPUART、SPI、I2C等豐富(fu)的通(tong)訊(xun)外(wai)設,內建AES、TRNG等信(xin)息安全模(mo)塊,支持多種(zhong)低功耗(hao)模(mo)式,具(ju)有(you)高整合度、高抗干擾、高可(ke)靠(kao)性的特點。本產品采(cai)用(yong)ARM Cortex-M0系(xi)列(lie)內核,最高工作頻(pin)率64MHz。足(zu)以滿足(zu)一般的電動牙刷方案的需求。



掃碼即可立即購買ACM32F070KBU7
備注:ACM32F030和070軟硬件兼容



掃碼即可立即購買開發板


軟(ruan)硬件下(xia)(xia)載(zai)鏈接如下(xia)(xia):


? 人機交互系統


本(ben)文論述的(de)(de)(de)設計方(fang)案(an)中(zhong)的(de)(de)(de)人機交互功能(neng)是(shi)采用簡單的(de)(de)(de)LED和按鍵(jian)(jian)的(de)(de)(de)方(fang)式(shi)(shi)進行實(shi)現(xian)。共有1個按鍵(jian)(jian)和6個LED。按鍵(jian)(jian)需(xu)實(shi)現(xian)設備的(de)(de)(de)開關機以及模(mo)(mo)式(shi)(shi)切(qie)換功能(neng)。設備會根據按鍵(jian)(jian)按下(xia)時間的(de)(de)(de)長短(duan)來判定當前的(de)(de)(de)動作(zuo)是(shi)需(xu)要切(qie)換模(mo)(mo)式(shi)(shi)或(huo)是(shi)開關機操作(zuo)。6個LED中(zhong)有3個用于工作(zuo)模(mo)(mo)式(shi)(shi)指(zhi)示(shi),最大可(ke)支持7種(zhong)工作(zuo)模(mo)(mo)式(shi)(shi)(23-1),本(ben)設計方(fang)案(an)中(zhong)僅提供了(le)三種(zhong)模(mo)(mo)式(shi)(shi)。另外3個LED用于系統狀態指(zhi)示(shi),包括正常,欠(qian)壓(ya),充電,充滿4種(zhong)電壓(ya)狀態。


長(chang)短按識別程序:


void keyPressHandler(void)
{
  key.isPressed = Key_GetPressValue();
  switch(key.pressState)
  {
    case 0:
      if(key.isPressed)
      {
        key.pressTime = 0;
        key.pressState = 1;
      }
      break;
    case 1:    /*  eliminate jitter  */
      if(key.isPressed)
      {
        if(++key.pressTime > 10)
          key.pressState = 2;
      }
      else
        key.pressState = 0;
      break;
    case 2:    /*  whether long press is existed  */
      if(key.isPressed)
      {
        if(++key.pressTime > LONG_PRESS_TIME)
          key.pressState = 3;
      }
      else
      {
        if(key.shortPressHandler != NULL)
          key.shortPressHandler();
        else
          DEBUG_KEY("have no short press handler!!\r\n");
        key.pressState = 0;
      }
      break;
    case 3:
      if(key.longPressHandler != NULL)
        key.longPressHandler();
      else
        DEBUG_KEY("have no long press handler!!\r\n");
      key.pressState = 4;
      break;
    case 4:    /*  wait for releasing key  */
      if(key.isPressed == 0)
        key.pressState = 0;
      break;
  }
}


工作指示程序:


void appMotorModeLedControl(void)
{
  static uint8_t state = 0xFF;
       
  if(sys.status == SYSTEM_RUNMODE)
  {
    if(state != sys.motorStatus)
    {
      state = sys.motorStatus;
      if(sys.motorStatus == 0)
      {
        ModeLed_Select(MODE_LED_1, MODE_LED_ON);
      }
      else if(sys.motorStatus == 1)
      {
        ModeLed_Select(MODE_LED_2, MODE_LED_ON);
      }
      else if(sys.motorStatus == 2)
      {
        ModeLed_Select(MODE_LED_3, MODE_LED_ON);
      }
    }
  }
  else
  {
    state = 0xFF;
    ModeLed_Select(MODE_LED_UNKNOWN, MODE_LED_OFF);
  }
}


系(xi)統指示程(cheng)序(xu):


void appSysLedController(void)
{
  static uint8_t led_state = 0xFF;
       
  if(led_state != led.state)
  {
    led_state = led.state;
    if(led.state == LED_OFF)
    {
      led.duty = 0;
      PowerLed_Select(PWR_LED_UNKNOWN, PWR_LED_OFF);
      PWM_dutySet(PWM_LED, led.duty);
    }
    else if(led.state == LED_TWINKLE)    // low power warning
    {
      led.duty = 0;
      PowerLed_Select(PWR_LED_R, PWR_LED_ON);
      PWM_dutySet(PWM_LED, led.duty);
    }
    else if(led.state == LED_ON)
    {
      led.duty = 0;
      PowerLed_Select(PWR_LED_R, PWR_LED_OFF);
      PWM_dutySet(PWM_LED, led.duty);
    }
    else if(led.state == LED_BREATHE)
    {
      if(led.duty == PWM_DUTY_MAX)
        led.dir = LED_FADE;
      else
        led.dir = LED_BRIGHTER;
    }
    else
      led.state = LED_OFF;
  }
  else{
    if(led.state == LED_BREATHE)
    {
      PowerLed_Select(PWR_LED_UNKNOWN, PWR_LED_OFF);
      if(led.dir == LED_BRIGHTER)
      {
        if(led.duty < PWM_DUTY_MAX)
          led.duty += BREATHE_INTERVAL;
        else
        {
          if(++led.cnt > BREATHE_HOLD_TIME)
          {
            led.dir = LED_FADE;
            led.cnt = 0;
          }
        }
      }
      else
      {
        if(led.duty > BREATHE_INTERVAL)
          led.duty -= BREATHE_INTERVAL;
        else
        {
          led.duty = 0;
          if(++led.cnt > BREATHE_HOLD_TIME)
          {
            led.dir = LED_BRIGHTER;
            led.cnt = 0;
          }
        }
      }
      PWM_dutySet(PWM_LED, led.duty);
    }
  }
}


? 電源及功耗管理


電動牙刷產品的(de)(de)(de)續(xu)航能力也是(shi)一(yi)直備(bei)受人們關注。本設(she)計方案在(zai)低功(gong)(gong)耗的(de)(de)(de)處理,摒棄了(le)一(yi)般的(de)(de)(de)休眠方式,直接采(cai)用關閉電源來避免(mian)設(she)備(bei)在(zai)不(bu)工作狀態下(xia)的(de)(de)(de)設(she)備(bei)功(gong)(gong)耗。整(zheng)個(ge)設(she)備(bei)的(de)(de)(de)供電線(xian)路共有(you)三種,如下(xia)圖(tu)所示。



圖4. 基于ACM32F030的電動牙刷(shua)供電電路(部分)


正常(chang)情況下,設備(bei)不(bu)在充(chong)電時(shi)(shi),VCHARG電壓(ya)為(wei)0,需(xu)(xu)要(yao)關(guan)機時(shi)(shi),按(an)(an)鍵彈開(kai),PWR_KEY為(wei)低(di)(di)電平(ping),芯片內部程序(xu)(xu)也將PWR_LOCK拉(la)低(di)(di),此時(shi)(shi)Q2關(guan)斷(duan)(duan),Q2的(de)(de)D極電壓(ya)同VBAT,從而引(yin)起Q1斷(duan)(duan)開(kai),VCCIN斷(duan)(duan)電,系(xi)統關(guan)機。而開(kai)機時(shi)(shi),按(an)(an)鍵按(an)(an)下,PWR_KEY先被拉(la)至高電平(ping),Q2導(dao)(dao)通,Q2的(de)(de)D極拉(la)低(di)(di),則Q1導(dao)(dao)通,設備(bei)供電,程序(xu)(xu)檢測(ce)到開(kai)機,拉(la)高PWR_LOCK,此時(shi)(shi),盡(jin)管(guan)按(an)(an)鍵彈開(kai),PWR_LOCK仍然會(hui)提供Q2的(de)(de)導(dao)(dao)通電壓(ya),系(xi)統正常(chang)工(gong)作。充(chong)電時(shi)(shi),Q2的(de)(de)導(dao)(dao)通電壓(ya)會(hui)由(you)VCHARG提供,系(xi)統保持在工(gong)作狀態,此時(shi)(shi)會(hui)程序(xu)(xu)會(hui)檢測(ce)系(xi)統的(de)(de)運行狀態,在不(bu)需(xu)(xu)要(yao)啟動時(shi)(shi),進入休眠狀態。


電(dian)源管理(li)部(bu)分,則通過鋰電(dian)池(chi)充(chong)電(dian)芯(xin)片檢測(ce)是否(fou)進行充(chong)電(dian),同時通過一路ADC監測(ce)電(dian)池(chi)電(dian)壓(ya)。為減少芯(xin)片工作負擔,電(dian)池(chi)電(dian)壓(ya)的(de)(de)欠壓(ya)和滿電(dian)通過ADC門限(xian)電(dian)壓(ya)功(gong)能來實(shi)現(xian)。ADC的(de)(de)門限(xian)電(dian)壓(ya)初始化程序如下:


// ADC Watchdog config
  ADC_WDT_Handle.ITMode      = ENABLE;
  ADC_WDT_Handle.WatchdogMode  = ADC_ANALOGWATCHDOG_RCH_ALL;
  ADC_WDT_Handle.Channel      = channel;
  ADC_WDT_Handle.HighThreshold  = (HIGH_POWER_THS * 0x0FFF) / VREF ;
  ADC_WDT_Handle.LowThreshold  = (LOW_POWER_THS * 0x0FFF) / VREF ;


? 智能管(guan)理(li)系統


智能管理系統分(fen)(fen)(fen)為(wei)(wei)兩個(ge)部(bu)分(fen)(fen)(fen),一(yi)部(bu)分(fen)(fen)(fen)為(wei)(wei)上(shang)位機(ji)的(de)數(shu)(shu)(shu)據處理,由云端處理,另(ling)一(yi)部(bu)分(fen)(fen)(fen)是電動牙(ya)(ya)刷(shua)數(shu)(shu)(shu)據記錄(lu)和傳輸。整個(ge)的(de)實(shi)現(xian)過(guo)(guo)程可簡述為(wei)(wei),電動牙(ya)(ya)刷(shua)通過(guo)(guo)慣性(xing)測量儀QMI8658C記錄(lu)電動牙(ya)(ya)刷(shua)在(zai)使用(yong)過(guo)(guo)程中(zhong)的(de)運動軌跡,并實(shi)時(shi)將該部(bu)分(fen)(fen)(fen)數(shu)(shu)(shu)據以及整個(ge)系統的(de)工作(zuo)參數(shu)(shu)(shu)通過(guo)(guo)BLE發送到手機(ji),手機(ji)連接(jie)云端,并將數(shu)(shu)(shu)據傳輸至云平臺進行數(shu)(shu)(shu)據解(jie)析(xi),分(fen)(fen)(fen)析(xi)用(yong)戶刷(shua)牙(ya)(ya)的(de)健康指(zhi)數(shu)(shu)(shu),并將相關建議反饋(kui)至手機(ji)。電動牙(ya)(ya)刷(shua)作(zuo)為(wei)(wei)數(shu)(shu)(shu)據采(cai)集設備,需上(shang)報實(shi)時(shi)數(shu)(shu)(shu)據,結構(gou)如下:


typedef __packed struct{
  uint32_t time;          // This shows the relative time of each activity
  uint16_t location[3];        // This shows the acceleration of brush when using
  uint16_t pressure;        // This is the force between tooth and brush
  uint16_t angle[3];        // This shows the angle between brush
       
}BLE_RealTimeDataDef;        // This define the data structure about brushing tooth in real time


其(qi)中,location為(wei)三(san)軸的(de)加速度,angle為(wei)三(san)軸的(de)角(jiao)度。定時(shi)上(shang)傳電(dian)動(dong)牙刷的(de)相關實時(shi)數據(ju)。上(shang)位機根據(ju)一系列點位數據(ju)進(jin)行建模計算可得(de)到整個牙刷的(de)運(yun)動(dong)軌跡(ji)。


? 電機驅動系(xi)統


電動(dong)牙刷的驅(qu)動(dong)系統是通過H橋芯(xin)片(pian)MX612E進行處理,MX612E的輸入端連接芯(xin)片(pian)的PWM互補輸出端口。如下圖所示(shi):



圖5. 電動(dong)牙刷(shua)電機(ji)驅動(dong)電路


本設(she)計中的(de)(de)電(dian)動(dong)牙(ya)刷(shua)采用磁懸浮(fu)電(dian)機,內部(bu)構(gou)造和直流無刷(shua)電(dian)機相似,但相比于(yu)(yu)直流無刷(shua)電(dian)機,其(qi)僅(jin)有兩相輸(shu)(shu)入端。這也就造成該電(dian)機在通電(dian)后,正負(fu)極不變的(de)(de)情(qing)況下,電(dian)機旋(xuan)轉(zhuan)至某一角度形(xing)成平衡(heng)后將(jiang)會停止旋(xuan)轉(zhuan)。切換正負(fu)極后則又(you)會在另(ling)一個方(fang)向(xiang)旋(xuan)轉(zhuan)形(xing)成平衡(heng)。在電(dian)動(dong)牙(ya)刷(shua)的(de)(de)正常工作中,是(shi)通過(guo)兩相的(de)(de)正負(fu)極切換來使電(dian)機正反旋(xuan)轉(zhuan)從而(er)帶動(dong)刷(shua)頭做高頻運動(dong)的(de)(de)。因(yin)此,其(qi)電(dian)機速度的(de)(de)控(kong)制(zhi)依靠(kao)于(yu)(yu)輸(shu)(shu)出PWM的(de)(de)輸(shu)(shu)出頻率而(er)非(fei)占空比。控(kong)制(zhi)代碼如下:


void PWM_freqSet(uint8_t PWMx, uint16_t freq)
{
  uint32_t arr;
  if(IS_PWM_INSTANCE(PWMx) == 0)  return;
  if(freq == 0)
  {
    TIM15->ARR = 0;
    return;
  }
  if(freq > PWM_FREQ_MAX)  freq = PWM_FREQ_MAX;
  if(freq < PWM_FREQ_MIN) freq = PWM_FREQ_MIN;
  arr = (PWM_TIMER_FRE / freq);
  if(PWMx == PWM_MOTOR)
  {
    TIM15->ARR = arr-1;
    TIM15->CCR1 = arr / 2;
  }
}


上例中,PWM的占空(kong)比為(wei)50%,使得(de)在一個PWM周期內,電(dian)機可(ke)完(wan)成一次往返運動。


本文(wen)提(ti)出(chu)的設(she)計方案的主旨是將電(dian)動牙刷智(zhi)能化,在提(ti)高(gao)人們刷牙效率的同(tong)時,也能達到進一步保證人們刷牙質(zhi)量的目(mu)的。通過電(dian)動牙刷對(dui)慣性(xing)的數據采(cai)集,實時上傳至云端,并(bing)對(dui)數據進行(xing)處理(li),恢復用(yong)(yong)戶的刷牙軌跡(ji),給出(chu)合理(li)建議,糾正用(yong)(yong)戶不良的刷牙習慣。磁懸(xuan)浮(fu)電(dian)機(ji)的高(gao)頻振動也能有效清除(chu)口腔污漬。歲月恒(heng)久遠,牙齒永(yong)相隨 ^-^。


上海航芯(xin) · 原廠(chang)直連: