2019-07-20 03:11发布
123将321 发表于 2019-1-10 18:14 这个是STM32F407的使用,不过你要搞懂原理,因为要考虑到编码器的参数进行设置定时器的相关参数的,注意编 ...
最多设置5个标签!
http://www.openedv.com/forum.php ... &extra=page%3D1
///**************************************************************************
//函数功能:单位时间读取编码器计数
//入口参数:定时器
//返回 值:速度值
//**************************************************************************/
int Read_Encoder(u8 TIMX)
{
int Encoder_TIM;
switch(TIMX)
{
case 2: Encoder_TIM= (int)TIM4 -> CNT; TIM4 -> CNT=0;break;
default: Encoder_TIM=0;
}
return (int)Encoder_TIM;
}
//***********读计数TIM4个数**************
int TIM4_Encoder_Read(void)
{
s16 data;
data=(s16)(TIM_GetCounter(TIM4));//获取timx计数器值
//其中x可以从1到17来选择Tim外围设备。
//计数器寄存器值。
return (int)data;
}
//***************TIM4计数寄存器赋值***********
void TIM4_Encoder_Write(int data)
{
TIM4->CNT = data;
}
//*****************TIM4用于编码模式*************
void TIM4_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能由APB1控制的TIM4端口时钟
TIM_DeInit(TIM4); //TIM4初始化
//GPIO配置PB6,PB7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PB6,PB7 浮空输入
GPIO_Init(GPIOB,&GPIO_InitStructure);
//TIM4编码模式
TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
/*
配置timx编码器接口。*@param timx:其中x可以是1、2、3、4、5或8,以选择Tim外围设备。
*@param Tim_encodermode:指定timx编码器模式。*此参数可以是以下值之一:
*@Arg Tim_encodermode_ti1:根据ti2fp2级别对ti1fp1边进行计数器计数。
*@Arg Tim_encoderMode_TI2:根据ti1fp1级别在ti2fp2边缘上计数器。
*@Arg Tim_encodermode_ti 12:计数器计数ti1fp1和ti2fp2边缘,这取决于其他输入的级别。
*@param Tim_ic1极性:指定iC1极性*此参数可以是以下值之一:
*@Arg Tim_ic极性_Fall:IC下降边缘。*@Arg Tim_ic极性上升:IC
*/
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0; //不分频
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //设置计数器溢出后的重载初值
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //用以上参数初始化定时器时间基础模块
TIM_Cmd(TIM4, ENABLE); //使能定时器4
}
int main(void)
{
int Speed,Number;//定义一个变量接收速度值
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
//TIM3_PWM_Init(8999,0);//不分频。PWM频率=72000/(899+1)=80Khz
TIM4_Configuration();
//arr=8999;
/*
频率:
//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
*/
// dutyCircle(50,2);//占空比,频率
while(1)
{
Number=TIM4_Encoder_Read();//得到个数
Speed=Read_Encoder(4);//得到速度
}
}
这个是我在网上找的我也不知道对不对
一周热门 更多>