打印
[MCU]

MSP432E401Y单片机智能小车测速功能

[复制链接]
534|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2020-11-6 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
* MSP432E401Y
* Description:本函数实现定时和测速功能  
* 引脚:PD0->编码器输入信号
*        
* Author: Robin.J
***************************************************************************/
/* DriverLib Includes */
#include <ti/devices/msp432e4/driverlib/driverlib.h>
/* Standard Includes */
#include <common.h>
uint32_t count = 0;
//uint32_t count1 = 0;
//uint32_t count2 = 0;
uint32_t CNT1 = 0;
uint32_t CNT2 = 0;
int speed = 0;
uint32_t time1 = 0;
void TIMER2A_IRQHandler(void)
{
    uint32_t getTimerInterrupt;
    count++;//脉冲计数,高电平触发
//    count1 = MAP_TimerValueGet(TIMER2_BASE,TIMER_B);
//    count2 = MAP_TimerLoadGet(TIMER2_BASE,TIMER_B);   
    /* Get timer interrupt status  and clear the same */
    getTimerInterrupt = MAP_TimerIntStatus(TIMER2_BASE, true);
    MAP_TimerIntClear(TIMER2_BASE, getTimerInterrupt);
}
void TIMER1A_IRQHandler(void)
{
    uint32_t getTimerInterrupt;
//    CNT1 = count;
//    CNT2 = CNT1;
//    speed = ((CNT1 - CNT2)/506) * 6000;
//    count = 0;
    time1++;//计时,每10ms增1
    if(time1 == 10){  
      CNT1 = count;
    }if(time1 == 20){
      CNT2 = count;
      //count1 = CNT2 -  CNT1;
      speed = (int)(((CNT2 - CNT1)/506.0) * 600);
      //count = 0;
      time1 = 0;
      count = 0;
    }
//    s_r = speed;
//    pid_r = IncPIDCalc_r(s_r);
//    pid_r *= 0.01;
//    pwm_pidr += pid_r;
//    if(pwm_pidr > 0.99){
//      
//      pwm_pidr = 0.99;
//      
//    }
//   
//    PWM_init(pwm_pidl,0.8);   
    /* Get timer interrupt status  and clear the same */
    getTimerInterrupt = MAP_TimerIntStatus(TIMER1_BASE, true);
    MAP_TimerIntClear(TIMER1_BASE, getTimerInterrupt);
}

void GPT_init(void)
{
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
        while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA)))
    {
    }
    MAP_GPIOPinConfigure(GPIO_PA4_T2CCP0);
    MAP_GPIOPinTypeTimer(GPIO_PORTA_BASE, GPIO_PIN_4);
    MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
    while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER2)))
    {
    }
     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
    while(!(SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER1)))
    {
    }
    MAP_TimerConfigure(TIMER2_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP);
    MAP_TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT);
    MAP_TimerControlEvent(TIMER2_BASE, TIMER_A, TIMER_EVENT_POS_EDGE);

    MAP_TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PERIODIC);
    MAP_TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
    /* Since the 16-bit timer can count only 65536 value, we use the pre
     * scaler of 256 to divide down the count rate by 256. Thus the actual
     * count load is16e6/256 = 62500. Now when to count at 0.1 sec the
     * load value in the timer would be 62500 * 0.1 =6250. */
    MAP_TimerPrescaleSet(TIMER1_BASE, TIMER_A, 255);
    MAP_TimerLoadSet(TIMER1_BASE, TIMER_A, 625);//10ms
    /* Enable Timer Interrupt */
    MAP_IntEnable(INT_TIMER2A);
    MAP_IntEnable(INT_TIMER1A);
    /* Enable the timer count */
    MAP_TimerEnable(TIMER2_BASE, TIMER_A);
    MAP_TimerEnable(TIMER1_BASE, TIMER_A);

}
/******************* (C) COPYRIGHT 2018 DY EleTe *****END OF FILE************/

使用特权

评论回复

相关帖子

沙发
wowu| | 2020-12-2 16:23 | 只看该作者
这个里边的配置函数在哪里啊

使用特权

评论回复
板凳
xiaoqizi| | 2020-12-2 16:24 | 只看该作者
只用了这一个引脚吗

使用特权

评论回复
地板
木木guainv| | 2020-12-2 16:25 | 只看该作者
时钟在哪里初始化的

使用特权

评论回复
5
aoyi| | 2020-12-2 16:27 | 只看该作者
中断函数有些胖了

使用特权

评论回复
6
drer| | 2020-12-2 16:28 | 只看该作者
使用的是什么功能?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1191

主题

5214

帖子

12

粉丝