日本久久天堂一本婷婷_A片欣赏_国产男女嘿咻视频在线观看_天堂网日本,av爱爽爽,A亚洲网在线观看,九九九九国产在线,色免费网址,黄色网站免费永久,一区二区不卡在线观看,韩国的无码AV看免费大片在线

當(dāng)前位置 : 首頁(yè) > > 加密U盤/硬盤方案 > 智能電動(dòng)牙刷方案

軟硬件全開(kāi)源,,航芯方案分享 | 智能電動(dòng)牙刷方案


當(dāng)代口腔問(wèn)題頻發(fā),讓人們?cè)絹?lái)越重視口腔衛(wèi)生,。傳統(tǒng)的刷牙方式,,由于個(gè)人習(xí)慣和刷牙方式的不同,,會(huì)不同程度地導(dǎo)致牙齦受損,牙菌斑去除不徹底等問(wèn)題,。而電動(dòng)牙刷設(shè)備,,基于其相對(duì)程序化的刷牙方式,可根據(jù)個(gè)人口腔特性支持自主選擇,,調(diào)節(jié)刷牙力度,。而且在刷牙過(guò)程中,不需要過(guò)多的手部動(dòng)作,,僅需要調(diào)節(jié)刷牙的角度,,更多的清潔工作交付由牙刷本身的特性來(lái)完成。方便人們的同時(shí)也更能有效的減少口腔問(wèn)題,。


電動(dòng)牙刷類型


現(xiàn)在市面上電動(dòng)牙刷品類繁多,,從刷頭的方式可將其分為兩大類型:旋轉(zhuǎn)式和振動(dòng)式(也叫聲波式)。參考https://zhuanlan.zhihu.com/p/42097327



圖1. 電動(dòng)牙刷工作方式對(duì)比圖


旋轉(zhuǎn)式電動(dòng)牙刷是由電機(jī)帶動(dòng)刷頭旋轉(zhuǎn),牙面清潔度高,,但牙縫清潔能力薄弱且相較于振動(dòng)式,更易損傷牙釉質(zhì),。而振動(dòng)式,,由電機(jī)帶動(dòng)刷頭進(jìn)行上下的高頻振動(dòng),,高頻擺動(dòng)的刷頭能高效完成洗刷牙齒的動(dòng)作,,可以讓牙膏與水的混合物產(chǎn)生大量微小的氣泡,,氣泡爆裂時(shí)產(chǎn)生的壓力可以更深入牙縫達(dá)到深度的清潔效果。


振動(dòng)式的實(shí)現(xiàn)有兩種方式,,一種由偏心振動(dòng)電機(jī)實(shí)現(xiàn),,多用于中低檔的電動(dòng)牙刷方案。該種方式的電動(dòng)牙刷振動(dòng)感強(qiáng),,振動(dòng)無(wú)序,。另一種則是采用線性電機(jī),業(yè)內(nèi)也稱之為磁懸浮電機(jī),。



圖2. 磁懸浮電機(jī)示意圖


磁懸浮電機(jī)的優(yōu)點(diǎn)在于其在工作運(yùn)行噪聲小,,機(jī)身振感低,振動(dòng)能量集中,,清潔效果佳,。因此,本文采用ACM32F030作為主控芯片,,基于磁懸浮電機(jī)提出一款電動(dòng)牙刷的設(shè)計(jì)方案,。


設(shè)計(jì)方案


本文描述的電動(dòng)牙刷方案,是基于上海航芯ACM32F030系列的MCU進(jìn)行設(shè)計(jì),,整體的方案框圖如下所示:



圖3. 基于ACM32F030/070電動(dòng)牙刷設(shè)計(jì)方案框圖


ACM32F0X0 系列是一款支持多種低功耗模式的通用MCU,。集成12位1.6 Msps高精度ADC以及比較器、運(yùn)放,、觸控按鍵控制器,、段式LCD控制器,內(nèi)置高性能定時(shí)器,、多路UART,、LPUART、SPI,、I2C等豐富的通訊外設(shè),,內(nèi)建AES、TRNG等信息安全模塊,,支持多種低功耗模式,具有高整合度,、高抗干擾,、高可靠性的特點(diǎn)。本產(chǎn)品采用ARM Cortex-M0系列內(nèi)核,最高工作頻率64MHz,。足以滿足一般的電動(dòng)牙刷方案的需求,。



掃碼即可立即購(gòu)買ACM32F070KBU7
備注:ACM32F030和070軟硬件兼容



掃碼即可立即購(gòu)買開(kāi)發(fā)板


軟硬件下載鏈接如下:

https://gitee.com/acm32-mcu/electric-toothbrush

https://github.com/ACM32-MCU/electric-toothbrush


? 人機(jī)交互系統(tǒng)


本文論述的設(shè)計(jì)方案中的人機(jī)交互功能是采用簡(jiǎn)單的LED和按鍵的方式進(jìn)行實(shí)現(xiàn),。共有1個(gè)按鍵和6個(gè)LED,。按鍵需實(shí)現(xiàn)設(shè)備的開(kāi)關(guān)機(jī)以及模式切換功能。設(shè)備會(huì)根據(jù)按鍵按下時(shí)間的長(zhǎng)短來(lái)判定當(dāng)前的動(dòng)作是需要切換模式或是開(kāi)關(guān)機(jī)操作,。6個(gè)LED中有3個(gè)用于工作模式指示,,最大可支持7種工作模式(23-1),,本設(shè)計(jì)方案中僅提供了三種模式。另外3個(gè)LED用于系統(tǒng)狀態(tài)指示,,包括正常,,欠壓,充電,,充滿4種電壓狀態(tài),。


長(zhǎng)短按識(shí)別程序:


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);
  }
}


系統(tǒng)指示程序:


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);
    }
  }
}


? 電源及功耗管理


電動(dòng)牙刷產(chǎn)品的續(xù)航能力也是一直備受人們關(guān)注。本設(shè)計(jì)方案在低功耗的處理,,摒棄了一般的休眠方式,,直接采用關(guān)閉電源來(lái)避免設(shè)備在不工作狀態(tài)下的設(shè)備功耗。整個(gè)設(shè)備的供電線路共有三種,,如下圖所示,。



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


正常情況下,設(shè)備不在充電時(shí),,VCHARG電壓為0,,需要關(guān)機(jī)時(shí),按鍵彈開(kāi),,PWR_KEY為低電平,,芯片內(nèi)部程序也將PWR_LOCK拉低,此時(shí)Q2關(guān)斷,,Q2的D極電壓同VBAT,,從而引起Q1斷開(kāi),VCCIN斷電,,系統(tǒng)關(guān)機(jī),。而開(kāi)機(jī)時(shí),按鍵按下,,PWR_KEY先被拉至高電平,,Q2導(dǎo)通,Q2的D極拉低,,則Q1導(dǎo)通,,設(shè)備供電,,程序檢測(cè)到開(kāi)機(jī),拉高PWR_LOCK,,此時(shí),,盡管按鍵彈開(kāi),PWR_LOCK仍然會(huì)提供Q2的導(dǎo)通電壓,,系統(tǒng)正常工作,。充電時(shí),Q2的導(dǎo)通電壓會(huì)由VCHARG提供,,系統(tǒng)保持在工作狀態(tài),,此時(shí)會(huì)程序會(huì)檢測(cè)系統(tǒng)的運(yùn)行狀態(tài),在不需要啟動(dòng)時(shí),,進(jìn)入休眠狀態(tài),。


電源管理部分,則通過(guò)鋰電池充電芯片檢測(cè)是否進(jìn)行充電,,同時(shí)通過(guò)一路ADC監(jiān)測(cè)電池電壓,。為減少芯片工作負(fù)擔(dān),電池電壓的欠壓和滿電通過(guò)ADC門限電壓功能來(lái)實(shí)現(xiàn),。ADC的門限電壓初始化程序如下:


// 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 ;


? 智能管理系統(tǒng)


智能管理系統(tǒng)分為兩個(gè)部分,,一部分為上位機(jī)的數(shù)據(jù)處理,由云端處理,,另一部分是電動(dòng)牙刷數(shù)據(jù)記錄和傳輸,。整個(gè)的實(shí)現(xiàn)過(guò)程可簡(jiǎn)述為,電動(dòng)牙刷通過(guò)慣性測(cè)量?jī)xQMI8658C記錄電動(dòng)牙刷在使用過(guò)程中的運(yùn)動(dòng)軌跡,,并實(shí)時(shí)將該部分?jǐn)?shù)據(jù)以及整個(gè)系統(tǒng)的工作參數(shù)通過(guò)BLE發(fā)送到手機(jī),,手機(jī)連接云端,并將數(shù)據(jù)傳輸至云平臺(tái)進(jìn)行數(shù)據(jù)解析,,分析用戶刷牙的健康指數(shù),,并將相關(guān)建議反饋至手機(jī)。電動(dòng)牙刷作為數(shù)據(jù)采集設(shè)備,,需上報(bào)實(shí)時(shí)數(shù)據(jù),,結(jié)構(gòu)如下:


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


其中,location為三軸的加速度,,angle為三軸的角度,。定時(shí)上傳電動(dòng)牙刷的相關(guān)實(shí)時(shí)數(shù)據(jù)。上位機(jī)根據(jù)一系列點(diǎn)位數(shù)據(jù)進(jìn)行建模計(jì)算可得到整個(gè)牙刷的運(yùn)動(dòng)軌跡,。


? 電機(jī)驅(qū)動(dòng)系統(tǒng)


電動(dòng)牙刷的驅(qū)動(dòng)系統(tǒng)是通過(guò)H橋芯片MX612E進(jìn)行處理,,MX612E的輸入端連接芯片的PWM互補(bǔ)輸出端口。如下圖所示:



圖5. 電動(dòng)牙刷電機(jī)驅(qū)動(dòng)電路


本設(shè)計(jì)中的電動(dòng)牙刷采用磁懸浮電機(jī),,內(nèi)部構(gòu)造和直流無(wú)刷電機(jī)相似,,但相比于直流無(wú)刷電機(jī),,其僅有兩相輸入端,。這也就造成該電機(jī)在通電后,,正負(fù)極不變的情況下,電機(jī)旋轉(zhuǎn)至某一角度形成平衡后將會(huì)停止旋轉(zhuǎn),。切換正負(fù)極后則又會(huì)在另一個(gè)方向旋轉(zhuǎn)形成平衡,。在電動(dòng)牙刷的正常工作中,是通過(guò)兩相的正負(fù)極切換來(lái)使電機(jī)正反旋轉(zhuǎn)從而帶動(dòng)刷頭做高頻運(yùn)動(dòng)的,。因此,,其電機(jī)速度的控制依靠于輸出PWM的輸出頻率而非占空比??刂拼a如下:


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的占空比為50%,使得在一個(gè)PWM周期內(nèi),,電機(jī)可完成一次往返運(yùn)動(dòng),。


本文提出的設(shè)計(jì)方案的主旨是將電動(dòng)牙刷智能化,在提高人們刷牙效率的同時(shí),,也能達(dá)到進(jìn)一步保證人們刷牙質(zhì)量的目的,。通過(guò)電動(dòng)牙刷對(duì)慣性的數(shù)據(jù)采集,實(shí)時(shí)上傳至云端,,并對(duì)數(shù)據(jù)進(jìn)行處理,,恢復(fù)用戶的刷牙軌跡,給出合理建議,,糾正用戶不良的刷牙習(xí)慣,。磁懸浮電機(jī)的高頻振動(dòng)也能有效清除口腔污漬。歲月恒久遠(yuǎn),,牙齒永相隨 ^-^,。


上海航芯 · 原廠直連:[email protected]