pwm动态调频和输入捕捉配合使用的问题

2019-07-21 06:25发布

在原子的例程基础上,修改程序如下,能够实现42步进电机的动态调频,而且能把输出的脉冲数显示在usart hmi串口屏上:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "timer.h"
#include "usart.h"
//ALIENTEK Mini STM32开发板范例代码8
//PWM输出实验   
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司

extern u8  TIM2CH1_CAPTURE_STA;                //输入捕获状态                                                   
extern u16        TIM2CH1_CAPTURE_VAL;        //输入捕获值

int main(void)
{       
         int temp=0;
        u16 led0pwmval=0;   
        u8 dir=1;       
         u16 arr=8999;
        delay_init();                     //延时函数初始化          
        LED_Init();                          //初始化与LED连接的硬件接口
        TIM1_PWM_Init(8999,0);//不分频。PWM频率=72000/(899+1)=80Khz          
        TIM2_Cap_Init(0XFFFF,72-1);                //以1Mhz的频率计数  
        uart_init(115200);                                 //9600
         LED1=0;
           while(1)
        {
               
                TIM1->ARR=arr;
                arr=arr+10;
                if(arr>=9999)arr=8999;
                delay_ms(10);         
                TIM_SetCompare1(TIM1,(arr+1)/2);       
                if(dir)led0pwmval++;
                else led0pwmval--;         
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;       
                if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
                {
                        temp=temp+1;                //得到总的高电平时间
                        printf("n1.val=%dxffxffxff",temp);
                        TIM2CH1_CAPTURE_STA=0;                        //开启下一次捕获
                }
if(temp==1000)
{
        LED1=!LED1;
temp=0;
}       
        }
}

问题是程序中红 {MOD}字体部分,似乎跟功能毫无关系,为什么删去之后,程序就不能正常工作?我实在想不明白,请大神解释下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
大道一条
1楼-- · 2019-07-21 08:41
本帖最后由 大道一条 于 2018-12-25 14:24 编辑

红 {MOD}部分原来就是用来调整占空比的,你现在改为50% 就不需要理会,删除肯定不会影响你的代码,你在串口发送数据的时候,添加延时看看。
benevolu
2楼-- · 2019-07-21 12:52
本帖最后由 benevolu 于 2018-12-25 15:20 编辑
大道一条 发表于 2018-12-25 14:22
红 {MOD}部分原来就是用来调整占空比的,你现在改为50% 就不需要理会,删除肯定不会影响你的代码,你在串口发送 ...

我修改过上面的delay_ms(1000),没有效果,串口发送是后来加上去的,应该没影响吧,把红 {MOD}部分注释掉,就完全没有波形了,百思不得其解
大道一条
3楼-- · 2019-07-21 14:25
 精彩回答 2  元偷偷看……
benevolu
4楼-- · 2019-07-21 17:49
大道一条 发表于 2018-12-25 15:23
我建议 ,首先判断灯是否正常,怀疑是你的捕获没有做成功,导致程序假死状态
temp=temp+1;
if(temp==10 ...

这个LED1是用来控制电机正反转的,控制丝杆平台往复运动,功能是正常的,捕获也是成功的,屏幕上一直在计数
大道一条
5楼-- · 2019-07-21 23:19
benevolu 发表于 2018-12-25 15:33
这个LED1是用来控制电机正反转的,控制丝杆平台往复运动,功能是正常的,捕获也是成功的,屏幕上一直在计 ...

程序中红 {MOD}字体部分,似乎跟功能毫无关系,为什么删去之后,程序就不能正常工作?我实在想不明白,请大神解释下??

那你想要问上面问题
benevolu
6楼-- · 2019-07-22 01:09
大道一条 发表于 2018-12-25 15:52
程序中红 {MOD}字体部分,似乎跟功能毫无关系,为什么删去之后,程序就不能正常工作?我实在想不明白,请大神 ...

红 {MOD}字体如果保留,功能一切正常,去掉以后,pwm没有输出了

一周热门 更多>