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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問誰有直流電機轉速測量與調速這種程序例子,我想參考學習下 求分享

[復制鏈接]
跳轉到指定樓層
樓主
ID:817536 發表于 2020-9-10 09:58 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:366464 發表于 2020-11-8 00:25 來自觸屏版 | 只看該作者
加霍爾傳感!
回復

使用道具 舉報

板凳
ID:1057034 發表于 2022-12-12 13:29 | 只看該作者
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define THC0 0xf9
  6. #define TLC0 0x0f   
  7. unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  8. unsigned char  Data_Buffer[8]={0,0,0,0,0,0,0,0};                        

  9. uchar i=0;
  10. sbit AddSpeed=P1^1;
  11. sbit SubSpeed=P1^2;
  12. sbit TurnForward=P1^3;
  13. sbit TurnBackward=P1^4;
  14. sbit Stop=P1^5;

  15. sbit IN1=P3^0;
  16. sbit IN2=P3^1;
  17. sbit PWM_FC=P1^0;
  18. int e ,e1 ,e2 ;
  19. float uk ,uk1 ,duk ;
  20. float Kp=15,Ki=12,Kd=1.6;
  21. int out=0;
  22. uint SpeedSet=380;
  23. uint cnt=0;
  24. uint Inpluse=0,num=0;
  25. uint PWMTime=100;
  26. unsigned char  arry[];
  27. void SendString(uint ch);
  28. void PIDControl();
  29. void SystemInit();
  30. void delay(uchar x);
  31. void PWMOUT();
  32. void SetSpeed();
  33. void SegRefre();

  34. void main()
  35. {
  36.         SystemInit();
  37.         while(1)
  38.         {
  39.                 SetSpeed();               
  40.                 SegRefre();               
  41.                 PWMOUT();               

  42.         }
  43. }

  44. void PIDControl()        
  45. {
  46.         e=SpeedSet-num;                 
  47.         duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/50;      
  48.         uk=uk1+duk;            
  49.         out=(int)uk;   
  50.         if(out>1000)
  51.         {
  52.                 out=1000;
  53.         }
  54.         else if(out<0)
  55.         {
  56.                 out=0;
  57.         }
  58.         uk1=uk;                                 
  59.         e2=e1;
  60.         e1=e;                                 
  61.         PWMTime=out;
  62. }

  63. void delay(uchar x)
  64. {
  65.         uint i,j;
  66.         for(i=x;i>0;i--)
  67.                 for(j=50;j>0;j--);
  68. }

  69. void PWMOUT()                  
  70. {
  71.         if(cnt<PWMTime)               
  72.         {
  73.                 PWM_FC=1;
  74.         }
  75.         else
  76.         {
  77.                 PWM_FC=0;
  78.         }
  79.         if(cnt>1000) cnt=0;         
  80. }
  81. void SystemInit()
  82. {
  83.         TMOD=0X21;     
  84.         TH0=THC0;
  85.         TL0=TLC0;
  86.         TH1=0xC0;
  87.         TL1=0XC0;
  88.         ET1=1;
  89.         ET0=1;
  90.         TR0=1;
  91.         TR1=1;
  92.         EX0=1;     
  93.         IT0=1;
  94.         EA=1;
  95.         e =0;               
  96.         e1=0;
  97.         e2=0;
  98.         IN1 = 1;
  99.         IN2 = 0;
  100. }
  101. void SetSpeed()
  102. {
  103.         if(AddSpeed==0)
  104.         {
  105.                 delay(200);                          
  106.                 if(AddSpeed==0)
  107.                 {
  108.                         SpeedSet+=10;
  109.                         if(SpeedSet>1500)
  110.                         {
  111.                                 SpeedSet=1500;
  112.                         }
  113.                 }
  114.         }
  115.         if(SubSpeed==0)
  116.         {
  117.                 delay(200);
  118.                 if(SubSpeed==0)
  119.                 {
  120.                         SpeedSet-=10;
  121.                         if(SpeedSet<0) SpeedSet=0;
  122.                 }
  123.         }
  124.         if(TurnForward==0)
  125.         {
  126.                 delay(200);
  127.                 if(TurnForward==0)
  128.                 {
  129.                    IN1 = 1;
  130.                    IN2 = 0;
  131.                    while(TurnForward==0);
  132.                 }
  133.         }
  134.         if(TurnBackward==0)
  135.         {
  136.                 delay(200);
  137.                 if(TurnBackward==0)
  138.                 {
  139.                    IN1 = 0;
  140.                    IN2 = 1;
  141.                    while(TurnBackward==0);
  142.                 }
  143.         }
  144.         if(Stop==0)
  145.         {
  146.                 delay(200);
  147.                 if(Stop==0)
  148.                 {
  149.                    IN1 = 1;
  150.                    IN2 = 1;
  151.                    while(Stop==0);
  152.                 }
  153.         }

  154. }
  155. void SegRefre()                  
  156. {
  157.          Data_Buffer[0]=SpeedSet/1000;                  
  158.          Data_Buffer[1]=SpeedSet%1000/100;
  159.          Data_Buffer[2]=SpeedSet%100/10;
  160.          Data_Buffer[3]=SpeedSet%10;
  161.          Data_Buffer[4]=num/1000;                        
  162.          Data_Buffer[5]=num%1000/100;
  163.          Data_Buffer[6]=num%100/10;
  164.          Data_Buffer[7]=num%10;
  165. }

  166. void int0() interrupt 0
  167. {
  168.         Inpluse++;                    
  169. }
  170. void t0() interrupt 1
  171. {
  172.         static unsigned char Bit=0;
  173.         static unsigned int time=0;
  174.         TH0=THC0;
  175.         TL0=TLC0;


  176.         Bit++;
  177.         time++;  
  178.         if(Bit>8) Bit=0;                  
  179.         P0=0xff;
  180.         P2=Duan[Data_Buffer[Bit]];        
  181.         switch(Bit)                                       
  182.         {
  183.                 case 0:P0=0X7F;break;
  184.                 case 1:P0=0XBF;break;
  185.                 case 2:P0=0XDF;break;
  186.                 case 3:P0=0XEF;break;
  187.                 case 4:P0=0XF7;break;
  188.                 case 5:P0=0XFB;break;
  189.                 case 6:P0=0XFD;break;
  190.                 case 7:P0=0XFE;break;
  191.         }
  192.         if(time>100)
  193.         {
  194.                 time=0;
  195.                 num=Inpluse*5;                  
  196.                 Inpluse=0;                          
  197.                 PIDControl();                  
  198.         }
  199. }
  200. void timer_1()  interrupt 3
  201. {
  202.            cnt++;        
  203. }
復制代碼


回復

使用道具 舉報

地板
ID:1034262 發表于 2022-12-12 21:25 | 只看該作者
普通2線有刷直流電機嗎?如果是,要求不精確,可以參考磁帶錄音機的電機穩速電路原理,數字化PID處理就可以了,我用在各種微型鉆機、微型臺鋸等等,效果很好。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产女人精品视频 | 国产成人高清视频 | 久久久精彩视频 | 国产精品一区二区久久 | 黑色丝袜三级在线播放 | 精品一区二区在线观看 | 国产免费一二三区 | 一级做a爰片性色毛片 | 亚洲人人 | 久久九九99 | 毛片免费视频 | 中文字幕在线三区 | 免费性视频| 中文字幕av在线 | 青青草原综合久久大伊人精品 | 精品91av| 久久久久久久一区二区三区 | 欧美精品福利 | 在线观看免费黄色片 | 在线视频一区二区三区 | 337p日韩 | 欧洲国产精品视频 | 一级大黄色片 | 91中文字幕在线观看 | 国产精品久久久久久福利一牛影视 | 亚洲经典一区 | www.亚洲 | 九九热久久免费视频 | 成人a免费| 青青草一区二区三区 | 嫩呦国产一区二区三区av | 日韩精品999 | 人人干人人舔 | 羞羞视频在线免费 | www国产成人免费观看视频,深夜成人网 | 成人伊人 | 日韩一区二区三区视频 | 国产成人免费视频网站高清观看视频 | 久久精品国产久精国产 | 亚洲男人天堂 | 2020国产在线 |