久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4813|回復: 4
打印 上一主題 下一主題
收起左側

關于51單片機驅動器驅動步進電機的問題,轉動很慢而且發熱

[復制鏈接]
跳轉到指定樓層
樓主
50黑幣
現在做了一個裝置,使用89c52單片機產生pwm脈沖給步進電機驅動器,然后驅動步進電機轉動,F在出現兩個問題,第一:電機轉動很慢,而且起熱。有震動,2-3秒轉動一個齒。第二電機應該按照程序反轉,電機卻沒有倒轉。想請教大家是不是程序的頻率太低(程序產生的頻率是1khz)(怎么調整頻率)。還是線路有問題。先上代碼吧。

然后是線路圖



  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit LED_R=P1^0;        //紅色指示燈
  6. sbit LED_G=P1^2;        //綠色指示燈
  7. sbit LED_B=P1^1;        //藍色指示燈
  8. sbit key_D=P3^6;        //前進按鈕
  9. sbit key_R=P3^7;        //后退按鈕,目前不用
  10. sbit PUL=P2^0;          //脈沖口,連步進電機驅動器
  11. sbit DIR=P2^1;          //方向口,連步進電機驅動器
  12. uchar time;            
  13. uchar count;
  14. uchar temp;
  15. uint t=0;
  16. void Delay200us();
  17. void Delay10ms();
  18. void key_scan();       //按鍵程序
  19. void main()
  20. {
  21.   P1=0xff;
  22.   P2=0x00;
  23.   TMOD= 0x01;               
  24.   TH0 = (65536-500)/256;               
  25.   TL0 = (65536-500)%256;               
  26.   EA=1;
  27.   ET0=1;
  28.   while(1)
  29.   {
  30.      key_scan();
  31.   }
  32.   }
  33. //***********************************************************//
  34. void Delay200us()                //@11.0592MHz
  35. {
  36. unsigned char i;

  37.         _nop_();
  38.         i = 89;
  39.         while (--i);
  40. }
  41. //***************************************************************//
  42. void Delay10ms()                //@11.0592MHz
  43. {
  44.         unsigned char i, j;

  45.         i = 18;
  46.         j = 235;
  47.         do
  48.         {
  49.                 while (--j);
  50.         } while (--i);
  51. }


  52.   void key_scan()
  53.   {
  54.      if(key_D==0)              
  55.      {
  56.         Delay10ms();
  57.       
  58.         if(key_D==0)
  59.         {
  60.            t++;
  61.            if(t>=4)
  62.            {
  63.              t=0;
  64.            }
  65.            switch(t)
  66.            {
  67.              case 1:TR0=0;LED_R=0;LED_G=1;LED_B=1;Delay200us();DIR=1;temp=100;TR0=1;break;//ǰ½ø1002½
  68.              case 2:TR0=0;LED_R=1;LED_G=0;LED_B=1;Delay200us();DIR=1;temp=200;TR0=1;break;//¼ìDøÇ°Æú2002½
  69.              case 3:TR0=0;LED_R=1;LED_G=1;LED_B=0;Delay200us();DIR=0;temp=300;TR0=1;break;//oóíË3002½¡£
  70.              default:break;
  71.             }
  72.          }
  73.          while(!key_D);
  74.          
  75.         }
  76. }
  77.             

  78. void Timer0Init(void) interrupt 1 using 1               
  79. {
  80.    TH0 = (65536-500)/256;               
  81.    TL0 = (65536-500)%256;
  82.    time++;
  83.    if(time>=100)
  84.       {
  85.          time=0;
  86.          count++;
  87.          if(count>=temp)
  88.             {
  89.                TR0=0;
  90.                count=0;
  91.                LED_R=1;
  92.                LED_G=1;
  93.                LED_B=1;
  94.                PUL=0;
  95.              }
  96.       }      
  97.       if(time<=50)
  98.          {
  99.             PUL=0;
  100.          }
  101.       else
  102.         {
  103.            PUL=1;
  104.         }
  105.       
  106.    }
復制代碼


步進推桿控制.zip

165.28 KB, 下載次數: 9

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:230847 發表于 2018-10-6 19:19 | 只看該作者
剛剛發的程序注釋變成亂碼了,再傳一邊。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED_R=P1^0;        //紅色指示燈
sbit LED_G=P1^2;        //綠色指示燈
sbit LED_B=P1^1;        //藍色指示燈
sbit key_D=P3^6;        //前進按鈕
sbit key_R=P3^7;        //后退按鈕,目前不用
sbit PUL=P2^0;          //脈沖口,連步進電機驅動器
sbit DIR=P2^1;          //方向口,連步進電機驅動器
uchar time;            
uchar count;
uchar temp;
uint t=0;
void Delay200us();
void Delay10ms();
void key_scan();       //按鍵程序
void main()
{
  P1=0xff;
  P2=0x00;
  TMOD= 0x01;
回復

使用道具 舉報

板凳
ID:386381 發表于 2018-10-6 21:46 來自手機 | 只看該作者
1000Hz是頻率太高了不是太低了
回復

使用道具 舉報

地板
ID:230847 發表于 2018-10-7 15:11 | 只看該作者
今天試驗了一下頻率太低了。我把頻率提高到4kHZ,步進電機驅動正常。
回復

使用道具 舉報

5#
ID:230847 發表于 2018-10-7 15:16 | 只看該作者
試驗了一下高頻率4kHZ,驅動器可以正常工作。但是當給驅動器反向信號時,驅動器仍然正轉。在原理圖上模擬無問題。始終都是低電平。最后用單片機控制5V繼電器進行高低電平的切換。(原來用三極管S8050)。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit LED_R=P1^0;        //紅色指示燈
  6. sbit LED_G=P1^2;        //綠色指示燈
  7. sbit LED_B=P1^1;        //藍色指示燈
  8. sbit key_D=P3^6;        //前進按鈕
  9. sbit key_R=P3^7;        //后退按鈕,目前不用
  10. sbit PUL=P2^0;          //脈沖口,連步進電機驅動器
  11. sbit DIR=P0^0;          //方向口,連步進電機驅動器
  12. uchar time;            
  13. uint count;
  14. uint temp;
  15. uint t=0;
  16. void Delay200us();
  17. void Delay10ms();
  18. void key_scan();       //按鍵程序
  19. void main()
  20. {
  21.   P1=0xff;
  22.        
  23.         TMOD &= 0xF0;
  24.                  
  25.   TH0 = 0xFF;               
  26.   TL0 = 0X8D;                       //0xF7       
  27.   EA=1;
  28.   ET0=1;
  29.   while(1)
  30.   {
  31.      key_scan();
  32.   }
  33.   }
  34. //***********************************************************//
  35. void Delay200us()                //@11.0592MHz
  36. {
  37. unsigned char i;

  38.         _nop_();
  39.         i = 89;
  40.         while (--i);
  41. }
  42. //***************************************************************//
  43. void Delay10ms()                //@11.0592MHz
  44. {
  45.         unsigned char i, j;

  46.         i = 18;
  47.         j = 235;
  48.         do
  49.         {
  50.                 while (--j);
  51.         } while (--i);
  52. }


  53. //*****當前進按鈕按下一次,步進電機向前走100步,100走完停止,當按第二次繼續向前走200步,走完停止。當按第三次,后退300步******//
  54.   void key_scan()
  55.   {
  56.      if(key_D==0)              
  57.      {
  58.         Delay10ms();
  59.        
  60.         if(key_D==0)
  61.         {
  62.            t++;
  63.            if(t>=4)
  64.            {
  65.              t=0;
  66.            }
  67.            switch(t)
  68.            {
  69.              case 1:DIR=0;TR0=0;LED_R=0;LED_G=1;LED_B=1;Delay200us();temp=10000;TR0=1;break;//前進100步
  70.              case 2:DIR=0;TR0=0;LED_R=1;LED_G=0;LED_B=1;Delay200us();temp=20000;TR0=1;break;//繼續前期200步
  71.              case 3:DIR=1;TR0=0;LED_R=1;LED_G=1;LED_B=0;Delay200us();temp=30000;TR0=1;break;//后退300步。
  72.              default:break;
  73.             }
  74.          }
  75.          while(!key_D);
  76.          
  77.         }
  78. }
  79.             
  80. //*********************定時器0*******************************//
  81. void Timer0Init(void) interrupt 1 using 1               
  82. {
  83.    TH0 = 0xFF;               
  84.    TL0 = 0x8D;         //100,,0xF7
  85.    time++;
  86.    if(time>=100)
  87.       {
  88.          time=0;
  89.          count++;
  90.          if(count>=temp)
  91.             {
  92.                TR0=0;
  93.                count=0;
  94.                LED_R=1;
  95.                LED_G=1;
  96.                LED_B=1;
  97.                PUL=0;
  98.              }
  99.       }       
  100.       if(time<=10)
  101.          {
  102.             PUL=0;
  103.          }
  104.       else
  105.         {
  106.            PUL=1;
  107.         }
  108.        
  109.    }


復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 亚洲免费在线视频 | 国产一区亚洲二区三区 | 日韩高清国产一区在线 | 亚洲性爰| 小早川怜子xxxxaⅴ在线 | 99久久免费精品国产男女高不卡 | 国产亚洲高清视频 | 欧美成人a∨高清免费观看 欧美日韩中 | www,黄色,com | 久久久区 | 亚洲欧美在线视频 | 伊人婷婷 | 欧美亚洲国产日韩 | 欧美激情精品久久久久久免费 | 色视频在线免费观看 | 亚洲精品一| 亚洲精品久久久久中文字幕欢迎你 | 国产一级视频免费播放 | 精品日韩一区二区 | 久久久天天| 成在线人视频免费视频 | 久久久久久久久久一区 | 欧美国产精品一区二区三区 | 精品在线99 | 国产成人免费视频网站高清观看视频 | 91精品国产综合久久久久 | 久久蜜桃资源一区二区老牛 | 亚洲视频精品 | 一区二区三区精品视频 | 欧美一区二区三区在线观看 | 最新中文字幕 | 日韩精品视频在线观看一区二区三区 | 欧美性猛交一区二区三区精品 | 97色伦网 | 亚洲 欧美 日韩 在线 | 日韩a在线 | 欧美国产中文 | 久久涩涩| 久久国产精品视频免费看 | 欧美13videosex性极品 |