• 大小: 1.42MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-27
  • 语言: 其他
  • 标签: STM32  PID  

资源简介

基于STM32单片机,通过超声波模块以及PID算法来实现对小球的控制,使得小球可以停留在所设定的高度,并具有一定的抗干扰能力。

资源截图

代码片段和文件信息

#include “hcsr04.h“
#include “sys.h“
#include “delay.h“




void Gpio_Init(void)
{
RCC->AHB1ENR=1<<0;            //使能PORTA时钟

GPIOA->MODER &=~(3<<(1*2));   //先清除PA1原来的设置
    GPIOA->MODER |=(1<<(1*2));    //设置为通用输出模式

GPIOA->OTYPER &=~(1<<1);      //先清除PA1原来的设置 
    GPIOA->OTYPER |=(0<<1);       //设置PA1为输出推挽

GPIOA->OSPEEDR &=~(3<<(1*2)); //先清除PA1原来的设置
GPIOA->OSPEEDR |=2<<(1*2);    //设置PA1输出速度为50M
 
GPIOA->PUPDR &=~(3<<(1*2));   //先清除PA1原来的设置 
GPIOA->PUPDR |=2<<(1*2);      //设置PA1下拉
 
}



void Trig_Init(void)
{
trig=1;
delay_us(20);
trig=0;

}



void TIM5_CH1_Cap_Init(u32 arru16 psc)
{
RCC->APB1ENR|=1<<3;     //TIM5 时钟使能
RCC->AHB1ENR=1<<0;      //使能PORTA时钟
GPIO_Set(GPIOAPIN0GPIO_MODE_AFGPIO_OTYPE_PPGPIO_SPEED_100MGPIO_PUPD_PD);  //复用功能,下拉
GPIO_AF_Set(GPIOA02); //PA0AF2


TIM5->ARR=arr;          //设定计数器自动重装值
TIM5->PSC=psc;          //预分频器
TIM5->CCMR1|=1<<0;      //CC1S=01 选择输入端 IC1 映射到 TI1 上
TIM5->CCMR1|=0<<4;      //IC1F=0000 配置输入滤波器 不滤波
TIM5->CCMR1|=0<<3;     //IC1PS=00 配置输入分频不分频
TIM5->CCER|=0<<1;       //CC1P=0  上升沿捕获
TIM5->CCER|=1<<0;       //CC1E=1 允许捕获计数器的值到捕获寄存器中
TIM5->EGR=1<<0;         //软件控制产生更新事件使写入 PSC 的值立即生效
//否则将会要等到定时器溢出才会生效!
TIM5->DIER|=1<<1;       //允许捕获 1 中断
TIM5->DIER|=1<<0;       //允许更新中断 
TIM5->CR1|=0x01;        //使能定时器 2
MY_NVIC_Init(10TIM5_IRQn3);//抢占 1,子优先级 0,组 3
}
//捕获状态
//[7]:0没有成功的捕获;1成功捕获到一次.
//[6]:0还没捕获到低电平;1已经捕获到低电平了.
//[5:0]:捕获低电平后溢出的次数(对于 32 位定时器来说1us 计数器加 1溢出时间:4294 秒)
u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态 
u32 TIM5CH1_CAPTURE_VAL;  //输入捕获值(TIM2/TIM5 是 32 位)
//定时器 5 中断服务程序 
void TIM5_IRQHandler(void)
{
u16 tsr;
        tsr=TIM5->SR;
        if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 
        {
            if(tsr&0X01)//溢出
            { 
                if(TIM5CH1_CAPTURE_STA&0X40)    //已经捕获到高电平了
                {
                    if(TIM5CH1_CAPTURE_STA&0X3F)//高电平太长了
                    {
                     TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
                     TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;

                     }
 else
 TIM5CH1_CAPTURE_STA++;
                  } 
              }
              if(tsr&0x02)                     //捕获 1 发生捕获事件
              { 
                  if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿
                  { 
   TIM5CH1_CAPTURE_STA|=0X80;  //标记成功捕获到一次高电平脉宽
   TIM5CH1_CAPTURE_VAL=TIM5->CCR1;//获取当前的捕获值.
   TIM5->CCER&=~(1<<1);  //CC1P=0 设置为上升沿捕获
                  }                 
  else //还未开始第一次捕获上升沿
                  {
   TIM5CH1_CAPTURE_STA=0;  //清空
   TIM5CH1_CAPTURE_VAL=0;
   TIM5CH1_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
   TIM5->CR1&=~(1<<0) ; //使能定时器 2
   TIM5->CNT=0;  //计数器清空
   TIM5->CCER|=1<<1; //CC1P=1 设置为下降沿捕获
   TIM5->CR1|=0x01; //使能定时器 2
                  } 
               } 
           }
            TIM5->SR=0;//清除中断标志位
        }





 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-06 21:48  风洞\
     目录           0  2018-09-06 21:48  风洞\HARDWORKS\
     目录           0  2018-09-15 21:27  风洞\HARDWORKS\HCSR04\
     文件        3410  2018-09-15 21:27  风洞\HARDWORKS\HCSR04\HCSR04.c
     文件         237  2018-09-05 10:18  风洞\HARDWORKS\HCSR04\HCSR04.h
     目录           0  2018-09-06 21:48  风洞\HARDWORKS\MOTOR\
     文件         727  2018-09-05 11:21  风洞\HARDWORKS\MOTOR\MOTOR.c
     文件         219  2018-09-03 21:44  风洞\HARDWORKS\MOTOR\MOTOR.h
     目录           0  2018-09-15 21:18  风洞\HARDWORKS\PID\
     文件         898  2018-09-15 21:18  风洞\HARDWORKS\PID\PID.c
     文件         150  2018-09-03 21:46  风洞\HARDWORKS\PID\PID.h
     目录           0  2018-09-15 21:27  风洞\HARDWORKS\TIMER\
     文件        1132  2018-09-15 21:27  风洞\HARDWORKS\TIMER\TIMER.c
     文件         124  2018-09-03 21:39  风洞\HARDWORKS\TIMER\TIMER.h
     目录           0  2018-09-15 21:18  风洞\OBJ\
     文件      266714  2018-09-15 21:18  风洞\OBJ\delay.crf
     文件         450  2018-09-15 21:18  风洞\OBJ\delay.d
     文件      286344  2018-09-15 21:18  风洞\OBJ\delay.o
     文件      267483  2018-09-15 21:18  风洞\OBJ\hcsr04.crf
     文件         512  2018-09-15 21:18  风洞\OBJ\hcsr04.d
     文件      287940  2018-09-15 21:18  风洞\OBJ\hcsr04.o
     文件      266665  2018-09-15 21:18  风洞\OBJ\motor.crf
     文件         497  2018-09-15 21:18  风洞\OBJ\motor.d
     文件      284256  2018-09-15 21:18  风洞\OBJ\motor.o
     文件      271036  2018-09-15 21:18  风洞\OBJ\pid.crf
     文件         522  2018-09-15 21:18  风洞\OBJ\pid.d
     文件      285968  2018-09-15 21:18  风洞\OBJ\pid.o
     文件          59  2018-09-15 21:18  风洞\OBJ\startup_stm32f40_41xxx.d
     文件        8000  2018-09-15 21:18  风洞\OBJ\startup_stm32f40_41xxx.o
     文件      268564  2018-09-15 21:18  风洞\OBJ\sys.crf
     文件         387  2018-09-15 21:18  风洞\OBJ\sys.d
............此处省略47个文件信息

评论

共有 条评论