找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1049|回复: 4
收起左侧

stm32滑动变阻器控制舵机程序只能在debug下才能进入PWM定时器中断?

[复制链接]
ID:495852 发表于 2022-1-30 21:25 | 显示全部楼层 |阅读模式
滑动变阻器控制舵机程序只能在debug下才能进入PWM定时器中断,正常运行程序时不能进入定时器中断,大佬帮忙看看,源程序在附件中。

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                /* led 端口配置 */
        LED_GPIO_Config();
        delay_config(72);
        adcConfig();
        /* 定时器初始化 */
        GENERAL_TIM_Init();

void ADC1_2_IRQHandler(void)
{
                if(ADC_GetITStatus(ADC1 ,ADC_IT_EOC) != RESET)
                {
                        Value = ADC_GetConversionValue (ADC1 );
               
                }
        ADC_ClearITPendingBit (ADC1 ,ADC_IT_EOC);

}      



void TIM2_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET )
        {
               
               
                        TIM_SetCompare3(TIM2,Value*2500/4095);//舵机最大的值是2500对应2.5ms 2500/4095取出ADC每份的量*value
               
               
                TIM_ClearITPendingBit (TIM2,TIM_IT_Update );
        }      
}

NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn ;
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
        NVIC_Init(&NVIC_InitStruct);
      
      
      
        NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn ;
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2 ;
        NVIC_Init(&NVIC_InitStruct);

stm32f103rbt6舵机4电位器舵机_TIM2.7z

184.83 KB, 下载次数: 4

回复

使用道具 举报

ID:743992 发表于 2022-1-31 11:27 | 显示全部楼层
pwm不需要定时器中断,adc其实也可以不走中断。
同一个定时器,tim2设置成溢出中断,然后又给他设置输出比较,肯定会出问题。
要用定时器中断来扫描adc和控制舵机的话,用不同的定时器。
回复

使用道具 举报

ID:495852 发表于 2022-2-1 14:03 | 显示全部楼层
dasSpieler 发表于 2022-1-31 11:27
pwm不需要定时器中断,adc其实也可以不走中断。
同一个定时器,tim2设置成溢出中断,然后又给他设置输出比 ...

您好,这个程序把adc转换放到主函数while中,程序可以正常运行。
但是有一点不太明白,adc转换中断是走的apb1的tim1,我是用tim2进行舵机的角度调整,
两个定时器不在一条总线上,会有干扰的情况吗?
回复

使用道具 举报

ID:474195 发表于 2022-2-6 00:43 | 显示全部楼层
不同定时器之间只要中断不冲突,无其他耦合就不影响
回复

使用道具 举报

ID:743992 发表于 2022-2-12 10:44 | 显示全部楼层
zhangleitj 发表于 2022-2-1 14:03
您好,这个程序把adc转换放到主函数while中,程序可以正常运行。
但是有一点不太明白,adc转换中断是走 ...

你的程序里面在tim2中断里面设置tim2的pwm输出,这个肯定要冲突的
把tim2定时器中断去掉,中断服务函数里面的东西放到其他定时器里面即可
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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