标题: STM32 PWM输出控制步进电机-3000转每分钟串口显示+电位器调速 正反转加编码 [打印本页]

作者: jinhua1916    时间: 2018-8-9 12:05
标题: STM32 PWM输出控制步进电机-3000转每分钟串口显示+电位器调速 正反转加编码
用电位器控制步进电机转速,可以控制正反转,在电位器中点停止;越往左翻转越快,越往右正转越快。速度均匀,包含滤波。付完整代码。全部测试正常。

单片机源程序:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "adc.h"

  8.         
  9. int main(void)
  10. {        u16 adcx;
  11.          float temp;
  12.          int a=3999;        
  13.          //int b=0
  14.          u16 led0pwmval=200;
  15.         u8 dir=1;        
  16.         delay_init();                     //延时函数初始化         
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  18.         uart_init(115200);         //串口初始化为115200
  19.          LED_Init();                             //LED端口初始化
  20.          TIM3_PWM_Init(a,71);         //不分频。PWM频率=72000000/900=80Khz
  21.          
  22.          Adc_Init();        
  23.          
  24.            while(1)
  25.         {
  26.                 adcx=Get_Adc_Average(ADC_Channel_1,10);
  27. //                adcx=2100;
  28.                
  29.                 delay_ms(8);
  30. //        temp=(float)adcx*(3.3/4096);
  31. //                adcx=temp;
  32.      printf("adcx=%d;", adcx);
  33.                         a=adcx;
  34.                 a=a-2000;
  35.                 //a=a*1000;
  36.                 //if (-1000>a>1000) a=1;
  37.                
  38.                
  39.                 //        
  40.                 //a=a*1000;
  41.                 a=100000/a;        
  42.                  if(a > 0)
  43.   {
  44.    LED1=1;        
  45.                 //sl = speed_l;
  46.                
  47.   }
  48.   else        
  49.   {
  50.     LED1=0;
  51.         a = a * (-1);
  52.                
  53.   }
  54.         //a=1000000/a;
  55.                
  56. //                 if (a<1000) a=1000;
  57. //                if (a>100000) a=100000;
  58.         //        a=1000/a;
  59.         
  60. //if (a<0) LED1=0;
  61. //if (a>0) LED1=1;        
  62.                
  63.                         TIM3_PWM_Init(a,71);         //不分频。PWM频率=72000000/900=80Khz   最高=72000000/A*6=600000,,转速=6000000/800*60=4500
  64.                 //printf("a\r\n");        
  65.                
  66.                 //printf("count = %d\n",count);
  67.     printf("a=%d\n;", a);
  68.                 delay_ms(8);         
  69. //                if(dir)led0pwmval++;
  70. //                else led0pwmval--;

  71. //                 if(led0pwmval>300)dir=0;
  72. //                if(led0pwmval==0)dir=1;                                                                                 
  73.                 //TIM_SetCompare2(TIM3,led0pwmval);        



  74.         
  75.         }         
  76. }
复制代码

全部资料51hei下载地址:
实验9 PWM输出实验-步进电机--3000转每分钟串口显示+电位器调速 - 正反转 - 加编码器 - 副本.rar (308.31 KB, 下载次数: 309)




作者: admin    时间: 2018-8-9 14:34
楼主您好 能分享原理图吗?
作者: jinhua1916    时间: 2018-8-9 14:36
用的是正点原子的开发板

作者: jinhua1916    时间: 2018-8-9 14:37
看程序的时候,就知道如何接线。

作者: jinhua1916    时间: 2018-8-9 14:39
WarShip STM32F1_V3.4_SCH.pdf (694.82 KB, 下载次数: 83)
作者: jinhua1916    时间: 2018-8-9 14:44
正点 原子的开发板,现在还不知道问什么不能回复图片。

作者: admin    时间: 2018-8-9 16:13
jinhua1916 发表于 2018-8-9 14:44
正点 原子的开发板,现在还不知道问什么不能回复图片。

点击编辑框右边的高级模式即可回复图片
作者: Cheers05    时间: 2019-9-6 09:11
感谢分享
作者: 止渊    时间: 2019-9-9 14:39
非常好,很有帮助
作者: 张博文52    时间: 2019-10-15 10:58
很有用,满意。
作者: cjjdemon    时间: 2019-10-16 11:16
感谢分享,非常好用
作者: lijihai    时间: 2020-3-21 11:19
感谢分享
作者: 酸奶番茄酱    时间: 2020-5-26 01:18
感谢分享,很有参考价值

作者: bochen886    时间: 2020-5-26 10:31
感谢分享
作者: 605551759    时间: 2020-6-10 14:24
感谢分享
作者: xibo95    时间: 2020-6-18 10:35
感谢分享
作者: ttking    时间: 2020-8-5 19:23
最近一直在研究编码器+步进电机 感谢分享
作者: homedou    时间: 2020-11-5 15:32
这个资料是不错,比较牛
作者: 猪不怕壮    时间: 2021-5-14 18:56
正需要这个 下载看看效果




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1