OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2631|回复: 1

战舰版F103ZE控制步进电机的pwm脉冲仿真与事实不一致啊?

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-3-2
在线时间
30 小时
发表于 2020-3-31 08:55:14 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 曾一了 于 2020-3-31 09:04 编辑
  1. #include "led.h"
  2. #include "key.h"
  3. #include "timer.h"
  4. #include "driver.h"
  5. #include "math.h"

  6. #include "delay.h"
  7. #include "sys.h"
  8. #include "usart.h"

  9. int main(void)
  10. {        
  11.     u8 Pres;
  12.     u16 t;
  13.     u16 len;        
  14.     u16 times=0;
  15.      
  16.      double speed_ac;//实际速度
  17.      double speed_ch=0;//速度变化因子
  18.      double speed_ch_sign;//速度变化标志
  19.      double speed_ch_over_sign=1;//速度变化完成标志 1已完成
  20.      
  21.      
  22.      
  23.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

  24.     delay_init();                     //延时函数初始化         
  25.     uart_init(115200);         //串口初始化为115200
  26.     LED_Init();                             //LED端口初始化
  27.     DIVER_Init();
  28.     KEY_Init();

  29.     TIM4_PWM_Init(719,99);   //1Khz
  30.     TIM_SetCompare2(TIM4,350);
  31.     LED0=LED_OFF;
  32.     LED1=LED_ON;
  33.      
  34.            while(1)
  35.         {                                                                        
  36.             Pres=KEY_Scan(0);
  37.             
  38.             switch(Pres)//按下启动标准
  39.                 {
  40.                     case KEY0_PRES_SIGN://按下key0,变为2khz
  41.                         speed_ch_sign=3.14159/1.0;
  42.                         speed_ch_over_sign=0;  
  43.                     LED0=!LED0;
  44.                     delay_ms(500);
  45.                     printf("进入了key0");
  46.                         break;
  47.                     
  48.                     case KEY1_PRES_SIGN://按下key1
  49.                         TIM4_PWM_Init(719,49);
  50.                     TIM_SetCompare2(TIM4,350);
  51.                         break;
  52.                     
  53.                     case KEY2_PRES_SIGN://按下key2
  54.                         TIM4_PWM_Init(719,199);
  55.                     
  56.                     TIM_SetCompare2(TIM4,350);
  57.                         break;
  58.                     
  59.                     case WK_UP_PRES_SIGN://按下keyup
  60.                         TIM4_PWM_Init(719,99);
  61.                     TIM_SetCompare2(TIM4,350);
  62.                         break;
  63.                 }
  64.                
  65.             if(speed_ch_over_sign==0)//变速完成状态 0未完成
  66.                {
  67.                     speed_ch=speed_ch+3.14159/10.0;              
  68.                     speed_ac=74+25*cos(speed_ch);
  69.                     TIM4_PWM_Init(719,speed_ac);
  70.                     TIM_SetCompare2(TIM4,350);
  71.                     printf("进入了key0");
  72.                     printf("\r\n 正在调速中speed_ac:%f \r\n\r\n",speed_ac);  
  73.                     printf("\r\n 正在调speed_ch:%f \r\n\r\n",speed_ch);
  74.                     printf("\r\n 正在调speed_ch_sign:%f \r\n\r\n",speed_ch_sign);
  75.                    if(speed_ch>=speed_ch_sign)  speed_ch_over_sign=1; //动态调速
  76.                    delay_ms(10);
  77.                }  
复制代码
pwm波形仿真前0.6s正常,后面不正常。但是实际电机可以正常运行。如果按照仿真波形,电机肯定会震动的。
那为撒仿真和事实不一样呢。。。我没按任何按键。
去除掉if()后可正常。试了试if不满足,还是会进入执行语句。网上说比较不能用不是unsigned,那我小数比较咋办。
2_wps图片.jpg

最佳答案

查看完整内容[请看2#楼]

TIM4_PWM_Init(719,speed_ac);的ac类型改为vu8后正常,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2020-3-2
在线时间
30 小时
 楼主| 发表于 2020-3-31 08:55:15 | 显示全部楼层
TIM4_PWM_Init(719,speed_ac);的ac类型改为vu8后正常,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 01:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表