欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

原創的單片機步進電機開環驅動模塊PCB文件+源程序

[復制鏈接]
跳轉到指定樓層
樓主
本設計為步進電機開環驅動,使用STC15W408AS單片機作為主控,12V電源輸入,使用兩個A4950電機驅動,最高電流可達3.5A。三個輸入使用光耦隔離,就算驅動板炸了也不會炸主控,四個撥碼開關可調節細分和電流(扭矩),預留串口接口可燒程序或用于監控調試。
原理圖,PCB,程序都已經上傳附件。

成品圖:正面
背面:
應用外觀:
整體外觀:

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include <reg51.h>

  2. #define Timer0_time 35
  3. #define Timer0_H (65536-Timer0_time)/256
  4. #define Timer0_L (65536-Timer0_time)%256

  5. sbit led_green = P3^6;        //指示燈
  6. sbit led_red = P3^7;

  7. sbit in_clk = P3^2;                //輸入信號上限1.2KHz
  8. sbit in_dir = P1^7;
  9. sbit in_en = P1^6;

  10. sbit sw0 = P2^0;                //選擇開關
  11. sbit sw1 = P2^1;
  12. sbit sw2 = P2^2;
  13. sbit sw3 = P2^3;

  14. sbit in1 = P2^4;                //電機驅動
  15. sbit in2 = P2^5;
  16. sbit in3 = P2^6;
  17. sbit in4 = P2^7;

  18. unsigned char code step8_tab[8]={0x8F,0XAF,0X2F,0X6F,0X4F,0X5F,0X1F,0X9F};

  19. unsigned char duty=0,target=30,set=0,clin=0;
  20. char step=0;

  21. void delayms(unsigned int x)        //@35MHz
  22. {
  23.         unsigned int y;
  24.         for(x;x>0;x--)
  25.                 for(y=3000;y>0;y--);
  26. }

  27. void delay(unsigned int x)
  28. {
  29.         for(x;x>0;x--);
  30. }

  31. void sys_init()
  32. {
  33.         EX0=1;
  34.         IT0=1;
  35.        
  36.         TMOD=0X01;
  37.         TH0=Timer0_H;
  38.         TL0=Timer0_L;
  39.         EA=1;
  40.         ET0=1;
  41.         TR0=1;
  42. }

  43. void main()
  44. {
  45.         unsigned char div,cur;
  46.         P2=0X0F;
  47.         cur=P2 & 0x03;
  48.         div=P2 >>2;
  49.         div=div & 0x03;
  50.         switch(cur)                //撥碼選擇電流/扭矩
  51.         {
  52.                 case 0X03: target=30; break;               
  53.                 case 0X02: target=40; break;               
  54.                 case 0X01: target=55; break;               
  55.                 case 0X00: target=65; break;               
  56.                 default : target=30;break;
  57.         }
  58.         switch(div)                //撥碼選擇分頻系數
  59.         {
  60.                 case 0X03: set=0; break;               
  61.                 case 0X02: set=2; break;               
  62.                 case 0X01: set=4; break;               
  63.                 case 0X00: set=8; break;               
  64.                 default : set=0;break;
  65.         }       
  66.        
  67.         P3=0XFF;
  68.        
  69.         sys_init();
  70.         while(1)
  71.         {
  72.                
  73.         }
  74. }

  75. void init0() interrupt 0
  76. {
  77.         unsigned char i;
  78.         clin++;
  79.         if(clin>=set)                //細分
  80.         {
  81.                         clin=0;
  82.                         if(in_en)
  83.                         {
  84.                                 if(in_dir)        //正轉
  85.                                 {               
  86.                                         step++;
  87.                                         if(step>=8)
  88.                                                 step=0;
  89.                                         P2=step8_tab[step];
  90.                                        
  91.                                 }
  92.                                 else                                //反轉
  93.                                 {
  94.                                         step--;
  95.                                         if(step<0)
  96.                                                 step=7;
  97.                                         P2=step8_tab[step];
  98.                                        
  99.                                 }
  100.                                
  101.                         }
  102.                                
  103.         }
  104. }

  105. void timer0() interrupt 1
  106. {
  107.         TH0=Timer0_H;
  108.         TL0=Timer0_L;
  109.         duty++;
  110.         if(duty>=100)
  111.                 duty=0;
  112.         (duty<target)?(P2=step8_tab[step]):(P2=0X0F);
  113. }
復制代碼


所有資料51hei提供下載:
步進電機驅動.zip (59.1 KB, 下載次數: 24)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表