智能车记录

外部中断函数

     exti_interrupt_init(D3,EXTI_Trigger_Falling,0);//优先级 0-7
	 exti_interrupt_init(D2,EXTI_Trigger_Falling,2);//优先级 0-7
	 exti_interrupt_init(D0,EXTI_Trigger_Falling,0);//优先级 0-7
	 exti_interrupt_init(D1,EXTI_Trigger_Falling,2);//优先级 0-7

定时器中断

背景:

  • 外部中断:主要采用按钮来改变参数的值
  • 定时器中断:用来控制采样周期、控制周期,使采样周期稳定。
    周期长,频率小,需要不断更新->采样周期应该小于控制周期。
    定时器中断函数:zf_pit.c
    定时器中断和外部中断一样,初始化后自动调用。
    初始化时,编码器2ms,舵机20ms。(2代表时间)
    数字小,优先级高(0x00 代表优先级)
 tim_interrupt_init_ms(TIM_3, 2, 0x00);

频率f相同,同一个模块(TIM_(1-8)),不同频率模块需不同,初始化舵机/电机时,频率是相同的,所以可以采用同一个模块。

     pwm_init(TIM_5,TIM_5_CH1_A00,17000,0); //初始化电机
	 pwm_init(TIM_5,TIM_5_CH2_A01,17000,0); //初始化电机
	 pwm_init(TIM_2,TIM_2_CH1_A15,50,720); //舵机初始化,最前面的,控制方向

其他

闭环:固定
开环:反馈->控制

旋转方向

void turn(int x)
{
	if(x<0)
		{
				gpio_set(A2,0);
			  gpio_set(A3,0);
				pwm_duty_updata (TIM_5,TIM_5_CH3_A02,-x);
				pwm_duty_updata (TIM_5,TIM_5_CH4_A03,-x);
		}
		if(x>0)
			{
				gpio_set(A2,1);
			  gpio_set(A3,1);
				pwm_duty_updata (TIM_5,TIM_5_CH3_A02,x);
				pwm_duty_updata (TIM_5,TIM_5_CH4_A03,x);
			}
			
}

延时函数、中断函数

void EXTI3_IRQHandler(void)
{
	
// 检测与清除中断标志可以根据实际应用进行删改
	 systick_delay_ms(20);//延时函数

	 if(gpio_get(D3)==0){ //当按键按下时发生改变
		p+=20;
		pwm_duty_updata (TIM_2,TIM_2_CH1_A15,p);//更新占空比
	 }
  	while(gpio_get(D3)==0){//当函数执行完毕时,不确定时间,需要判断电平是否等于1,等于1 的时候需要延时
	}
	 systick_delay_ms(20);//延时函数
	 EXTI_ClearFlag(EXTI_Line3);														// 清除 line3 触发标志//自动清除标志位,不然会与其他按钮弄混
}

其余草稿代码

while(1)
		{	
			
			turn(2000);
			systick_delay_ms (500);
			turn(-2000);
			systick_delay_ms (500);
			gpio_set(B13,0);//LED灯
			systick_delay_ms (500);
			gpio_set(B13,1);
			systick_delay_ms (500);
			
				pwm_duty_updata (TIM_2,TIM_2_CH1_A00,3000);//正式调用
				pwm_duty_updata (TIM_5,TIM_5_CH2_A01,2000);
			
				pwm_duty_updata (TIM_2,TIM_2_CH1_A00,3000);//正式调用
				pwm_duty_updata (TIM_5,TIM_5_CH2_A01,2000);
			
		}gpio_init(B13,GPO,0,GPO_PUSH_PULL	);//LED灯初始化
	pwm_init(TIM_5,TIM_5_CH2_A01	,10000,1500); //模块,名称,频率,占空比,反转
	pwm_init(TIM_5,TIM_5_CH1_A00,10000,1500);//反转 1064
	
	gpio_init(A2,GPO,0,GPO_PUSH_PULL);//方向初始化
	gpio_init(A3,GPO,0,GPO_PUSH_PULL);
	pwm_init(TIM_5,TIM_5_CH2_A01	,10000,1500); //模块,名称,频率,占空比,反转
	pwm_init(TIM_5,TIM_5_CH1_A00,10000,1500);//正转 1064
	pwm_init(TIM_5,TIM_5_CH3_A02,10000,1500); //模块,名称,频率,占空比,反转
	pwm_init(TIM_5,TIM_5_CH4_A03,10000,1500);//正转
	//pwm_duty_updata(TIM_2,TIM_2_CH1_A00,1000);//更新占空比
	gpio_init(A2,GPO,1,GPO_PUSH_PULL);//加上这1行,本来反转,后来正转 3277车
	gpio_init(A3,GPO,1,GPO_PUSH_PULL);//加上这1行,本来反转,后来正转 3277车
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值