日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32103驱动28BYJ48步进电机

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32103驱动28BYJ48步进电机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 電路接法

    步進電機需要的驅動電流很大,因此直接使用單片機往往管腳電流不夠,加上一般3.3V的單片機也無法驅動5V的步進電機,因此需要電路轉換。

    常用的ULN2003芯片驅動步進電機。ULN2003就是起到了電流放大作用,也使得驅動電壓變成了5V。除了用ULN2003也可以自己用三極管搭建電路,原理與ULN2003內部結構類似。

  • 了解相序

    也就是步進電機要運轉時,如何給脈沖,讓電機連續運動。

    ps:如果給錯脈沖可能左轉幾下又轉回來。下圖就是小編電機的相序。

  • 軟件的實現 ?使用STM32F103控制電機

    下面是正轉翻轉的編碼 根據技術要求。如圖用的單雙八拍。

    unsigned char F_Rotation[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09} ; ?//FAN

    unsigned char B_Rotation[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08} ; ?//ZHENG

    此函數兩個參數,第一個參數是圈數。第二個參數是方向也就是選擇正轉和翻轉

    void motorNCircle(int n,bool position)

    {

    ? ?int i=0;

    ? ?int ?j=0;

    ? ?int k=0;

    ? ?for(j=0;j<n;j++)

    ? ?{

    ? ? ? for(i=0;i<64*8;i++) ? ??

    ? ? ? {

    ? ? ? ? ? for(k=0;k<8;k++)

    ? ? ? ? ? {

    ? ? ? ? ? ? ? if(TRUE == position)

    ? ? ? ? ? ? ? ? ?SetMotor(F_Rotation[k]); ?

    ? ? ? ? ? ? ?else

    ? ? ? ? ? ? ? ? ?SetMotor(B_Rotation[k]); ?

    ? ? ? ? ? ? ?Delay(20000); ? ? ??

    ? ? ? ? ? }

    ? ? ? }

    ? ? }

    }

    下面就是SetMotor函數,根據傳的數據不同,控制的4個IO pin輸出不同。

    void SetMotor(unsigned char InputData)

    {

    ? ? if(InputData & 0x08)

    ? ? {

    ? ? ? ? GPIO_ResetBits(GPIOC, GPIO_Pin_6 ); ??

    ? ? }

    ? ? else

    ? ?{

    ? ? ? ? GPIO_SetBits(GPIOC, GPIO_Pin_6);

    ? ? }

    ? ? if(InputData & 0x04)

    ? ? {

    ? ? ? ? GPIO_ResetBits(GPIOC, GPIO_Pin_7 ); ??

    ? ? }

    ? ?else

    ? ? {

    ? ? ? ? GPIO_SetBits(GPIOC, GPIO_Pin_7);

    ? ? }

    ? ? if(InputData & 0x02)

    ? ? {

    ? ? ? ? GPIO_ResetBits(GPIOC, GPIO_Pin_8 ); ??

    ? ? }

    ? ? else

    ? ?{

    ? ? ? ? GPIO_SetBits(GPIOC, GPIO_Pin_8);

    ? ? }

    ? ?if(InputData & 0x01)

    ? ?{

    ? ? ? ?GPIO_ResetBits(GPIOC, GPIO_Pin_9 ); ??

    ? ?}

    ? ?else

    ? {

    ? ? ? ?GPIO_SetBits(GPIOC, GPIO_Pin_9);

    ? }

    }

  • 如何計算

    以28BYJ-48為例,根據技術資料,步距的角度為5.625-64 而且帶有減速齒輪是1:64 因此轉64乘64個脈沖才是1圈。 ?因此一個脈沖轉過5.625除64=0.08789度。

    所以有了下面的循環。

    ??for(j=0;j<n;j++)

    ? ?{

    ? ? ? for(i=0;i<64*8;i++) ? ? ? //64*8

    ? ? ? {

    ? ? ? ? ? for(k=0;k<8;k++) ? ?//4相單雙8拍

    ? ? ? ? ? {

    ? ? ? ? ? ? ? if(TRUE == position)

    ? ? ? ? ? ? ? ? ?SetMotor(F_Rotation[k]); ?

    ? ? ? ? ? ? ?else

    ? ? ? ? ? ? ? ? ?SetMotor(B_Rotation[k]); ?

    ? ? ? ? ? ? ?Delay(20000); ? ? ? //注意這個延時自己去調節。

    ? ? ? ? ? }

    ? ? ? }

  • 總結

    以上是生活随笔為你收集整理的STM32103驱动28BYJ48步进电机的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。